libey-ng-component-library 0.0.35 → 0.0.37

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 (69) hide show
  1. package/bundles/libey-ng-component-library.umd.js +2521 -0
  2. package/bundles/libey-ng-component-library.umd.js.map +1 -0
  3. package/esm2015/lib/cpm-indicator/libey-ng-cpm-indicator.component.js +193 -0
  4. package/esm2015/lib/cpm-indicator/libey-ng-cpm-indicator.module.js +26 -0
  5. package/esm2015/lib/icons/icons.module.js +26 -0
  6. package/esm2015/lib/icons/libey-ng-icons/libey-ng-icons.component.js +52 -0
  7. package/esm2015/lib/libey-ng-component-library.component.js +26 -0
  8. package/esm2015/lib/libey-ng-component-library.module.js +60 -0
  9. package/esm2015/lib/libey-ng-component-library.service.js +14 -0
  10. package/esm2015/lib/signature/libey-ng-signature/libey-ng-signature.component.js +197 -0
  11. package/esm2015/lib/signature/libey-ng-signature.module.js +57 -0
  12. package/esm2015/lib/table/directives/libey-column.directive.js +59 -0
  13. package/esm2015/lib/table/libey-ng-table.component.js +249 -0
  14. package/esm2015/lib/table/libey-ng-table.module.js +21 -0
  15. package/esm2015/libey-ng-component-library.js +5 -0
  16. package/esm2015/public-api.js +23 -0
  17. package/esm2015/utils/CpmIndicator/cpm-indicator-types.js +25 -0
  18. package/esm2015/utils/SigWeb/SigWeb.js +1442 -0
  19. package/fesm2015/libey-ng-component-library.js +2416 -0
  20. package/fesm2015/libey-ng-component-library.js.map +1 -0
  21. package/lib/cpm-indicator/libey-ng-cpm-indicator.component.d.ts +66 -0
  22. package/lib/cpm-indicator/libey-ng-cpm-indicator.module.d.ts +8 -0
  23. package/lib/icons/icons.module.d.ts +8 -0
  24. package/lib/icons/libey-ng-icons/libey-ng-icons.component.d.ts +19 -0
  25. package/lib/libey-ng-component-library.component.d.ts +8 -0
  26. package/lib/libey-ng-component-library.module.d.ts +13 -0
  27. package/lib/libey-ng-component-library.service.d.ts +6 -0
  28. package/lib/signature/libey-ng-signature/libey-ng-signature.component.d.ts +40 -0
  29. package/lib/signature/libey-ng-signature.module.d.ts +13 -0
  30. package/lib/table/directives/libey-column.directive.d.ts +24 -0
  31. package/lib/table/libey-ng-table.component.d.ts +64 -0
  32. package/lib/table/libey-ng-table.module.d.ts +10 -0
  33. package/libey-ng-component-library.d.ts +5 -0
  34. package/package.json +24 -17
  35. package/{src/public-api.ts → public-api.d.ts} +0 -4
  36. package/utils/CpmIndicator/cpm-indicator-types.d.ts +40 -0
  37. package/utils/SigWeb/SigWeb.d.ts +219 -0
  38. package/karma.conf.js +0 -44
  39. package/ng-package.json +0 -13
  40. package/src/lib/cpm-indicator/libey-ng-cpm-indicator.component.css +0 -216
  41. package/src/lib/cpm-indicator/libey-ng-cpm-indicator.component.html +0 -201
  42. package/src/lib/cpm-indicator/libey-ng-cpm-indicator.component.spec.ts +0 -25
  43. package/src/lib/cpm-indicator/libey-ng-cpm-indicator.component.ts +0 -203
  44. package/src/lib/cpm-indicator/libey-ng-cpm-indicator.module.ts +0 -19
  45. package/src/lib/icons/icons.component.css +0 -9
  46. package/src/lib/icons/icons.module.ts +0 -16
  47. package/src/lib/icons/libey-ng-icons/libey-ng-icons.component.html +0 -1831
  48. package/src/lib/icons/libey-ng-icons/libey-ng-icons.component.ts +0 -36
  49. package/src/lib/libey-ng-component-library.component.spec.ts +0 -25
  50. package/src/lib/libey-ng-component-library.component.ts +0 -20
  51. package/src/lib/libey-ng-component-library.module.ts +0 -32
  52. package/src/lib/libey-ng-component-library.service.spec.ts +0 -16
  53. package/src/lib/libey-ng-component-library.service.ts +0 -9
  54. package/src/lib/signature/libey-ng-signature/libey-ng-signature.component.css +0 -7
  55. package/src/lib/signature/libey-ng-signature/libey-ng-signature.component.html +0 -41
  56. package/src/lib/signature/libey-ng-signature/libey-ng-signature.component.spec.ts +0 -25
  57. package/src/lib/signature/libey-ng-signature/libey-ng-signature.component.ts +0 -214
  58. package/src/lib/signature/libey-ng-signature.module.ts +0 -30
  59. package/src/lib/table/directives/libey-column.directive.ts +0 -29
  60. package/src/lib/table/libey-ng-table.component.css +0 -249
  61. package/src/lib/table/libey-ng-table.component.html +0 -122
  62. package/src/lib/table/libey-ng-table.component.ts +0 -234
  63. package/src/lib/table/libey-ng-table.module.ts +0 -13
  64. package/src/test.ts +0 -28
  65. package/src/utils/CpmIndicator/cpm-indicator-types.ts +0 -63
  66. package/src/utils/SigWeb/SigWeb.ts +0 -1906
  67. package/tsconfig.lib.json +0 -20
  68. package/tsconfig.lib.prod.json +0 -10
  69. package/tsconfig.spec.json +0 -17
@@ -0,0 +1,1442 @@
1
+ // SigWebTablet.ts
2
+ export class SigWebTablet {
3
+ static revokeBlobURL(url) {
4
+ if (window.URL) {
5
+ URL.revokeObjectURL(url);
6
+ }
7
+ else if (window.webkitURL) {
8
+ webkitURL.revokeObjectURL(url);
9
+ }
10
+ }
11
+ static getBlobURL(blob) {
12
+ if (window.URL) {
13
+ return URL.createObjectURL(blob);
14
+ }
15
+ else if (window.webkitURL) {
16
+ return webkitURL.createObjectURL(blob);
17
+ }
18
+ return ''; // Retornar un string vacío en caso de error
19
+ }
20
+ static makeUri() {
21
+ var prot = location.protocol;
22
+ if (prot == 'file:') {
23
+ prot = 'http:';
24
+ }
25
+ if (this.isIE()) {
26
+ if (prot == 'https:') {
27
+ return prot + '//tablet.sigwebtablet.com:47290/SigWeb/';
28
+ }
29
+ else {
30
+ return prot + '//tablet.sigwebtablet.com:47289/SigWeb/';
31
+ }
32
+ }
33
+ if (this.isChrome()) {
34
+ if (prot == 'https:') {
35
+ return prot + '//tablet.sigwebtablet.com:47290/SigWeb/';
36
+ }
37
+ else {
38
+ return prot + '//tablet.sigwebtablet.com:47289/SigWeb/';
39
+ }
40
+ }
41
+ else {
42
+ //FIREFOX
43
+ if (prot == 'https:') {
44
+ return prot + '//tablet.sigwebtablet.com:47290/SigWeb/';
45
+ }
46
+ else {
47
+ return prot + '//tablet.sigwebtablet.com:47289/SigWeb/';
48
+ }
49
+ }
50
+ }
51
+ static generateUUID() {
52
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
53
+ const r = (Math.random() * 16) | 0;
54
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
55
+ return v.toString(16);
56
+ });
57
+ }
58
+ static isSigWebInstalled() {
59
+ const xhr = new XMLHttpRequest();
60
+ try {
61
+ xhr.open('GET', `${this.baseUri}TabletState?noCache=${this.generateUUID()}`, false);
62
+ xhr.send();
63
+ return xhr.status !== 404 && xhr.status !== 0;
64
+ }
65
+ catch (e) {
66
+ console.log('Error checking SigWeb installation', e);
67
+ return false;
68
+ }
69
+ }
70
+ static isIE() {
71
+ return (navigator.appName === 'Microsoft Internet Explorer' ||
72
+ (navigator.appName === 'Netscape' &&
73
+ new RegExp('Trident/.*rv:([0-9]{1,}[.0-9]{0,})').exec(navigator.userAgent) != null));
74
+ }
75
+ static isChrome() {
76
+ return navigator.userAgent.lastIndexOf('Chrome/') > 0;
77
+ }
78
+ static SigWebcreateXHR() {
79
+ const xhr = new XMLHttpRequest();
80
+ if (!xhr) {
81
+ throw new Error('No se pudo crear XMLHttpRequest');
82
+ }
83
+ return xhr;
84
+ }
85
+ static SigWebSetProperty(prop) {
86
+ const xhr = this.SigWebcreateXHR();
87
+ if (xhr) {
88
+ xhr.open('POST', this.baseUri + prop, true);
89
+ xhr.send(null);
90
+ if (xhr.readyState === 4 && xhr.status === 200) {
91
+ return xhr.responseText;
92
+ }
93
+ }
94
+ return '';
95
+ }
96
+ static SigWebSetPropertySync(prop) {
97
+ const xhr = this.SigWebcreateXHR();
98
+ if (xhr) {
99
+ xhr.open('POST', this.baseUri + prop, false);
100
+ xhr.send();
101
+ if (xhr.readyState === 4 && xhr.status === 200) {
102
+ return xhr.responseText;
103
+ }
104
+ }
105
+ return '';
106
+ }
107
+ static SigWebSetStreamProperty(prop, strm) {
108
+ const xhr = this.SigWebcreateXHR();
109
+ if (xhr) {
110
+ xhr.open('POST', this.baseUri + prop);
111
+ xhr.setRequestHeader('Content-Type', 'text/plain');
112
+ xhr.send(strm);
113
+ }
114
+ return '';
115
+ }
116
+ static SigWebSyncSetStreamProperty(prop, strm) {
117
+ const xhr = this.SigWebcreateXHR();
118
+ if (xhr) {
119
+ xhr.open('POST', this.baseUri + prop, false);
120
+ xhr.setRequestHeader('Content-Type', 'text/plain');
121
+ xhr.send(strm);
122
+ if (xhr.readyState === 4 && xhr.status === 200) {
123
+ return xhr.responseText;
124
+ }
125
+ }
126
+ return '';
127
+ }
128
+ static SigWebSetImageStreamProperty(prop, strm) {
129
+ const xhr = this.SigWebcreateXHR();
130
+ if (xhr) {
131
+ xhr.open('POST', this.baseUri + prop, false);
132
+ xhr.setRequestHeader('Content-Type', 'image/png');
133
+ xhr.send(strm);
134
+ if (xhr.readyState === 4 && xhr.status === 200) {
135
+ return xhr.responseText;
136
+ }
137
+ }
138
+ return '';
139
+ }
140
+ static SigWebSetImageBlobProperty(prop, strm) {
141
+ var xhr = this.SigWebcreateXHR();
142
+ if (xhr) {
143
+ xhr.open('POST', this.baseUri + prop, false);
144
+ xhr.setRequestHeader('Content-Type', 'blob');
145
+ xhr.send(strm);
146
+ if (xhr.readyState == 4 && xhr.status == 200) {
147
+ return xhr.responseText;
148
+ }
149
+ }
150
+ return '';
151
+ }
152
+ static SigWebGetVersion(prop) {
153
+ try {
154
+ var xhr = this.SigWebcreateXHR();
155
+ if (xhr) {
156
+ xhr.open('GET', this.baseUri + prop + '?noCache=' + this.generateUUID(), false);
157
+ xhr.send(null);
158
+ if (xhr.readyState == 4 && xhr.status == 200) {
159
+ return xhr.responseText;
160
+ }
161
+ }
162
+ }
163
+ catch (error) {
164
+ console.error('Error en SigWebGetVersion:', error);
165
+ return null;
166
+ }
167
+ return null;
168
+ }
169
+ static SigWebGetProperty(prop) {
170
+ var xhr = this.SigWebcreateXHR();
171
+ if (xhr) {
172
+ xhr.open('GET', this.baseUri + prop + '?noCache=' + this.generateUUID(), false);
173
+ xhr.send(null);
174
+ if (xhr.readyState == 4 && xhr.status == 200) {
175
+ return xhr.responseText;
176
+ }
177
+ }
178
+ return '';
179
+ }
180
+ static GetSigImageB64(callback) {
181
+ var cvs = document.createElement('canvas');
182
+ var width = this.GetImageXSize();
183
+ var height = this.GetImageYSize();
184
+ cvs.width = width == '' || width == null ? 0 : Number(width);
185
+ cvs.height = height == '' || height == null ? 0 : Number(height);
186
+ var xhr2 = new XMLHttpRequest();
187
+ xhr2.open('GET', this.baseUri + 'SigImage/1' + '?noCache=' + this.generateUUID(), true);
188
+ xhr2.responseType = 'blob';
189
+ xhr2.send(null);
190
+ xhr2.onload = () => {
191
+ var cntx = cvs.getContext('2d');
192
+ var img = new Image();
193
+ img.src = this.getBlobURL(xhr2.response);
194
+ img.onload = () => {
195
+ cntx.drawImage(img, 0, 0);
196
+ var b64String = cvs.toDataURL('image/png');
197
+ var loc = b64String.search('base64,');
198
+ var retstring = b64String.slice(loc + 7, b64String.length);
199
+ if (callback) {
200
+ callback(retstring);
201
+ }
202
+ };
203
+ };
204
+ }
205
+ static SigWebWaitForPenDown(callback) {
206
+ var xhr = this.SigWebcreateXHR();
207
+ if (xhr) {
208
+ xhr.open('GET', this.baseUri + 'WaitForPenDown' + '?noCache=' + this.generateUUID());
209
+ xhr.timeout = 10000;
210
+ xhr.onreadystatechange = () => {
211
+ if (xhr.readyState != 4)
212
+ return;
213
+ if (xhr.status == 200)
214
+ callback();
215
+ };
216
+ xhr.send(null);
217
+ }
218
+ }
219
+ static GetSigImage(ctx) {
220
+ var xhr2 = new XMLHttpRequest();
221
+ xhr2.open('GET', this.baseUri + 'SigImage/1' + '?noCache=' + this.generateUUID(), true);
222
+ xhr2.responseType = 'blob';
223
+ xhr2.send(null);
224
+ xhr2.onload = () => {
225
+ var img = new Image();
226
+ img.src = this.getBlobURL(xhr2.response);
227
+ img.onload = () => {
228
+ ctx.drawImage(img, 0, 0);
229
+ this.revokeBlobURL(img.src);
230
+ img = null;
231
+ };
232
+ };
233
+ }
234
+ static SigWebSetDisplayTarget(obj) {
235
+ this.ctx = obj;
236
+ }
237
+ static SigWebRefresh() {
238
+ var NumPoints = Number(this.NumberOfTabletPoints());
239
+ if (NumPoints == this.NumPointsLastTime) {
240
+ return;
241
+ }
242
+ this.NumPointsLastTime = NumPoints;
243
+ var xhr2 = new XMLHttpRequest();
244
+ xhr2.open('GET', this.baseUri + 'SigImage/0' + '?noCache=' + this.generateUUID(), true);
245
+ xhr2.responseType = 'blob';
246
+ xhr2.onload = () => {
247
+ var img = new Image();
248
+ img.src = this.getBlobURL(xhr2.response);
249
+ // img.src = window.URL.createObjectURL(xhr2.response);
250
+ img.onload = () => {
251
+ this.ctx.drawImage(img, 0, 0);
252
+ this.revokeBlobURL(img.src);
253
+ img = null;
254
+ };
255
+ };
256
+ xhr2.send(null);
257
+ }
258
+ static SigWebEvent() {
259
+ var OldEvStatus = this.EvStatus;
260
+ var xhr = this.SigWebcreateXHR();
261
+ if (xhr) {
262
+ xhr.open('GET', this.baseUri + 'EventStatus' + '?noCache=' + this.generateUUID(), true);
263
+ xhr.onload = () => {
264
+ this.EvStatus = xhr.responseText;
265
+ if (OldEvStatus & 0x01 && this.EvStatus & 0x02) {
266
+ if (this.onSigPenDown) {
267
+ this.onSigPenDown();
268
+ }
269
+ }
270
+ if (OldEvStatus & 0x02 && this.EvStatus & 0x01) {
271
+ if (this.onSigPenUp) {
272
+ this.onSigPenUp();
273
+ }
274
+ }
275
+ };
276
+ xhr.send(null);
277
+ }
278
+ }
279
+ static setSigWebFontThreshold(v) {
280
+ this.SigWebFontThreshold = v;
281
+ }
282
+ static createLcdBitmapFromCanvas(ourCanvas, xp, yp, width, height) {
283
+ var canvasCtx = ourCanvas.getContext('2d');
284
+ var imgData = canvasCtx.getImageData(0, 0, width, height);
285
+ var j = 0;
286
+ var sVal = 0;
287
+ var outData = '';
288
+ var outIdx = 0;
289
+ var data = imgData.data;
290
+ for (var y = 0; y < height; y++)
291
+ for (var x = 0; x < width; x++) {
292
+ var tmp1 = data[j];
293
+ var tmp2 = data[j + 1];
294
+ var tmp3 = data[j + 2];
295
+ var tmp4 = data[j + 3];
296
+ // sVal = tmp1 + (tmp2 << 8 ) + ( tmp3 << 16 ) + (tmp4 << 24 );
297
+ j = j + 4;
298
+ if (tmp1 < this.SigWebFontThreshold) {
299
+ outData += 'B';
300
+ }
301
+ else {
302
+ outData += 'W';
303
+ }
304
+ }
305
+ return outData;
306
+ }
307
+ static toHex(NibVal) {
308
+ switch (NibVal) {
309
+ case 0:
310
+ return '0';
311
+ case 1:
312
+ return '1';
313
+ case 2:
314
+ return '2';
315
+ case 3:
316
+ return '3';
317
+ case 4:
318
+ return '4';
319
+ case 5:
320
+ return '5';
321
+ case 6:
322
+ return '6';
323
+ case 7:
324
+ return '7';
325
+ case 8:
326
+ return '8';
327
+ case 9:
328
+ return '9';
329
+ case 10:
330
+ return 'A';
331
+ case 11:
332
+ return 'B';
333
+ case 12:
334
+ return 'C';
335
+ case 13:
336
+ return 'D';
337
+ case 14:
338
+ return 'E';
339
+ case 15:
340
+ return 'F';
341
+ default:
342
+ return '';
343
+ }
344
+ }
345
+ static ToHexString(ByteVal) {
346
+ var Str = '';
347
+ Str += this.toHex((ByteVal >> 4) & 0x0f);
348
+ Str += this.toHex(ByteVal & 0x0f);
349
+ return Str;
350
+ }
351
+ static textToTablet(x, y, height, str, fnt) {
352
+ var c = document.createElement('canvas');
353
+ var cntx = c.getContext('2d');
354
+ cntx.font = fnt;
355
+ var txt = str;
356
+ var xs = Math.round(cntx.measureText(txt).width);
357
+ var ys = height;
358
+ c.width = xs;
359
+ c.height = ys;
360
+ cntx.font = fnt;
361
+ cntx.fillStyle = '#FFFFFF';
362
+ cntx.rect(0, 0, xs, ys);
363
+ cntx.fill();
364
+ cntx.fillStyle = '#000000';
365
+ cntx.textBaseline = 'top';
366
+ cntx.fillText(txt, 0, 0);
367
+ cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
368
+ var Gstr = this.createLcdBitmapFromCanvas(c, 0, 0, xs, ys);
369
+ this.LcdWriteImageStream(0, 2, x, y, xs, ys, Gstr);
370
+ }
371
+ static LcdWriteImage(Dst, Mode, Xp, Yp, Url) {
372
+ var Prop = 'LcdWriteImage/';
373
+ var NewUrl = Url.replace(/\//g, '_');
374
+ Prop = Prop + Dst + ',' + Mode + ',' + Xp + ',' + Yp + ',' + NewUrl;
375
+ this.SigWebSetPropertySync(Prop);
376
+ }
377
+ static LcdWriteLocalImage(Dst, Mode, Xp, Yp, Url) {
378
+ var Prop = 'LcdWriteImage/';
379
+ Prop = Prop + Dst + ',' + Mode + ',' + Xp + ',' + Yp + ',' + Url;
380
+ this.SigWebSetProperty(Prop);
381
+ }
382
+ static LcdWriteImageStream(Dst, Mode, Xp, Yp, Xs, Ys, Url) {
383
+ var Prop1 = 'LcdWriteImageStreamParams/' +
384
+ Dst +
385
+ ',' +
386
+ Mode +
387
+ ',' +
388
+ Xp +
389
+ ',' +
390
+ Yp +
391
+ ',' +
392
+ Xs +
393
+ ',' +
394
+ Ys;
395
+ var Prop2 = 'LcdWriteImageStream/';
396
+ this.SigWebSetPropertySync(Prop1);
397
+ this.SigWebSetImageStreamProperty(Prop2, Url);
398
+ }
399
+ static LcdWriteImageBlob(Dst, Mode, Xp, Yp, Xs, Ys, Url) {
400
+ var Prop = 'LcdWriteImageStream/';
401
+ Prop = Prop + Dst + ',' + Mode + ',' + Xp + ',' + Yp + ',' + Xs + ',' + Ys;
402
+ this.SigWebSetImageBlobProperty(Prop, Url);
403
+ }
404
+ static measureText(pText, pFontSize, pStyle) {
405
+ var lDiv = document.createElement('lDiv');
406
+ document.body.appendChild(lDiv);
407
+ if (pStyle != null) {
408
+ lDiv.setAttribute('style', pStyle);
409
+ }
410
+ lDiv.style.fontSize = '' + pFontSize + 'px';
411
+ lDiv.style.position = 'absolute';
412
+ lDiv.style.left = '-1000';
413
+ lDiv.style.top = '-1000';
414
+ lDiv.innerHTML = pText;
415
+ var lResult = {
416
+ width: lDiv.clientWidth,
417
+ height: lDiv.clientHeight,
418
+ };
419
+ document.body.removeChild(lDiv);
420
+ lDiv = null;
421
+ return lResult;
422
+ }
423
+ static GetVersionString() {
424
+ var Prop = 'Version';
425
+ Prop = Prop;
426
+ var Str = this.SigWebGetVersion(Prop);
427
+ if (Str == null)
428
+ return Str;
429
+ var trimStr = Str.slice(1, Str.length - 2);
430
+ return trimStr;
431
+ }
432
+ static IsPenDown() {
433
+ return this.EvStatus & 0x01;
434
+ }
435
+ //
436
+ // SigPlusNETSig.cs
437
+ //
438
+ static ClearTablet() {
439
+ var Prop = 'ClearSignature';
440
+ Prop = Prop;
441
+ return this.SigWebGetProperty(Prop);
442
+ }
443
+ static NumberOfTabletPoints() {
444
+ var Prop = 'TotalPoints';
445
+ Prop = Prop;
446
+ return this.SigWebGetProperty(Prop);
447
+ }
448
+ static SetSigString(sigStr, ctx) {
449
+ var Prop = 'SigString';
450
+ Prop = Prop;
451
+ var xhr = this.SigWebcreateXHR();
452
+ if (xhr) {
453
+ xhr.open('POST', this.baseUri + Prop);
454
+ xhr.setRequestHeader('Content-Type', 'text/plain');
455
+ xhr.send(sigStr);
456
+ xhr.onload = () => {
457
+ if (ctx) {
458
+ var can = ctx.canvas;
459
+ this.SetImageXSize(can.width);
460
+ this.SetImageYSize(can.height);
461
+ this.GetSigImage(ctx);
462
+ }
463
+ };
464
+ }
465
+ return '';
466
+ }
467
+ static GetSigString() {
468
+ var Prop = 'SigString';
469
+ Prop = Prop;
470
+ var Str = this.SigWebGetProperty(Prop);
471
+ return Str.slice(1, Str.length - 1);
472
+ }
473
+ static SetSigCompressionMode(v) {
474
+ var Prop = 'CompressionMode/';
475
+ Prop = Prop + v;
476
+ this.SigWebSetPropertySync(Prop);
477
+ }
478
+ static GetSigCompressionMode() {
479
+ var Prop = 'CompressionMode';
480
+ Prop = Prop;
481
+ return this.SigWebGetProperty(Prop);
482
+ }
483
+ static SetEncryptionMode(v) {
484
+ var Prop = 'EncryptionMode/';
485
+ Prop = Prop + v;
486
+ this.SigWebSetPropertySync(Prop);
487
+ }
488
+ static GetEncryptionMode() {
489
+ var Prop = 'EncryptionMode';
490
+ Prop = Prop;
491
+ return this.SigWebGetProperty(Prop);
492
+ }
493
+ static SetKeyString(keyString) {
494
+ var Prop = 'KeyString';
495
+ Prop = Prop;
496
+ this.SigWebSetStreamProperty(Prop, keyString);
497
+ }
498
+ static GetKeyString() {
499
+ var Prop = 'KeyString';
500
+ Prop = Prop;
501
+ var Str = this.SigWebGetProperty(Prop);
502
+ return Str.slice(1, Str.length - 1);
503
+ }
504
+ static AutoKeyStart() {
505
+ var Prop = 'AutoKeyStart';
506
+ Prop = Prop;
507
+ this.SigWebSetPropertySync(Prop);
508
+ }
509
+ static AutoKeyFinish() {
510
+ var Prop = 'AutoKeyFinish';
511
+ Prop = Prop;
512
+ this.SigWebSetPropertySync(Prop);
513
+ }
514
+ static SetAutoKeyData(keyData) {
515
+ var Prop = 'SetAutoKeyData';
516
+ Prop = Prop;
517
+ this.SigWebSetStreamProperty(Prop, keyData);
518
+ }
519
+ static AutoKeyAddData(keyData) {
520
+ var Prop = 'AutoKeyAddData';
521
+ Prop = Prop;
522
+ this.SigWebSetStreamProperty(Prop, keyData);
523
+ return this.GetKeyString();
524
+ }
525
+ // function GetKeyReceipt( ) {}
526
+ static GetKeyReceiptAscii() {
527
+ var Prop = 'KeyReceiptAscii';
528
+ Prop = Prop;
529
+ var Str = this.SigWebGetProperty(Prop);
530
+ return Str.slice(1, Str.length - 1);
531
+ }
532
+ // function GetSigReceipt( ) {}
533
+ static GetSigReceiptAscii() {
534
+ var Prop = 'SigReceiptAscii';
535
+ Prop = Prop;
536
+ var Str = this.SigWebGetProperty(Prop);
537
+ return Str.slice(1, Str.length - 1);
538
+ }
539
+ static SetTimeStamp(timeStamp) {
540
+ var Prop = 'TimeStamp';
541
+ Prop = Prop;
542
+ this.SigWebSetStreamProperty(Prop, timeStamp);
543
+ }
544
+ static GetTimeStamp() {
545
+ var Prop = 'TimeStamp';
546
+ Prop = Prop;
547
+ var Str = this.SigWebGetProperty(Prop);
548
+ return Str.slice(1, Str.length - 1);
549
+ }
550
+ static SetAnnotate(annotate) {
551
+ var Prop = 'Annotate';
552
+ Prop = Prop;
553
+ this.SigWebSetStreamProperty(Prop, annotate);
554
+ }
555
+ static GetAnnotate() {
556
+ var Prop = 'Annotate';
557
+ Prop = Prop;
558
+ var Str = this.SigWebGetProperty(Prop);
559
+ return Str.slice(1, Str.length - 1);
560
+ }
561
+ static SetSaveSigInfo(v) {
562
+ var Prop = 'SaveSigInfo/';
563
+ Prop = Prop + v;
564
+ this.SigWebSetPropertySync(Prop);
565
+ }
566
+ static GetSaveSigInfo() {
567
+ var Prop = 'SaveSigInfo';
568
+ Prop = Prop;
569
+ return this.SigWebGetProperty(Prop);
570
+ }
571
+ static SetSavePressureData(v) {
572
+ var Prop = 'SavePressureData/';
573
+ Prop = Prop + v;
574
+ this.SigWebSetPropertySync(Prop);
575
+ }
576
+ static GetSavePressureData() {
577
+ var Prop = 'SavePressureData';
578
+ Prop = Prop;
579
+ return this.SigWebGetProperty(Prop);
580
+ }
581
+ static SetSaveTimeData(v) {
582
+ var Prop = 'SaveTimeData/';
583
+ Prop = Prop + v;
584
+ this.SigWebSetPropertySync(Prop);
585
+ }
586
+ static GetSaveTimeData() {
587
+ var Prop = 'SaveTimeData';
588
+ Prop = Prop;
589
+ return this.SigWebGetProperty(Prop);
590
+ }
591
+ static SetAntiAliasSpotSize(v) {
592
+ var Prop = 'AntiAliasSpotSize/';
593
+ Prop = Prop + v;
594
+ this.SigWebSetPropertySync(Prop);
595
+ }
596
+ static GetAntiAliasSpotSize() {
597
+ var Prop = 'AntiAliasSpotSize';
598
+ Prop = Prop;
599
+ return this.SigWebGetProperty(Prop);
600
+ }
601
+ static SetAntiAliasLineScale(v) {
602
+ var Prop = 'AntiAliasLineScale/';
603
+ Prop = Prop + v;
604
+ this.SigWebSetPropertySync(Prop);
605
+ }
606
+ static GetAntiAliasLineScale() {
607
+ var Prop = 'AntiAliasLineScale';
608
+ Prop = Prop;
609
+ return this.SigWebGetProperty(Prop);
610
+ }
611
+ static GetNumberOfStrokes() {
612
+ var Prop = 'NumberOfStrokes';
613
+ Prop = Prop;
614
+ return this.SigWebGetProperty(Prop);
615
+ }
616
+ static GetNumPointsForStroke(v) {
617
+ var Prop = 'NumberOfPointsInStroke/';
618
+ Prop = Prop + v;
619
+ return this.SigWebGetProperty(Prop);
620
+ }
621
+ static GetPointXValue(v1, v2) {
622
+ var Prop = 'PointXValue/';
623
+ Prop = Prop + v1 + '/' + v2;
624
+ return this.SigWebGetProperty(Prop);
625
+ }
626
+ static GetPointYValue(v1, v2) {
627
+ var Prop = 'PointYValue/';
628
+ Prop = Prop + v1 + '/' + v2;
629
+ return this.SigWebGetProperty(Prop);
630
+ }
631
+ static SetAntiAliasEnable(v) {
632
+ var Prop = 'AntiAliasEnable/';
633
+ Prop = Prop + v;
634
+ this.SigWebSetPropertySync(Prop);
635
+ }
636
+ static GetAntiAliasEnable() {
637
+ var Prop = 'AntiAliasEnable';
638
+ Prop = Prop;
639
+ return this.SigWebGetProperty(Prop);
640
+ }
641
+ static SetUseAmbientColors(v) {
642
+ var Prop = 'UseAmbientColors/';
643
+ Prop = Prop + v;
644
+ this.SigWebSetPropertySync(Prop);
645
+ }
646
+ //
647
+ // SigPlusNETDisplay.cs
648
+ //
649
+ static SetDisplayXSize(v) {
650
+ var Prop = 'DisplayXSize/';
651
+ Prop = Prop + v;
652
+ this.SigWebSetPropertySync(Prop);
653
+ }
654
+ static GetDisplayXSize() {
655
+ var Prop = 'DisplayXSize';
656
+ Prop = Prop;
657
+ return this.SigWebGetProperty(Prop);
658
+ }
659
+ static SetDisplayYSize(v) {
660
+ var Prop = 'DisplayYSize/';
661
+ Prop = Prop + v;
662
+ this.SigWebSetPropertySync(Prop);
663
+ }
664
+ static GetDisplayYSize() {
665
+ var Prop = 'DisplayYSize';
666
+ Prop = Prop;
667
+ return this.SigWebGetProperty(Prop);
668
+ }
669
+ static SetDisplayPenWidth(v) {
670
+ var Prop = 'DisplayPenWidth/';
671
+ Prop = Prop + v;
672
+ this.SigWebSetPropertySync(Prop);
673
+ }
674
+ static GetDisplayPenWidth() {
675
+ var Prop = 'DisplayPenWidth';
676
+ Prop = Prop;
677
+ return this.SigWebGetProperty(Prop);
678
+ }
679
+ static SetDisplayTimeStamp(v) {
680
+ var Prop = 'DisplayTimeStamp/';
681
+ Prop = Prop + v;
682
+ this.SigWebSetPropertySync(Prop);
683
+ }
684
+ static GetDisplayTimeStamp() {
685
+ var Prop = 'DisplayTimeStamp';
686
+ Prop = Prop;
687
+ return this.SigWebGetProperty(Prop);
688
+ }
689
+ static SetDisplayTimeStampPosX(v) {
690
+ var Prop = 'DisplayTimeStampPosX/';
691
+ Prop = Prop + v;
692
+ this.SigWebSetPropertySync(Prop);
693
+ }
694
+ static GetDisplayTimeStampPosX() {
695
+ var Prop = 'DisplayTimeStampPosX';
696
+ Prop = Prop;
697
+ return this.SigWebGetProperty(Prop);
698
+ }
699
+ static SetDisplayTimeStampPosY(v) {
700
+ var Prop = 'DisplayTimeStampPosY/';
701
+ Prop = Prop + v;
702
+ this.SigWebSetPropertySync(Prop);
703
+ }
704
+ static GetDisplayTimeStampPosY() {
705
+ var Prop = 'DisplayTimeStampPosY';
706
+ Prop = Prop;
707
+ return this.SigWebGetProperty(Prop);
708
+ }
709
+ static SetDisplayTimeStampSize(v) {
710
+ var Prop = 'DisplayTimeStampSize/';
711
+ Prop = Prop + v;
712
+ this.SigWebSetPropertySync(Prop);
713
+ }
714
+ static GetDisplayTimeStampSize() {
715
+ var Prop = 'DisplayTimeStampSize';
716
+ Prop = Prop;
717
+ return this.SigWebGetProperty(Prop);
718
+ }
719
+ static SetDisplayAnnotate(v) {
720
+ var Prop = 'DisplayAnnotate/';
721
+ Prop = Prop + v;
722
+ this.SigWebSetPropertySync(Prop);
723
+ }
724
+ static GetDisplayAnnotate() {
725
+ var Prop = 'DisplayAnnotate';
726
+ Prop = Prop;
727
+ return this.SigWebGetProperty(Prop);
728
+ }
729
+ static SetDisplayAnnotatePosX(v) {
730
+ var Prop = 'DisplayAnnotatePosX/';
731
+ Prop = Prop + v;
732
+ this.SigWebSetPropertySync(Prop);
733
+ }
734
+ static GetDisplayAnnotatePosX() {
735
+ var Prop = 'DisplayAnnotatePosX';
736
+ Prop = Prop;
737
+ return this.SigWebGetProperty(Prop);
738
+ }
739
+ static SetDisplayAnnotatePosY(v) {
740
+ var Prop = 'DisplayAnnotatePosY/';
741
+ Prop = Prop + v;
742
+ this.SigWebSetPropertySync(Prop);
743
+ }
744
+ static GetDisplayAnnotatePosY() {
745
+ var Prop = 'DisplayAnnotatePosY';
746
+ Prop = Prop;
747
+ return this.SigWebGetProperty(Prop);
748
+ }
749
+ static SetDisplayAnnotateSize(v) {
750
+ var Prop = 'DisplayAnnotateSize/';
751
+ Prop = Prop + v;
752
+ this.SigWebSetPropertySync(Prop);
753
+ }
754
+ static GetDisplayAnnotateSize() {
755
+ var Prop = 'DisplayAnnotateSize';
756
+ Prop = Prop;
757
+ return this.SigWebGetProperty(Prop);
758
+ }
759
+ //
760
+ // SigPlusNETImage.cs
761
+ //
762
+ // function GetSigImageB64( )
763
+ // {
764
+ // var xhr2 = new XMLHttpRequest();
765
+ // xhr2.open("GET", baseUri + "SigImage/1", false );
766
+ // xhr2.responseType = "blob"
767
+ // xhr2.send(null);
768
+ // if (xhr2.readyState == 4 && xhr.status == 200)
769
+ // {
770
+ // return window.URL.createObjectURL(xhr2.response);
771
+ // }
772
+ // return null;
773
+ // }
774
+ static SetImageXSize(v) {
775
+ var Prop = 'ImageXSize/';
776
+ Prop = Prop + v;
777
+ this.SigWebSetPropertySync(Prop);
778
+ }
779
+ static GetImageXSize() {
780
+ var Prop = 'ImageXSize';
781
+ Prop = Prop;
782
+ return this.SigWebGetProperty(Prop);
783
+ }
784
+ static SetImageYSize(v) {
785
+ var Prop = 'ImageYSize/';
786
+ Prop = Prop + v;
787
+ this.SigWebSetPropertySync(Prop);
788
+ }
789
+ static GetImageYSize() {
790
+ var Prop = 'ImageYSize';
791
+ Prop = Prop;
792
+ return this.SigWebGetProperty(Prop);
793
+ }
794
+ static SetImagePenWidth(v) {
795
+ var Prop = 'ImagePenWidth/';
796
+ Prop = Prop + v;
797
+ this.SigWebSetPropertySync(Prop);
798
+ }
799
+ static GetImagePenWidth() {
800
+ var Prop = 'ImagePenWidth';
801
+ Prop = Prop;
802
+ return this.SigWebGetProperty(Prop);
803
+ }
804
+ static SetImageTimeStamp(v) {
805
+ var Prop = 'ImageTimeStamp/';
806
+ Prop = Prop + v;
807
+ this.SigWebSetPropertySync(Prop);
808
+ }
809
+ static GetImageTimeStamp() {
810
+ var Prop = 'ImageTimeStamp';
811
+ Prop = Prop;
812
+ return this.SigWebGetProperty(Prop);
813
+ }
814
+ static SetImageTimeStampPosX(v) {
815
+ var Prop = 'ImageTimeStampPosX/';
816
+ Prop = Prop + v;
817
+ this.SigWebSetPropertySync(Prop);
818
+ }
819
+ static GetImageTimeStampPosX() {
820
+ var Prop = 'ImageTimeStampPosX';
821
+ Prop = Prop;
822
+ return this.SigWebGetProperty(Prop);
823
+ }
824
+ static SetImageTimeStampPosY(v) {
825
+ var Prop = 'ImageTimeStampPosY/';
826
+ Prop = Prop + v;
827
+ this.SigWebSetPropertySync(Prop);
828
+ }
829
+ static GetImageTimeStampPosY() {
830
+ var Prop = 'ImageTimeStampPosY';
831
+ Prop = Prop;
832
+ return this.SigWebGetProperty(Prop);
833
+ }
834
+ static SetImageTimeStampSize(v) {
835
+ var Prop = 'ImageTimeStampSize/';
836
+ Prop = Prop + v;
837
+ this.SigWebSetPropertySync(Prop);
838
+ }
839
+ static GetImageTimeStampSize() {
840
+ var Prop = 'ImageTimeStampSize';
841
+ Prop = Prop;
842
+ return this.SigWebGetProperty(Prop);
843
+ }
844
+ static SetImageAnnotate(v) {
845
+ var Prop = 'ImageAnnotate/';
846
+ Prop = Prop + v;
847
+ this.SigWebSetPropertySync(Prop);
848
+ }
849
+ static GetImageAnnotate() {
850
+ var Prop = 'ImageAnnotate';
851
+ Prop = Prop;
852
+ return this.SigWebGetProperty(Prop);
853
+ }
854
+ static SetImageAnnotatePosX(v) {
855
+ var Prop = 'ImageAnnotatePosX/';
856
+ Prop = Prop + v;
857
+ this.SigWebSetPropertySync(Prop);
858
+ }
859
+ static GetImageAnnotatePosX() {
860
+ var Prop = 'ImageAnnotatePosX';
861
+ Prop = Prop;
862
+ return this.SigWebGetProperty(Prop);
863
+ }
864
+ static SetImageAnnotatePosY(v) {
865
+ var Prop = 'ImageAnnotatePosY/';
866
+ Prop = Prop + v;
867
+ this.SigWebSetPropertySync(Prop);
868
+ }
869
+ static GetImageAnnotatePosY() {
870
+ var Prop = 'ImageAnnotatePosY';
871
+ Prop = Prop;
872
+ return this.SigWebGetProperty(Prop);
873
+ }
874
+ static SetImageAnnotateSize(v) {
875
+ var Prop = 'ImageAnnotateSize/';
876
+ Prop = Prop + v;
877
+ this.SigWebSetPropertySync(Prop);
878
+ }
879
+ static GetImageAnnotateSize() {
880
+ var Prop = 'ImageAnnotateSize';
881
+ Prop = Prop;
882
+ return this.SigWebGetProperty(Prop);
883
+ }
884
+ static SetJustifyX(v) {
885
+ var Prop = 'JustifyX/';
886
+ Prop = Prop + v;
887
+ this.SigWebSetPropertySync(Prop);
888
+ }
889
+ static GetJustifyX() {
890
+ var Prop = 'JustifyX';
891
+ Prop = Prop;
892
+ return this.SigWebGetProperty(Prop);
893
+ }
894
+ static SetJustifyY(v) {
895
+ var Prop = 'JustifyY/';
896
+ Prop = Prop + v;
897
+ this.SigWebSetPropertySync(Prop);
898
+ }
899
+ static GetJustifyY() {
900
+ var Prop = 'JustifyY';
901
+ Prop = Prop;
902
+ return this.SigWebGetProperty(Prop);
903
+ }
904
+ static SetJustifyMode(v) {
905
+ var Prop = 'JustifyMode/';
906
+ Prop = Prop + v;
907
+ this.SigWebSetPropertySync(Prop);
908
+ }
909
+ static GetJustifyMode() {
910
+ var Prop = 'JustifyMode';
911
+ Prop = Prop;
912
+ return this.SigWebGetProperty(Prop);
913
+ }
914
+ //
915
+ // SigPlusNETKeyPad.cs
916
+ //
917
+ static KeyPadAddHotSpot(key, coord, xp, yp, xs, ys) {
918
+ var Prop = 'KeyPadAddHotSpot/';
919
+ Prop = Prop + key + ',' + coord + ',' + xp + ',' + yp + ',' + xs + ',' + ys;
920
+ this.SigWebSetPropertySync(Prop);
921
+ }
922
+ static KeyPadMarkHotSpot(key, coord, xp, yp, xs, ys) {
923
+ this.LCDWriteString(0, 2, xp, yp, '16pt sans-serif', 32, '+');
924
+ this.LCDWriteString(0, 2, xp + xs, yp, '16pt sans-serif', 32, '+');
925
+ this.LCDWriteString(0, 2, xp, yp + ys, '16pt sans-serif', 32, '+');
926
+ this.LCDWriteString(0, 2, xp + xs, yp + ys, '16pt sans-serif', 32, '+');
927
+ }
928
+ static KeyPadQueryHotSpot(key) {
929
+ var Prop = 'KeyPadQueryHotSpot/';
930
+ Prop = Prop + key;
931
+ return this.SigWebGetProperty(Prop);
932
+ }
933
+ static KeyPadClearHotSpotList() {
934
+ var Prop = 'KeyPadClearHotSpotList';
935
+ this.SigWebSetPropertySync(Prop);
936
+ }
937
+ static SetSigWindow(coords, xp, yp, xs, ys) {
938
+ var Prop = 'SigWindow/';
939
+ Prop = Prop + coords + ',' + xp + ',' + yp + ',' + xs + ',' + ys;
940
+ this.SigWebSetPropertySync(Prop);
941
+ }
942
+ static ClearSigWindow(inside) {
943
+ var Prop = 'ClearSigWindow/';
944
+ Prop = Prop + inside;
945
+ this.SigWebSetPropertySync(Prop);
946
+ }
947
+ //
948
+ // SigPlusNETLCD.cs
949
+ //
950
+ static SetLCDCaptureMode(v) {
951
+ var Prop = 'CaptureMode/';
952
+ Prop = Prop + v;
953
+ this.SigWebSetPropertySync(Prop);
954
+ }
955
+ static GetLCDCaptureMode() {
956
+ var Prop = 'CaptureMode';
957
+ Prop = Prop;
958
+ return this.SigWebGetProperty(Prop);
959
+ }
960
+ static LCDSetWindow(xP, yP, xS, yS) {
961
+ var Prop = 'LCDSetWindow/';
962
+ Prop = Prop + xP + ',' + yP + ',' + xS + ',' + yS;
963
+ this.SigWebSetPropertySync(Prop);
964
+ }
965
+ static LCDWriteString(dest, mode, x, y, fnt, size, str) {
966
+ var c = document.createElement('canvas');
967
+ var cntx = c.getContext('2d');
968
+ cntx.font = fnt;
969
+ var txt = str;
970
+ var xs = Math.round(cntx.measureText(txt).width);
971
+ var ys = size;
972
+ c.width = xs;
973
+ c.height = ys;
974
+ if (xs == 0) {
975
+ return;
976
+ }
977
+ cntx.font = fnt;
978
+ cntx.fillStyle = '#FFFFFF';
979
+ cntx.rect(0, 0, xs, ys);
980
+ cntx.fill();
981
+ cntx.fillStyle = '#000000';
982
+ cntx.textBaseline = 'top';
983
+ cntx.fillText(txt, 0, 0);
984
+ cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
985
+ var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
986
+ this.LcdWriteImageStream(dest, mode, x, y, xs, ys, Gstr);
987
+ }
988
+ static LCDDrawRectangle(dest, mode, x, y, xs, ys, fill) {
989
+ var c = document.createElement('canvas');
990
+ var cntx = c.getContext('2d');
991
+ c.width = xs;
992
+ c.height = ys;
993
+ cntx.fillStyle = fill;
994
+ cntx.rect(0, 0, xs, ys);
995
+ cntx.fill();
996
+ cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
997
+ var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
998
+ this.LcdWriteImageBlob(dest, mode, x, y, xs, ys, Gstr);
999
+ }
1000
+ static LCDDrawButton(dest, mode, x, y, xs, ys, strys, fill, fnt, str) {
1001
+ var c = document.createElement('canvas');
1002
+ var cntx = c.getContext('2d');
1003
+ cntx.font = fnt;
1004
+ var txt = str;
1005
+ var sxs = Math.round(cntx.measureText(txt).width);
1006
+ var sys = strys;
1007
+ c.width = xs;
1008
+ c.height = ys;
1009
+ cntx.font = fnt;
1010
+ cntx.fillStyle = fill;
1011
+ cntx.rect(0, 0, xs, ys);
1012
+ cntx.fill();
1013
+ cntx.fillStyle = '#FFFFFF';
1014
+ cntx.textBaseline = 'top';
1015
+ cntx.fillText(txt, (xs - sxs) / 2, (ys - sys) / 2);
1016
+ cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
1017
+ var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
1018
+ this.LcdWriteImageBlob(dest, mode, x, y, xs, ys, Gstr);
1019
+ }
1020
+ static LCDWriteStringWindow(dest, mode, x, y, fnt, xsize, ysize, str) {
1021
+ var c = document.createElement('canvas');
1022
+ var cntx = c.getContext('2d');
1023
+ cntx.font = fnt;
1024
+ var txt = str;
1025
+ var xs = xsize;
1026
+ var ys = ysize;
1027
+ c.width = xs;
1028
+ c.height = ys;
1029
+ cntx.font = fnt;
1030
+ cntx.fillStyle = '#FFFFFF';
1031
+ cntx.rect(0, 0, xs, ys);
1032
+ cntx.fill();
1033
+ cntx.fillStyle = '#000000';
1034
+ cntx.textBaseline = 'top';
1035
+ cntx.fillText(txt, 0, 0);
1036
+ cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
1037
+ var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
1038
+ this.LcdWriteImageBlob(dest, mode, x, y, xs, ys, Gstr);
1039
+ }
1040
+ static LCDStringWidth(fnt, str) {
1041
+ var c = document.createElement('canvas');
1042
+ var cntx = c.getContext('2d');
1043
+ cntx.font = fnt;
1044
+ var txt = str;
1045
+ var xs = Math.round(cntx.measureText(txt).width);
1046
+ return xs;
1047
+ }
1048
+ static LCDStringHeight(fnt, str) {
1049
+ return 16;
1050
+ }
1051
+ static LcdRefresh(Mode, Xp, Yp, Xs, Ys) {
1052
+ var Prop = 'LcdRefresh/';
1053
+ Prop = Prop + Mode + ',' + Xp + ',' + Yp + ',' + Xs + ',' + Ys;
1054
+ this.SigWebSetPropertySync(Prop);
1055
+ }
1056
+ static LCDSendCmdString(CmdStr, ReturnCount, Result, TimeOut) {
1057
+ var Prop = 'LcdSendCmdString/';
1058
+ Prop = Prop + ReturnCount + ',' + TimeOut;
1059
+ Result = this.SigWebSetStreamProperty(Prop, CmdStr);
1060
+ }
1061
+ static LCDSendCmdData(CmdStr, ReturnCount, Result, TimeOut) {
1062
+ var Prop = 'LcdSendCmdData/';
1063
+ Prop = Prop + ReturnCount + ',' + TimeOut;
1064
+ Result = this.SigWebSetStreamProperty(Prop, CmdStr);
1065
+ }
1066
+ // function LCDSendWindowedGraphicCanvas( dest, mode, x, y, canvas )
1067
+ // {
1068
+ // }
1069
+ // function LCDSendWindowedGraphicCanvas( dest, mode, x, y, xs, ys, canvas )
1070
+ // {
1071
+ // var Gstr = this.createLcdBitmapFromCanvas( canvas, 0, 0, xs, ys)
1072
+ // LcdWriteImageStream( dest, mode, x, y, xs, ys, Gstr );
1073
+ // }
1074
+ static LCDSendWindowedGraphicCanvas(dest, mode, x, y, xs, ys, c, xps, yps) {
1075
+ var canvas = document.createElement('canvas');
1076
+ var Gstr = this.createLcdBitmapFromCanvas(canvas, xps, yps, xs, ys);
1077
+ this.LcdWriteImageStream(dest, mode, x, y, xs, ys, Gstr);
1078
+ }
1079
+ static LCDSendGraphicUrl(dest, mode, x, y, url) {
1080
+ this.LcdWriteImage(dest, mode, x, y, url);
1081
+ }
1082
+ // function LCDSendGraphic( Dest, Mode, XPos, YPos, ImageFileName ) {}
1083
+ // function LCDSendGraphicURL( Dest, Mode, XPos, YPos, URL ) {}
1084
+ static LCDClear() {
1085
+ var Prop = 'LcdClear';
1086
+ Prop = Prop;
1087
+ return this.SigWebGetProperty(Prop);
1088
+ }
1089
+ static LCDSetTabletMap(LCDType, LCDXSize, LCDYSize, LCDXStart, LCDYStart, LCDXStop, LCDYStop) { }
1090
+ static LCDSetPixelDepth(v) {
1091
+ var Prop = 'LcdSetPixelDepth/';
1092
+ Prop = Prop + v;
1093
+ this.SigWebSetPropertySync(Prop);
1094
+ }
1095
+ static LCDGetLCDSize() {
1096
+ var Prop = 'LcdGetLcdSize';
1097
+ Prop = Prop;
1098
+ return this.SigWebGetProperty(Prop);
1099
+ }
1100
+ static LCDGetCompressionMode() {
1101
+ var Prop = 'LcdCompressionMode';
1102
+ Prop = Prop;
1103
+ return this.SigWebGetProperty(Prop);
1104
+ }
1105
+ static LCDGetZCompressionMode() {
1106
+ var Prop = 'LcdZCompressionMode';
1107
+ Prop = Prop;
1108
+ return this.SigWebGetProperty(Prop);
1109
+ }
1110
+ //
1111
+ // SigPlusNETLCD.cs
1112
+ //
1113
+ static SetRealTabletState(v) {
1114
+ var Prop = 'TabletState/';
1115
+ Prop = Prop + v;
1116
+ this.SigWebSetPropertySync(Prop);
1117
+ }
1118
+ static GetTabletState() {
1119
+ var Prop = 'TabletState';
1120
+ Prop = Prop;
1121
+ return this.SigWebGetProperty(Prop);
1122
+ }
1123
+ static SetTabletLogicalXSize(v) {
1124
+ var Prop = 'TabletLogicalXSize/';
1125
+ Prop = Prop + v;
1126
+ this.SigWebSetPropertySync(Prop);
1127
+ }
1128
+ static GetTabletLogicalXSize() {
1129
+ var Prop = 'TabletLogicalXSize';
1130
+ Prop = Prop;
1131
+ return this.SigWebGetProperty(Prop);
1132
+ }
1133
+ static GetTabletLogicalYSize() {
1134
+ var Prop = 'TabletLogicalYSize';
1135
+ Prop = Prop;
1136
+ return this.SigWebGetProperty(Prop);
1137
+ }
1138
+ static SetTabletLogicalYSize(v) {
1139
+ var Prop = 'TabletLogicalYSize/';
1140
+ Prop = Prop + v;
1141
+ this.SigWebSetPropertySync(Prop);
1142
+ }
1143
+ static SetTabletXStart(v) {
1144
+ var Prop = 'TabletXStart/';
1145
+ Prop = Prop + v;
1146
+ this.SigWebSetPropertySync(Prop);
1147
+ }
1148
+ static GetTabletXStart() {
1149
+ var Prop = 'TabletXStart';
1150
+ Prop = Prop;
1151
+ return this.SigWebGetProperty(Prop);
1152
+ }
1153
+ static SetTabletYStart(v) {
1154
+ var Prop = 'TabletYStart/';
1155
+ Prop = Prop + v;
1156
+ this.SigWebSetPropertySync(Prop);
1157
+ }
1158
+ static GetTabletYStart() {
1159
+ var Prop = 'TabletYStart';
1160
+ Prop = Prop;
1161
+ return this.SigWebGetProperty(Prop);
1162
+ }
1163
+ static SetTabletXStop(v) {
1164
+ var Prop = 'TabletXStop/';
1165
+ Prop = Prop + v;
1166
+ this.SigWebSetPropertySync(Prop);
1167
+ }
1168
+ static GetTabletXStop() {
1169
+ var Prop = 'TabletXStop';
1170
+ Prop = Prop;
1171
+ return this.SigWebGetProperty(Prop);
1172
+ }
1173
+ static SetTabletYStop(v) {
1174
+ var Prop = 'TabletYStop/';
1175
+ Prop = Prop + v;
1176
+ this.SigWebSetPropertySync(Prop);
1177
+ }
1178
+ static GetTabletYStop() {
1179
+ var Prop = 'TabletYStop';
1180
+ Prop = Prop;
1181
+ return this.SigWebGetProperty(Prop);
1182
+ }
1183
+ static SetTabletFilterPoints(v) {
1184
+ var Prop = 'TabletFilterPoints/';
1185
+ Prop = Prop + v;
1186
+ this.SigWebSetPropertySync(Prop);
1187
+ }
1188
+ static GetTabletFilterPoints() {
1189
+ var Prop = 'TabletFilterPoints';
1190
+ Prop = Prop;
1191
+ return this.SigWebGetProperty(Prop);
1192
+ }
1193
+ static SetTabletTimingAdvance(v) {
1194
+ var Prop = 'TabletTimingAdvance/';
1195
+ Prop = Prop + v;
1196
+ this.SigWebSetPropertySync(Prop);
1197
+ }
1198
+ static GetTabletTimingAdvance() {
1199
+ var Prop = 'TabletTimingAdvance';
1200
+ Prop = Prop;
1201
+ return this.SigWebGetProperty(Prop);
1202
+ }
1203
+ static SetTabletComPort(v) {
1204
+ var Prop = 'TabletComPort/';
1205
+ Prop = Prop + v;
1206
+ this.SigWebSetPropertySync(Prop);
1207
+ }
1208
+ static GetTabletComPort() {
1209
+ var Prop = 'TabletComPort';
1210
+ Prop = Prop;
1211
+ return this.SigWebGetProperty(Prop);
1212
+ }
1213
+ static SetTabletBaudRate(v) {
1214
+ var Prop = 'TabletBaudRate/';
1215
+ Prop = Prop + v;
1216
+ this.SigWebSetPropertySync(Prop);
1217
+ }
1218
+ static GetTabletBaudRate() {
1219
+ var Prop = 'TabletBaudRate';
1220
+ Prop = Prop;
1221
+ return this.SigWebGetProperty(Prop);
1222
+ }
1223
+ static SetTabletRotation(v) {
1224
+ var Prop = 'TabletRotation/';
1225
+ Prop = Prop + v;
1226
+ this.SigWebSetPropertySync(Prop);
1227
+ }
1228
+ static GetTabletRotation() {
1229
+ var Prop = 'TabletRotation';
1230
+ Prop = Prop;
1231
+ return this.SigWebGetProperty(Prop);
1232
+ }
1233
+ static SetTabletType(v) {
1234
+ var Prop = 'TabletType/';
1235
+ Prop = Prop + v;
1236
+ this.SigWebSetPropertySync(Prop);
1237
+ }
1238
+ static GetTabletType() {
1239
+ var Prop = 'TabletType';
1240
+ Prop = Prop;
1241
+ return this.SigWebGetProperty(Prop);
1242
+ }
1243
+ static SetServerTabletType(v) {
1244
+ var Prop = 'ServerTabletType/';
1245
+ Prop = Prop + v;
1246
+ this.SigWebSetPropertySync(Prop);
1247
+ }
1248
+ static GetServerTabletType() {
1249
+ var Prop = 'ServerTabletType';
1250
+ Prop = Prop;
1251
+ return this.SigWebGetProperty(Prop);
1252
+ }
1253
+ static SetTabletComTest(v) {
1254
+ var Prop = 'TabletComTest/';
1255
+ Prop = Prop + v;
1256
+ this.SigWebSetPropertySync(Prop);
1257
+ }
1258
+ static GetTabletComTest() {
1259
+ var Prop = 'TabletComTest';
1260
+ Prop = Prop;
1261
+ return this.SigWebGetProperty(Prop);
1262
+ }
1263
+ static SetTabletResolution(v) {
1264
+ var Prop = 'TabletResolution/';
1265
+ Prop = Prop + v;
1266
+ this.SigWebSetPropertySync(Prop);
1267
+ }
1268
+ static GetTabletResolution() {
1269
+ var Prop = 'TabletResolution';
1270
+ Prop = Prop;
1271
+ return this.SigWebGetProperty(Prop);
1272
+ }
1273
+ static TabletConnectQuery() {
1274
+ var Prop = 'TabletConnectQuery';
1275
+ Prop = Prop;
1276
+ return this.SigWebGetProperty(Prop);
1277
+ }
1278
+ static TabletModelNumber() {
1279
+ var Prop = 'TabletModelNumber';
1280
+ Prop = Prop;
1281
+ return this.SigWebGetProperty(Prop);
1282
+ }
1283
+ static TabletSerialNumber() {
1284
+ var Prop = 'TabletSerialNumber';
1285
+ Prop = Prop;
1286
+ return this.SigWebGetProperty(Prop);
1287
+ }
1288
+ static SetTabletPortPath(v) {
1289
+ var Prop = 'TabletPortPath/';
1290
+ Prop = Prop + v;
1291
+ this.SigWebSetPropertySync(Prop);
1292
+ }
1293
+ static SetTabletLocalIniFilePath(v) {
1294
+ var Prop = 'TabletLocalIniFilePath/';
1295
+ Prop = Prop + v;
1296
+ this.SigWebSetPropertySync(Prop);
1297
+ }
1298
+ static SetTabletModel(v) {
1299
+ var Prop = 'TabletModel/';
1300
+ Prop = Prop + v;
1301
+ this.SigWebSetPropertySync(Prop);
1302
+ }
1303
+ static SetSerialPortCloseDelay(v) {
1304
+ var Prop = 'SerialPortCloseDelay/';
1305
+ Prop = Prop + v;
1306
+ this.SigWebSetPropertySync(Prop);
1307
+ }
1308
+ static GetSerialPortCloseDelay() {
1309
+ var Prop = 'SerialPortCloseDelay';
1310
+ Prop = Prop;
1311
+ return this.SigWebGetProperty(Prop);
1312
+ }
1313
+ static EnableTabletEncryption() {
1314
+ var Prop = 'EnableTabletEncryption';
1315
+ Prop = Prop;
1316
+ this.SigWebSetPropertySync(Prop);
1317
+ }
1318
+ static SetTabletEncryptionMode(hmode, tmode) {
1319
+ var Prop = 'TabletEncryptionMode/';
1320
+ Prop = Prop + hmode + ',' + tmode;
1321
+ this.SigWebSetPropertySync(Prop);
1322
+ }
1323
+ static SetMaxLogFileSize(v) {
1324
+ var Prop = 'MaxLogFileSize/';
1325
+ Prop = Prop + v;
1326
+ this.SigWebSetPropertySync(Prop);
1327
+ }
1328
+ static GetSigSockServerPath() {
1329
+ var Prop = 'SigSockServerPath';
1330
+ Prop = Prop;
1331
+ return this.SigWebGetProperty(Prop);
1332
+ }
1333
+ static GetSigSockClientName() {
1334
+ var Prop = 'SigSockClientName';
1335
+ Prop = Prop;
1336
+ return this.SigWebGetProperty(Prop);
1337
+ }
1338
+ static GetSigSockPortNumber() {
1339
+ var Prop = 'SigSockPortNumber';
1340
+ Prop = Prop;
1341
+ return this.SigWebGetProperty(Prop);
1342
+ }
1343
+ static SetSigSockServerPath(v) {
1344
+ var Prop = 'SigSockServerPath/';
1345
+ Prop = Prop + v;
1346
+ this.SigWebSetPropertySync(Prop);
1347
+ }
1348
+ static SetSigSockClientName(v) {
1349
+ var Prop = 'SigSockClientName/';
1350
+ Prop = Prop + v;
1351
+ this.SigWebSetPropertySync(Prop);
1352
+ }
1353
+ static SetPortNumber(v) {
1354
+ var Prop = 'PortNumber/';
1355
+ Prop = Prop + v;
1356
+ this.SigWebSetPropertySync(Prop);
1357
+ }
1358
+ static SetSigSockPortNumber(v) {
1359
+ var Prop = 'SigSockPortNumber/';
1360
+ Prop = Prop + v;
1361
+ this.SigWebSetPropertySync(Prop);
1362
+ }
1363
+ static GetFirmwareRevision() {
1364
+ var Prop = 'FirmwareRevision';
1365
+ Prop = Prop;
1366
+ return this.SigWebGetProperty(Prop);
1367
+ }
1368
+ static SetTabletData(sigStr) {
1369
+ var Prop = 'TabletData';
1370
+ Prop = Prop;
1371
+ this.SigWebSetStreamProperty(Prop, sigStr);
1372
+ }
1373
+ static GetTabletData() {
1374
+ var Prop = 'TabletData';
1375
+ Prop = Prop;
1376
+ var Str = this.SigWebGetProperty(Prop);
1377
+ return Str.slice(1, Str.length - 1);
1378
+ }
1379
+ static OpenTablet(v) {
1380
+ var Prop = 'OpenTablet/';
1381
+ Prop = Prop + v;
1382
+ this.SigWebSetPropertySync(Prop);
1383
+ }
1384
+ static CloseTablet() {
1385
+ var Prop = 'CloseTablet';
1386
+ Prop = Prop;
1387
+ this.SigWebSetProperty(Prop);
1388
+ }
1389
+ static ResetParameters() {
1390
+ var Prop = 'ResetParameters';
1391
+ Prop = Prop;
1392
+ this.SigWebSetPropertySync(Prop);
1393
+ }
1394
+ static testRawData() {
1395
+ this.OpenTablet(1);
1396
+ var Str1 = this.GetTabletData();
1397
+ this.CloseTablet();
1398
+ }
1399
+ static SetTabletState(v, ctx, tv) {
1400
+ var delay;
1401
+ if (tv) {
1402
+ delay = tv;
1403
+ }
1404
+ else {
1405
+ delay = 100;
1406
+ }
1407
+ if (this.GetTabletState() != v) {
1408
+ if (v == 1) {
1409
+ if (ctx) {
1410
+ var can = ctx.canvas;
1411
+ this.SetDisplayXSize(can.width);
1412
+ this.SetDisplayYSize(can.height);
1413
+ this.SigWebSetDisplayTarget(ctx);
1414
+ }
1415
+ this.SetRealTabletState(v);
1416
+ var data = this.GetTabletState();
1417
+ var dataResult = data == '' || data == null ? 0 : Number(data);
1418
+ var tmr = null;
1419
+ if (ctx && dataResult != 0) {
1420
+ tmr = setInterval(() => this.SigWebRefresh(), delay);
1421
+ }
1422
+ else {
1423
+ tmr = null;
1424
+ }
1425
+ return tmr;
1426
+ }
1427
+ else {
1428
+ if (ctx) {
1429
+ clearInterval(ctx);
1430
+ }
1431
+ this.SigWebSetDisplayTarget(null);
1432
+ this.SetRealTabletState(v);
1433
+ }
1434
+ }
1435
+ return null;
1436
+ }
1437
+ }
1438
+ SigWebTablet.baseUri = SigWebTablet.makeUri();
1439
+ SigWebTablet.Count = false;
1440
+ SigWebTablet.SigWebFontThreshold = 155;
1441
+ SigWebTablet.NumPointsLastTime = 0;
1442
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnV2ViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliZXktbmctY29tcG9uZW50LWxpYnJhcnkvc3JjL3V0aWxzL1NpZ1dlYi9TaWdXZWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCO0FBQ2xCLE1BQU0sT0FBTyxZQUFZO0lBQ2YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFXO1FBQ3RDLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNkLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUI7YUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDM0IsU0FBUyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFDTyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQVU7UUFDbEMsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2QsT0FBTyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xDO2FBQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQzNCLE9BQU8sU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4QztRQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsNENBQTRDO0lBQ3pELENBQUM7SUFZTyxNQUFNLENBQUMsT0FBTztRQUNwQixJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksSUFBSSxJQUFJLE9BQU8sRUFBRTtZQUNuQixJQUFJLEdBQUcsT0FBTyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDZixJQUFJLElBQUksSUFBSSxRQUFRLEVBQUU7Z0JBQ3BCLE9BQU8sSUFBSSxHQUFHLHlDQUF5QyxDQUFDO2FBQ3pEO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxHQUFHLHlDQUF5QyxDQUFDO2FBQ3pE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UUFDWixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDOUIsSUFBSSxJQUFJLEdBQUcsdUJBQXVCLENBQUM7UUFFbkMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCO1FBQzVCLElBQUksSUFBSSxHQUFHLHNCQUFzQixDQUFDO1FBRWxDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDOUIsSUFBSSxJQUFJLEdBQUcsdUJBQXVCLENBQUM7UUFFbkMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCO1FBQzVCLElBQUksSUFBSSxHQUFHLHNCQUFzQixDQUFDO1FBRWxDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDOUIsSUFBSSxJQUFJLEdBQUcsdUJBQXVCLENBQUM7UUFFbkMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCO1FBQzVCLElBQUksSUFBSSxHQUFHLHNCQUFzQixDQUFDO1FBRWxDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDWixPQUFPLElBQUksQ0FB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QUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3REO3FCQUFNO29CQUNMLEdBQUcsR0FBRyxJQUFJLENBQUM7aUJBQ1o7Z0JBRUQsT0FBTyxHQUFHLENBQUM7YUFDWjtpQkFBTTtnQkFDTCxJQUFJLEdBQUcsRUFBRTtvQkFDUCxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3BCO2dCQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzVCO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBOTFEYyxvQkFBTyxHQUFXLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUV6QyxrQkFBSyxHQUFZLEtBQUssQ0FBQztBQUl2QixnQ0FBbUIsR0FBRyxHQUFHLENBQUM7QUFDMUIsOEJBQWlCLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2lnV2ViVGFibGV0LnRzXHJcbmV4cG9ydCBjbGFzcyBTaWdXZWJUYWJsZXQge1xyXG4gIHByaXZhdGUgc3RhdGljIHJldm9rZUJsb2JVUkwodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh3aW5kb3cuVVJMKSB7XHJcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xyXG4gICAgICB3ZWJraXRVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgc3RhdGljIGdldEJsb2JVUkwoYmxvYjogQmxvYik6IHN0cmluZyB7XHJcbiAgICBpZiAod2luZG93LlVSTCkge1xyXG4gICAgICByZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xyXG4gICAgICByZXR1cm4gd2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJzsgLy8gUmV0b3JuYXIgdW4gc3RyaW5nIHZhY8OtbyBlbiBjYXNvIGRlIGVycm9yXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBiYXNlVXJpOiBzdHJpbmcgPSBTaWdXZWJUYWJsZXQubWFrZVVyaSgpO1xyXG4gIHByaXZhdGUgc3RhdGljIGN0eDtcclxuICBwcml2YXRlIHN0YXRpYyBDb3VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgc3RhdGljIEV2U3RhdHVzO1xyXG4gIHByaXZhdGUgc3RhdGljIG9uU2lnUGVuRG93bjtcclxuICBwcml2YXRlIHN0YXRpYyBvblNpZ1BlblVwO1xyXG4gIHByaXZhdGUgc3RhdGljIFNpZ1dlYkZvbnRUaHJlc2hvbGQgPSAxNTU7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTnVtUG9pbnRzTGFzdFRpbWUgPSAwO1xyXG4gIHByaXZhdGUgc3RhdGljIFNpZ0ltYWdlQjY0O1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBtYWtlVXJpKCk6IHN0cmluZyB7XHJcbiAgICB2YXIgcHJvdCA9IGxvY2F0aW9uLnByb3RvY29sO1xyXG4gICAgaWYgKHByb3QgPT0gJ2ZpbGU6Jykge1xyXG4gICAgICBwcm90ID0gJ2h0dHA6JztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0lFKCkpIHtcclxuICAgICAgaWYgKHByb3QgPT0gJ2h0dHBzOicpIHtcclxuICAgICAgICByZXR1cm4gcHJvdCArICcvL3RhYmxldC5zaWd3ZWJ0YWJsZXQuY29tOjQ3MjkwL1NpZ1dlYi8nO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBwcm90ICsgJy8vdGFibGV0LnNpZ3dlYnRhYmxldC5jb206NDcyODkvU2lnV2ViLyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Nocm9tZSgpKSB7XHJcbiAgICAgIGlmIChwcm90ID09ICdodHRwczonKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb3QgKyAnLy90YWJsZXQuc2lnd2VidGFibGV0LmNvbTo0NzI5MC9TaWdXZWIvJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gcHJvdCArICcvL3RhYmxldC5zaWd3ZWJ0YWJsZXQuY29tOjQ3Mjg5L1NpZ1dlYi8nO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvL0ZJUkVGT1hcclxuICAgICAgaWYgKHByb3QgPT0gJ2h0dHBzOicpIHtcclxuICAgICAgICByZXR1cm4gcHJvdCArICcvL3RhYmxldC5zaWd3ZWJ0YWJsZXQuY29tOjQ3MjkwL1NpZ1dlYi8nO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBwcm90ICsgJy8vdGFibGV0LnNpZ3dlYnRhYmxldC5jb206NDcyODkvU2lnV2ViLyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlVVVJRCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoXHJcbiAgICAgIC9beHldL2csXHJcbiAgICAgIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgY29uc3QgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMDtcclxuICAgICAgICBjb25zdCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4ODtcclxuICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNTaWdXZWJJbnN0YWxsZWQoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHhoci5vcGVuKFxyXG4gICAgICAgICdHRVQnLFxyXG4gICAgICAgIGAke3RoaXMuYmFzZVVyaX1UYWJsZXRTdGF0ZT9ub0NhY2hlPSR7dGhpcy5nZW5lcmF0ZVVVSUQoKX1gLFxyXG4gICAgICAgIGZhbHNlXHJcbiAgICAgICk7XHJcbiAgICAgIHhoci5zZW5kKCk7XHJcbiAgICAgIHJldHVybiB4aHIuc3RhdHVzICE9PSA0MDQgJiYgeGhyLnN0YXR1cyAhPT0gMDtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGNoZWNraW5nIFNpZ1dlYiBpbnN0YWxsYXRpb24nLCBlKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzSUUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBuYXZpZ2F0b3IuYXBwTmFtZSA9PT0gJ01pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlcicgfHxcclxuICAgICAgKG5hdmlnYXRvci5hcHBOYW1lID09PSAnTmV0c2NhcGUnICYmXHJcbiAgICAgICAgbmV3IFJlZ0V4cCgnVHJpZGVudC8uKnJ2OihbMC05XXsxLH1bLjAtOV17MCx9KScpLmV4ZWMoXHJcbiAgICAgICAgICBuYXZpZ2F0b3IudXNlckFnZW50XHJcbiAgICAgICAgKSAhPSBudWxsKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc0Nocm9tZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lmxhc3RJbmRleE9mKCdDaHJvbWUvJykgPiAwO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYmNyZWF0ZVhIUigpOiBYTUxIdHRwUmVxdWVzdCB8IG51bGwge1xyXG4gICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICBpZiAoIXhocikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNlIHB1ZG8gY3JlYXIgWE1MSHR0cFJlcXVlc3QnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geGhyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYlNldFByb3BlcnR5KHByb3A6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB4aHI6IFhNTEh0dHBSZXF1ZXN0IHwgbnVsbCA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuYmFzZVVyaSArIHByb3AsIHRydWUpO1xyXG4gICAgICB4aHIuc2VuZChudWxsKTtcclxuICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0ICYmIHhoci5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViU2V0UHJvcGVydHlTeW5jKHByb3A6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB4aHI6IFhNTEh0dHBSZXF1ZXN0IHwgbnVsbCA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuYmFzZVVyaSArIHByb3AsIGZhbHNlKTtcclxuICAgICAgeGhyLnNlbmQoKTtcclxuICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0ICYmIHhoci5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViU2V0U3RyZWFtUHJvcGVydHkocHJvcDogc3RyaW5nLCBzdHJtOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeGhyOiBYTUxIdHRwUmVxdWVzdCB8IG51bGwgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG5cclxuICAgIGlmICh4aHIpIHtcclxuICAgICAgeGhyLm9wZW4oJ1BPU1QnLCB0aGlzLmJhc2VVcmkgKyBwcm9wKTtcclxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XHJcbiAgICAgIHhoci5zZW5kKHN0cm0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYlN5bmNTZXRTdHJlYW1Qcm9wZXJ0eShwcm9wOiBzdHJpbmcsIHN0cm06IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB4aHI6IFhNTEh0dHBSZXF1ZXN0IHwgbnVsbCA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuYmFzZVVyaSArIHByb3AsIGZhbHNlKTtcclxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XHJcbiAgICAgIHhoci5zZW5kKHN0cm0pO1xyXG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQgJiYgeGhyLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHhoci5yZXNwb25zZVRleHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJTZXRJbWFnZVN0cmVhbVByb3BlcnR5KHByb3A6IHN0cmluZywgc3RybTogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHhocjogWE1MSHR0cFJlcXVlc3QgfCBudWxsID0gdGhpcy5TaWdXZWJjcmVhdGVYSFIoKTtcclxuXHJcbiAgICBpZiAoeGhyKSB7XHJcbiAgICAgIHhoci5vcGVuKCdQT1NUJywgdGhpcy5iYXNlVXJpICsgcHJvcCwgZmFsc2UpO1xyXG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2ltYWdlL3BuZycpO1xyXG4gICAgICB4aHIuc2VuZChzdHJtKTtcclxuICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0ICYmIHhoci5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViU2V0SW1hZ2VCbG9iUHJvcGVydHkocHJvcCwgc3RybSkge1xyXG4gICAgdmFyIHhociA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcbiAgICBpZiAoeGhyKSB7XHJcbiAgICAgIHhoci5vcGVuKCdQT1NUJywgdGhpcy5iYXNlVXJpICsgcHJvcCwgZmFsc2UpO1xyXG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2Jsb2InKTtcclxuICAgICAgeGhyLnNlbmQoc3RybSk7XHJcbiAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSA0ICYmIHhoci5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHhoci5yZXNwb25zZVRleHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJHZXRWZXJzaW9uKHByb3ApIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciB4aHIgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG4gICAgICBpZiAoeGhyKSB7XHJcbiAgICAgICAgeGhyLm9wZW4oXHJcbiAgICAgICAgICAnR0VUJyxcclxuICAgICAgICAgIHRoaXMuYmFzZVVyaSArIHByb3AgKyAnP25vQ2FjaGU9JyArIHRoaXMuZ2VuZXJhdGVVVUlEKCksXHJcbiAgICAgICAgICBmYWxzZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IDQgJiYgeGhyLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZW4gU2lnV2ViR2V0VmVyc2lvbjonLCBlcnJvcik7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViR2V0UHJvcGVydHkocHJvcCkge1xyXG4gICAgdmFyIHhociA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbihcclxuICAgICAgICAnR0VUJyxcclxuICAgICAgICB0aGlzLmJhc2VVcmkgKyBwcm9wICsgJz9ub0NhY2hlPScgKyB0aGlzLmdlbmVyYXRlVVVJRCgpLFxyXG4gICAgICAgIGZhbHNlXHJcbiAgICAgICk7XHJcbiAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCAmJiB4aHIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0U2lnSW1hZ2VCNjQoY2FsbGJhY2spIHtcclxuICAgIHZhciBjdnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciB3aWR0aCA9IHRoaXMuR2V0SW1hZ2VYU2l6ZSgpO1xyXG4gICAgdmFyIGhlaWdodCA9IHRoaXMuR2V0SW1hZ2VZU2l6ZSgpO1xyXG4gICAgY3ZzLndpZHRoID0gd2lkdGggPT0gJycgfHwgd2lkdGggPT0gbnVsbCA/IDAgOiBOdW1iZXIod2lkdGgpO1xyXG4gICAgY3ZzLmhlaWdodCA9IGhlaWdodCA9PSAnJyB8fCBoZWlnaHQgPT0gbnVsbCA/IDAgOiBOdW1iZXIoaGVpZ2h0KTtcclxuXHJcbiAgICB2YXIgeGhyMiA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgeGhyMi5vcGVuKFxyXG4gICAgICAnR0VUJyxcclxuICAgICAgdGhpcy5iYXNlVXJpICsgJ1NpZ0ltYWdlLzEnICsgJz9ub0NhY2hlPScgKyB0aGlzLmdlbmVyYXRlVVVJRCgpLFxyXG4gICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgeGhyMi5yZXNwb25zZVR5cGUgPSAnYmxvYic7XHJcbiAgICB4aHIyLnNlbmQobnVsbCk7XHJcbiAgICB4aHIyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgdmFyIGNudHggPSBjdnMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWcuc3JjID0gdGhpcy5nZXRCbG9iVVJMKHhocjIucmVzcG9uc2UpO1xyXG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGNudHguZHJhd0ltYWdlKGltZywgMCwgMCk7XHJcbiAgICAgICAgdmFyIGI2NFN0cmluZyA9IGN2cy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xyXG4gICAgICAgIHZhciBsb2MgPSBiNjRTdHJpbmcuc2VhcmNoKCdiYXNlNjQsJyk7XHJcbiAgICAgICAgdmFyIHJldHN0cmluZyA9IGI2NFN0cmluZy5zbGljZShsb2MgKyA3LCBiNjRTdHJpbmcubGVuZ3RoKTtcclxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgIGNhbGxiYWNrKHJldHN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJXYWl0Rm9yUGVuRG93bihjYWxsYmFjaykge1xyXG4gICAgdmFyIHhociA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbihcclxuICAgICAgICAnR0VUJyxcclxuICAgICAgICB0aGlzLmJhc2VVcmkgKyAnV2FpdEZvclBlbkRvd24nICsgJz9ub0NhY2hlPScgKyB0aGlzLmdlbmVyYXRlVVVJRCgpXHJcbiAgICAgICk7XHJcbiAgICAgIHhoci50aW1lb3V0ID0gMTAwMDA7XHJcbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlICE9IDQpIHJldHVybjtcclxuICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIGNhbGxiYWNrKCk7XHJcbiAgICAgIH07XHJcbiAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNpZ0ltYWdlKGN0eCkge1xyXG4gICAgdmFyIHhocjIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhocjIub3BlbihcclxuICAgICAgJ0dFVCcsXHJcbiAgICAgIHRoaXMuYmFzZVVyaSArICdTaWdJbWFnZS8xJyArICc/bm9DYWNoZT0nICsgdGhpcy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIHhocjIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xyXG4gICAgeGhyMi5zZW5kKG51bGwpO1xyXG4gICAgeGhyMi5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLnNyYyA9IHRoaXMuZ2V0QmxvYlVSTCh4aHIyLnJlc3BvbnNlKTtcclxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7XHJcbiAgICAgICAgdGhpcy5yZXZva2VCbG9iVVJMKGltZy5zcmMpO1xyXG4gICAgICAgIGltZyA9IG51bGw7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYlNldERpc3BsYXlUYXJnZXQob2JqKSB7XHJcbiAgICB0aGlzLmN0eCA9IG9iajtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJSZWZyZXNoKCkge1xyXG4gICAgdmFyIE51bVBvaW50cyA9IE51bWJlcih0aGlzLk51bWJlck9mVGFibGV0UG9pbnRzKCkpO1xyXG4gICAgaWYgKE51bVBvaW50cyA9PSB0aGlzLk51bVBvaW50c0xhc3RUaW1lKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuTnVtUG9pbnRzTGFzdFRpbWUgPSBOdW1Qb2ludHM7XHJcblxyXG4gICAgdmFyIHhocjIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhocjIub3BlbihcclxuICAgICAgJ0dFVCcsXHJcbiAgICAgIHRoaXMuYmFzZVVyaSArICdTaWdJbWFnZS8wJyArICc/bm9DYWNoZT0nICsgdGhpcy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIHhocjIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xyXG4gICAgeGhyMi5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLnNyYyA9IHRoaXMuZ2V0QmxvYlVSTCh4aHIyLnJlc3BvbnNlKTtcclxuICAgICAgLy9cdFx0XHRcdGltZy5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCh4aHIyLnJlc3BvbnNlKTtcclxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcclxuICAgICAgICB0aGlzLnJldm9rZUJsb2JVUkwoaW1nLnNyYyk7XHJcbiAgICAgICAgaW1nID0gbnVsbDtcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgICB4aHIyLnNlbmQobnVsbCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViRXZlbnQoKSB7XHJcbiAgICB2YXIgT2xkRXZTdGF0dXMgPSB0aGlzLkV2U3RhdHVzO1xyXG5cclxuICAgIHZhciB4aHIgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG5cclxuICAgIGlmICh4aHIpIHtcclxuICAgICAgeGhyLm9wZW4oXHJcbiAgICAgICAgJ0dFVCcsXHJcbiAgICAgICAgdGhpcy5iYXNlVXJpICsgJ0V2ZW50U3RhdHVzJyArICc/bm9DYWNoZT0nICsgdGhpcy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5FdlN0YXR1cyA9IHhoci5yZXNwb25zZVRleHQ7XHJcbiAgICAgICAgaWYgKE9sZEV2U3RhdHVzICYgMHgwMSAmJiB0aGlzLkV2U3RhdHVzICYgMHgwMikge1xyXG4gICAgICAgICAgaWYgKHRoaXMub25TaWdQZW5Eb3duKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TaWdQZW5Eb3duKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoT2xkRXZTdGF0dXMgJiAweDAyICYmIHRoaXMuRXZTdGF0dXMgJiAweDAxKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5vblNpZ1BlblVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TaWdQZW5VcCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2V0U2lnV2ViRm9udFRocmVzaG9sZCh2KSB7XHJcbiAgICB0aGlzLlNpZ1dlYkZvbnRUaHJlc2hvbGQgPSB2O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZUxjZEJpdG1hcEZyb21DYW52YXMob3VyQ2FudmFzLCB4cCwgeXAsIHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHZhciBjYW52YXNDdHggPSBvdXJDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIHZhciBpbWdEYXRhID0gY2FudmFzQ3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgIHZhciBqID0gMDtcclxuICAgIHZhciBzVmFsID0gMDtcclxuICAgIHZhciBvdXREYXRhID0gJyc7XHJcbiAgICB2YXIgb3V0SWR4ID0gMDtcclxuICAgIHZhciBkYXRhID0gaW1nRGF0YS5kYXRhO1xyXG5cclxuICAgIGZvciAodmFyIHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspXHJcbiAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xyXG4gICAgICAgIHZhciB0bXAxID0gZGF0YVtqXTtcclxuICAgICAgICB2YXIgdG1wMiA9IGRhdGFbaiArIDFdO1xyXG4gICAgICAgIHZhciB0bXAzID0gZGF0YVtqICsgMl07XHJcbiAgICAgICAgdmFyIHRtcDQgPSBkYXRhW2ogKyAzXTtcclxuXHJcbiAgICAgICAgLy9cdFx0XHRcdFx0c1ZhbCA9IHRtcDEgKyAodG1wMiA8PCA4ICkgKyAoIHRtcDMgPDwgMTYgKSArICh0bXA0IDw8IDI0ICk7XHJcbiAgICAgICAgaiA9IGogKyA0O1xyXG4gICAgICAgIGlmICh0bXAxIDwgdGhpcy5TaWdXZWJGb250VGhyZXNob2xkKSB7XHJcbiAgICAgICAgICBvdXREYXRhICs9ICdCJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb3V0RGF0YSArPSAnVyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dERhdGE7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdG9IZXgoTmliVmFsKSB7XHJcbiAgICBzd2l0Y2ggKE5pYlZhbCkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHJldHVybiAnMSc7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICByZXR1cm4gJzInO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcmV0dXJuICczJztcclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIHJldHVybiAnNCc7XHJcbiAgICAgIGNhc2UgNTpcclxuICAgICAgICByZXR1cm4gJzUnO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcmV0dXJuICc2JztcclxuICAgICAgY2FzZSA3OlxyXG4gICAgICAgIHJldHVybiAnNyc7XHJcbiAgICAgIGNhc2UgODpcclxuICAgICAgICByZXR1cm4gJzgnO1xyXG4gICAgICBjYXNlIDk6XHJcbiAgICAgICAgcmV0dXJuICc5JztcclxuICAgICAgY2FzZSAxMDpcclxuICAgICAgICByZXR1cm4gJ0EnO1xyXG4gICAgICBjYXNlIDExOlxyXG4gICAgICAgIHJldHVybiAnQic7XHJcbiAgICAgIGNhc2UgMTI6XHJcbiAgICAgICAgcmV0dXJuICdDJztcclxuICAgICAgY2FzZSAxMzpcclxuICAgICAgICByZXR1cm4gJ0QnO1xyXG4gICAgICBjYXNlIDE0OlxyXG4gICAgICAgIHJldHVybiAnRSc7XHJcbiAgICAgIGNhc2UgMTU6XHJcbiAgICAgICAgcmV0dXJuICdGJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0YXRpYyBUb0hleFN0cmluZyhCeXRlVmFsKSB7XHJcbiAgICB2YXIgU3RyID0gJyc7XHJcbiAgICBTdHIgKz0gdGhpcy50b0hleCgoQnl0ZVZhbCA+PiA0KSAmIDB4MGYpO1xyXG4gICAgU3RyICs9IHRoaXMudG9IZXgoQnl0ZVZhbCAmIDB4MGYpO1xyXG4gICAgcmV0dXJuIFN0cjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0ZXh0VG9UYWJsZXQoeCwgeSwgaGVpZ2h0LCBzdHIsIGZudCkge1xyXG4gICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBjbnR4ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgY250eC5mb250ID0gZm50O1xyXG4gICAgdmFyIHR4dCA9IHN0cjtcclxuICAgIHZhciB4cyA9IE1hdGgucm91bmQoY250eC5tZWFzdXJlVGV4dCh0eHQpLndpZHRoKTtcclxuICAgIHZhciB5cyA9IGhlaWdodDtcclxuICAgIGMud2lkdGggPSB4cztcclxuICAgIGMuaGVpZ2h0ID0geXM7XHJcblxyXG4gICAgY250eC5mb250ID0gZm50O1xyXG4gICAgY250eC5maWxsU3R5bGUgPSAnI0ZGRkZGRic7XHJcbiAgICBjbnR4LnJlY3QoMCwgMCwgeHMsIHlzKTtcclxuICAgIGNudHguZmlsbCgpO1xyXG5cclxuICAgIGNudHguZmlsbFN0eWxlID0gJyMwMDAwMDAnO1xyXG4gICAgY250eC50ZXh0QmFzZWxpbmUgPSAndG9wJztcclxuICAgIGNudHguZmlsbFRleHQodHh0LCAwLCAwKTtcclxuXHJcbiAgICBjbnR4LmRyYXdJbWFnZShjbnR4LmNhbnZhcywgMCwgMCwgeHMsIHlzKTtcclxuXHJcbiAgICB2YXIgR3N0ciA9IHRoaXMuY3JlYXRlTGNkQml0bWFwRnJvbUNhbnZhcyhjLCAwLCAwLCB4cywgeXMpO1xyXG5cclxuICAgIHRoaXMuTGNkV3JpdGVJbWFnZVN0cmVhbSgwLCAyLCB4LCB5LCB4cywgeXMsIEdzdHIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExjZFdyaXRlSW1hZ2UoRHN0LCBNb2RlLCBYcCwgWXAsIFVybCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkV3JpdGVJbWFnZS8nO1xyXG4gICAgdmFyIE5ld1VybCA9IFVybC5yZXBsYWNlKC9cXC8vZywgJ18nKTtcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIERzdCArICcsJyArIE1vZGUgKyAnLCcgKyBYcCArICcsJyArIFlwICsgJywnICsgTmV3VXJsO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTGNkV3JpdGVMb2NhbEltYWdlKERzdCwgTW9kZSwgWHAsIFlwLCBVcmwpIHtcclxuICAgIHZhciBQcm9wID0gJ0xjZFdyaXRlSW1hZ2UvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIERzdCArICcsJyArIE1vZGUgKyAnLCcgKyBYcCArICcsJyArIFlwICsgJywnICsgVXJsO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMY2RXcml0ZUltYWdlU3RyZWFtKERzdCwgTW9kZSwgWHAsIFlwLCBYcywgWXMsIFVybCkge1xyXG4gICAgdmFyIFByb3AxID1cclxuICAgICAgJ0xjZFdyaXRlSW1hZ2VTdHJlYW1QYXJhbXMvJyArXHJcbiAgICAgIERzdCArXHJcbiAgICAgICcsJyArXHJcbiAgICAgIE1vZGUgK1xyXG4gICAgICAnLCcgK1xyXG4gICAgICBYcCArXHJcbiAgICAgICcsJyArXHJcbiAgICAgIFlwICtcclxuICAgICAgJywnICtcclxuICAgICAgWHMgK1xyXG4gICAgICAnLCcgK1xyXG4gICAgICBZcztcclxuICAgIHZhciBQcm9wMiA9ICdMY2RXcml0ZUltYWdlU3RyZWFtLyc7XHJcblxyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcDEpO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRJbWFnZVN0cmVhbVByb3BlcnR5KFByb3AyLCBVcmwpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExjZFdyaXRlSW1hZ2VCbG9iKERzdCwgTW9kZSwgWHAsIFlwLCBYcywgWXMsIFVybCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkV3JpdGVJbWFnZVN0cmVhbS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgRHN0ICsgJywnICsgTW9kZSArICcsJyArIFhwICsgJywnICsgWXAgKyAnLCcgKyBYcyArICcsJyArIFlzO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRJbWFnZUJsb2JQcm9wZXJ0eShQcm9wLCBVcmwpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG1lYXN1cmVUZXh0KHBUZXh0LCBwRm9udFNpemUsIHBTdHlsZSkge1xyXG4gICAgdmFyIGxEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsRGl2Jyk7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsRGl2KTtcclxuXHJcbiAgICBpZiAocFN0eWxlICE9IG51bGwpIHtcclxuICAgICAgbERpdi5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgcFN0eWxlKTtcclxuICAgIH1cclxuICAgIGxEaXYuc3R5bGUuZm9udFNpemUgPSAnJyArIHBGb250U2l6ZSArICdweCc7XHJcbiAgICBsRGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgIGxEaXYuc3R5bGUubGVmdCA9ICctMTAwMCc7XHJcbiAgICBsRGl2LnN0eWxlLnRvcCA9ICctMTAwMCc7XHJcblxyXG4gICAgbERpdi5pbm5lckhUTUwgPSBwVGV4dDtcclxuXHJcbiAgICB2YXIgbFJlc3VsdCA9IHtcclxuICAgICAgd2lkdGg6IGxEaXYuY2xpZW50V2lkdGgsXHJcbiAgICAgIGhlaWdodDogbERpdi5jbGllbnRIZWlnaHQsXHJcbiAgICB9O1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobERpdik7XHJcbiAgICBsRGl2ID0gbnVsbDtcclxuXHJcbiAgICByZXR1cm4gbFJlc3VsdDtcclxuICB9XHJcbiAgc3RhdGljIEdldFZlcnNpb25TdHJpbmcoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdWZXJzaW9uJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHZhciBTdHIgPSB0aGlzLlNpZ1dlYkdldFZlcnNpb24oUHJvcCk7XHJcbiAgICBpZihTdHIgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIFN0cjtcclxuXHJcbiAgICB2YXIgdHJpbVN0ciA9IFN0ci5zbGljZSgxLCBTdHIubGVuZ3RoIC0gMik7XHJcbiAgICByZXR1cm4gdHJpbVN0cjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBJc1BlbkRvd24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5FdlN0YXR1cyAmIDB4MDE7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vXHRcdFx0U2lnUGx1c05FVFNpZy5jc1xyXG4gIC8vXHJcbiAgc3RhdGljIENsZWFyVGFibGV0KCkge1xyXG4gICAgdmFyIFByb3AgPSAnQ2xlYXJTaWduYXR1cmUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTnVtYmVyT2ZUYWJsZXRQb2ludHMoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUb3RhbFBvaW50cyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRTaWdTdHJpbmcoc2lnU3RyLCBjdHgpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1N0cmluZyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgeGhyID0gdGhpcy5TaWdXZWJjcmVhdGVYSFIoKTtcclxuXHJcbiAgICBpZiAoeGhyKSB7XHJcbiAgICAgIHhoci5vcGVuKCdQT1NUJywgdGhpcy5iYXNlVXJpICsgUHJvcCk7XHJcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xyXG4gICAgICB4aHIuc2VuZChzaWdTdHIpO1xyXG4gICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGlmIChjdHgpIHtcclxuICAgICAgICAgIHZhciBjYW4gPSBjdHguY2FudmFzO1xyXG4gICAgICAgICAgdGhpcy5TZXRJbWFnZVhTaXplKGNhbi53aWR0aCk7XHJcbiAgICAgICAgICB0aGlzLlNldEltYWdlWVNpemUoY2FuLmhlaWdodCk7XHJcbiAgICAgICAgICB0aGlzLkdldFNpZ0ltYWdlKGN0eCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNpZ1N0cmluZygpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1N0cmluZyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgU3RyID0gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuXHJcbiAgICByZXR1cm4gU3RyLnNsaWNlKDEsIFN0ci5sZW5ndGggLSAxKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRTaWdDb21wcmVzc2lvbk1vZGUodikge1xyXG4gICAgdmFyIFByb3AgPSAnQ29tcHJlc3Npb25Nb2RlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0U2lnQ29tcHJlc3Npb25Nb2RlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnQ29tcHJlc3Npb25Nb2RlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEVuY3J5cHRpb25Nb2RlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0VuY3J5cHRpb25Nb2RlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RW5jcnlwdGlvbk1vZGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdFbmNyeXB0aW9uTW9kZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRLZXlTdHJpbmcoa2V5U3RyaW5nKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdLZXlTdHJpbmcnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCBrZXlTdHJpbmcpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEtleVN0cmluZygpIHtcclxuICAgIHZhciBQcm9wID0gJ0tleVN0cmluZyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgU3RyID0gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuXHJcbiAgICByZXR1cm4gU3RyLnNsaWNlKDEsIFN0ci5sZW5ndGggLSAxKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBBdXRvS2V5U3RhcnQoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBdXRvS2V5U3RhcnQnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgQXV0b0tleUZpbmlzaCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0F1dG9LZXlGaW5pc2gnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0QXV0b0tleURhdGEoa2V5RGF0YSkge1xyXG4gICAgdmFyIFByb3AgPSAnU2V0QXV0b0tleURhdGEnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCBrZXlEYXRhKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBBdXRvS2V5QWRkRGF0YShrZXlEYXRhKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBdXRvS2V5QWRkRGF0YSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFN0cmVhbVByb3BlcnR5KFByb3AsIGtleURhdGEpO1xyXG4gICAgcmV0dXJuIHRoaXMuR2V0S2V5U3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvL1x0XHRmdW5jdGlvbiAgR2V0S2V5UmVjZWlwdCggKSB7fVxyXG5cclxuICBzdGF0aWMgR2V0S2V5UmVjZWlwdEFzY2lpKCkge1xyXG4gICAgdmFyIFByb3AgPSAnS2V5UmVjZWlwdEFzY2lpJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHZhciBTdHIgPSB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG5cclxuICAgIHJldHVybiBTdHIuc2xpY2UoMSwgU3RyLmxlbmd0aCAtIDEpO1xyXG4gIH1cclxuXHJcbiAgLy9cdFx0ZnVuY3Rpb24gIEdldFNpZ1JlY2VpcHQoICkge31cclxuXHJcbiAgc3RhdGljIEdldFNpZ1JlY2VpcHRBc2NpaSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1JlY2VpcHRBc2NpaSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgU3RyID0gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuXHJcbiAgICByZXR1cm4gU3RyLnNsaWNlKDEsIFN0ci5sZW5ndGggLSAxKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUaW1lU3RhbXAodGltZVN0YW1wKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUaW1lU3RhbXAnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCB0aW1lU3RhbXApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRpbWVTdGFtcCgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RpbWVTdGFtcCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgU3RyID0gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuXHJcbiAgICByZXR1cm4gU3RyLnNsaWNlKDEsIFN0ci5sZW5ndGggLSAxKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRBbm5vdGF0ZShhbm5vdGF0ZSkge1xyXG4gICAgdmFyIFByb3AgPSAnQW5ub3RhdGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCBhbm5vdGF0ZSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0QW5ub3RhdGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBbm5vdGF0ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgU3RyID0gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuXHJcbiAgICByZXR1cm4gU3RyLnNsaWNlKDEsIFN0ci5sZW5ndGggLSAxKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRTYXZlU2lnSW5mbyh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTYXZlU2lnSW5mby8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNhdmVTaWdJbmZvKCkge1xyXG4gICAgdmFyIFByb3AgPSAnU2F2ZVNpZ0luZm8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2F2ZVByZXNzdXJlRGF0YSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTYXZlUHJlc3N1cmVEYXRhLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0U2F2ZVByZXNzdXJlRGF0YSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1NhdmVQcmVzc3VyZURhdGEnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2F2ZVRpbWVEYXRhKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1NhdmVUaW1lRGF0YS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNhdmVUaW1lRGF0YSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1NhdmVUaW1lRGF0YSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRBbnRpQWxpYXNTcG90U2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBbnRpQWxpYXNTcG90U2l6ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEFudGlBbGlhc1Nwb3RTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnQW50aUFsaWFzU3BvdFNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0QW50aUFsaWFzTGluZVNjYWxlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0FudGlBbGlhc0xpbmVTY2FsZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEFudGlBbGlhc0xpbmVTY2FsZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0FudGlBbGlhc0xpbmVTY2FsZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXROdW1iZXJPZlN0cm9rZXMoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdOdW1iZXJPZlN0cm9rZXMnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0TnVtUG9pbnRzRm9yU3Ryb2tlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ051bWJlck9mUG9pbnRzSW5TdHJva2UvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRQb2ludFhWYWx1ZSh2MSwgdjIpIHtcclxuICAgIHZhciBQcm9wID0gJ1BvaW50WFZhbHVlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2MSArICcvJyArIHYyO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0UG9pbnRZVmFsdWUodjEsIHYyKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdQb2ludFlWYWx1ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjEgKyAnLycgKyB2MjtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEFudGlBbGlhc0VuYWJsZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBbnRpQWxpYXNFbmFibGUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRBbnRpQWxpYXNFbmFibGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBbnRpQWxpYXNFbmFibGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VXNlQW1iaWVudENvbG9ycyh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdVc2VBbWJpZW50Q29sb3JzLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vXHRcdFNpZ1BsdXNORVREaXNwbGF5LmNzXHJcbiAgLy9cclxuICBzdGF0aWMgU2V0RGlzcGxheVhTaXplKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlYU2l6ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldERpc3BsYXlYU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlYU2l6ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXREaXNwbGF5WVNpemUodikge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVlTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheVlTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVlTaXplJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldERpc3BsYXlQZW5XaWR0aCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5UGVuV2lkdGgvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5UGVuV2lkdGgoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5UGVuV2lkdGgnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheVRpbWVTdGFtcCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5VGltZVN0YW1wLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheVRpbWVTdGFtcCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlUaW1lU3RhbXAnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheVRpbWVTdGFtcFBvc1godikge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVRpbWVTdGFtcFBvc1gvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5VGltZVN0YW1wUG9zWCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlUaW1lU3RhbXBQb3NYJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldERpc3BsYXlUaW1lU3RhbXBQb3NZKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlUaW1lU3RhbXBQb3NZLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheVRpbWVTdGFtcFBvc1koKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5VGltZVN0YW1wUG9zWSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXREaXNwbGF5VGltZVN0YW1wU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5VGltZVN0YW1wU2l6ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldERpc3BsYXlUaW1lU3RhbXBTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVRpbWVTdGFtcFNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheUFubm90YXRlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldERpc3BsYXlBbm5vdGF0ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXREaXNwbGF5QW5ub3RhdGVQb3NYKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZVBvc1gvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5QW5ub3RhdGVQb3NYKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheUFubm90YXRlUG9zWCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXREaXNwbGF5QW5ub3RhdGVQb3NZKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZVBvc1kvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5QW5ub3RhdGVQb3NZKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheUFubm90YXRlUG9zWSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXREaXNwbGF5QW5ub3RhdGVTaXplKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZVNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5QW5ub3RhdGVTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheUFubm90YXRlU2l6ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy9cdFx0U2lnUGx1c05FVEltYWdlLmNzXHJcbiAgLy9cclxuICAvL1x0XHRmdW5jdGlvbiAgR2V0U2lnSW1hZ2VCNjQoIClcclxuICAvL1x0XHRcdHtcclxuICAvL1x0XHRcdHZhciB4aHIyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgLy9cdFx0XHR4aHIyLm9wZW4oXCJHRVRcIiwgYmFzZVVyaSArIFwiU2lnSW1hZ2UvMVwiLCBmYWxzZSApO1xyXG4gIC8vXHRcdFx0eGhyMi5yZXNwb25zZVR5cGUgPSBcImJsb2JcIlxyXG4gIC8vXHRcdFx0eGhyMi5zZW5kKG51bGwpO1xyXG4gIC8vXHRcdFx0aWYgKHhocjIucmVhZHlTdGF0ZSA9PSA0ICYmIHhoci5zdGF0dXMgPT0gMjAwKVxyXG4gIC8vXHRcdFx0XHR7XHJcbiAgLy9cdFx0XHRcdHJldHVybiB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCh4aHIyLnJlc3BvbnNlKTtcclxuICAvL1x0XHRcdFx0fVxyXG4gIC8vXHRcdFx0cmV0dXJuIG51bGw7XHJcbiAgLy9cdFx0XHR9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZVhTaXplKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlWFNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZVhTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VYU2l6ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZVlTaXplKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlWVNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZVlTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VZU2l6ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZVBlbldpZHRoKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlUGVuV2lkdGgvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZVBlbldpZHRoKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VQZW5XaWR0aCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZVRpbWVTdGFtcCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVRpbWVTdGFtcC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEltYWdlVGltZVN0YW1wKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VUaW1lU3RhbXAnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VUaW1lU3RhbXBQb3NYKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlVGltZVN0YW1wUG9zWC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEltYWdlVGltZVN0YW1wUG9zWCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlVGltZVN0YW1wUG9zWCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZVRpbWVTdGFtcFBvc1kodikge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VUaW1lU3RhbXBQb3NZLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VUaW1lU3RhbXBQb3NZKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VUaW1lU3RhbXBQb3NZJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEltYWdlVGltZVN0YW1wU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVRpbWVTdGFtcFNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZVRpbWVTdGFtcFNpemUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVRpbWVTdGFtcFNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VBbm5vdGF0ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZUFubm90YXRlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VBbm5vdGF0ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlQW5ub3RhdGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VBbm5vdGF0ZVBvc1godikge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VBbm5vdGF0ZVBvc1gvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZUFubm90YXRlUG9zWCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlQW5ub3RhdGVQb3NYJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEltYWdlQW5ub3RhdGVQb3NZKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlQW5ub3RhdGVQb3NZLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VBbm5vdGF0ZVBvc1koKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZUFubm90YXRlUG9zWSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZUFubm90YXRlU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZUFubm90YXRlU2l6ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEltYWdlQW5ub3RhdGVTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VBbm5vdGF0ZVNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SnVzdGlmeVgodikge1xyXG4gICAgdmFyIFByb3AgPSAnSnVzdGlmeVgvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRKdXN0aWZ5WCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0p1c3RpZnlYJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEp1c3RpZnlZKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0p1c3RpZnlZLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SnVzdGlmeVkoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdKdXN0aWZ5WSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRKdXN0aWZ5TW9kZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdKdXN0aWZ5TW9kZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEp1c3RpZnlNb2RlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSnVzdGlmeU1vZGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vXHRcdFNpZ1BsdXNORVRLZXlQYWQuY3NcclxuICAvL1xyXG4gIHN0YXRpYyBLZXlQYWRBZGRIb3RTcG90KGtleSwgY29vcmQsIHhwLCB5cCwgeHMsIHlzKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdLZXlQYWRBZGRIb3RTcG90Lyc7XHJcbiAgICBQcm9wID0gUHJvcCArIGtleSArICcsJyArIGNvb3JkICsgJywnICsgeHAgKyAnLCcgKyB5cCArICcsJyArIHhzICsgJywnICsgeXM7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBLZXlQYWRNYXJrSG90U3BvdChrZXksIGNvb3JkLCB4cCwgeXAsIHhzLCB5cykge1xyXG4gICAgdGhpcy5MQ0RXcml0ZVN0cmluZygwLCAyLCB4cCwgeXAsICcxNnB0IHNhbnMtc2VyaWYnLCAzMiwgJysnKTtcclxuICAgIHRoaXMuTENEV3JpdGVTdHJpbmcoMCwgMiwgeHAgKyB4cywgeXAsICcxNnB0IHNhbnMtc2VyaWYnLCAzMiwgJysnKTtcclxuICAgIHRoaXMuTENEV3JpdGVTdHJpbmcoMCwgMiwgeHAsIHlwICsgeXMsICcxNnB0IHNhbnMtc2VyaWYnLCAzMiwgJysnKTtcclxuICAgIHRoaXMuTENEV3JpdGVTdHJpbmcoMCwgMiwgeHAgKyB4cywgeXAgKyB5cywgJzE2cHQgc2Fucy1zZXJpZicsIDMyLCAnKycpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEtleVBhZFF1ZXJ5SG90U3BvdChrZXkpIHtcclxuICAgIHZhciBQcm9wID0gJ0tleVBhZFF1ZXJ5SG90U3BvdC8nO1xyXG4gICAgUHJvcCA9IFByb3AgKyBrZXk7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBLZXlQYWRDbGVhckhvdFNwb3RMaXN0KCkge1xyXG4gICAgdmFyIFByb3AgPSAnS2V5UGFkQ2xlYXJIb3RTcG90TGlzdCc7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRTaWdXaW5kb3coY29vcmRzLCB4cCwgeXAsIHhzLCB5cykge1xyXG4gICAgdmFyIFByb3AgPSAnU2lnV2luZG93Lyc7XHJcbiAgICBQcm9wID0gUHJvcCArIGNvb3JkcyArICcsJyArIHhwICsgJywnICsgeXAgKyAnLCcgKyB4cyArICcsJyArIHlzO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgQ2xlYXJTaWdXaW5kb3coaW5zaWRlKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdDbGVhclNpZ1dpbmRvdy8nO1xyXG4gICAgUHJvcCA9IFByb3AgKyBpbnNpZGU7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy9cdFx0U2lnUGx1c05FVExDRC5jc1xyXG4gIC8vXHJcbiAgc3RhdGljIFNldExDRENhcHR1cmVNb2RlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0NhcHR1cmVNb2RlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0TENEQ2FwdHVyZU1vZGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdDYXB0dXJlTW9kZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RTZXRXaW5kb3coeFAsIHlQLCB4UywgeVMpIHtcclxuICAgIHZhciBQcm9wID0gJ0xDRFNldFdpbmRvdy8nO1xyXG4gICAgUHJvcCA9IFByb3AgKyB4UCArICcsJyArIHlQICsgJywnICsgeFMgKyAnLCcgKyB5UztcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExDRFdyaXRlU3RyaW5nKGRlc3QsIG1vZGUsIHgsIHksIGZudCwgc2l6ZSwgc3RyKSB7XHJcbiAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgdmFyIGNudHggPSBjLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjbnR4LmZvbnQgPSBmbnQ7XHJcbiAgICB2YXIgdHh0ID0gc3RyO1xyXG4gICAgdmFyIHhzID0gTWF0aC5yb3VuZChjbnR4Lm1lYXN1cmVUZXh0KHR4dCkud2lkdGgpO1xyXG4gICAgdmFyIHlzID0gc2l6ZTtcclxuICAgIGMud2lkdGggPSB4cztcclxuICAgIGMuaGVpZ2h0ID0geXM7XHJcblxyXG4gICAgaWYgKHhzID09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNudHguZm9udCA9IGZudDtcclxuICAgIGNudHguZmlsbFN0eWxlID0gJyNGRkZGRkYnO1xyXG4gICAgY250eC5yZWN0KDAsIDAsIHhzLCB5cyk7XHJcbiAgICBjbnR4LmZpbGwoKTtcclxuXHJcbiAgICBjbnR4LmZpbGxTdHlsZSA9ICcjMDAwMDAwJztcclxuICAgIGNudHgudGV4dEJhc2VsaW5lID0gJ3RvcCc7XHJcbiAgICBjbnR4LmZpbGxUZXh0KHR4dCwgMCwgMCk7XHJcblxyXG4gICAgY250eC5kcmF3SW1hZ2UoY250eC5jYW52YXMsIDAsIDAsIHhzLCB5cyk7XHJcblxyXG4gICAgdmFyIEdzdHIgPSB0aGlzLmNyZWF0ZUxjZEJpdG1hcEZyb21DYW52YXMoYywgeCwgeSwgeHMsIHlzKTtcclxuXHJcbiAgICB0aGlzLkxjZFdyaXRlSW1hZ2VTdHJlYW0oZGVzdCwgbW9kZSwgeCwgeSwgeHMsIHlzLCBHc3RyKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0REcmF3UmVjdGFuZ2xlKGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgZmlsbCkge1xyXG4gICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBjbnR4ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgIGMud2lkdGggPSB4cztcclxuICAgIGMuaGVpZ2h0ID0geXM7XHJcblxyXG4gICAgY250eC5maWxsU3R5bGUgPSBmaWxsO1xyXG4gICAgY250eC5yZWN0KDAsIDAsIHhzLCB5cyk7XHJcbiAgICBjbnR4LmZpbGwoKTtcclxuXHJcbiAgICBjbnR4LmRyYXdJbWFnZShjbnR4LmNhbnZhcywgMCwgMCwgeHMsIHlzKTtcclxuICAgIHZhciBHc3RyID0gdGhpcy5jcmVhdGVMY2RCaXRtYXBGcm9tQ2FudmFzKGMsIHgsIHksIHhzLCB5cyk7XHJcbiAgICB0aGlzLkxjZFdyaXRlSW1hZ2VCbG9iKGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgR3N0cik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENERHJhd0J1dHRvbihkZXN0LCBtb2RlLCB4LCB5LCB4cywgeXMsIHN0cnlzLCBmaWxsLCBmbnQsIHN0cikge1xyXG4gICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBjbnR4ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgY250eC5mb250ID0gZm50O1xyXG4gICAgdmFyIHR4dCA9IHN0cjtcclxuICAgIHZhciBzeHMgPSBNYXRoLnJvdW5kKGNudHgubWVhc3VyZVRleHQodHh0KS53aWR0aCk7XHJcbiAgICB2YXIgc3lzID0gc3RyeXM7XHJcbiAgICBjLndpZHRoID0geHM7XHJcbiAgICBjLmhlaWdodCA9IHlzO1xyXG5cclxuICAgIGNudHguZm9udCA9IGZudDtcclxuICAgIGNudHguZmlsbFN0eWxlID0gZmlsbDtcclxuICAgIGNudHgucmVjdCgwLCAwLCB4cywgeXMpO1xyXG4gICAgY250eC5maWxsKCk7XHJcblxyXG4gICAgY250eC5maWxsU3R5bGUgPSAnI0ZGRkZGRic7XHJcbiAgICBjbnR4LnRleHRCYXNlbGluZSA9ICd0b3AnO1xyXG4gICAgY250eC5maWxsVGV4dCh0eHQsICh4cyAtIHN4cykgLyAyLCAoeXMgLSBzeXMpIC8gMik7XHJcblxyXG4gICAgY250eC5kcmF3SW1hZ2UoY250eC5jYW52YXMsIDAsIDAsIHhzLCB5cyk7XHJcblxyXG4gICAgdmFyIEdzdHIgPSB0aGlzLmNyZWF0ZUxjZEJpdG1hcEZyb21DYW52YXMoYywgeCwgeSwgeHMsIHlzKTtcclxuXHJcbiAgICB0aGlzLkxjZFdyaXRlSW1hZ2VCbG9iKGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgR3N0cik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENEV3JpdGVTdHJpbmdXaW5kb3coZGVzdCwgbW9kZSwgeCwgeSwgZm50LCB4c2l6ZSwgeXNpemUsIHN0cikge1xyXG4gICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBjbnR4ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgY250eC5mb250ID0gZm50O1xyXG4gICAgdmFyIHR4dCA9IHN0cjtcclxuICAgIHZhciB4cyA9IHhzaXplO1xyXG4gICAgdmFyIHlzID0geXNpemU7XHJcbiAgICBjLndpZHRoID0geHM7XHJcbiAgICBjLmhlaWdodCA9IHlzO1xyXG5cclxuICAgIGNudHguZm9udCA9IGZudDtcclxuICAgIGNudHguZmlsbFN0eWxlID0gJyNGRkZGRkYnO1xyXG4gICAgY250eC5yZWN0KDAsIDAsIHhzLCB5cyk7XHJcbiAgICBjbnR4LmZpbGwoKTtcclxuXHJcbiAgICBjbnR4LmZpbGxTdHlsZSA9ICcjMDAwMDAwJztcclxuICAgIGNudHgudGV4dEJhc2VsaW5lID0gJ3RvcCc7XHJcbiAgICBjbnR4LmZpbGxUZXh0KHR4dCwgMCwgMCk7XHJcblxyXG4gICAgY250eC5kcmF3SW1hZ2UoY250eC5jYW52YXMsIDAsIDAsIHhzLCB5cyk7XHJcblxyXG4gICAgdmFyIEdzdHIgPSB0aGlzLmNyZWF0ZUxjZEJpdG1hcEZyb21DYW52YXMoYywgeCwgeSwgeHMsIHlzKTtcclxuXHJcbiAgICB0aGlzLkxjZFdyaXRlSW1hZ2VCbG9iKGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgR3N0cik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENEU3RyaW5nV2lkdGgoZm50LCBzdHIpIHtcclxuICAgIHZhciBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgY250eCA9IGMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGNudHguZm9udCA9IGZudDtcclxuICAgIHZhciB0eHQgPSBzdHI7XHJcbiAgICB2YXIgeHMgPSBNYXRoLnJvdW5kKGNudHgubWVhc3VyZVRleHQodHh0KS53aWR0aCk7XHJcblxyXG4gICAgcmV0dXJuIHhzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExDRFN0cmluZ0hlaWdodChmbnQsIHN0cikge1xyXG4gICAgcmV0dXJuIDE2O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExjZFJlZnJlc2goTW9kZSwgWHAsIFlwLCBYcywgWXMpIHtcclxuICAgIHZhciBQcm9wID0gJ0xjZFJlZnJlc2gvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIE1vZGUgKyAnLCcgKyBYcCArICcsJyArIFlwICsgJywnICsgWHMgKyAnLCcgKyBZcztcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExDRFNlbmRDbWRTdHJpbmcoQ21kU3RyLCBSZXR1cm5Db3VudCwgUmVzdWx0LCBUaW1lT3V0KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdMY2RTZW5kQ21kU3RyaW5nLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyBSZXR1cm5Db3VudCArICcsJyArIFRpbWVPdXQ7XHJcbiAgICBSZXN1bHQgPSB0aGlzLlNpZ1dlYlNldFN0cmVhbVByb3BlcnR5KFByb3AsIENtZFN0cik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENEU2VuZENtZERhdGEoQ21kU3RyLCBSZXR1cm5Db3VudCwgUmVzdWx0LCBUaW1lT3V0KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdMY2RTZW5kQ21kRGF0YS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgUmV0dXJuQ291bnQgKyAnLCcgKyBUaW1lT3V0O1xyXG4gICAgUmVzdWx0ID0gdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCBDbWRTdHIpO1xyXG4gIH1cclxuXHJcbiAgLy9cdFx0ZnVuY3Rpb24gIExDRFNlbmRXaW5kb3dlZEdyYXBoaWNDYW52YXMoICBkZXN0LCBtb2RlLCAgeCwgIHksIGNhbnZhcyApXHJcbiAgLy9cdFx0XHQge1xyXG4gIC8vXHRcdFx0IH1cclxuXHJcbiAgLy9cdFx0ZnVuY3Rpb24gIExDRFNlbmRXaW5kb3dlZEdyYXBoaWNDYW52YXMoICBkZXN0LCBtb2RlLCAgeCwgIHksICB4cywgIHlzLCBjYW52YXMgKVxyXG4gIC8vXHRcdFx0e1xyXG4gIC8vXHRcdFx0dmFyIEdzdHIgPSB0aGlzLmNyZWF0ZUxjZEJpdG1hcEZyb21DYW52YXMoIGNhbnZhcywgMCwgMCwgeHMsIHlzKVxyXG4gIC8vXHRcdFx0TGNkV3JpdGVJbWFnZVN0cmVhbSggZGVzdCwgbW9kZSwgeCwgeSwgeHMsIHlzLCBHc3RyICk7XHJcbiAgLy9cdFx0XHR9XHJcblxyXG4gIHN0YXRpYyBMQ0RTZW5kV2luZG93ZWRHcmFwaGljQ2FudmFzKGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgYywgeHBzLCB5cHMpIHtcclxuICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBHc3RyID0gdGhpcy5jcmVhdGVMY2RCaXRtYXBGcm9tQ2FudmFzKGNhbnZhcywgeHBzLCB5cHMsIHhzLCB5cyk7XHJcbiAgICB0aGlzLkxjZFdyaXRlSW1hZ2VTdHJlYW0oZGVzdCwgbW9kZSwgeCwgeSwgeHMsIHlzLCBHc3RyKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RTZW5kR3JhcGhpY1VybChkZXN0LCBtb2RlLCB4LCB5LCB1cmwpIHtcclxuICAgIHRoaXMuTGNkV3JpdGVJbWFnZShkZXN0LCBtb2RlLCB4LCB5LCB1cmwpO1xyXG4gIH1cclxuXHJcbiAgLy9cdFx0ZnVuY3Rpb24gIExDRFNlbmRHcmFwaGljKCAgRGVzdCwgIE1vZGUsICBYUG9zLCAgWVBvcywgIEltYWdlRmlsZU5hbWUgKSB7fVxyXG4gIC8vXHRcdGZ1bmN0aW9uICBMQ0RTZW5kR3JhcGhpY1VSTCggIERlc3QsICBNb2RlLCAgWFBvcywgIFlQb3MsICBVUkwgKSB7fVxyXG5cclxuICBzdGF0aWMgTENEQ2xlYXIoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdMY2RDbGVhcic7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RTZXRUYWJsZXRNYXAoXHJcbiAgICBMQ0RUeXBlLFxyXG4gICAgTENEWFNpemUsXHJcbiAgICBMQ0RZU2l6ZSxcclxuICAgIExDRFhTdGFydCxcclxuICAgIExDRFlTdGFydCxcclxuICAgIExDRFhTdG9wLFxyXG4gICAgTENEWVN0b3BcclxuICApIHt9XHJcblxyXG4gIHN0YXRpYyBMQ0RTZXRQaXhlbERlcHRoKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0xjZFNldFBpeGVsRGVwdGgvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RHZXRMQ0RTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkR2V0TGNkU2l6ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcbiAgc3RhdGljIExDREdldENvbXByZXNzaW9uTW9kZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0xjZENvbXByZXNzaW9uTW9kZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RHZXRaQ29tcHJlc3Npb25Nb2RlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkWkNvbXByZXNzaW9uTW9kZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy9cdFx0U2lnUGx1c05FVExDRC5jc1xyXG4gIC8vXHJcblxyXG4gIHN0YXRpYyBTZXRSZWFsVGFibGV0U3RhdGUodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0U3RhdGUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXRTdGF0ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFN0YXRlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldExvZ2ljYWxYU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRMb2dpY2FsWFNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXRMb2dpY2FsWFNpemUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRMb2dpY2FsWFNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0TG9naWNhbFlTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0TG9naWNhbFlTaXplJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldExvZ2ljYWxZU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRMb2dpY2FsWVNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRYU3RhcnQodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0WFN0YXJ0Lyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0WFN0YXJ0KCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0WFN0YXJ0JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFlTdGFydCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRZU3RhcnQvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXRZU3RhcnQoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRZU3RhcnQnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0WFN0b3Aodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0WFN0b3AvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXRYU3RvcCgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFhTdG9wJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFlTdG9wKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFlTdG9wLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0WVN0b3AoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRZU3RvcCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRGaWx0ZXJQb2ludHModikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0RmlsdGVyUG9pbnRzLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0RmlsdGVyUG9pbnRzKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0RmlsdGVyUG9pbnRzJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFRpbWluZ0FkdmFuY2Uodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0VGltaW5nQWR2YW5jZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldFRpbWluZ0FkdmFuY2UoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRUaW1pbmdBZHZhbmNlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldENvbVBvcnQodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0Q29tUG9ydC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldENvbVBvcnQoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRDb21Qb3J0JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldEJhdWRSYXRlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldEJhdWRSYXRlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0QmF1ZFJhdGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRCYXVkUmF0ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRSb3RhdGlvbih2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRSb3RhdGlvbi8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldFJvdGF0aW9uKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0Um90YXRpb24nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0VHlwZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRUeXBlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0VHlwZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFR5cGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2VydmVyVGFibGV0VHlwZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTZXJ2ZXJUYWJsZXRUeXBlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0U2VydmVyVGFibGV0VHlwZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1NlcnZlclRhYmxldFR5cGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0Q29tVGVzdCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRDb21UZXN0Lyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0Q29tVGVzdCgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldENvbVRlc3QnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0UmVzb2x1dGlvbih2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRSZXNvbHV0aW9uLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0UmVzb2x1dGlvbigpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFJlc29sdXRpb24nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgVGFibGV0Q29ubmVjdFF1ZXJ5KCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0Q29ubmVjdFF1ZXJ5JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFRhYmxldE1vZGVsTnVtYmVyKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0TW9kZWxOdW1iZXInO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgVGFibGV0U2VyaWFsTnVtYmVyKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0U2VyaWFsTnVtYmVyJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFBvcnRQYXRoKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFBvcnRQYXRoLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0TG9jYWxJbmlGaWxlUGF0aCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRMb2NhbEluaUZpbGVQYXRoLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0TW9kZWwodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0TW9kZWwvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRTZXJpYWxQb3J0Q2xvc2VEZWxheSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTZXJpYWxQb3J0Q2xvc2VEZWxheS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNlcmlhbFBvcnRDbG9zZURlbGF5KCkge1xyXG4gICAgdmFyIFByb3AgPSAnU2VyaWFsUG9ydENsb3NlRGVsYXknO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgRW5hYmxlVGFibGV0RW5jcnlwdGlvbigpIHtcclxuICAgIHZhciBQcm9wID0gJ0VuYWJsZVRhYmxldEVuY3J5cHRpb24nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0RW5jcnlwdGlvbk1vZGUoaG1vZGUsIHRtb2RlKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRFbmNyeXB0aW9uTW9kZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgaG1vZGUgKyAnLCcgKyB0bW9kZTtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldE1heExvZ0ZpbGVTaXplKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ01heExvZ0ZpbGVTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0U2lnU29ja1NlcnZlclBhdGgoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTaWdTb2NrU2VydmVyUGF0aCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRTaWdTb2NrQ2xpZW50TmFtZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1NvY2tDbGllbnROYW1lJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNpZ1NvY2tQb3J0TnVtYmVyKCkge1xyXG4gICAgdmFyIFByb3AgPSAnU2lnU29ja1BvcnROdW1iZXInO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2lnU29ja1NlcnZlclBhdGgodikge1xyXG4gICAgdmFyIFByb3AgPSAnU2lnU29ja1NlcnZlclBhdGgvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRTaWdTb2NrQ2xpZW50TmFtZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTaWdTb2NrQ2xpZW50TmFtZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFBvcnROdW1iZXIodikge1xyXG4gICAgdmFyIFByb3AgPSAnUG9ydE51bWJlci8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFNpZ1NvY2tQb3J0TnVtYmVyKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1NvY2tQb3J0TnVtYmVyLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RmlybXdhcmVSZXZpc2lvbigpIHtcclxuICAgIHZhciBQcm9wID0gJ0Zpcm13YXJlUmV2aXNpb24nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0RGF0YShzaWdTdHIpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldERhdGEnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCBzaWdTdHIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldERhdGEoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXREYXRhJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHZhciBTdHIgPSB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG5cclxuICAgIHJldHVybiBTdHIuc2xpY2UoMSwgU3RyLmxlbmd0aCAtIDEpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIE9wZW5UYWJsZXQodikge1xyXG4gICAgdmFyIFByb3AgPSAnT3BlblRhYmxldC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIENsb3NlVGFibGV0KCkge1xyXG4gICAgdmFyIFByb3AgPSAnQ2xvc2VUYWJsZXQnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBSZXNldFBhcmFtZXRlcnMoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdSZXNldFBhcmFtZXRlcnMnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdGVzdFJhd0RhdGEoKSB7XHJcbiAgICB0aGlzLk9wZW5UYWJsZXQoMSk7XHJcbiAgICB2YXIgU3RyMSA9IHRoaXMuR2V0VGFibGV0RGF0YSgpO1xyXG4gICAgdGhpcy5DbG9zZVRhYmxldCgpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFN0YXRlKHYsIGN0eCwgdHYpIHtcclxuICAgIHZhciBkZWxheTtcclxuXHJcbiAgICBpZiAodHYpIHtcclxuICAgICAgZGVsYXkgPSB0djtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlbGF5ID0gMTAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLkdldFRhYmxldFN0YXRlKCkgIT0gdikge1xyXG4gICAgICBpZiAodiA9PSAxKSB7XHJcbiAgICAgICAgaWYgKGN0eCkge1xyXG4gICAgICAgICAgdmFyIGNhbiA9IGN0eC5jYW52YXM7XHJcbiAgICAgICAgICB0aGlzLlNldERpc3BsYXlYU2l6ZShjYW4ud2lkdGgpO1xyXG4gICAgICAgICAgdGhpcy5TZXREaXNwbGF5WVNpemUoY2FuLmhlaWdodCk7XHJcbiAgICAgICAgICB0aGlzLlNpZ1dlYlNldERpc3BsYXlUYXJnZXQoY3R4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5TZXRSZWFsVGFibGV0U3RhdGUodik7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLkdldFRhYmxldFN0YXRlKCk7XHJcbiAgICAgICAgdmFyIGRhdGFSZXN1bHQgPSBkYXRhID09ICcnIHx8IGRhdGEgPT0gbnVsbCA/IDAgOiBOdW1iZXIoZGF0YSk7XHJcbiAgICAgICAgdmFyIHRtciA9IG51bGw7XHJcbiAgICAgICAgaWYgKGN0eCAmJiBkYXRhUmVzdWx0ICE9IDApIHtcclxuICAgICAgICAgIHRtciA9IHNldEludGVydmFsKCgpID0+IHRoaXMuU2lnV2ViUmVmcmVzaCgpLCBkZWxheSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRtciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdG1yO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChjdHgpIHtcclxuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY3R4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5TaWdXZWJTZXREaXNwbGF5VGFyZ2V0KG51bGwpO1xyXG4gICAgICAgIHRoaXMuU2V0UmVhbFRhYmxldFN0YXRlKHYpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn1cclxuIl19