-
Notifications
You must be signed in to change notification settings - Fork 24
/
badusb_stringToAltCodes.js
573 lines (555 loc) · 49.8 KB
/
badusb_stringToAltCodes.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
//https://github.com/flipperdevices/flipperzero-firmware/blob/dev/applications/bad_usb/bad_usb_script.c
/*
TODO:
*Add form field to toggle this.cleanInput
*this.cleanInput doesnt trim if a character is not parsed. smile + space + abc
*Display Encoding (UTF-16BE )(https://unicode-table.com/en/1F600/)
*Emoji alt codes
*Toggle to diplay a REM with what each line does.
*this.cleanInput = false doesnt find new lines
*/
class badusbStringToAltCodes {
constructor() {
this.className = 'badusbStringToAltCodes';
this.cardSpanName = `card${this.className}`;
this.formID = `generate${this.className}`;
this.cardTitle = 'String To Alt Code (BadUSB)';
this.cardCollapsed = true;
this.card = new CardTools_Card(this.cardSpanName, this.cardTitle, this.cardCollapsed);
this.form = new CardTools_Form(this.formID);
this.form_id = this.form.formID;
//this.form_id_filename = this.form.addFieldText('File Name','filename','text','Do not include ".txt" It will be added automatically.');
this.form_id_stringToConvert = this.form.addFieldTextArea('Input String', 'inputText', '', `Input your\nText\nHERE`);
//console.log(`form_id_stringToConvert: ${this.form_id_stringToConvert}`);
this.form_id_stringConverted = this.form.addFieldTextArea('Output BadUSB Code', 'outputText');
this.form_id_button_submit = this.form.addButtonsResetSubmit_Generic();
this.card.addFormCode(this.form);
this.cardCode = this.card.getCardCode(true, true);
//console.log(this.cardCode);
this.cleanInput = false;
this.safeModeEnabled = false;
}
form_object = () => document.getElementById(this.form_id);
form_object_stringToConvert = (getValue = false) => (getValue ? this.form_object().elements[this.form_id_stringToConvert].value : this.form_object().elements[this.form_id_stringToConvert]);
form_object_stringConverted = (getValue = false) => (getValue ? this.form_object().elements[this.form_id_stringConverted].value : this.form_object().elements[this.form_id_stringConverted]);
form_object_stringToConvert_setValue = (x = '', append = false) => this.form_object_stringToConvert().value = (append ? this.form_object_stringToConvert(true).trim() + x : x);
form_object_stringConverted_setValue = (x = '', append = false) => this.form_object_stringConverted().value = (append ? this.form_object_stringConverted(true).trim() + x : x);
check_trim = (x) => (this.cleanInput ? x.trim() : x);
check_replaceAll = (x, yOld, yNew) => (this.cleanInput ? x.replaceAll(yOld, yNew) : x);
check_lowercase = (x) => (this.cleanInput ? x.toLowerCase() : x);
check_uppercase = (x) => (this.cleanInput ? x.toUpperCase() : x);
renderCard() {
var card_span = document.getElementById(this.cardSpanName);
card_span.innerHTML = this.cardCode;
showHideCard(this.cardSpanName + 'BodyCollapse', '#' + this.cardSpanName + 'Body');
//submit_event(this.formID, this.precessForm);
this.form_object().addEventListener("submit", (event) => { event.preventDefault(); this.precessForm(); });
//0-255 0, 01-0255
this.unit_test();
}
unit_test() {
if (document.location.hash.length === 0) return;
let h = this.check_lowercase(this.check_trim(document.location.hash.slice(1)));
if (h != 'testing') return;
//let x = `alt 1\n\talt 101\naLt 01\nALT 101\nALT 0126`;
let x = `😀 abc`;
this.form_object_stringToConvert_setValue(x);
}
precessForm() {
let from = this.form_object_stringToConvert(true);
this.form_object_stringConverted_setValue();
from = this.check_trim(from);
from = this.clean_NewLine_Split_Trim_Lower(from);
console.log(from);
from.forEach(x => {
//let xx = this.processForm_ConvertLine_AltCode_to_Unicode(x);
let unicodeArray = this.processForm_ConvertLine_String_to_Unicode(x);
if (unicodeArray.length > 0) {
let altCodeArray = unicodeArray.map(xm => {return this.getAltCodeFromUnicode(xm.replaceAll('\\u', ''), this.safeModeEnabled)});
console.log(altCodeArray);
altCodeArray.forEach(newALTCHAR => {
let nl = this.form_object_stringConverted(true).trim().length > 0 ? '\n' : '';
this.form_object_stringConverted_setValue(`${nl}ALTCHAR ${newALTCHAR}`, true);
});
}
});
}
processForm_ConvertLine_String_to_Unicode(line) {
let ret = [];//this.toUnicodeArray(line);
[...line].forEach(c => {
let ua = this.toUnicodeArray(c);
if (ua.length == 1) {
ua = ua[0];
if (this.validUnicode(ua.replaceAll('\\u', ''))) ret.push(ua);
}
});
return ret;
}
// processForm_ConvertLine_AltCode_to_Unicode(line) {
// line = line.toString().toLowerCase().trim();
// let x = line;
// if (line.length > 3) {
// x = line;
// //ALT XXXX
// if (line.slice(0, 3) == 'alt' && line.length <= 8) {
// x = x.replaceAll('alt', '').replaceAll(' ', '');
// if (x.length > 0) return (this.validAltCode(x) ? x : 'ERROR INVALID ALTCODE');
// else return 'ERROR ' + line;
// }
// }
// // console.log(`~${line.slice(0,4)}~`);
// // console.log(`~${line.slice(3,4)}~`);
// // console.log(`~${line.length}~`);
// }
clean_NewLine_Split_Trim_Lower(inputString) {
if (!this.cleanInput) return [inputString];
let ret = [];
if (inputString.includes('\r\n')) inputString = this.check_replaceAll(inputString, '\r\n', '\n');
if (inputString.includes('\r')) inputString = this.check_replaceAll(inputString, '\r', '\n');
while (inputString.includes('\n\n')) inputString = this.check_replaceAll(inputString, '\n\n', '\n');
inputString = inputString.split('\n');
inputString.forEach(x => {
let t = this.check_trim(x).replaceAll('\t', '');
if (t.length > 0) ret.push(this.check_lowercase(t));
});
return ret;
}
validAltCode = (x) => (this.getUnicodeFromAltCode(x, this.safeModeEnabled) == '' ? false : true);
validUnicode = (x) => (this.getAltCodeFromUnicode(x, this.safeModeEnabled) == '' ? false : true);
getAltCodeFromUnicode(unicode, safeMode = true) {
unicode = unicode.toString().trim().toUpperCase();
let unicode_to_altCode_all = {
'0000': '0', '263A': '1', '263B': '2', '2665': '3', '2666': '4', '2663': '5', '2660': '6',
'2022': '0149', '25D8': '8', '25CB': '9', '25D9': '10', '2642': '11', '2640': '12', '266A': '13',
'266B': '14', '263C': '15', '25BA': '16', '25C4': '17', '2195': '18', '203C': '19', '00B6': '0182',
'00A7': '0167', '25AC': '22', '21A8': '23', '2191': '24', '2193': '25', '2192': '26', '2190': '27',
'221F': '28', '2194': '29', '25B2': '30', '25BC': '31', '0020': '032', '0021': '033', '0022': '034',
'0023': '035', '0024': '036', '0025': '037', '0026': '038', '0027': '039', '0028': '040', '0029': '041',
'002A': '042', '002B': '043', '002C': '044', '002D': '045', '002E': '046', '002F': '047', '0030': '048',
'0031': '049', '0032': '050', '0033': '051', '0034': '052', '0035': '053', '0036': '054', '0037': '055',
'0038': '056', '0039': '057', '003A': '058', '003B': '059', '003C': '060', '003D': '061', '003E': '062',
'003F': '063', '0040': '064', '0041': '065', '0042': '066', '0043': '067', '0044': '068', '0045': '069',
'0046': '070', '0047': '071', '0048': '072', '0049': '073', '004A': '074', '004B': '075', '004C': '076',
'004D': '077', '004E': '078', '004F': '079', '0050': '080', '0051': '081', '0052': '082', '0053': '083',
'0054': '084', '0055': '085', '0056': '086', '0057': '087', '0058': '088', '0059': '089', '005A': '090',
'005B': '091', '005C': '092', '005D': '093', '005E': '094', '005F': '095', '0060': '096', '0061': '097',
'0062': '098', '0063': '099', '0064': '0100', '0065': '0101', '0066': '0102', '0067': '0103', '0068': '0104',
'0069': '0105', '006A': '0106', '006B': '0107', '006C': '0108', '006D': '0109', '006E': '0110', '006F': '0111',
'0070': '0112', '0071': '0113', '0072': '0114', '0073': '0115', '0074': '0116', '0075': '0117', '0076': '0118',
'0077': '0119', '0078': '0120', '0079': '0121', '007A': '0122', '007B': '0123', '007C': '0124', '007D': '0125',
'007E': '0126', '2302': '127', '00C7': '0199', '00FC': '0252', '00E9': '0233', '00E2': '0226', '00E4': '0228',
'00E0': '0224', '00E5': '0229', '00E7': '0231', '00EA': '0234', '00EB': '0235', '00E8': '0232', '00EF': '0239',
'00EE': '0238', '00EC': '0236', '00C4': '0196', '00C5': '0197', '00C9': '0201', '00E6': '0230', '00C6': '0198',
'00F4': '0244', '00F6': '0246', '00F2': '0242', '00FB': '0251', '00F9': '0249', '00FF': '0255', '00D6': '0214',
'00DC': '0220', '00A2': '0162', '00A3': '0163', '00A5': '0165', '20A7': '158', '0192': '0131', '00E1': '0225',
'00ED': '0237', '00F3': '0243', '00FA': '0250', '00F1': '0241', '00D1': '0209', '00AA': '0170', '00BA': '0186',
'00BF': '0191', '2310': '169', '00AC': '0172', '00BD': '0189', '00BC': '0188', '00A1': '0161', '00AB': '0171',
'00BB': '0187', '2591': '176', '2592': '177', '2593': '178', '2502': '179', '2524': '180', '2561': '181',
'2562': '182', '2556': '183', '2555': '184', '2563': '185', '2551': '186', '2557': '187', '255D': '188',
'255C': '189', '255B': '190', '2510': '191', '2514': '192', '2534': '193', '252C': '194', '251C': '195',
'2500': '196', '253C': '197', '255E': '198', '255F': '199', '255A': '200', '2554': '201', '2569': '202',
'2566': '203', '2560': '204', '2550': '205', '256C': '206', '2567': '207', '2568': '208', '2564': '209',
'2565': '210', '2559': '211', '2558': '212', '2552': '213', '2553': '214', '256B': '215', '256A': '216',
'2518': '217', '250C': '218', '2588': '219', '2584': '220', '258C': '221', '2590': '222', '2580': '223',
'03B1': '224', '00DF': '0223', '0393': '226', '03C0': '227', '03A3': '228', '03C3': '229', '00B5': '0181',
'03A4': '231', '03A6': '232', '0398': '233', '03A9': '234', '03B4': '235', '221E': '236', '03C6': '237',
'03B5': '238', '2229': '239', '2261': '240', '00B1': '0177', '2265': '242', '2264': '243', '2320': '244',
'2321': '245', '00F7': '0247', '2248': '247', '00B0': '0176', '2219': '249', '00B7': '0183', '221A': '251',
'207F': '252', '00B2': '0178', '25A0': '254', '00A0': '0160', '0001': '01', '0002': '02', '0003': '03',
'0004': '04', '0005': '05', '0006': '06', '0007': '07', '0008': '08', '0009': '09', '000A': '010',
'000B': '011', '000C': '012', '000D': '013', '000E': '014', '000F': '015', '0010': '016', '0011': '017',
'0012': '018', '0013': '019', '0014': '020', '0015': '021', '0016': '022', '0017': '023', '0018': '024',
'0019': '025', '001A': '026', '001B': '027', '001C': '028', '001D': '029', '001E': '030', '001F': '031',
'007F': '0127', '20AC': '0128', '0081': '0129', '201A': '0130', '201E': '0132', '2026': '0133', '2020': '0134',
'2021': '0135', '02C6': '0136', '2030': '0137', '0160': '0138', '2039': '0139', '0152': '0140', '008D': '0141',
'017D': '0142', '008F': '0143', '0090': '0144', '2018': '0145', '2019': '0146', '201C': '0147', '201D': '0148',
'2013': '0150', '2014': '0151', '02DC': '0152', '2122': '0153', '0161': '0154', '203A': '0155', '0153': '0156',
'009D': '0157', '017E': '0158', '0178': '0159', '00A4': '0164', '00A6': '0166', '00A8': '0168', '00A9': '0169',
'00AD': '0173', '00AE': '0174', '00AF': '0175', '00B3': '0179', '00B4': '0180', '00B8': '0184', '00B9': '0185',
'00BE': '0190', '00C0': '0192', '00C1': '0193', '00C2': '0194', '00C3': '0195', '00C8': '0200', '00CA': '0202',
'00CB': '0203', '00CC': '0204', '00CD': '0205', '00CE': '0206', '00CF': '0207', '00D0': '0208', '00D2': '0210',
'00D3': '0211', '00D4': '0212', '00D5': '0213', '00D7': '0215', '00D8': '0216', '00D9': '0217', '00DA': '0218',
'00DB': '0219', '00DD': '0221', '00DE': '0222', '00E3': '0227', '00F0': '0240', '00F5': '0245', '00F8': '0248',
'00FD': '0253', '00FE': '0254', '00FF': '0255'
}
let unicode_to_altCode_safe = {
'263A': '1', '263B': '2', '2665': '3', '2666': '4', '2663': '5', '2660': '6', '2022': '0149',
'25D8': '8', '25CB': '9', '25D9': '10', '2642': '11', '2640': '12', '266A': '13', '266B': '14',
'263C': '15', '25BA': '16', '25C4': '17', '2195': '18', '203C': '19', '00B6': '0182', '00A7': '0167',
'25AC': '22', '21A8': '23', '2191': '24', '2193': '25', '2192': '26', '2190': '27', '221F': '28',
'2194': '29', '25B2': '30', '25BC': '31', '0020': '032', '0021': '033', '0022': '034', '0023': '035',
'0024': '036', '0025': '037', '0026': '038', '0027': '039', '0028': '040', '0029': '041', '002A': '042',
'002B': '043', '002C': '044', '002D': '045', '002E': '046', '002F': '047', '0030': '048', '0031': '049',
'0032': '050', '0033': '051', '0034': '052', '0035': '053', '0036': '054', '0037': '055', '0038': '056',
'0039': '057', '003A': '058', '003B': '059', '003C': '060', '003D': '061', '003E': '062', '003F': '063',
'0040': '064', '0041': '065', '0042': '066', '0043': '067', '0044': '068', '0045': '069', '0046': '070',
'0047': '071', '0048': '072', '0049': '073', '004A': '074', '004B': '075', '004C': '076', '004D': '077',
'004E': '078', '004F': '079', '0050': '080', '0051': '081', '0052': '082', '0053': '083', '0054': '084',
'0055': '085', '0056': '086', '0057': '087', '0058': '088', '0059': '089', '005A': '090', '005B': '091',
'005C': '092', '005D': '093', '005E': '094', '005F': '095', '0060': '096', '0061': '097', '0062': '098',
'0063': '099', '0064': '0100', '0065': '0101', '0066': '0102', '0067': '0103', '0068': '0104', '0069': '0105',
'006A': '0106', '006B': '0107', '006C': '0108', '006D': '0109', '006E': '0110', '006F': '0111', '0070': '0112',
'0071': '0113', '0072': '0114', '0073': '0115', '0074': '0116', '0075': '0117', '0076': '0118', '0077': '0119',
'0078': '0120', '0079': '0121', '007A': '0122', '007B': '0123', '007C': '0124', '007D': '0125', '007E': '0126',
'2302': '127', '00C7': '0199', '00FC': '0252', '00E9': '0233', '00E2': '0226', '00E4': '0228', '00E0': '0224',
'00E5': '0229', '00E7': '0231', '00EA': '0234', '00EB': '0235', '00E8': '0232', '00EF': '0239', '00EE': '0238',
'00EC': '0236', '00C4': '0196', '00C5': '0197', '00C9': '0201', '00E6': '0230', '00C6': '0198', '00F4': '0244',
'00F6': '0246', '00F2': '0242', '00FB': '0251', '00F9': '0249', '00FF': '0255', '00D6': '0214', '00DC': '0220',
'00A2': '0162', '00A3': '0163', '00A5': '0165', '20A7': '158', '0192': '0131', '00E1': '0225', '00ED': '0237',
'00F3': '0243', '00FA': '0250', '00F1': '0241', '00D1': '0209', '00AA': '0170', '00BA': '0186', '00BF': '0191',
'2310': '169', '00AC': '0172', '00BD': '0189', '00BC': '0188', '00A1': '0161', '00AB': '0171', '00BB': '0187',
'2591': '176', '2592': '177', '2593': '178', '2502': '179', '2524': '180', '2561': '181', '2562': '182',
'2556': '183', '2555': '184', '2563': '185', '2551': '186', '2557': '187', '255D': '188', '255C': '189',
'255B': '190', '2510': '191', '2514': '192', '2534': '193', '252C': '194', '251C': '195', '2500': '196',
'253C': '197', '255E': '198', '255F': '199', '255A': '200', '2554': '201', '2569': '202', '2566': '203',
'2560': '204', '2550': '205', '256C': '206', '2567': '207', '2568': '208', '2564': '209', '2565': '210',
'2559': '211', '2558': '212', '2552': '213', '2553': '214', '256B': '215', '256A': '216', '2518': '217',
'250C': '218', '2588': '219', '2584': '220', '258C': '221', '2590': '222', '2580': '223', '03B1': '224',
'00DF': '0223', '0393': '226', '03C0': '227', '03A3': '228', '03C3': '229', '00B5': '0181', '03A4': '231',
'03A6': '232', '0398': '233', '03A9': '234', '03B4': '235', '221E': '236', '03C6': '237', '03B5': '238',
'2229': '239', '2261': '240', '00B1': '0177', '2265': '242', '2264': '243', '2320': '244', '2321': '245',
'00F7': '0247', '2248': '247', '00B0': '0176', '2219': '249', '00B7': '0183', '221A': '251', '207F': '252',
'00B2': '0178', '25A0': '254', '00A0': '0160', '20AC': '0128', '201A': '0130', '201E': '0132', '2026': '0133',
'2020': '0134', '2021': '0135', '02C6': '0136', '2030': '0137', '0160': '0138', '2039': '0139', '0152': '0140',
'017D': '0142', '2018': '0145', '2019': '0146', '201C': '0147', '201D': '0148', '2013': '0150', '2014': '0151',
'02DC': '0152', '2122': '0153', '0161': '0154', '203A': '0155', '0153': '0156', '017E': '0158', '0178': '0159',
'00A4': '0164', '00A6': '0166', '00A8': '0168', '00A9': '0169', '00AD': '0173', '00AE': '0174', '00AF': '0175',
'00B3': '0179', '00B4': '0180', '00B8': '0184', '00B9': '0185', '00BE': '0190', '00C0': '0192', '00C1': '0193',
'00C2': '0194', '00C3': '0195', '00C8': '0200', '00CA': '0202', '00CB': '0203', '00CC': '0204', '00CD': '0205',
'00CE': '0206', '00CF': '0207', '00D0': '0208', '00D2': '0210', '00D3': '0211', '00D4': '0212', '00D5': '0213',
'00D7': '0215', '00D8': '0216', '00D9': '0217', '00DA': '0218', '00DB': '0219', '00DD': '0221', '00DE': '0222',
'00E3': '0227', '00F0': '0240', '00F5': '0245', '00F8': '0248', '00FD': '0253', '00FE': '0254', '00FF': '0255'
}
let ret = '';
let valid_unicode_all = unicode in unicode_to_altCode_all;
let valid_unicode_safe = unicode in unicode_to_altCode_safe;
let valid_unicode = safeMode ? valid_unicode_safe : valid_unicode_all;
if (!valid_unicode) return '';
ret = safeMode ? unicode_to_altCode_safe[unicode] : unicode_to_altCode_all[unicode];
return ret;
}
getUnicodeFromAltCode(altcode, safeMode = true, uFormat = true) {
let altCode_to_unicode_all = {
'0': '0000', '1': '263A', '2': '263B', '3': '2665', '4': '2666', '5': '2663', '6': '2660',
'7': '2022', '8': '25D8', '9': '25CB', '10': '25D9', '11': '2642', '12': '2640', '13': '266A',
'14': '266B', '15': '263C', '16': '25BA', '17': '25C4', '18': '2195', '19': '203C', '20': '00B6',
'21': '00A7', '22': '25AC', '23': '21A8', '24': '2191', '25': '2193', '26': '2192', '27': '2190',
'28': '221F', '29': '2194', '30': '25B2', '31': '25BC', '32': '0020', '33': '0021', '34': '0022',
'35': '0023', '36': '0024', '37': '0025', '38': '0026', '39': '0027', '40': '0028', '41': '0029',
'42': '002A', '43': '002B', '44': '002C', '45': '002D', '46': '002E', '47': '002F', '48': '0030',
'49': '0031', '50': '0032', '51': '0033', '52': '0034', '53': '0035', '54': '0036', '55': '0037',
'56': '0038', '57': '0039', '58': '003A', '59': '003B', '60': '003C', '61': '003D', '62': '003E',
'63': '003F', '64': '0040', '65': '0041', '66': '0042', '67': '0043', '68': '0044', '69': '0045',
'70': '0046', '71': '0047', '72': '0048', '73': '0049', '74': '004A', '75': '004B', '76': '004C',
'77': '004D', '78': '004E', '79': '004F', '80': '0050', '81': '0051', '82': '0052', '83': '0053',
'84': '0054', '85': '0055', '86': '0056', '87': '0057', '88': '0058', '89': '0059', '90': '005A',
'91': '005B', '92': '005C', '93': '005D', '94': '005E', '95': '005F', '96': '0060', '97': '0061',
'98': '0062', '99': '0063', '100': '0064', '101': '0065', '102': '0066', '103': '0067', '104': '0068',
'105': '0069', '106': '006A', '107': '006B', '108': '006C', '109': '006D', '110': '006E', '111': '006F',
'112': '0070', '113': '0071', '114': '0072', '115': '0073', '116': '0074', '117': '0075', '118': '0076',
'119': '0077', '120': '0078', '121': '0079', '122': '007A', '123': '007B', '124': '007C', '125': '007D',
'126': '007E', '127': '2302', '128': '00C7', '129': '00FC', '130': '00E9', '131': '00E2', '132': '00E4',
'133': '00E0', '134': '00E5', '135': '00E7', '136': '00EA', '137': '00EB', '138': '00E8', '139': '00EF',
'140': '00EE', '141': '00EC', '142': '00C4', '143': '00C5', '144': '00C9', '145': '00E6', '146': '00C6',
'147': '00F4', '148': '00F6', '149': '00F2', '150': '00FB', '151': '00F9', '152': '00FF', '153': '00D6',
'154': '00DC', '155': '00A2', '156': '00A3', '157': '00A5', '158': '20A7', '159': '0192', '160': '00E1',
'161': '00ED', '162': '00F3', '163': '00FA', '164': '00F1', '165': '00D1', '166': '00AA', '167': '00BA',
'168': '00BF', '169': '2310', '170': '00AC', '171': '00BD', '172': '00BC', '173': '00A1', '174': '00AB',
'175': '00BB', '176': '2591', '177': '2592', '178': '2593', '179': '2502', '180': '2524', '181': '2561',
'182': '2562', '183': '2556', '184': '2555', '185': '2563', '186': '2551', '187': '2557', '188': '255D',
'189': '255C', '190': '255B', '191': '2510', '192': '2514', '193': '2534', '194': '252C', '195': '251C',
'196': '2500', '197': '253C', '198': '255E', '199': '255F', '200': '255A', '201': '2554', '202': '2569',
'203': '2566', '204': '2560', '205': '2550', '206': '256C', '207': '2567', '208': '2568', '209': '2564',
'210': '2565', '211': '2559', '212': '2558', '213': '2552', '214': '2553', '215': '256B', '216': '256A',
'217': '2518', '218': '250C', '219': '2588', '220': '2584', '221': '258C', '222': '2590', '223': '2580',
'224': '03B1', '225': '00DF', '226': '0393', '227': '03C0', '228': '03A3', '229': '03C3', '230': '00B5',
'231': '03A4', '232': '03A6', '233': '0398', '234': '03A9', '235': '03B4', '236': '221E', '237': '03C6',
'238': '03B5', '239': '2229', '240': '2261', '241': '00B1', '242': '2265', '243': '2264', '244': '2320',
'245': '2321', '246': '00F7', '247': '2248', '248': '00B0', '249': '2219', '250': '00B7', '251': '221A',
'252': '207F', '253': '00B2', '254': '25A0', '255': '00A0', '01': '0001', '02': '0002', '03': '0003',
'04': '0004', '05': '0005', '06': '0006', '07': '0007', '08': '0008', '09': '0009', '010': '000A',
'011': '000B', '012': '000C', '013': '000D', '014': '000E', '015': '000F', '016': '0010', '017': '0011',
'018': '0012', '019': '0013', '020': '0014', '021': '0015', '022': '0016', '023': '0017', '024': '0018',
'025': '0019', '026': '001A', '027': '001B', '028': '001C', '029': '001D', '030': '001E', '031': '001F',
'032': '0020', '033': '0021', '034': '0022', '035': '0023', '036': '0024', '037': '0025', '038': '0026',
'039': '0027', '040': '0028', '041': '0029', '042': '002A', '043': '002B', '044': '002C', '045': '002D',
'046': '002E', '047': '002F', '048': '0030', '049': '0031', '050': '0032', '051': '0033', '052': '0034',
'053': '0035', '054': '0036', '055': '0037', '056': '0038', '057': '0039', '058': '003A', '059': '003B',
'060': '003C', '061': '003D', '062': '003E', '063': '003F', '064': '0040', '065': '0041', '066': '0042',
'067': '0043', '068': '0044', '069': '0045', '070': '0046', '071': '0047', '072': '0048', '073': '0049',
'074': '004A', '075': '004B', '076': '004C', '077': '004D', '078': '004E', '079': '004F', '080': '0050',
'081': '0051', '082': '0052', '083': '0053', '084': '0054', '085': '0055', '086': '0056', '087': '0057',
'088': '0058', '089': '0059', '090': '005A', '091': '005B', '092': '005C', '093': '005D', '094': '005E',
'095': '005F', '096': '0060', '097': '0061', '098': '0062', '099': '0063', '0100': '0064', '0101': '0065',
'0102': '0066', '0103': '0067', '0104': '0068', '0105': '0069', '0106': '006A', '0107': '006B', '0108': '006C',
'0109': '006D', '0110': '006E', '0111': '006F', '0112': '0070', '0113': '0071', '0114': '0072', '0115': '0073',
'0116': '0074', '0117': '0075', '0118': '0076', '0119': '0077', '0120': '0078', '0121': '0079', '0122': '007A',
'0123': '007B', '0124': '007C', '0125': '007D', '0126': '007E', '0127': '007F', '0128': '20AC', '0129': '0081',
'0130': '201A', '0131': '0192', '0132': '201E', '0133': '2026', '0134': '2020', '0135': '2021', '0136': '02C6',
'0137': '2030', '0138': '0160', '0139': '2039', '0140': '0152', '0141': '008D', '0142': '017D', '0143': '008F',
'0144': '0090', '0145': '2018', '0146': '2019', '0147': '201C', '0148': '201D', '0149': '2022', '0150': '2013',
'0151': '2014', '0152': '02DC', '0153': '2122', '0154': '0161', '0155': '203A', '0156': '0153', '0157': '009D',
'0158': '017E', '0159': '0178', '0160': '00A0', '0161': '00A1', '0162': '00A2', '0163': '00A3', '0164': '00A4',
'0165': '00A5', '0166': '00A6', '0167': '00A7', '0168': '00A8', '0169': '00A9', '0170': '00AA', '0171': '00AB',
'0172': '00AC', '0173': '00AD', '0174': '00AE', '0175': '00AF', '0176': '00B0', '0177': '00B1', '0178': '00B2',
'0179': '00B3', '0180': '00B4', '0181': '00B5', '0182': '00B6', '0183': '00B7', '0184': '00B8', '0185': '00B9',
'0186': '00BA', '0187': '00BB', '0188': '00BC', '0189': '00BD', '0190': '00BE', '0191': '00BF', '0192': '00C0',
'0193': '00C1', '0194': '00C2', '0195': '00C3', '0196': '00C4', '0197': '00C5', '0198': '00C6', '0199': '00C7',
'0200': '00C8', '0201': '00C9', '0202': '00CA', '0203': '00CB', '0204': '00CC', '0205': '00CD', '0206': '00CE',
'0207': '00CF', '0208': '00D0', '0209': '00D1', '0210': '00D2', '0211': '00D3', '0212': '00D4', '0213': '00D5',
'0214': '00D6', '0215': '00D7', '0216': '00D8', '0217': '00D9', '0218': '00DA', '0219': '00DB', '0220': '00DC',
'0221': '00DD', '0222': '00DE', '0223': '00DF', '0224': '00E0', '0225': '00E1', '0226': '00E2', '0227': '00E3',
'0228': '00E4', '0229': '00E5', '0230': '00E6', '0231': '00E7', '0232': '00E8', '0233': '00E9', '0234': '00EA',
'0235': '00EB', '0236': '00EC', '0237': '00ED', '0238': '00EE', '0239': '00EF', '0240': '00F0', '0241': '00F1',
'0242': '00F2', '0243': '00F3', '0244': '00F4', '0245': '00F5', '0246': '00F6', '0247': '00F7', '0248': '00F8',
'0249': '00F9', '0250': '00FA', '0251': '00FB', '0252': '00FC', '0253': '00FD', '0254': '00FE', '0255': '00FF'
}
let altCode_to_unicode_safe = {
'1': '263A', '2': '263B', '3': '2665', '4': '2666', '5': '2663', '6': '2660', '7': '2022',
'8': '25D8', '9': '25CB', '10': '25D9', '11': '2642', '12': '2640', '13': '266A', '14': '266B',
'15': '263C', '16': '25BA', '17': '25C4', '18': '2195', '19': '203C', '20': '00B6', '21': '00A7',
'22': '25AC', '23': '21A8', '24': '2191', '25': '2193', '26': '2192', '27': '2190', '28': '221F',
'29': '2194', '30': '25B2', '31': '25BC', '32': '0020', '33': '0021', '34': '0022', '35': '0023',
'36': '0024', '37': '0025', '38': '0026', '39': '0027', '40': '0028', '41': '0029', '42': '002A',
'43': '002B', '44': '002C', '45': '002D', '46': '002E', '47': '002F', '48': '0030', '49': '0031',
'50': '0032', '51': '0033', '52': '0034', '53': '0035', '54': '0036', '55': '0037', '56': '0038',
'57': '0039', '58': '003A', '59': '003B', '60': '003C', '61': '003D', '62': '003E', '63': '003F',
'64': '0040', '65': '0041', '66': '0042', '67': '0043', '68': '0044', '69': '0045', '70': '0046',
'71': '0047', '72': '0048', '73': '0049', '74': '004A', '75': '004B', '76': '004C', '77': '004D',
'78': '004E', '79': '004F', '80': '0050', '81': '0051', '82': '0052', '83': '0053', '84': '0054',
'85': '0055', '86': '0056', '87': '0057', '88': '0058', '89': '0059', '90': '005A', '91': '005B',
'92': '005C', '93': '005D', '94': '005E', '95': '005F', '96': '0060', '97': '0061', '98': '0062',
'99': '0063', '100': '0064', '101': '0065', '102': '0066', '103': '0067', '104': '0068', '105': '0069',
'106': '006A', '107': '006B', '108': '006C', '109': '006D', '110': '006E', '111': '006F', '112': '0070',
'113': '0071', '114': '0072', '115': '0073', '116': '0074', '117': '0075', '118': '0076', '119': '0077',
'120': '0078', '121': '0079', '122': '007A', '123': '007B', '124': '007C', '125': '007D', '126': '007E',
'127': '2302', '128': '00C7', '129': '00FC', '130': '00E9', '131': '00E2', '132': '00E4', '133': '00E0',
'134': '00E5', '135': '00E7', '136': '00EA', '137': '00EB', '138': '00E8', '139': '00EF', '140': '00EE',
'141': '00EC', '142': '00C4', '143': '00C5', '144': '00C9', '145': '00E6', '146': '00C6', '147': '00F4',
'148': '00F6', '149': '00F2', '150': '00FB', '151': '00F9', '152': '00FF', '153': '00D6', '154': '00DC',
'155': '00A2', '156': '00A3', '157': '00A5', '158': '20A7', '159': '0192', '160': '00E1', '161': '00ED',
'162': '00F3', '163': '00FA', '164': '00F1', '165': '00D1', '166': '00AA', '167': '00BA', '168': '00BF',
'169': '2310', '170': '00AC', '171': '00BD', '172': '00BC', '173': '00A1', '174': '00AB', '175': '00BB',
'176': '2591', '177': '2592', '178': '2593', '179': '2502', '180': '2524', '181': '2561', '182': '2562',
'183': '2556', '184': '2555', '185': '2563', '186': '2551', '187': '2557', '188': '255D', '189': '255C',
'190': '255B', '191': '2510', '192': '2514', '193': '2534', '194': '252C', '195': '251C', '196': '2500',
'197': '253C', '198': '255E', '199': '255F', '200': '255A', '201': '2554', '202': '2569', '203': '2566',
'204': '2560', '205': '2550', '206': '256C', '207': '2567', '208': '2568', '209': '2564', '210': '2565',
'211': '2559', '212': '2558', '213': '2552', '214': '2553', '215': '256B', '216': '256A', '217': '2518',
'218': '250C', '219': '2588', '220': '2584', '221': '258C', '222': '2590', '223': '2580', '224': '03B1',
'225': '00DF', '226': '0393', '227': '03C0', '228': '03A3', '229': '03C3', '230': '00B5', '231': '03A4',
'232': '03A6', '233': '0398', '234': '03A9', '235': '03B4', '236': '221E', '237': '03C6', '238': '03B5',
'239': '2229', '240': '2261', '241': '00B1', '242': '2265', '243': '2264', '244': '2320', '245': '2321',
'246': '00F7', '247': '2248', '248': '00B0', '249': '2219', '250': '00B7', '251': '221A', '252': '207F',
'253': '00B2', '254': '25A0', '255': '00A0', '032': '0020', '033': '0021', '034': '0022', '035': '0023',
'036': '0024', '037': '0025', '038': '0026', '039': '0027', '040': '0028', '041': '0029', '042': '002A',
'043': '002B', '044': '002C', '045': '002D', '046': '002E', '047': '002F', '048': '0030', '049': '0031',
'050': '0032', '051': '0033', '052': '0034', '053': '0035', '054': '0036', '055': '0037', '056': '0038',
'057': '0039', '058': '003A', '059': '003B', '060': '003C', '061': '003D', '062': '003E', '063': '003F',
'064': '0040', '065': '0041', '066': '0042', '067': '0043', '068': '0044', '069': '0045', '070': '0046',
'071': '0047', '072': '0048', '073': '0049', '074': '004A', '075': '004B', '076': '004C', '077': '004D',
'078': '004E', '079': '004F', '080': '0050', '081': '0051', '082': '0052', '083': '0053', '084': '0054',
'085': '0055', '086': '0056', '087': '0057', '088': '0058', '089': '0059', '090': '005A', '091': '005B',
'092': '005C', '093': '005D', '094': '005E', '095': '005F', '096': '0060', '097': '0061', '098': '0062',
'099': '0063', '0100': '0064', '0101': '0065', '0102': '0066', '0103': '0067', '0104': '0068', '0105': '0069',
'0106': '006A', '0107': '006B', '0108': '006C', '0109': '006D', '0110': '006E', '0111': '006F', '0112': '0070',
'0113': '0071', '0114': '0072', '0115': '0073', '0116': '0074', '0117': '0075', '0118': '0076', '0119': '0077',
'0120': '0078', '0121': '0079', '0122': '007A', '0123': '007B', '0124': '007C', '0125': '007D', '0126': '007E',
'0128': '20AC', '0130': '201A', '0131': '0192', '0132': '201E', '0133': '2026', '0134': '2020', '0135': '2021',
'0136': '02C6', '0137': '2030', '0138': '0160', '0139': '2039', '0140': '0152', '0142': '017D', '0145': '2018',
'0146': '2019', '0147': '201C', '0148': '201D', '0149': '2022', '0150': '2013', '0151': '2014', '0152': '02DC',
'0153': '2122', '0154': '0161', '0155': '203A', '0156': '0153', '0158': '017E', '0159': '0178', '0160': '00A0',
'0161': '00A1', '0162': '00A2', '0163': '00A3', '0164': '00A4', '0165': '00A5', '0166': '00A6', '0167': '00A7',
'0168': '00A8', '0169': '00A9', '0170': '00AA', '0171': '00AB', '0172': '00AC', '0173': '00AD', '0174': '00AE',
'0175': '00AF', '0176': '00B0', '0177': '00B1', '0178': '00B2', '0179': '00B3', '0180': '00B4', '0181': '00B5',
'0182': '00B6', '0183': '00B7', '0184': '00B8', '0185': '00B9', '0186': '00BA', '0187': '00BB', '0188': '00BC',
'0189': '00BD', '0190': '00BE', '0191': '00BF', '0192': '00C0', '0193': '00C1', '0194': '00C2', '0195': '00C3',
'0196': '00C4', '0197': '00C5', '0198': '00C6', '0199': '00C7', '0200': '00C8', '0201': '00C9', '0202': '00CA',
'0203': '00CB', '0204': '00CC', '0205': '00CD', '0206': '00CE', '0207': '00CF', '0208': '00D0', '0209': '00D1',
'0210': '00D2', '0211': '00D3', '0212': '00D4', '0213': '00D5', '0214': '00D6', '0215': '00D7', '0216': '00D8',
'0217': '00D9', '0218': '00DA', '0219': '00DB', '0220': '00DC', '0221': '00DD', '0222': '00DE', '0223': '00DF',
'0224': '00E0', '0225': '00E1', '0226': '00E2', '0227': '00E3', '0228': '00E4', '0229': '00E5', '0230': '00E6',
'0231': '00E7', '0232': '00E8', '0233': '00E9', '0234': '00EA', '0235': '00EB', '0236': '00EC', '0237': '00ED',
'0238': '00EE', '0239': '00EF', '0240': '00F0', '0241': '00F1', '0242': '00F2', '0243': '00F3', '0244': '00F4',
'0245': '00F5', '0246': '00F6', '0247': '00F7', '0248': '00F8', '0249': '00F9', '0250': '00FA', '0251': '00FB',
'0252': '00FC', '0253': '00FD', '0254': '00FE', '0255': '00FF'
}
let altCode_to_unicode_all_unicodeOut = {
'0': '\u0000', '1': '\u263A', '2': '\u263B', '3': '\u2665', '4': '\u2666', '5': '\u2663', '6': '\u2660',
'7': '\u2022', '8': '\u25D8', '9': '\u25CB', '10': '\u25D9', '11': '\u2642', '12': '\u2640', '13': '\u266A',
'14': '\u266B', '15': '\u263C', '16': '\u25BA', '17': '\u25C4', '18': '\u2195', '19': '\u203C', '20': '\u00B6',
'21': '\u00A7', '22': '\u25AC', '23': '\u21A8', '24': '\u2191', '25': '\u2193', '26': '\u2192', '27': '\u2190',
'28': '\u221F', '29': '\u2194', '30': '\u25B2', '31': '\u25BC', '32': '\u0020', '33': '\u0021', '34': '\u0022',
'35': '\u0023', '36': '\u0024', '37': '\u0025', '38': '\u0026', '39': '\u0027', '40': '\u0028', '41': '\u0029',
'42': '\u002A', '43': '\u002B', '44': '\u002C', '45': '\u002D', '46': '\u002E', '47': '\u002F', '48': '\u0030',
'49': '\u0031', '50': '\u0032', '51': '\u0033', '52': '\u0034', '53': '\u0035', '54': '\u0036', '55': '\u0037',
'56': '\u0038', '57': '\u0039', '58': '\u003A', '59': '\u003B', '60': '\u003C', '61': '\u003D', '62': '\u003E',
'63': '\u003F', '64': '\u0040', '65': '\u0041', '66': '\u0042', '67': '\u0043', '68': '\u0044', '69': '\u0045',
'70': '\u0046', '71': '\u0047', '72': '\u0048', '73': '\u0049', '74': '\u004A', '75': '\u004B', '76': '\u004C',
'77': '\u004D', '78': '\u004E', '79': '\u004F', '80': '\u0050', '81': '\u0051', '82': '\u0052', '83': '\u0053',
'84': '\u0054', '85': '\u0055', '86': '\u0056', '87': '\u0057', '88': '\u0058', '89': '\u0059', '90': '\u005A',
'91': '\u005B', '92': '\u005C', '93': '\u005D', '94': '\u005E', '95': '\u005F', '96': '\u0060', '97': '\u0061',
'98': '\u0062', '99': '\u0063', '100': '\u0064', '101': '\u0065', '102': '\u0066', '103': '\u0067', '104': '\u0068',
'105': '\u0069', '106': '\u006A', '107': '\u006B', '108': '\u006C', '109': '\u006D', '110': '\u006E', '111': '\u006F',
'112': '\u0070', '113': '\u0071', '114': '\u0072', '115': '\u0073', '116': '\u0074', '117': '\u0075', '118': '\u0076',
'119': '\u0077', '120': '\u0078', '121': '\u0079', '122': '\u007A', '123': '\u007B', '124': '\u007C', '125': '\u007D',
'126': '\u007E', '127': '\u2302', '128': '\u00C7', '129': '\u00FC', '130': '\u00E9', '131': '\u00E2', '132': '\u00E4',
'133': '\u00E0', '134': '\u00E5', '135': '\u00E7', '136': '\u00EA', '137': '\u00EB', '138': '\u00E8', '139': '\u00EF',
'140': '\u00EE', '141': '\u00EC', '142': '\u00C4', '143': '\u00C5', '144': '\u00C9', '145': '\u00E6', '146': '\u00C6',
'147': '\u00F4', '148': '\u00F6', '149': '\u00F2', '150': '\u00FB', '151': '\u00F9', '152': '\u00FF', '153': '\u00D6',
'154': '\u00DC', '155': '\u00A2', '156': '\u00A3', '157': '\u00A5', '158': '\u20A7', '159': '\u0192', '160': '\u00E1',
'161': '\u00ED', '162': '\u00F3', '163': '\u00FA', '164': '\u00F1', '165': '\u00D1', '166': '\u00AA', '167': '\u00BA',
'168': '\u00BF', '169': '\u2310', '170': '\u00AC', '171': '\u00BD', '172': '\u00BC', '173': '\u00A1', '174': '\u00AB',
'175': '\u00BB', '176': '\u2591', '177': '\u2592', '178': '\u2593', '179': '\u2502', '180': '\u2524', '181': '\u2561',
'182': '\u2562', '183': '\u2556', '184': '\u2555', '185': '\u2563', '186': '\u2551', '187': '\u2557', '188': '\u255D',
'189': '\u255C', '190': '\u255B', '191': '\u2510', '192': '\u2514', '193': '\u2534', '194': '\u252C', '195': '\u251C',
'196': '\u2500', '197': '\u253C', '198': '\u255E', '199': '\u255F', '200': '\u255A', '201': '\u2554', '202': '\u2569',
'203': '\u2566', '204': '\u2560', '205': '\u2550', '206': '\u256C', '207': '\u2567', '208': '\u2568', '209': '\u2564',
'210': '\u2565', '211': '\u2559', '212': '\u2558', '213': '\u2552', '214': '\u2553', '215': '\u256B', '216': '\u256A',
'217': '\u2518', '218': '\u250C', '219': '\u2588', '220': '\u2584', '221': '\u258C', '222': '\u2590', '223': '\u2580',
'224': '\u03B1', '225': '\u00DF', '226': '\u0393', '227': '\u03C0', '228': '\u03A3', '229': '\u03C3', '230': '\u00B5',
'231': '\u03A4', '232': '\u03A6', '233': '\u0398', '234': '\u03A9', '235': '\u03B4', '236': '\u221E', '237': '\u03C6',
'238': '\u03B5', '239': '\u2229', '240': '\u2261', '241': '\u00B1', '242': '\u2265', '243': '\u2264', '244': '\u2320',
'245': '\u2321', '246': '\u00F7', '247': '\u2248', '248': '\u00B0', '249': '\u2219', '250': '\u00B7', '251': '\u221A',
'252': '\u207F', '253': '\u00B2', '254': '\u25A0', '255': '\u00A0', '01': '\u0001', '02': '\u0002', '03': '\u0003',
'04': '\u0004', '05': '\u0005', '06': '\u0006', '07': '\u0007', '08': '\u0008', '09': '\u0009', '010': '\u000A',
'011': '\u000B', '012': '\u000C', '013': '\u000D', '014': '\u000E', '015': '\u000F', '016': '\u0010', '017': '\u0011',
'018': '\u0012', '019': '\u0013', '020': '\u0014', '021': '\u0015', '022': '\u0016', '023': '\u0017', '024': '\u0018',
'025': '\u0019', '026': '\u001A', '027': '\u001B', '028': '\u001C', '029': '\u001D', '030': '\u001E', '031': '\u001F',
'032': '\u0020', '033': '\u0021', '034': '\u0022', '035': '\u0023', '036': '\u0024', '037': '\u0025', '038': '\u0026',
'039': '\u0027', '040': '\u0028', '041': '\u0029', '042': '\u002A', '043': '\u002B', '044': '\u002C', '045': '\u002D',
'046': '\u002E', '047': '\u002F', '048': '\u0030', '049': '\u0031', '050': '\u0032', '051': '\u0033', '052': '\u0034',
'053': '\u0035', '054': '\u0036', '055': '\u0037', '056': '\u0038', '057': '\u0039', '058': '\u003A', '059': '\u003B',
'060': '\u003C', '061': '\u003D', '062': '\u003E', '063': '\u003F', '064': '\u0040', '065': '\u0041', '066': '\u0042',
'067': '\u0043', '068': '\u0044', '069': '\u0045', '070': '\u0046', '071': '\u0047', '072': '\u0048', '073': '\u0049',
'074': '\u004A', '075': '\u004B', '076': '\u004C', '077': '\u004D', '078': '\u004E', '079': '\u004F', '080': '\u0050',
'081': '\u0051', '082': '\u0052', '083': '\u0053', '084': '\u0054', '085': '\u0055', '086': '\u0056', '087': '\u0057',
'088': '\u0058', '089': '\u0059', '090': '\u005A', '091': '\u005B', '092': '\u005C', '093': '\u005D', '094': '\u005E',
'095': '\u005F', '096': '\u0060', '097': '\u0061', '098': '\u0062', '099': '\u0063', '0100': '\u0064', '0101': '\u0065',
'0102': '\u0066', '0103': '\u0067', '0104': '\u0068', '0105': '\u0069', '0106': '\u006A', '0107': '\u006B', '0108': '\u006C',
'0109': '\u006D', '0110': '\u006E', '0111': '\u006F', '0112': '\u0070', '0113': '\u0071', '0114': '\u0072', '0115': '\u0073',
'0116': '\u0074', '0117': '\u0075', '0118': '\u0076', '0119': '\u0077', '0120': '\u0078', '0121': '\u0079', '0122': '\u007A',
'0123': '\u007B', '0124': '\u007C', '0125': '\u007D', '0126': '\u007E', '0127': '\u007F', '0128': '\u20AC', '0129': '\u0081',
'0130': '\u201A', '0131': '\u0192', '0132': '\u201E', '0133': '\u2026', '0134': '\u2020', '0135': '\u2021', '0136': '\u02C6',
'0137': '\u2030', '0138': '\u0160', '0139': '\u2039', '0140': '\u0152', '0141': '\u008D', '0142': '\u017D', '0143': '\u008F',
'0144': '\u0090', '0145': '\u2018', '0146': '\u2019', '0147': '\u201C', '0148': '\u201D', '0149': '\u2022', '0150': '\u2013',
'0151': '\u2014', '0152': '\u02DC', '0153': '\u2122', '0154': '\u0161', '0155': '\u203A', '0156': '\u0153', '0157': '\u009D',
'0158': '\u017E', '0159': '\u0178', '0160': '\u00A0', '0161': '\u00A1', '0162': '\u00A2', '0163': '\u00A3', '0164': '\u00A4',
'0165': '\u00A5', '0166': '\u00A6', '0167': '\u00A7', '0168': '\u00A8', '0169': '\u00A9', '0170': '\u00AA', '0171': '\u00AB',
'0172': '\u00AC', '0173': '\u00AD', '0174': '\u00AE', '0175': '\u00AF', '0176': '\u00B0', '0177': '\u00B1', '0178': '\u00B2',
'0179': '\u00B3', '0180': '\u00B4', '0181': '\u00B5', '0182': '\u00B6', '0183': '\u00B7', '0184': '\u00B8', '0185': '\u00B9',
'0186': '\u00BA', '0187': '\u00BB', '0188': '\u00BC', '0189': '\u00BD', '0190': '\u00BE', '0191': '\u00BF', '0192': '\u00C0',
'0193': '\u00C1', '0194': '\u00C2', '0195': '\u00C3', '0196': '\u00C4', '0197': '\u00C5', '0198': '\u00C6', '0199': '\u00C7',
'0200': '\u00C8', '0201': '\u00C9', '0202': '\u00CA', '0203': '\u00CB', '0204': '\u00CC', '0205': '\u00CD', '0206': '\u00CE',
'0207': '\u00CF', '0208': '\u00D0', '0209': '\u00D1', '0210': '\u00D2', '0211': '\u00D3', '0212': '\u00D4', '0213': '\u00D5',
'0214': '\u00D6', '0215': '\u00D7', '0216': '\u00D8', '0217': '\u00D9', '0218': '\u00DA', '0219': '\u00DB', '0220': '\u00DC',
'0221': '\u00DD', '0222': '\u00DE', '0223': '\u00DF', '0224': '\u00E0', '0225': '\u00E1', '0226': '\u00E2', '0227': '\u00E3',
'0228': '\u00E4', '0229': '\u00E5', '0230': '\u00E6', '0231': '\u00E7', '0232': '\u00E8', '0233': '\u00E9', '0234': '\u00EA',
'0235': '\u00EB', '0236': '\u00EC', '0237': '\u00ED', '0238': '\u00EE', '0239': '\u00EF', '0240': '\u00F0', '0241': '\u00F1',
'0242': '\u00F2', '0243': '\u00F3', '0244': '\u00F4', '0245': '\u00F5', '0246': '\u00F6', '0247': '\u00F7', '0248': '\u00F8',
'0249': '\u00F9', '0250': '\u00FA', '0251': '\u00FB', '0252': '\u00FC', '0253': '\u00FD', '0254': '\u00FE', '0255': '\u00FF'
}
let altCode_to_unicode_safe_unicodeOut = {
'1': '\u263A', '2': '\u263B', '3': '\u2665', '4': '\u2666', '5': '\u2663', '6': '\u2660', '7': '\u2022',
'8': '\u25D8', '9': '\u25CB', '10': '\u25D9', '11': '\u2642', '12': '\u2640', '13': '\u266A', '14': '\u266B',
'15': '\u263C', '16': '\u25BA', '17': '\u25C4', '18': '\u2195', '19': '\u203C', '20': '\u00B6', '21': '\u00A7',
'22': '\u25AC', '23': '\u21A8', '24': '\u2191', '25': '\u2193', '26': '\u2192', '27': '\u2190', '28': '\u221F',
'29': '\u2194', '30': '\u25B2', '31': '\u25BC', '32': '\u0020', '33': '\u0021', '34': '\u0022', '35': '\u0023',
'36': '\u0024', '37': '\u0025', '38': '\u0026', '39': '\u0027', '40': '\u0028', '41': '\u0029', '42': '\u002A',
'43': '\u002B', '44': '\u002C', '45': '\u002D', '46': '\u002E', '47': '\u002F', '48': '\u0030', '49': '\u0031',
'50': '\u0032', '51': '\u0033', '52': '\u0034', '53': '\u0035', '54': '\u0036', '55': '\u0037', '56': '\u0038',
'57': '\u0039', '58': '\u003A', '59': '\u003B', '60': '\u003C', '61': '\u003D', '62': '\u003E', '63': '\u003F',
'64': '\u0040', '65': '\u0041', '66': '\u0042', '67': '\u0043', '68': '\u0044', '69': '\u0045', '70': '\u0046',
'71': '\u0047', '72': '\u0048', '73': '\u0049', '74': '\u004A', '75': '\u004B', '76': '\u004C', '77': '\u004D',
'78': '\u004E', '79': '\u004F', '80': '\u0050', '81': '\u0051', '82': '\u0052', '83': '\u0053', '84': '\u0054',
'85': '\u0055', '86': '\u0056', '87': '\u0057', '88': '\u0058', '89': '\u0059', '90': '\u005A', '91': '\u005B',
'92': '\u005C', '93': '\u005D', '94': '\u005E', '95': '\u005F', '96': '\u0060', '97': '\u0061', '98': '\u0062',
'99': '\u0063', '100': '\u0064', '101': '\u0065', '102': '\u0066', '103': '\u0067', '104': '\u0068', '105': '\u0069',
'106': '\u006A', '107': '\u006B', '108': '\u006C', '109': '\u006D', '110': '\u006E', '111': '\u006F', '112': '\u0070',
'113': '\u0071', '114': '\u0072', '115': '\u0073', '116': '\u0074', '117': '\u0075', '118': '\u0076', '119': '\u0077',
'120': '\u0078', '121': '\u0079', '122': '\u007A', '123': '\u007B', '124': '\u007C', '125': '\u007D', '126': '\u007E',
'127': '\u2302', '128': '\u00C7', '129': '\u00FC', '130': '\u00E9', '131': '\u00E2', '132': '\u00E4', '133': '\u00E0',
'134': '\u00E5', '135': '\u00E7', '136': '\u00EA', '137': '\u00EB', '138': '\u00E8', '139': '\u00EF', '140': '\u00EE',
'141': '\u00EC', '142': '\u00C4', '143': '\u00C5', '144': '\u00C9', '145': '\u00E6', '146': '\u00C6', '147': '\u00F4',
'148': '\u00F6', '149': '\u00F2', '150': '\u00FB', '151': '\u00F9', '152': '\u00FF', '153': '\u00D6', '154': '\u00DC',
'155': '\u00A2', '156': '\u00A3', '157': '\u00A5', '158': '\u20A7', '159': '\u0192', '160': '\u00E1', '161': '\u00ED',
'162': '\u00F3', '163': '\u00FA', '164': '\u00F1', '165': '\u00D1', '166': '\u00AA', '167': '\u00BA', '168': '\u00BF',
'169': '\u2310', '170': '\u00AC', '171': '\u00BD', '172': '\u00BC', '173': '\u00A1', '174': '\u00AB', '175': '\u00BB',
'176': '\u2591', '177': '\u2592', '178': '\u2593', '179': '\u2502', '180': '\u2524', '181': '\u2561', '182': '\u2562',
'183': '\u2556', '184': '\u2555', '185': '\u2563', '186': '\u2551', '187': '\u2557', '188': '\u255D', '189': '\u255C',
'190': '\u255B', '191': '\u2510', '192': '\u2514', '193': '\u2534', '194': '\u252C', '195': '\u251C', '196': '\u2500',
'197': '\u253C', '198': '\u255E', '199': '\u255F', '200': '\u255A', '201': '\u2554', '202': '\u2569', '203': '\u2566',
'204': '\u2560', '205': '\u2550', '206': '\u256C', '207': '\u2567', '208': '\u2568', '209': '\u2564', '210': '\u2565',
'211': '\u2559', '212': '\u2558', '213': '\u2552', '214': '\u2553', '215': '\u256B', '216': '\u256A', '217': '\u2518',
'218': '\u250C', '219': '\u2588', '220': '\u2584', '221': '\u258C', '222': '\u2590', '223': '\u2580', '224': '\u03B1',
'225': '\u00DF', '226': '\u0393', '227': '\u03C0', '228': '\u03A3', '229': '\u03C3', '230': '\u00B5', '231': '\u03A4',
'232': '\u03A6', '233': '\u0398', '234': '\u03A9', '235': '\u03B4', '236': '\u221E', '237': '\u03C6', '238': '\u03B5',
'239': '\u2229', '240': '\u2261', '241': '\u00B1', '242': '\u2265', '243': '\u2264', '244': '\u2320', '245': '\u2321',
'246': '\u00F7', '247': '\u2248', '248': '\u00B0', '249': '\u2219', '250': '\u00B7', '251': '\u221A', '252': '\u207F',
'253': '\u00B2', '254': '\u25A0', '255': '\u00A0', '032': '\u0020', '033': '\u0021', '034': '\u0022', '035': '\u0023',
'036': '\u0024', '037': '\u0025', '038': '\u0026', '039': '\u0027', '040': '\u0028', '041': '\u0029', '042': '\u002A',
'043': '\u002B', '044': '\u002C', '045': '\u002D', '046': '\u002E', '047': '\u002F', '048': '\u0030', '049': '\u0031',
'050': '\u0032', '051': '\u0033', '052': '\u0034', '053': '\u0035', '054': '\u0036', '055': '\u0037', '056': '\u0038',
'057': '\u0039', '058': '\u003A', '059': '\u003B', '060': '\u003C', '061': '\u003D', '062': '\u003E', '063': '\u003F',
'064': '\u0040', '065': '\u0041', '066': '\u0042', '067': '\u0043', '068': '\u0044', '069': '\u0045', '070': '\u0046',
'071': '\u0047', '072': '\u0048', '073': '\u0049', '074': '\u004A', '075': '\u004B', '076': '\u004C', '077': '\u004D',
'078': '\u004E', '079': '\u004F', '080': '\u0050', '081': '\u0051', '082': '\u0052', '083': '\u0053', '084': '\u0054',
'085': '\u0055', '086': '\u0056', '087': '\u0057', '088': '\u0058', '089': '\u0059', '090': '\u005A', '091': '\u005B',
'092': '\u005C', '093': '\u005D', '094': '\u005E', '095': '\u005F', '096': '\u0060', '097': '\u0061', '098': '\u0062',
'099': '\u0063', '0100': '\u0064', '0101': '\u0065', '0102': '\u0066', '0103': '\u0067', '0104': '\u0068', '0105': '\u0069',
'0106': '\u006A', '0107': '\u006B', '0108': '\u006C', '0109': '\u006D', '0110': '\u006E', '0111': '\u006F', '0112': '\u0070',
'0113': '\u0071', '0114': '\u0072', '0115': '\u0073', '0116': '\u0074', '0117': '\u0075', '0118': '\u0076', '0119': '\u0077',
'0120': '\u0078', '0121': '\u0079', '0122': '\u007A', '0123': '\u007B', '0124': '\u007C', '0125': '\u007D', '0126': '\u007E',
'0128': '\u20AC', '0130': '\u201A', '0131': '\u0192', '0132': '\u201E', '0133': '\u2026', '0134': '\u2020', '0135': '\u2021',
'0136': '\u02C6', '0137': '\u2030', '0138': '\u0160', '0139': '\u2039', '0140': '\u0152', '0142': '\u017D', '0145': '\u2018',
'0146': '\u2019', '0147': '\u201C', '0148': '\u201D', '0149': '\u2022', '0150': '\u2013', '0151': '\u2014', '0152': '\u02DC',
'0153': '\u2122', '0154': '\u0161', '0155': '\u203A', '0156': '\u0153', '0158': '\u017E', '0159': '\u0178', '0160': '\u00A0',
'0161': '\u00A1', '0162': '\u00A2', '0163': '\u00A3', '0164': '\u00A4', '0165': '\u00A5', '0166': '\u00A6', '0167': '\u00A7',
'0168': '\u00A8', '0169': '\u00A9', '0170': '\u00AA', '0171': '\u00AB', '0172': '\u00AC', '0173': '\u00AD', '0174': '\u00AE',
'0175': '\u00AF', '0176': '\u00B0', '0177': '\u00B1', '0178': '\u00B2', '0179': '\u00B3', '0180': '\u00B4', '0181': '\u00B5',
'0182': '\u00B6', '0183': '\u00B7', '0184': '\u00B8', '0185': '\u00B9', '0186': '\u00BA', '0187': '\u00BB', '0188': '\u00BC',
'0189': '\u00BD', '0190': '\u00BE', '0191': '\u00BF', '0192': '\u00C0', '0193': '\u00C1', '0194': '\u00C2', '0195': '\u00C3',
'0196': '\u00C4', '0197': '\u00C5', '0198': '\u00C6', '0199': '\u00C7', '0200': '\u00C8', '0201': '\u00C9', '0202': '\u00CA',
'0203': '\u00CB', '0204': '\u00CC', '0205': '\u00CD', '0206': '\u00CE', '0207': '\u00CF', '0208': '\u00D0', '0209': '\u00D1',
'0210': '\u00D2', '0211': '\u00D3', '0212': '\u00D4', '0213': '\u00D5', '0214': '\u00D6', '0215': '\u00D7', '0216': '\u00D8',
'0217': '\u00D9', '0218': '\u00DA', '0219': '\u00DB', '0220': '\u00DC', '0221': '\u00DD', '0222': '\u00DE', '0223': '\u00DF',
'0224': '\u00E0', '0225': '\u00E1', '0226': '\u00E2', '0227': '\u00E3', '0228': '\u00E4', '0229': '\u00E5', '0230': '\u00E6',
'0231': '\u00E7', '0232': '\u00E8', '0233': '\u00E9', '0234': '\u00EA', '0235': '\u00EB', '0236': '\u00EC', '0237': '\u00ED',
'0238': '\u00EE', '0239': '\u00EF', '0240': '\u00F0', '0241': '\u00F1', '0242': '\u00F2', '0243': '\u00F3', '0244': '\u00F4',
'0245': '\u00F5', '0246': '\u00F6', '0247': '\u00F7', '0248': '\u00F8', '0249': '\u00F9', '0250': '\u00FA', '0251': '\u00FB',
'0252': '\u00FC', '0253': '\u00FD', '0254': '\u00FE', '0255': '\u00FF'
}
let ret = '';
altcode = altcode.toString().trim();
let valid_alt_code_all = altcode in altCode_to_unicode_all;
let valid_alt_code_safe = altcode in altCode_to_unicode_safe;
let valid_alt_code = safeMode ? valid_alt_code_safe : valid_alt_code_all;
if (!valid_alt_code) return '';
if (uFormat) ret = safeMode ? altCode_to_unicode_safe_unicodeOut[altcode] : altCode_to_unicode_all_unicodeOut[altcode];
else ret = safeMode ? altCode_to_unicode_safe[altcode] : altCode_to_unicode_all[altcode];
return ret;
}
toNormalString(str) {
while (str.includes('\\u')) str = this.unicodeToChar(str);
return str
}
unicodeToChar(x) {
return x.replace(/\\u[\dA-F]{4}/gi,
function (match) {
return String.fromCharCode(parseInt(match.replace(/\\u/g, ''), 16));
});
}
toUnicode(str) {
return str.split('').map(function (value, index, array) {
var temp = value.charCodeAt(0).toString(16).toUpperCase();
if (temp.length > 2) return '\\u' + pad(temp, 4);
return value;
}).join('');
}
toUnicodeArray(str) {
return str.split('').map(function (value, index, array) {
var temp = value.charCodeAt(0).toString(16).toUpperCase();
return '\\u' + pad(temp, 4);
});
}
}