@pie-lib/math-evaluator 2.3.0-beta.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.json CHANGED
@@ -1,457 +1 @@
1
- [
2
- {
3
- "type": "fix",
4
- "scope": null,
5
- "subject": "rm child prepack in favour of root prepack",
6
- "merge": null,
7
- "header": "fix: rm child prepack in favour of root prepack",
8
- "body": null,
9
- "footer": null,
10
- "notes": [],
11
- "hash": "381d8d6485269b641d8d4655148966d2e70803be",
12
- "gitTags": "",
13
- "committerDate": "2019-03-15 09:51:11 +0000",
14
- "isTagged": true,
15
- "tag": "@pie-lib/math-evaluator@0.3.9"
16
- },
17
- {
18
- "type": "chore",
19
- "scope": null,
20
- "subject": "get packages to call changelog function on prepack",
21
- "merge": null,
22
- "header": "chore: get packages to call changelog function on prepack",
23
- "body": null,
24
- "footer": null,
25
- "notes": [],
26
- "hash": "8828f01f2d16d29404ba837c1de40d09e7230ec5",
27
- "gitTags": "",
28
- "committerDate": "2019-03-14 12:40:05 +0000",
29
- "isTagged": true,
30
- "tag": "@pie-lib/math-evaluator@0.3.5"
31
- },
32
- {
33
- "type": "chore",
34
- "scope": null,
35
- "subject": "call changelog on prepack",
36
- "merge": null,
37
- "header": "chore: call changelog on prepack",
38
- "body": null,
39
- "footer": null,
40
- "notes": [],
41
- "hash": "b672c012de096c55b765a765f758da3fc5df2f90",
42
- "gitTags": "",
43
- "committerDate": "2019-03-13 23:00:44 +0000",
44
- "isTagged": true,
45
- "tag": "@pie-lib/math-evaluator@0.3.4"
46
- },
47
- {
48
- "type": "chore",
49
- "scope": null,
50
- "subject": "generate changelog.json instead of markdown",
51
- "merge": null,
52
- "header": "chore: generate changelog.json instead of markdown",
53
- "body": null,
54
- "footer": null,
55
- "notes": [],
56
- "hash": "eaa5019a11f70c53425d55856bd3b940237f8c7d",
57
- "gitTags": "",
58
- "committerDate": "2019-03-13 17:24:09 +0000",
59
- "isTagged": true,
60
- "tag": "@pie-lib/math-evaluator@0.3.2"
61
- },
62
- {
63
- "type": "feat",
64
- "scope": null,
65
- "subject": "libs version bump",
66
- "merge": null,
67
- "header": "feat: libs version bump",
68
- "body": null,
69
- "footer": null,
70
- "notes": [],
71
- "hash": "4edc4bebdd7694efe5b18230c0dd5215591d4a28",
72
- "gitTags": "",
73
- "committerDate": "2019-01-30 22:14:28 +0000",
74
- "isTagged": true,
75
- "tag": "@pie-lib/math-evaluator@0.3.0"
76
- },
77
- {
78
- "type": "fix",
79
- "scope": null,
80
- "subject": "math-expressions import",
81
- "merge": null,
82
- "header": "fix: math-expressions import",
83
- "body": null,
84
- "footer": null,
85
- "notes": [],
86
- "hash": "10d25b98d80d0295e5386320d885107a10f9b7d1",
87
- "gitTags": "",
88
- "committerDate": "2019-01-30 22:14:28 +0000",
89
- "isTagged": true,
90
- "tag": "@pie-lib/math-evaluator@0.3.0"
91
- },
92
- {
93
- "type": "fix",
94
- "scope": null,
95
- "subject": "use plain module from math-expressions",
96
- "merge": null,
97
- "header": "fix: use plain module from math-expressions",
98
- "body": null,
99
- "footer": null,
100
- "notes": [],
101
- "hash": "a8f0647adb9cf9419c12f742914a34b570f3f661",
102
- "gitTags": "",
103
- "committerDate": "2019-01-16 21:44:10 +0000",
104
- "isTagged": true,
105
- "tag": "@pie-lib/math-evaluator@0.3.0"
106
- },
107
- {
108
- "type": "chore",
109
- "scope": "math-evaluator",
110
- "subject": "unit test adjustments and fixes",
111
- "merge": null,
112
- "header": "chore(math-evaluator): unit test adjustments and fixes",
113
- "body": null,
114
- "footer": null,
115
- "notes": [],
116
- "hash": "38fc44c3f06549efe72b5d1608aad0ca9f0b98fe",
117
- "gitTags": "",
118
- "committerDate": "2018-11-09 13:48:04 +0200",
119
- "isTagged": true,
120
- "tag": "@pie-lib/math-evaluator@0.2.0"
121
- },
122
- {
123
- "type": "feat",
124
- "scope": "math-evaluator",
125
- "subject": "finalized for first release",
126
- "merge": null,
127
- "header": "feat(math-evaluator): finalized for first release",
128
- "body": null,
129
- "footer": null,
130
- "notes": [],
131
- "hash": "e696925b36d047b689174fabf25950c17e53abdf",
132
- "gitTags": "",
133
- "committerDate": "2018-11-08 08:57:08 +0200",
134
- "isTagged": true,
135
- "tag": "@pie-lib/math-evaluator@0.2.0"
136
- },
137
- {
138
- "type": "feat",
139
- "scope": "math-evaluator",
140
- "subject": "finalized feature for first release",
141
- "merge": null,
142
- "header": "feat(math-evaluator): finalized feature for first release",
143
- "body": null,
144
- "footer": null,
145
- "notes": [],
146
- "hash": "f02d7b36a7c3e8ae1d9e5950cd8a173250ec2905",
147
- "gitTags": "",
148
- "committerDate": "2018-11-07 12:17:28 +0200",
149
- "isTagged": true,
150
- "tag": "@pie-lib/math-evaluator@0.2.0"
151
- },
152
- {
153
- "type": "fix",
154
- "scope": "math-evaluator",
155
- "subject": "small unit test adjustments",
156
- "merge": null,
157
- "header": "fix(math-evaluator): small unit test adjustments",
158
- "body": null,
159
- "footer": null,
160
- "notes": [],
161
- "hash": "92a2eab125b023374c6d69dcf191a49b7f78b122",
162
- "gitTags": "",
163
- "committerDate": "2018-10-23 14:00:09 +0300",
164
- "isTagged": true,
165
- "tag": "@pie-lib/math-evaluator@0.1.0"
166
- },
167
- {
168
- "type": "feat",
169
- "scope": "math-evaluator",
170
- "subject": "feature added",
171
- "merge": null,
172
- "header": "feat(math-evaluator): feature added",
173
- "body": null,
174
- "footer": null,
175
- "notes": [],
176
- "hash": "0703e9e94b4126c943d6af5e2b1cc45ec2454115",
177
- "gitTags": "",
178
- "committerDate": "2018-10-22 09:48:19 +0300",
179
- "isTagged": true,
180
- "tag": "@pie-lib/math-evaluator@0.1.0"
181
- },
182
- {
183
- "type": "chore",
184
- "scope": null,
185
- "subject": "prettify it",
186
- "merge": null,
187
- "header": "chore: prettify it",
188
- "body": null,
189
- "footer": null,
190
- "notes": [],
191
- "hash": "32b365bcd81976fbe8ecb6c7c0574d6a9226a4aa",
192
- "gitTags": "",
193
- "committerDate": "2019-04-10 10:27:22 +0300",
194
- "isTagged": true,
195
- "tag": "@pie-lib/math-evaluator@0.4.0"
196
- },
197
- {
198
- "type": "feat",
199
- "scope": "math-evaluator",
200
- "subject": "introduce partial rationalization, polynomial equation fixes and allowDecimals option",
201
- "merge": null,
202
- "header": "feat(math-evaluator): introduce partial rationalization, polynomial equation fixes and allowDecimals option",
203
- "body": null,
204
- "footer": null,
205
- "notes": [],
206
- "hash": "78fe0a11eaaf23db7134e08d2b2ed2a2cd1b427b",
207
- "gitTags": "",
208
- "committerDate": "2019-04-10 10:22:39 +0300",
209
- "isTagged": true,
210
- "tag": "@pie-lib/math-evaluator@0.4.0"
211
- },
212
- {
213
- "type": "chore",
214
- "scope": null,
215
- "subject": "update unit tests for math-evaluator",
216
- "merge": null,
217
- "header": "chore: update unit tests for math-evaluator",
218
- "body": null,
219
- "footer": null,
220
- "notes": [],
221
- "hash": "b478b0fb87da0d321fe1af40a5cdef1b7bb0d1d3",
222
- "gitTags": "",
223
- "committerDate": "2019-05-13 15:02:24 +0300",
224
- "isTagged": true,
225
- "tag": "@pie-lib/math-evaluator@0.5.0"
226
- },
227
- {
228
- "type": "feat",
229
- "scope": "math-evaluator",
230
- "subject": "re-define what allowDecimals means - thousand separator support with decimal dot support",
231
- "merge": null,
232
- "header": "feat(math-evaluator): re-define what allowDecimals means - thousand separator support with decimal dot support",
233
- "body": null,
234
- "footer": null,
235
- "notes": [],
236
- "hash": "f79ff3b9b239716076fc9b1fd79868ab74680894",
237
- "gitTags": "",
238
- "committerDate": "2019-05-13 14:59:36 +0300",
239
- "isTagged": true,
240
- "tag": "@pie-lib/math-evaluator@0.5.0"
241
- },
242
- {
243
- "type": "chore",
244
- "scope": "merge",
245
- "subject": "merged with develop",
246
- "merge": null,
247
- "header": "chore(merge): merged with develop",
248
- "body": null,
249
- "footer": null,
250
- "notes": [],
251
- "hash": "e68506cf63b2a17973821bb0cfef40828faccd1f",
252
- "gitTags": "",
253
- "committerDate": "2019-05-21 06:26:54 +0300",
254
- "isTagged": true,
255
- "tag": "@pie-lib/math-evaluator@0.5.1"
256
- },
257
- {
258
- "type": "fix",
259
- "scope": "math-evaluator",
260
- "subject": "fix equals sign treatment in expressions",
261
- "merge": null,
262
- "header": "fix(math-evaluator): fix equals sign treatment in expressions",
263
- "body": null,
264
- "footer": null,
265
- "notes": [],
266
- "hash": "f81e9245ad3fefd0895c510cd3e2b2f3d4d11843",
267
- "gitTags": " (origin/fix/math-evaluator-expression-fixes)",
268
- "committerDate": "2019-06-25 15:43:58 +0300",
269
- "isTagged": true,
270
- "tag": "@pie-lib/math-evaluator@0.5.4"
271
- },
272
- {
273
- "type": "chore",
274
- "scope": null,
275
- "subject": "added two failing tests for math-evaluator",
276
- "merge": null,
277
- "header": "chore: added two failing tests for math-evaluator",
278
- "body": null,
279
- "footer": null,
280
- "notes": [],
281
- "hash": "326a94b419dc16c3a23b80d155e0b0a3e32a7b28",
282
- "gitTags": "",
283
- "committerDate": "2019-06-24 18:26:25 +0300",
284
- "isTagged": true,
285
- "tag": "@pie-lib/math-evaluator@0.5.4"
286
- },
287
- {
288
- "type": "feat",
289
- "scope": "math-evaluator",
290
- "subject": "change math-expressions to pie fork",
291
- "merge": null,
292
- "header": "feat(math-evaluator): change math-expressions to pie fork",
293
- "body": null,
294
- "footer": null,
295
- "notes": [],
296
- "hash": "06e8b617fd8f3d54057850d3964616165bdf7ad7",
297
- "gitTags": "",
298
- "committerDate": "2019-11-22 16:17:54 +0200",
299
- "isTagged": true,
300
- "tag": "@pie-lib/math-evaluator@0.6.0"
301
- },
302
- {
303
- "type": "fix",
304
- "scope": "math-evaluator",
305
- "subject": "finalize fix for PIE-188, custom and unrecognized latex commands",
306
- "merge": null,
307
- "header": "fix(math-evaluator): finalize fix for PIE-188, custom and unrecognized latex commands",
308
- "body": null,
309
- "footer": null,
310
- "notes": [],
311
- "hash": "b37184d6a1a7676fe25372b2388dd60fad94638d",
312
- "gitTags": "",
313
- "committerDate": "2019-11-22 12:32:30 +0200",
314
- "isTagged": true,
315
- "tag": "@pie-lib/math-evaluator@0.6.0"
316
- },
317
- {
318
- "type": "fix",
319
- "scope": "math-evaluator",
320
- "subject": "finalize fix for PIE-188",
321
- "merge": null,
322
- "header": "fix(math-evaluator): finalize fix for PIE-188",
323
- "body": null,
324
- "footer": null,
325
- "notes": [],
326
- "hash": "d7bd4a1d0576d1c6e2fbf6b46ad5c6a12ad70133",
327
- "gitTags": "",
328
- "committerDate": "2019-11-22 12:14:12 +0200",
329
- "isTagged": true,
330
- "tag": "@pie-lib/math-evaluator@0.6.0"
331
- },
332
- {
333
- "type": "fix",
334
- "scope": "math-evaluator",
335
- "subject": "PIE-188 related fixes and tests",
336
- "merge": null,
337
- "header": "fix(math-evaluator): PIE-188 related fixes and tests",
338
- "body": null,
339
- "footer": null,
340
- "notes": [],
341
- "hash": "76424c677a8d0147e7654ca27098d682da9a42bb",
342
- "gitTags": "",
343
- "committerDate": "2019-11-19 13:16:36 +0200",
344
- "isTagged": true,
345
- "tag": "@pie-lib/math-evaluator@0.6.0"
346
- },
347
- {
348
- "type": "fix",
349
- "scope": null,
350
- "subject": "bump @pie-framework/math-expressions@^2.1.0 ch6456",
351
- "merge": null,
352
- "header": "fix: bump @pie-framework/math-expressions@^2.1.0 ch6456",
353
- "body": null,
354
- "footer": null,
355
- "notes": [],
356
- "hash": "d57971f1f1dd2943ced3ffa3dec0a324ba04e487",
357
- "gitTags": " (origin/fix/ch6456-percent)",
358
- "committerDate": "2019-12-20 11:14:25 +0000",
359
- "isTagged": true,
360
- "tag": "@pie-lib/math-evaluator@0.6.5"
361
- },
362
- {
363
- "type": "fix",
364
- "scope": null,
365
- "subject": "bump @pie-framework/math-expressions@2.2.0 [ch7119]",
366
- "merge": null,
367
- "header": "fix: bump @pie-framework/math-expressions@2.2.0 [ch7119]",
368
- "body": null,
369
- "footer": null,
370
- "notes": [],
371
- "hash": "b7fa81033d2980228e5f07f44904c63e0aea84c1",
372
- "gitTags": "",
373
- "committerDate": "2020-01-27 11:07:32 +0000",
374
- "isTagged": true,
375
- "tag": "@pie-lib/math-evaluator@0.6.6"
376
- },
377
- {
378
- "type": "fix",
379
- "scope": null,
380
- "subject": "throw error if number missing factor",
381
- "merge": null,
382
- "header": "fix: throw error if number missing factor",
383
- "body": null,
384
- "footer": null,
385
- "notes": [],
386
- "hash": "3b23b28e851d07c49c414b05d747141d415e960e",
387
- "gitTags": " (origin/develop, origin/HEAD, develop)",
388
- "committerDate": "2020-01-28 11:27:09 +0000",
389
- "isTagged": true,
390
- "tag": "@pie-lib/math-evaluator@0.6.7"
391
- },
392
- {
393
- "type": "fix",
394
- "scope": null,
395
- "subject": "add module prop to package.json",
396
- "merge": null,
397
- "header": "fix: add module prop to package.json",
398
- "body": null,
399
- "footer": null,
400
- "notes": [],
401
- "hash": "f0d7718fe0c7ec5a3f0bbab23e8a981cac112488",
402
- "gitTags": "",
403
- "committerDate": "2020-03-30 13:02:17 +0100",
404
- "isTagged": true,
405
- "tag": "@pie-lib/math-evaluator@0.6.9"
406
- },
407
- {
408
- "type": "fix",
409
- "scope": "math-evaluator",
410
- "subject": "support `x^(1/y) == sqrt(x,y)` PD-3",
411
- "merge": null,
412
- "header": "fix(math-evaluator): support `x^(1/y) == sqrt(x,y)` PD-3",
413
- "body": "* add a mathjs simplify rule to extend the default ruleset",
414
- "footer": null,
415
- "notes": [],
416
- "hash": "fa148ff4db1703f572beefa2d6c929fdc445261a",
417
- "gitTags": "",
418
- "committerDate": "2020-04-15 13:13:15 +0100",
419
- "isTagged": true,
420
- "tag": "@pie-lib/math-evaluator@0.6.21"
421
- },
422
- {
423
- "type": "feat",
424
- "scope": null,
425
- "subject": "major version bump",
426
- "merge": null,
427
- "header": "feat: major version bump",
428
- "body": null,
429
- "footer": "BREAKING CHANGE: The last release should have been breaking - this\nshould trigger a major bump now",
430
- "notes": [
431
- {
432
- "title": "BREAKING CHANGE",
433
- "text": "The last release should have been breaking - this\nshould trigger a major bump now"
434
- }
435
- ],
436
- "hash": "78da9d590c5fe67dab54f3b2668995762634ba79",
437
- "gitTags": " (develop)",
438
- "committerDate": "2020-04-27 12:30:42 +0100",
439
- "isTagged": true,
440
- "tag": "@pie-lib/math-evaluator@2.0.0"
441
- },
442
- {
443
- "type": "feat",
444
- "scope": null,
445
- "subject": "bump mathjs@^7.0.1",
446
- "merge": null,
447
- "header": "feat: bump mathjs@^7.0.1",
448
- "body": null,
449
- "footer": null,
450
- "notes": [],
451
- "hash": "865de4b8be0829cbbd083dfee9afeea0b1559eb2",
452
- "gitTags": " (develop)",
453
- "committerDate": "2020-06-05 12:56:06 +0100",
454
- "isTagged": true,
455
- "tag": "@pie-lib/math-evaluator@2.1.0"
456
- }
457
- ]
1
+ []
package/CHANGELOG.md CHANGED
@@ -3,7 +3,7 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- # [2.3.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.3.0-beta.0) (2025-07-15)
6
+ # [2.4.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.4.0) (2025-07-31)
7
7
 
8
8
  **Note:** Version bump only for package @pie-lib/math-evaluator
9
9
 
@@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
11
11
 
12
12
 
13
13
 
14
- # [2.2.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.0) (2025-07-15)
14
+ # [2.3.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.3.0) (2025-07-31)
15
15
 
16
16
  **Note:** Version bump only for package @pie-lib/math-evaluator
17
17
 
@@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
19
19
 
20
20
 
21
21
 
22
- ## [2.1.23](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.22...@pie-lib/math-evaluator@2.1.23) (2023-06-24)
22
+ # [2.2.0-beta.8](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.8) (2025-07-25)
23
23
 
24
24
  **Note:** Version bump only for package @pie-lib/math-evaluator
25
25
 
@@ -27,7 +27,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
27
27
 
28
28
 
29
29
 
30
- ## [2.1.22](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.20...@pie-lib/math-evaluator@2.1.22) (2023-01-31)
30
+ # [2.2.0-beta.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.7) (2025-07-25)
31
31
 
32
32
  **Note:** Version bump only for package @pie-lib/math-evaluator
33
33
 
@@ -35,7 +35,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
35
35
 
36
36
 
37
37
 
38
- ## [2.1.20](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.19...@pie-lib/math-evaluator@2.1.20) (2023-01-31)
38
+ # [2.2.0-beta.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.7) (2025-07-25)
39
39
 
40
40
  **Note:** Version bump only for package @pie-lib/math-evaluator
41
41
 
@@ -43,7 +43,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
43
43
 
44
44
 
45
45
 
46
- ## [2.1.19](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.18...@pie-lib/math-evaluator@2.1.19) (2023-01-31)
46
+ # [2.2.0-beta.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.6) (2025-07-25)
47
47
 
48
48
  **Note:** Version bump only for package @pie-lib/math-evaluator
49
49
 
@@ -51,7 +51,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
51
51
 
52
52
 
53
53
 
54
- ## [2.1.18](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.17...@pie-lib/math-evaluator@2.1.18) (2023-01-31)
54
+ # [2.2.0-beta.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.6) (2025-07-25)
55
55
 
56
56
  **Note:** Version bump only for package @pie-lib/math-evaluator
57
57
 
@@ -59,7 +59,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
59
59
 
60
60
 
61
61
 
62
- ## [2.1.17](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.11...@pie-lib/math-evaluator@2.1.17) (2023-01-31)
62
+ # [2.2.0-beta.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.5) (2025-07-25)
63
63
 
64
64
  **Note:** Version bump only for package @pie-lib/math-evaluator
65
65
 
@@ -67,7 +67,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
67
67
 
68
68
 
69
69
 
70
- ## [2.1.11](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.9...@pie-lib/math-evaluator@2.1.11) (2023-01-31)
70
+ # [2.2.0-beta.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.5) (2025-07-25)
71
71
 
72
72
  **Note:** Version bump only for package @pie-lib/math-evaluator
73
73
 
@@ -75,7 +75,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
75
75
 
76
76
 
77
77
 
78
- ## [2.1.9](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.7...@pie-lib/math-evaluator@2.1.9) (2023-01-31)
78
+ # [2.2.0-beta.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.4) (2025-07-25)
79
79
 
80
80
  **Note:** Version bump only for package @pie-lib/math-evaluator
81
81
 
@@ -83,7 +83,79 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
83
83
 
84
84
 
85
85
 
86
- ## [2.1.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.6...@pie-lib/math-evaluator@2.1.7) (2022-11-23)
86
+ # [2.2.0-beta.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.3) (2025-07-25)
87
+
88
+ **Note:** Version bump only for package @pie-lib/math-evaluator
89
+
90
+
91
+
92
+
93
+
94
+ # [2.2.0-beta.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.4) (2025-07-23)
95
+
96
+ **Note:** Version bump only for package @pie-lib/math-evaluator
97
+
98
+
99
+
100
+
101
+
102
+ # [2.2.0-beta.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.3) (2025-07-23)
103
+
104
+ **Note:** Version bump only for package @pie-lib/math-evaluator
105
+
106
+
107
+
108
+
109
+
110
+ # [2.2.0-beta.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.3) (2025-07-20)
111
+
112
+ **Note:** Version bump only for package @pie-lib/math-evaluator
113
+
114
+
115
+
116
+
117
+
118
+ # [2.2.0-beta.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.2) (2025-07-20)
119
+
120
+ **Note:** Version bump only for package @pie-lib/math-evaluator
121
+
122
+
123
+
124
+
125
+
126
+ # [2.2.0-beta.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.1) (2025-07-20)
127
+
128
+ **Note:** Version bump only for package @pie-lib/math-evaluator
129
+
130
+
131
+
132
+
133
+
134
+ # [2.2.0-beta.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.2) (2025-07-20)
135
+
136
+ **Note:** Version bump only for package @pie-lib/math-evaluator
137
+
138
+
139
+
140
+
141
+
142
+ # [2.2.0-beta.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.1) (2025-07-20)
143
+
144
+ **Note:** Version bump only for package @pie-lib/math-evaluator
145
+
146
+
147
+
148
+
149
+
150
+ # [2.2.0-beta.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.1) (2025-07-20)
151
+
152
+ **Note:** Version bump only for package @pie-lib/math-evaluator
153
+
154
+
155
+
156
+
157
+
158
+ # [2.2.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.0) (2025-07-20)
87
159
 
88
160
  **Note:** Version bump only for package @pie-lib/math-evaluator
89
161
 
@@ -91,6 +163,50 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
91
163
 
92
164
 
93
165
 
166
+ # [2.3.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.3.0-beta.0) (2025-07-15)
167
+
168
+ **Note:** Version bump only for package @pie-lib/math-evaluator
169
+
170
+ # [2.2.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.0) (2025-07-15)
171
+
172
+ **Note:** Version bump only for package @pie-lib/math-evaluator
173
+
174
+ ## [2.1.23](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.22...@pie-lib/math-evaluator@2.1.23) (2023-06-24)
175
+
176
+ **Note:** Version bump only for package @pie-lib/math-evaluator
177
+
178
+ ## [2.1.22](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.20...@pie-lib/math-evaluator@2.1.22) (2023-01-31)
179
+
180
+ **Note:** Version bump only for package @pie-lib/math-evaluator
181
+
182
+ ## [2.1.20](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.19...@pie-lib/math-evaluator@2.1.20) (2023-01-31)
183
+
184
+ **Note:** Version bump only for package @pie-lib/math-evaluator
185
+
186
+ ## [2.1.19](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.18...@pie-lib/math-evaluator@2.1.19) (2023-01-31)
187
+
188
+ **Note:** Version bump only for package @pie-lib/math-evaluator
189
+
190
+ ## [2.1.18](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.17...@pie-lib/math-evaluator@2.1.18) (2023-01-31)
191
+
192
+ **Note:** Version bump only for package @pie-lib/math-evaluator
193
+
194
+ ## [2.1.17](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.11...@pie-lib/math-evaluator@2.1.17) (2023-01-31)
195
+
196
+ **Note:** Version bump only for package @pie-lib/math-evaluator
197
+
198
+ ## [2.1.11](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.9...@pie-lib/math-evaluator@2.1.11) (2023-01-31)
199
+
200
+ **Note:** Version bump only for package @pie-lib/math-evaluator
201
+
202
+ ## [2.1.9](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.7...@pie-lib/math-evaluator@2.1.9) (2023-01-31)
203
+
204
+ **Note:** Version bump only for package @pie-lib/math-evaluator
205
+
206
+ ## [2.1.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.6...@pie-lib/math-evaluator@2.1.7) (2022-11-23)
207
+
208
+ **Note:** Version bump only for package @pie-lib/math-evaluator
209
+
94
210
  ## [2.1.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.4...@pie-lib/math-evaluator@2.1.6) (2021-06-25)
95
211
 
96
212
  **Note:** Version bump only for package @pie-lib/math-evaluator
package/lib/index.js CHANGED
@@ -186,4 +186,4 @@ var ave = function ave(a, b) {
186
186
  exports.ave = ave;
187
187
  var _default = areValuesEqual;
188
188
  exports["default"] = _default;
189
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJkZWNpbWFsQ29tbWFSZWdleCIsImRlY2ltYWxSZWdleCIsImRlY2ltYWxXaXRoVGhvdXNhbmRTZXBhcmF0b3JOdW1iZXJSZWdleCIsInJhdGlvbmFsaXplQWxsUG9zc2libGVTdWJOb2RlcyIsImV4cHJlc3Npb24iLCJyYXRpb25hbGl6ZSIsIm1hdGhqcyIsInBhcnNlIiwidHJlZSIsInRyYW5zZm9ybWVkVHJlZSIsInRyYW5zZm9ybSIsIm5vZGUiLCJyYXRpb25hbGl6ZWROb2RlIiwicHJlcGFyZUV4cHJlc3Npb24iLCJzdHJpbmciLCJpc0xhdGV4IiwicmV0dXJuVmFsdWUiLCJ0cmltIiwicmVwbGFjZSIsImxhdGV4VG9UZXh0IiwidGV4dFRvTWF0aFRleHQiLCJ1bmtub3duQ29tbWFuZHMiLCJ0b1N0cmluZyIsImxhdGV4VG9Bc3RPcHRzIiwibWlzc2luZ0ZhY3RvciIsInRva2VuIiwiZSIsImNvbnNvbGUiLCJ3YXJuIiwidG9rZW5fdHlwZSIsInVua25vd25Db21tYW5kQmVoYXZpb3IiLCJhc3RUb1RleHRPcHRzIiwidW5pY29kZV9vcGVyYXRvcnMiLCJuZSIsIm9wZXJhbmRzIiwiam9pbiIsImxhdGV4IiwiZXh0cmFPdHBzIiwibGEiLCJtZSIsImNvbnZlcnRlcnMiLCJsYXRleFRvQXN0T2JqIiwiYXQiLCJhc3RUb1RleHRPYmoiLCJhc3QiLCJjb252ZXJ0IiwidGV4dFRvQXN0T2JqIiwic2hvdWxkUmF0aW9uYWxpemVFbnRpcmVUcmVlIiwic2hvdWxkRG9JdCIsInRyYXZlcnNlIiwidHlwZSIsImZuIiwiZXhwb25lbnQiLCJhcmdzIiwiY29tcGlsZSIsImV2YWwiLCJmdW5jdGlvblBhcmFtZXRlciIsImNvbnRhaW5zRGVjaW1hbCIsIm1hdGNoIiwiU0lNUExJRllfUlVMRVMiLCJsIiwiciIsInNpbXBsaWZ5IiwidiIsImNvbmNhdCIsInJ1bGVzIiwiYXJlVmFsdWVzRXF1YWwiLCJ2YWx1ZU9uZSIsInZhbHVlVHdvIiwib3B0aW9ucyIsImFsbG93RGVjaW1hbHMiLCJpbnZlcnNlIiwidmFsdWVPbmVUb1VzZSIsInZhbHVlVHdvVG9Vc2UiLCJ0ZXN0IiwicHJlcGFyZWRWYWx1ZU9uZSIsInByZXBhcmVkVmFsdWVUd28iLCJvbmUiLCJ0d28iLCJlcXVhbHMiLCJhdmUiLCJhIiwiYiIsImFtIiwiYm0iLCJhcm0iLCJicm0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQUVBLElBQU1BLGlCQUFpQixHQUFHLElBQTFCO0FBQ0EsSUFBTUMsWUFBWSxHQUFHLE9BQXJCO0FBQ0EsSUFBTUMsdUNBQXVDLEdBQUcsaUVBQWhEOztBQUVBLElBQU1DLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBaUMsQ0FBQ0MsVUFBRDtBQUFBLFNBQWdCQyxXQUFXLENBQUNDLE1BQU0sQ0FBQ0MsS0FBUCxDQUFhSCxVQUFiLENBQUQsQ0FBM0I7QUFBQSxDQUF2Qzs7QUFDQSxJQUFNQyxXQUFXLEdBQUcsU0FBZEEsV0FBYyxDQUFDRyxJQUFELEVBQVU7QUFDNUIsTUFBTUMsZUFBZSxHQUFHRCxJQUFJLENBQUNFLFNBQUwsQ0FBZSxVQUFDQyxJQUFELEVBQVU7QUFDL0MsUUFBSTtBQUNGLFVBQU1DLGdCQUFnQixHQUFHTixNQUFNLENBQUNELFdBQVAsQ0FBbUJNLElBQW5CLENBQXpCO0FBQ0EsYUFBT0MsZ0JBQVA7QUFDRCxLQUhELENBR0UsZ0JBQU07QUFDTixhQUFPRCxJQUFQO0FBQ0Q7QUFDRixHQVB1QixDQUF4QjtBQVFBLFNBQU9GLGVBQVA7QUFDRCxDQVZEOztBQVlBLFNBQVNJLGlCQUFULENBQTJCQyxNQUEzQixFQUFtQ0MsT0FBbkMsRUFBNEM7QUFDMUMsTUFBSUMsV0FBVyxHQUFHRixNQUFNLEdBQUdBLE1BQU0sQ0FBQ0csSUFBUCxFQUFILEdBQW1CLEVBQTNDO0FBRUFELEVBQUFBLFdBQVcsR0FBR0EsV0FBVyxDQUFDRSxPQUFaLENBQW9CbEIsaUJBQXBCLEVBQXVDLEdBQXZDLENB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RCxHQUF1RkEsZ0JBQWpHO0FBQ0EsTUFBSUcsR0FBRyxHQUFHL0IsMkJBQTJCLENBQUM2QixnQkFBRCxDQUEzQixHQUFnRHRFLE1BQU0sQ0FBQ0QsV0FBUCxDQUFtQnVFLGdCQUFuQixDQUFoRCxHQUF1RkEsZ0JBQWpHO0FBRUFDLEVBQUFBLEdBQUcsR0FBR2YsUUFBUSxDQUFDZSxHQUFELENBQWQ7QUFDQUMsRUFBQUEsR0FBRyxHQUFHaEIsUUFBUSxDQUFDZ0IsR0FBRCxDQUFkO0FBRUEsTUFBTUMsTUFBTSxHQUFHRixHQUFHLENBQUNFLE1BQUosQ0FBV0QsR0FBWCxDQUFmO0FBRUEsU0FBT1AsT0FBTyxHQUFHLENBQUNRLE1BQUosR0FBYUEsTUFBM0I7QUFDRCxDQXRDRDs7QUF3Q08sSUFBTUMsR0FBRyxHQUFHLFNBQU5BLEdBQU0sQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEVBQVU7QUFDM0IsTUFBTUMsRUFBRSxHQUFHN0UsTUFBTSxDQUFDQyxLQUFQLENBQWEwRSxDQUFiLENBQVg7QUFDQSxNQUFNRyxFQUFFLEdBQUc5RSxNQUFNLENBQUNDLEtBQVAsQ0FBYTJFLENBQWIsQ0FBWDtBQUVBLE1BQU1HLEdBQUcsR0FBR3ZCLFFBQVEsQ0FBQ3FCLEVBQUQsQ0FBcEI7QUFDQSxNQUFNRyxHQUFHLEdBQUd4QixRQUFRLENBQUNzQixFQUFELENBQXBCO0FBQ0EsU0FBT0MsR0FBRyxDQUFDTixNQUFKLENBQVdPLEdBQVgsQ0FBUDtBQUNELENBUE07OztlQVNRcEIsYyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCAqIGFzIG1hdGhqcyBmcm9tICdtYXRoanMnO1xuaW1wb3J0IG1lIGZyb20gJ0BwaWUtZnJhbWV3b3JrL21hdGgtZXhwcmVzc2lvbnMnO1xuXG5jb25zdCBkZWNpbWFsQ29tbWFSZWdleCA9IC8sL2c7XG5jb25zdCBkZWNpbWFsUmVnZXggPSAvXFwufCwvZztcbmNvbnN0IGRlY2ltYWxXaXRoVGhvdXNhbmRTZXBhcmF0b3JOdW1iZXJSZWdleCA9IC9eKD8hMCtcXC4wMCkoPz0uezEsOX0oXFwufCQpKSg/ITAoPyFcXC4pKVxcZHsxLDN9KCxcXGR7M30pKihcXC5cXGQrKT8kLztcblxuY29uc3QgcmF0aW9uYWxpemVBbGxQb3NzaWJsZVN1Yk5vZGVzID0gKGV4cHJlc3Npb24pID0+IHJhdGlvbmFsaXplKG1hdGhqcy5wYXJzZShleHByZXNzaW9uKSk7XG5jb25zdCByYXRpb25hbGl6ZSA9ICh0cmVlKSA9PiB7XG4gIGNvbnN0IHRyYW5zZm9ybWVkVHJlZSA9IHRyZWUudHJhbnNmb3JtKChub2RlKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhdGlvbmFsaXplZE5vZGUgPSBtYXRoanMucmF0aW9uYWxpemUobm9kZSk7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemVkTm9kZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0cmFuc2Zvcm1lZFRyZWU7XG59O1xuXG5mdW5jdGlvbiBwcmVwYXJlRXhwcmVzc2lvbihzdHJpbmcsIGlzTGF0ZXgpIHtcbiAgbGV0IHJldHVyblZhbHVlID0gc3RyaW5nID8gc3RyaW5nLnRyaW0oKSA6ICcnO1xuXG4gIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUucmVwbGFjZShkZWNpbWFsQ29tbWFSZWdleCwgJy4nKTtcblxuICByZXR1cm5WYWx1ZSA9IGlzTGF0ZXhcbiAgICA/IGxhdGV4VG9UZXh0KGAke3JldHVyblZhbHVlfWApXG4gICAgOiB0ZXh0VG9NYXRoVGV4dChgJHtyZXR1cm5WYWx1ZX1gLCB7IHVua25vd25Db21tYW5kczogJ3Bhc3N0aHJvdWdoJyB9KS50b1N0cmluZygpO1xuXG4gIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUucmVwbGFjZSgnPScsICc9PScpO1xuICByZXR1cm4gcmF0aW9uYWxpemVBbGxQb3NzaWJsZVN1Yk5vZGVzKHJldHVyblZhbHVlKTtcbn1cblxuY29uc3QgbGF0ZXhUb0FzdE9wdHMgPSB7XG4gIG1pc3NpbmdGYWN0b3I6ICh0b2tlbiwgZSkgPT4ge1xuICAgIGNvbnNvbGUud2FybignbWlzc2luZyBmYWN0b3IgZm9yOiAnLCB0b2tlbi50b2tlbl90eXBlKTtcbiAgICBpZiAodG9rZW4udG9rZW5fdHlwZSA9PT0gJ05VTUJFUicpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9LFxuICB1bmtub3duQ29tbWFuZEJlaGF2aW9yOiAncGFzc3Rocm91Z2gnLFxufTtcblxuY29uc3QgYXN0VG9UZXh0T3B0cyA9IHtcbiAgdW5pY29kZV9vcGVyYXRvcnM6IHtcbiAgICBuZTogZnVuY3Rpb24ob3BlcmFuZHMpIHtcbiAgICAgIHJldHVybiBvcGVyYW5kcy5qb2luKCcgIT0gJyk7XG4gICAgfSxcbiAgICAnJSc6IGZ1bmN0aW9uKG9wZXJhbmRzKSB7XG4gICAgICByZXR1cm4gYHBlcmNlbnQoJHtvcGVyYW5kc1swXX0pYDtcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGxhdGV4VG9UZXh0ID0gKGxhdGV4LCBleHRyYU90cHMgPSB7fSkgPT4ge1xuICBjb25zdCBsYSA9IG5ldyBtZS5jb252ZXJ0ZXJzLmxhdGV4VG9Bc3RPYmooeyAuLi5sYXRleFRvQXN0T3B0cywgLi4uZXh0cmFPdHBzIH0pO1xuXG4gIGNvbnN0IGF0ID0gbmV3IG1lLmNvbnZlcnRlcnMuYXN0VG9UZXh0T2JqKHsgLi4uYXN0VG9UZXh0T3B0cywgLi4uZXh0cmFPdHBzIH0pO1xuXG4gIGNvbnN0IGFzdCA9IGxhLmNvbnZlcnQobGF0ZXgpO1xuXG4gIHJldHVybiBhdC5jb252ZXJ0KGFzdCk7XG59O1xuXG5leHBvcnQgY29uc3QgdGV4dFRvTWF0aFRleHQgPSAobGF0ZXgsIGV4dHJhT3RwcyA9IHt9KSA9PiB7XG4gIGNvbnN0IGxhID0gbmV3IG1lLmNvbnZlcnRlcnMudGV4dFRvQXN0T2JqKHsgLi4ubGF0ZXhUb0FzdE9wdHMsIC4uLmV4dHJhT3RwcyB9KTtcblxuICBjb25zdCBhdCA9IG5ldyBtZS5jb252ZXJ0ZXJzLmFzdFRvVGV4dE9iaih7IC4uLmFzdFRvVGV4dE9wdHMsIC4uLmV4dHJhT3RwcyB9KTtcblxuICBjb25zdCBhc3QgPSBsYS5jb252ZXJ0KGxhdGV4KTtcblxuICByZXR1cm4gYXQuY29udmVydChhc3QpO1xufTtcblxuZnVuY3Rpb24gc2hvdWxkUmF0aW9uYWxpemVFbnRpcmVUcmVlKHRyZWUpIHtcbiAgbGV0IHNob3VsZERvSXQgPSB0cnVlO1xuXG4gIC8vIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aGUgZW50aXJlIHRyZWUgdG8gY2hlY2sgZm9yIHNvbWUgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IG1ha2UgcmF0aW9uYWxpemF0aW9uIGltcG9zc2libGVcbiAgdHJ5IHtcbiAgICB0cmVlLnRyYXZlcnNlKChub2RlKSA9PiB7XG4gICAgICAvLyBpZiB3ZSBoYXZlIGEgdmFyaWFibGUgYXMgYW4gZXhwb25lbnQgZm9yIHBvd2VyIG9wZXJhdGlvbiwgd2Ugc2hvdWxkIG5vdCByYXRpb25hbGl6ZVxuICAgICAgLy8gdHJ5IHRvIHNlZSBpZiB0aGVyZSBhcmUgcG93ZXIgb3BlcmF0aW9ucyB3aXRoIHZhcmlhYmxlIGV4cG9uZW50c1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgJiYgbm9kZS5mbiA9PT0gJ3BvdycpIHtcbiAgICAgICAgY29uc3QgZXhwb25lbnQgPSBub2RlLmFyZ3NbMV07XG5cbiAgICAgICAgLy8gdHJ5IHRvIHNlZSBpZiBpdCBjYW4gYmUgY29tcGlsZWQgYW5kIGV2YWx1YXRlZCAtIGlmIGl0J3MgYSBub24tbnVtZXJpY2FsIHZhbHVlLCBpdCdsbCB0aHJvdyBhbiBlcnJvclxuICAgICAgICBleHBvbmVudC5jb21waWxlKCkuZXZhbCgpO1xuICAgICAgfVxuXG4gICAgICAvLyB3ZSBjYW5ub3QgaGF2ZSB2YXJpYWJsZXMgZm9yIHVucmVzb2x2ZWQgZnVuY3Rpb24gY2FsbHMgZWl0aGVyXG4gICAgICBpZiAobm9kZS50eXBlID09PSAnRnVuY3Rpb25Ob2RlJykge1xuICAgICAgICAvL3RyeSB0byBzZWUgaWYgdGhlIGFyZ3VtZW50IHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGNhbiBiZSByZXNvbHZlZCBhcyBub24tdmFyaWFibGVcbiAgICAgICAgY29uc3QgZnVuY3Rpb25QYXJhbWV0ZXIgPSBub2RlLmFyZ3NbMF07XG5cbiAgICAgICAgLy8gaWYgaXQgaG9sZHMgdmFyaWFibGVzLCB0aGlzIHdpbGwgdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgZnVuY3Rpb25QYXJhbWV0ZXIuY29tcGlsZSgpLmV2YWwoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIG1hdGhqcy5yYXRpb25hbGl6ZSh0cmVlKTtcbiAgfSBjYXRjaCB7XG4gICAgc2hvdWxkRG9JdCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHNob3VsZERvSXQ7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zRGVjaW1hbChleHByZXNzaW9uID0gJycpIHtcbiAgcmV0dXJuIGV4cHJlc3Npb24ubWF0Y2goZGVjaW1hbFJlZ2V4KTtcbn1cbmNvbnN0IFNJTVBMSUZZX1JVTEVTID0gW1xuICB7IGw6ICduMV4oMS9uMiknLCByOiAnbnRoUm9vdChuMSwgbjIpJyB9LFxuICB7IGw6ICdzcXJ0KG4xKScsIHI6ICdudGhSb290KG4xLCAyKScgfSxcbl07XG5cbmNvbnN0IHNpbXBsaWZ5ID0gKHYpID0+IG1hdGhqcy5zaW1wbGlmeSh2LCBTSU1QTElGWV9SVUxFUy5jb25jYXQobWF0aGpzLnNpbXBsaWZ5LnJ1bGVzKSk7IC8vLmNvbmNhdChTSU1QTElGWV9SVUxFUykpO1xuXG5jb25zdCBhcmVWYWx1ZXNFcXVhbCA9ICh2YWx1ZU9uZSwgdmFsdWVUd28sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgLy8gaWYgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UsIGhhdmluZyBhIGRlY2ltYWwgdmFsdWUgaW4gZWl0aGVyIHNpZGUgd2lsbCByZXN1bHQgaW4gYSBmYWxzZSBlcXVhbGl0eVxuICAgIC8vIHJlZ2FyZGxlc3Mgb2YgbWF0aGVtYXRpY2FsIGNvcnJlY3RuZXNzXG4gICAgYWxsb3dEZWNpbWFscyxcbiAgICBpc0xhdGV4LCAvLyBpZiB0aGUgcGFzc2VkIGluIHZhbHVlcyBhcmUgbGF0ZXgsIHRoZXkgbmVlZCB0byBiZSBlc2NhcGVkXG4gICAgaW52ZXJzZSwgLy8gcmV0dXJucyBpbnZlcnNlIGZvciB0aGUgY29tcGFyaXNvbiByZXN1bHRcbiAgfSA9IG9wdGlvbnM7XG5cbiAgbGV0IHZhbHVlT25lVG9Vc2UgPSB2YWx1ZU9uZTtcbiAgbGV0IHZhbHVlVHdvVG9Vc2UgPSB2YWx1ZVR3bztcblxuICBpZiAoYWxsb3dEZWNpbWFscyA9PT0gZmFsc2UpIHtcbiAgICBpZiAoY29udGFpbnNEZWNpbWFsKHZhbHVlT25lKSB8fCBjb250YWluc0RlY2ltYWwodmFsdWVUd28pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFsbG93RGVjaW1hbHMgPT09IHRydWUpIHtcbiAgICBpZiAoY29udGFpbnNEZWNpbWFsKHZhbHVlT25lKSAmJiBkZWNpbWFsV2l0aFRob3VzYW5kU2VwYXJhdG9yTnVtYmVyUmVnZXgudGVzdCh2YWx1ZU9uZSkpIHtcbiAgICAgIHZhbHVlT25lVG9Vc2UgPSB2YWx1ZU9uZS5yZXBsYWNlKGRlY2ltYWxDb21tYVJlZ2V4LCAnJyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5zRGVjaW1hbCh2YWx1ZVR3bykgJiYgZGVjaW1hbFdpdGhUaG91c2FuZFNlcGFyYXRvck51bWJlclJlZ2V4LnRlc3QodmFsdWVUd28pKSB7XG4gICAgICB2YWx1ZVR3b1RvVXNlID0gdmFsdWVUd28ucmVwbGFjZShkZWNpbWFsQ29tbWFSZWdleCwgJycpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHByZXBhcmVkVmFsdWVPbmUgPSBwcmVwYXJlRXhwcmVzc2lvbih2YWx1ZU9uZVRvVXNlLCBpc0xhdGV4LCBhbGxvd0RlY2ltYWxzKTtcbiAgY29uc3QgcHJlcGFyZWRWYWx1ZVR3byA9IHByZXBhcmVFeHByZXNzaW9uKHZhbHVlVHdvVG9Vc2UsIGlzTGF0ZXgsIGFsbG93RGVjaW1hbHMpO1xuXG4gIGxldCBvbmUgPSBzaG91bGRSYXRpb25hbGl6ZUVudGlyZVRyZWUocHJlcGFyZWRWYWx1ZU9uZSkgPyBtYXRoanMucmF0aW9uYWxpemUocHJlcGFyZWRWYWx1ZU9uZSkgOiBwcmVwYXJlZFZhbHVlT25lO1xuICBsZXQgdHdvID0gc2hvdWxkUmF0aW9uYWxpemVFbnRpcmVUcmVlKHByZXBhcmVkVmFsdWVUd28pID8gbWF0aGpzLnJhdGlvbmFsaXplKHByZXBhcmVkVmFsdWVUd28pIDogcHJlcGFyZWRWYWx1ZVR3bztcblxuICBvbmUgPSBzaW1wbGlmeShvbmUpO1xuICB0d28gPSBzaW1wbGlmeSh0d28pO1xuXG4gIGNvbnN0IGVxdWFscyA9IG9uZS5lcXVhbHModHdvKTtcblxuICByZXR1cm4gaW52ZXJzZSA/ICFlcXVhbHMgOiBlcXVhbHM7XG59O1xuXG5leHBvcnQgY29uc3QgYXZlID0gKGEsIGIpID0+IHtcbiAgY29uc3QgYW0gPSBtYXRoanMucGFyc2UoYSk7XG4gIGNvbnN0IGJtID0gbWF0aGpzLnBhcnNlKGIpO1xuXG4gIGNvbnN0IGFybSA9IHNpbXBsaWZ5KGFtKTtcbiAgY29uc3QgYnJtID0gc2ltcGxpZnkoYm0pO1xuICByZXR1cm4gYXJtLmVxdWFscyhicm0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYXJlVmFsdWVzRXF1YWw7XG4iXX0=
189
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.js"],"names":["decimalCommaRegex","decimalRegex","decimalWithThousandSeparatorNumberRegex","rationalizeAllPossibleSubNodes","expression","rationalize","mathjs","parse","tree","transformedTree","transform","node","rationalizedNode","prepareExpression","string","isLatex","returnValue","trim","replace","latexToText","textToMathText","unknownCommands","toString","latexToAstOpts","missingFactor","token","e","console","warn","token_type","unknownCommandBehavior","astToTextOpts","unicode_operators","ne","operands","join","latex","extraOtps","la","me","converters","latexToAstObj","at","astToTextObj","ast","convert","textToAstObj","shouldRationalizeEntireTree","shouldDoIt","traverse","type","fn","exponent","args","compile","eval","functionParameter","containsDecimal","match","SIMPLIFY_RULES","l","r","simplify","v","concat","rules","areValuesEqual","valueOne","valueTwo","options","allowDecimals","inverse","valueOneToUse","valueTwoToUse","test","preparedValueOne","preparedValueTwo","one","two","equals","ave","a","b","am","bm","arm","brm"],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport * as mathjs from 'mathjs';\nimport me from '@pie-framework/math-expressions';\n\nconst decimalCommaRegex = /,/g;\nconst decimalRegex = /\\.|,/g;\nconst decimalWithThousandSeparatorNumberRegex = /^(?!0+\\.00)(?=.{1,9}(\\.|$))(?!0(?!\\.))\\d{1,3}(,\\d{3})*(\\.\\d+)?$/;\n\nconst rationalizeAllPossibleSubNodes = (expression) => rationalize(mathjs.parse(expression));\nconst rationalize = (tree) => {\n const transformedTree = tree.transform((node) => {\n try {\n const rationalizedNode = mathjs.rationalize(node);\n return rationalizedNode;\n } catch {\n return node;\n }\n });\n return transformedTree;\n};\n\nfunction prepareExpression(string, isLatex) {\n let returnValue = string ? string.trim() : '';\n\n returnValue = returnValue.replace(decimalCommaRegex, '.');\n\n returnValue = isLatex\n ? latexToText(`${returnValue}`)\n : textToMathText(`${returnValue}`, { unknownCommands: 'passthrough' }).toString();\n\n returnValue = returnValue.replace('=', '==');\n return rationalizeAllPossibleSubNodes(returnValue);\n}\n\nconst latexToAstOpts = {\n missingFactor: (token, e) => {\n console.warn('missing factor for: ', token.token_type);\n if (token.token_type === 'NUMBER') {\n throw e;\n }\n return 0;\n },\n unknownCommandBehavior: 'passthrough',\n};\n\nconst astToTextOpts = {\n unicode_operators: {\n ne: function(operands) {\n return operands.join(' != ');\n },\n '%': function(operands) {\n return `percent(${operands[0]})`;\n },\n },\n};\n\nexport const latexToText = (latex, extraOtps = {}) => {\n const la = new me.converters.latexToAstObj({ ...latexToAstOpts, ...extraOtps });\n\n const at = new me.converters.astToTextObj({ ...astToTextOpts, ...extraOtps });\n\n const ast = la.convert(latex);\n\n return at.convert(ast);\n};\n\nexport const textToMathText = (latex, extraOtps = {}) => {\n const la = new me.converters.textToAstObj({ ...latexToAstOpts, ...extraOtps });\n\n const at = new me.converters.astToTextObj({ ...astToTextOpts, ...extraOtps });\n\n const ast = la.convert(latex);\n\n return at.convert(ast);\n};\n\nfunction shouldRationalizeEntireTree(tree) {\n let shouldDoIt = true;\n\n // we need to iterate the entire tree to check for some conditions that might make rationalization impossible\n try {\n tree.traverse((node) => {\n // if we have a variable as an exponent for power operation, we should not rationalize\n // try to see if there are power operations with variable exponents\n if (node.type === 'OperatorNode' && node.fn === 'pow') {\n const exponent = node.args[1];\n\n // try to see if it can be compiled and evaluated - if it's a non-numerical value, it'll throw an error\n exponent.compile().eval();\n }\n\n // we cannot have variables for unresolved function calls either\n if (node.type === 'FunctionNode') {\n //try to see if the argument that the function is called with can be resolved as non-variable\n const functionParameter = node.args[0];\n\n // if it holds variables, this will throw an error\n functionParameter.compile().eval();\n }\n });\n\n mathjs.rationalize(tree);\n } catch {\n shouldDoIt = false;\n }\n\n return shouldDoIt;\n}\n\nfunction containsDecimal(expression = '') {\n return expression.match(decimalRegex);\n}\nconst SIMPLIFY_RULES = [\n { l: 'n1^(1/n2)', r: 'nthRoot(n1, n2)' },\n { l: 'sqrt(n1)', r: 'nthRoot(n1, 2)' },\n];\n\nconst simplify = (v) => mathjs.simplify(v, SIMPLIFY_RULES.concat(mathjs.simplify.rules)); //.concat(SIMPLIFY_RULES));\n\nconst areValuesEqual = (valueOne, valueTwo, options = {}) => {\n const {\n // if explicitly set to false, having a decimal value in either side will result in a false equality\n // regardless of mathematical correctness\n allowDecimals,\n isLatex, // if the passed in values are latex, they need to be escaped\n inverse, // returns inverse for the comparison result\n } = options;\n\n let valueOneToUse = valueOne;\n let valueTwoToUse = valueTwo;\n\n if (allowDecimals === false) {\n if (containsDecimal(valueOne) || containsDecimal(valueTwo)) {\n return false;\n }\n } else if (allowDecimals === true) {\n if (containsDecimal(valueOne) && decimalWithThousandSeparatorNumberRegex.test(valueOne)) {\n valueOneToUse = valueOne.replace(decimalCommaRegex, '');\n }\n\n if (containsDecimal(valueTwo) && decimalWithThousandSeparatorNumberRegex.test(valueTwo)) {\n valueTwoToUse = valueTwo.replace(decimalCommaRegex, '');\n }\n }\n\n const preparedValueOne = prepareExpression(valueOneToUse, isLatex, allowDecimals);\n const preparedValueTwo = prepareExpression(valueTwoToUse, isLatex, allowDecimals);\n\n let one = shouldRationalizeEntireTree(preparedValueOne) ? mathjs.rationalize(preparedValueOne) : preparedValueOne;\n let two = shouldRationalizeEntireTree(preparedValueTwo) ? mathjs.rationalize(preparedValueTwo) : preparedValueTwo;\n\n one = simplify(one);\n two = simplify(two);\n\n const equals = one.equals(two);\n\n return inverse ? !equals : equals;\n};\n\nexport const ave = (a, b) => {\n const am = mathjs.parse(a);\n const bm = mathjs.parse(b);\n\n const arm = simplify(am);\n const brm = simplify(bm);\n return arm.equals(brm);\n};\n\nexport default areValuesEqual;\n"],"file":"index.js"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "2.3.0-beta.0",
6
+ "version": "2.4.0",
7
7
  "description": "Math evaluator tool for comparing expressions for equality",
8
8
  "keywords": [
9
9
  "math",
@@ -19,11 +19,12 @@
19
19
  "dependencies": {
20
20
  "@pie-framework/math-expressions": "^3.0.0",
21
21
  "jsesc": "^2.5.2",
22
+ "lodash": "^4.17.11",
22
23
  "mathjs": "^7.0.1"
23
24
  },
24
25
  "devDependencies": {
25
- "@pie-lib/test-utils": "^0.4.0-beta.0"
26
+ "@pie-lib/test-utils": "beta"
26
27
  },
27
28
  "scripts": {},
28
- "gitHead": "3818c24530f62b5bb9be7a2c6aa5428f13a17e0a"
29
+ "gitHead": "ecb1ca31aa1c24d23af00d5ad04ce73ed8871057"
29
30
  }
@@ -1,314 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
8
-
9
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
-
11
- var _index = _interopRequireWildcard(require("../index"));
12
-
13
- var _lodash = _interopRequireDefault(require("lodash"));
14
-
15
- var _templateObject, _templateObject2, _templateObject3;
16
-
17
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
18
-
19
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
20
-
21
- describe('math-evaluator', function () {
22
- describe('latexToText', function () {
23
- var assertLatexToText = function assertLatexToText(input, expected) {
24
- it("".concat(input, " => ").concat(expected), function () {
25
- var result = (0, _index.latexToText)(input);
26
- expect(result).toEqual(expected);
27
- });
28
- };
29
-
30
- assertLatexToText('\\frac{ \\frac{1}{3}}{3}', '(1/3)/3');
31
- assertLatexToText('\\neq', '0 != 0');
32
- assertLatexToText('10 \\neq 20', '10 != 20');
33
- assertLatexToText('10 \\neq', '10 != 0');
34
- assertLatexToText('\\neq 10', '0 != 10');
35
- assertLatexToText('40%', 'percent(40)');
36
- assertLatexToText('%', 'percent(0)');
37
- assertLatexToText('12%', 'percent(12)');
38
- assertLatexToText('12\\%', 'percent(12)');
39
- assertLatexToText('-12.5%', '- percent(12.5)');
40
- assertLatexToText('-12.5\\%', '- percent(12.5)');
41
- });
42
-
43
- var assert = function assert(isEqual, opts) {
44
- return function (label) {
45
- return function () {
46
- var args = Array.from(arguments);
47
-
48
- var pairs = _lodash["default"].chunk(args, 2);
49
-
50
- describe(label, function () {
51
- pairs.forEach(function (_ref) {
52
- var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
53
- a = _ref2[0],
54
- b = _ref2[1];
55
-
56
- it("".concat(a, " === ").concat(b, " ? ").concat(isEqual), function () {
57
- expect((0, _index["default"])(a, b, opts)).toBe(isEqual);
58
- });
59
- });
60
- });
61
- };
62
- };
63
- };
64
-
65
- var assertEqual = assert(true);
66
- var assertNotEqual = assert(false);
67
- var assertLatexEqual = assert(true, {
68
- isLatex: true
69
- });
70
- var assertLatexNotEqual = assert(false, {
71
- isLatex: true
72
- });
73
-
74
- var _amjs = function _amjs(only) {
75
- return function (a, b, equal) {
76
- var fn = only ? it.only : it;
77
- fn("".concat(a, " === ").concat(b, " => ").concat(equal), function () {
78
- var as = (0, _index.latexToText)(a);
79
- var bs = (0, _index.latexToText)(b);
80
- expect((0, _index.ave)(as, bs)).toEqual(equal);
81
- });
82
- };
83
- };
84
-
85
- var assertThroughMathJs = _amjs(false);
86
-
87
- assertThroughMathJs.only = _amjs(true);
88
-
89
- var _als = function _als(only) {
90
- return function (input, expected) {
91
- var fn = only ? it.only : it;
92
- fn("".concat(input, " => ").concat(expected), function () {
93
- expect((0, _index.latexToText)(input)).toEqual(expected);
94
- });
95
- };
96
- };
97
-
98
- var assertLatexFromString = _als(false);
99
-
100
- assertLatexFromString.only = _als(true);
101
- describe('ch6456', function () {
102
- assertEqual('percent')('-12.5%', '-12.5%');
103
- assertEqual('percent')('-12.5\\%', '-12.5%');
104
- assertNotEqual('percent')('-11.5%', '-12.5%');
105
- });
106
- describe('ch6456 - latex', function () {
107
- assertLatexEqual('percent')('\\frac{1}{2} -12.5%', '\\frac{2}{4} -12.5%');
108
- assertLatexEqual('percent')('\\frac{1}{2} -12.5%', '\\frac{2}{4} -12.5\\%');
109
- assertLatexNotEqual('percent')('\\frac{4}{2} -12.5%', '\\frac{2}{4} -12.5\\%');
110
- assertLatexNotEqual('percent')('\\frac{2}{2} -12.5%', '\\frac{2}{4} -12.5\\%');
111
- });
112
- describe('PIE-188-math-expressions', function () {
113
- // it('parses expressions correctly', async () => {
114
- // geometry
115
- // MULTIPLY WITH VARIABLE BASED
116
- assertThroughMathJs('\\parallel x', '\\parallel x', true);
117
- assertThroughMathJs('\\parallel x', '\\parallel x', true);
118
- assertThroughMathJs('\\parallel x', '\\parallel 0', false);
119
- assertThroughMathJs('\\overrightarrow{x + 4}', '\\overrightarrow {4 + x}', true);
120
- assertThroughMathJs('\\overrightarrow{4x^2 + 4}', '\\overrightarrow {4x^2 + 8 - 4}', true);
121
- assertThroughMathJs('\\overrightarrow{21*2*x}', '\\overrightarrow {42x}', true);
122
- assertLatexFromString('\\nparallel x', 'nparallel x');
123
- assertLatexFromString('\\overrightarrow{x}', 'overrightarrow x');
124
- assertLatexFromString('\\overleftrightarrow{x}', 'overleftrightarrow x');
125
- assertLatexFromString('\\perp x', 'perp x');
126
- assertLatexFromString('\\angle x', 'angle x');
127
- assertLatexFromString('\\overarc x', 'overarc x');
128
- assertLatexFromString('\\measuredangle x', 'measuredangle x');
129
- assertLatexFromString('\\triangle x', 'triangle x');
130
- assertLatexFromString('\\parallelogram x', 'parallelogram x');
131
- assertLatexFromString('\\odot x', 'odot x');
132
- assertLatexFromString('\\degree x', 'degree x');
133
- assertLatexFromString('\\sim x', 'sim x');
134
- assertLatexFromString('\\cong x', 'cong x');
135
- assertLatexFromString('\\ncong x', 'ncong x');
136
- assertLatexFromString('\\napprox x', 'napprox x'); // UNRECOGNIZED BY LEARNOSITY
137
-
138
- assertLatexFromString('\\nim x', 'nim x'); // UNRECOGNIZED BY LEARNOSITY
139
-
140
- assertLatexFromString('\\sim x', 'sim x');
141
- expect(function () {
142
- return (0, _index.latexToText)('\\sim 4', {
143
- unknownCommandBehavior: 'error'
144
- });
145
- }).toThrow(); // comparisons
146
-
147
- assertLatexFromString('1 \\lt 2', '1 < 2');
148
- assertLatexFromString('1 \\gt 2', '1 > 2');
149
- assertLatexFromString('1 \\le 2', '1 ≤ 2');
150
- assertLatexFromString('1 \\ge 2', '1 ≥ 2'); // exponents
151
-
152
- assertLatexFromString('2^2', '2^2');
153
- assertLatexFromString('2^{3}', '2^3'); // roots
154
-
155
- assertLatexFromString('\\sqrt{2}', 'sqrt(2)');
156
- assertLatexFromString('\\sqrt[{3}]{3}', '3^(1/3)'); // fractions
157
-
158
- assertLatexFromString('\\frac{3}{3}', '3/3');
159
- assertLatexFromString('\\frac{x}{3}', 'x/3');
160
- assertLatexFromString('x\\frac{5}{3}', 'x (5/3)'); // ACTUAL OPERATOR BASED
161
-
162
- assertLatexFromString('\\overline{x}', 'overline x');
163
- assertLatexFromString('\\pm', 'pm');
164
- assertLatexFromString('\\approx x', 'approx x'); // logarithms
165
-
166
- assertLatexFromString("4'", "4'");
167
- assertLatexFromString('\\log 4', 'log(4)');
168
- assertLatexFromString('\\log(4x)', 'log(4 x)');
169
- assertLatexFromString('\\ln 4', 'ln(4)');
170
- assertLatexFromString('|4|', '|4|');
171
- assertLatexFromString('(4)', '4');
172
- assertLatexFromString('(4 + x) * 5', '(4 + x) * 5');
173
- assertLatexFromString('[4]', '4');
174
- assertLatexFromString('\\mu', 'μ');
175
- assertLatexFromString('\\Sigma', 'Σ');
176
- assertLatexFromString('x^{15}', 'x^15');
177
- assertLatexFromString('x_{15}', 'x_15'); // Trigo
178
-
179
- assertLatexFromString('\\sin(x)', 'sin(x)');
180
- assertLatexFromString('\\cos(x)', 'cos(x)');
181
- assertLatexFromString('\\tan(x)', 'tan(x)');
182
- assertLatexFromString('\\sec(x)', 'sec(x)');
183
- assertLatexFromString('\\csc(x)', 'csc(x)');
184
- assertLatexFromString('\\cot(x)', 'cot(x)');
185
- }); // assertNotEqual('custom latex')('1530', `\\odot`);
186
-
187
- assertNotEqual('evaluates simple expressions correctly')('0', 'x', '3x', '4x');
188
- assertEqual('evaluates simple expressions correctly')('x', 'x', '2x', '2x');
189
- describe('bad frac throws error', function () {
190
- it('throws an error', function () {
191
- expect(function () {
192
- return (0, _index["default"])('\\frac12', '\\frac34', {
193
- isLatex: true
194
- });
195
- }).toThrow('Expecting {');
196
- });
197
- });
198
- describe('7119', function () {
199
- it.each(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n v | isEqual\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n "])), '4.5', true, '3.2 + 1.3', true, '(4 - \\frac{4}{5}) + 1.3', true, '\\frac{9}{2}', true, '4 \\frac{1}{2}', true, '\\frac{10}{2} - 0.5', true, '4.55', false)('$a == $isEqual', function (_ref3) {
200
- var v = _ref3.v,
201
- isEqual = _ref3.isEqual;
202
- var result = (0, _index["default"])('4 \\frac{1}{2}', v, {
203
- isLatex: true
204
- });
205
- expect(result).toEqual(isEqual);
206
- });
207
- it('?', function () {
208
- expect((0, _index.latexToText)('4\\frac{1}{2}')).toEqual('4 + 1/2');
209
- });
210
- });
211
- assertEqual('evaluates simple expressions correctly 2')('100', '100', '50 + 50', '25 * 4', '200 / 2', '20 * 5', '2.5 * 40', '10 * 10');
212
- assertNotEqual('evaluates simple expressions correctly 2')('100', '0', '0', '50 * 2', '44 + 57', '100', '44 + 57', '50 * 3');
213
- assertEqual('evaluates simple expressions correctly 3')('50 + 50', '100', '100 / 2 + 50', '100', '2 + 2', '4', '1/2 + .5', '1');
214
- assertNotEqual('evaluates simple expressions correctly 3')('50 + 51', '100', '25 * 2 + 51', '100', '1/2 + .5', '1.9', '1/2 + .5', '1.1');
215
- assertEqual('evaluates simple expressions correctly 4')('50 + 50', '100', '100 / 2 + 50', '100', '2 + 2', '4', '1/2 + .5', '1', '13/2', '13/2', '26/4', '13/2', '6 + 1/2', '13/2', '6.5', '13/2');
216
- assertNotEqual('evaluates simple expressions correctly 4')('50 + 51', '100', '25 * 2 + 51', '100', '1/2 + .5', '1.9', '1/2 + .5', '1.1', '14/2', '13/2', '6.6', '13/2');
217
- it.each(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n a | b\n ", " | ", "\n "])), '((x^2 + x) / x) - 1', 'x')('$a == $b', function (_ref4) {
218
- var a = _ref4.a,
219
- b = _ref4.b;
220
- expect((0, _index["default"])(a, b)).toBe(true);
221
- });
222
- assertEqual('evaluates simple variable expressions correctly')('x', 'x', 'x + 0', 'x', '(x-2) + 2', 'x', '((x^2 + x) / x) - 1', 'x', '2x/2', 'x', '(x + 2)^2', '(x + 2)^2', 'x^2 + 4x + 4', '(x + 2)^2', 'x^2 + 4(x+1)', '(x + 2)^2', 'x^2 + 8 ((x+1) / 2)', '(x + 2)^2');
223
- assertNotEqual('evaluates simple variable expressions correctly')('y', 'x', 'x + 1', 'x', 'x^3 + 4x + 4', '(x + 2)^2', 'x^2 + 4(x+2)', '(x + 2)^2');
224
- assertEqual('evaluates simple variable expressions correctly 2')('(2 + x)^2', '(x + 2)^2', 'x^2 + 4x + 4', '(x + 2)^2', 'x^2 + 4(x+1)', '(x + 2)^2', 'x^2 + 8 ((x+1) / 2)', '(x + 2)^2');
225
- assertEqual('evaluates expressions correctly with variable exponents')('(2 + x)^2x', '(x + 2)^2x', 'y^(2 x)', 'y^(x+x)');
226
- assertEqual('evaluates function expressions correctly with variable parameters')('sqrt(4x)', 'sqrt(2x+2x)', 'sqrt(x^2)', 'sqrt(((x+1)^2) - ((x+1)^2) + x^2)');
227
- assertNotEqual('evaluates simple variable expressions correctly 2')('x^3 + 4x + 4', '(x + 2)^2', 'x^2 + 4(x+2)', '(x + 2)^2');
228
- it('correctly consumes allowDecimals option', function () {
229
- expect((0, _index["default"])('123', '123', {
230
- allowDecimals: true
231
- })).toEqual(true);
232
- expect((0, _index["default"])('123', '123.0', {
233
- allowDecimals: true
234
- })).toEqual(true);
235
- expect((0, _index["default"])('123,0', '123.0', {
236
- allowDecimals: true
237
- })).toEqual(true);
238
- expect((0, _index["default"])('123,0', '123.0', {
239
- allowDecimals: false
240
- })).toEqual(false);
241
- expect((0, _index["default"])('123', '123.0', {
242
- allowDecimals: false
243
- })).toEqual(false);
244
- expect((0, _index["default"])('123', '123,0', {
245
- allowDecimals: false
246
- })).toEqual(false);
247
- });
248
- it('correctly consumes allowDecimals option for complex examples too', function () {
249
- expect((0, _index["default"])('1500000', '1500000', {
250
- allowDecimals: true
251
- })).toEqual(true);
252
- expect((0, _index["default"])('1,500,000', '1,500,000', {
253
- allowDecimals: true
254
- })).toEqual(true);
255
- expect((0, _index["default"])('1500000', '1,500,000', {
256
- allowDecimals: true
257
- })).toEqual(true);
258
- expect((0, _index["default"])('1500000', '1,500,000.00', {
259
- allowDecimals: true
260
- })).toEqual(true);
261
- expect((0, _index["default"])('1500000', '1,500,000.0', {
262
- allowDecimals: true
263
- })).toEqual(true);
264
- expect((0, _index["default"])('1,500,000.0', '1,500,000.00', {
265
- allowDecimals: true
266
- })).toEqual(true);
267
- expect((0, _index["default"])('1500000', '1,500000', {
268
- allowDecimals: true
269
- })).toEqual(false);
270
- expect((0, _index["default"])('1500000', '1500,000', {
271
- allowDecimals: true
272
- })).toEqual(false);
273
- expect((0, _index["default"])('1500000', '1,500,000.01', {
274
- allowDecimals: true
275
- })).toEqual(false);
276
- expect((0, _index["default"])('1500000', '1,500,00,0', {
277
- allowDecimals: true
278
- })).toEqual(false);
279
- expect((0, _index["default"])('1500000', '1500,000', {
280
- allowDecimals: true
281
- })).toEqual(false);
282
- expect((0, _index["default"])('1500000', ',1500,000', {
283
- allowDecimals: true
284
- })).toEqual(false);
285
- });
286
- it('evaluates simple trigo expressions correctly', function () {
287
- expect((0, _index["default"])('sin(x)', 'sin(x)')).toEqual(true);
288
- expect((0, _index["default"])('tan(x)', 'tan(x)')).toEqual(true);
289
- });
290
- it('correctly creates math expressions 1', function () {
291
- expect((0, _index["default"])('f^{-1}\\left(x\\right)=\\sqrt{x-1}+3', 'f^{-1}\\left(x\\right)=\\sqrt{x-1}+3', {
292
- allowDecimals: true,
293
- isLatex: true
294
- })).toEqual(true);
295
- });
296
- it('correctly creates math expressions 2', function () {
297
- expect((0, _index["default"])('72\\div12=6\\text{eggs}', '72\\div12=6\\text{eggs}', {
298
- allowDecimals: true,
299
- isLatex: true
300
- })).toEqual(true);
301
- });
302
- describe('PD-3', function () {
303
- it.each(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n a | b\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", "\n ", "\n "])), '\\left(x\\right)^{ \\frac{1}{\\left(y + 3\\right)}}', '\\sqrt[\\left(y + 3\\right)]{x}', '\\left(x\\right)^{\\frac{1}{3}}', '\\sqrt[3]{x}', '\\left(x\\right)^{\\frac{1}{n}}', '\\sqrt[n]{x}', '\\left(x\\right)^{\\frac{1}{2}}', '\\sqrt{x}', '\\left(x-1\\right)^{\\frac{1}{2}}+3', '\\sqrt{x-1}+3', 'f^{-1}\\left(x\\right)=\\left(x-1\\right)^{\\frac{1}{2}}+3', 'f^{-1}\\left(x\\right)=\\sqrt{x-1}+3')('$a == $b', function (_ref5) {
304
- var a = _ref5.a,
305
- b = _ref5.b;
306
- var opts = {
307
- allowDecimals: true,
308
- isLatex: true
309
- };
310
- expect((0, _index["default"])(a, b, opts)).toBeTruthy();
311
- });
312
- });
313
- });
314
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsImFzc2VydExhdGV4VG9UZXh0IiwiaW5wdXQiLCJleHBlY3RlZCIsIml0IiwicmVzdWx0IiwiZXhwZWN0IiwidG9FcXVhbCIsImFzc2VydCIsImlzRXF1YWwiLCJvcHRzIiwibGFiZWwiLCJhcmdzIiwiQXJyYXkiLCJmcm9tIiwiYXJndW1lbnRzIiwicGFpcnMiLCJfIiwiY2h1bmsiLCJmb3JFYWNoIiwiYSIsImIiLCJ0b0JlIiwiYXNzZXJ0RXF1YWwiLCJhc3NlcnROb3RFcXVhbCIsImFzc2VydExhdGV4RXF1YWwiLCJpc0xhdGV4IiwiYXNzZXJ0TGF0ZXhOb3RFcXVhbCIsIl9hbWpzIiwib25seSIsImVxdWFsIiwiZm4iLCJhcyIsImJzIiwiYXNzZXJ0VGhyb3VnaE1hdGhKcyIsIl9hbHMiLCJhc3NlcnRMYXRleEZyb21TdHJpbmciLCJ1bmtub3duQ29tbWFuZEJlaGF2aW9yIiwidG9UaHJvdyIsImVhY2giLCJ2IiwiYWxsb3dEZWNpbWFscyIsInRvQmVUcnV0aHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7Ozs7Ozs7QUFFQUEsUUFBUSxDQUFDLGdCQUFELEVBQW1CLFlBQU07QUFDL0JBLEVBQUFBLFFBQVEsQ0FBQyxhQUFELEVBQWdCLFlBQU07QUFDNUIsUUFBTUMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFvQixDQUFDQyxLQUFELEVBQVFDLFFBQVIsRUFBcUI7QUFDN0NDLE1BQUFBLEVBQUUsV0FBSUYsS0FBSixpQkFBZ0JDLFFBQWhCLEdBQTRCLFlBQU07QUFDbEMsWUFBTUUsTUFBTSxHQUFHLHdCQUFZSCxLQUFaLENBQWY7QUFDQUksUUFBQUEsTUFBTSxDQUFDRCxNQUFELENBQU4sQ0FBZUUsT0FBZixDQUF1QkosUUFBdkI7QUFDRCxPQUhDLENBQUY7QUFJRCxLQUxEOztBQU1BRixJQUFBQSxpQkFBaUIsQ0FBQywwQkFBRCxF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QjtBQUF1QmYsUUFBQUEsT0FBTyxFQUFFO0FBQWhDLE9BQWI7QUFDQXBCLE1BQUFBLE1BQU0sQ0FBQyx1QkFBZWMsQ0FBZixFQUFrQkMsQ0FBbEIsRUFBcUJYLElBQXJCLENBQUQsQ0FBTixDQUFtQ2dDLFVBQW5DO0FBQ0QsS0FaRDtBQWFELEdBZE8sQ0FBUjtBQWVELENBelpPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJlVmFsdWVzRXF1YWwsIHsgYXZlLCBsYXRleFRvVGV4dCB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmRlc2NyaWJlKCdtYXRoLWV2YWx1YXRvcicsICgpID0+IHtcbiAgZGVzY3JpYmUoJ2xhdGV4VG9UZXh0JywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydExhdGV4VG9UZXh0ID0gKGlucHV0LCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQoYCR7aW5wdXR9ID0+ICR7ZXhwZWN0ZWR9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBsYXRleFRvVGV4dChpbnB1dCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3NlcnRMYXRleFRvVGV4dCgnXFxcXGZyYWN7IFxcXFxmcmFjezF9ezN9fXszfScsICcoMS8zKS8zJyk7XG4gICAgYXNzZXJ0TGF0ZXhUb1RleHQoJ1xcXFxuZXEnLCAnMCAhPSAwJyk7XG4gICAgYXNzZXJ0TGF0ZXhUb1RleHQoJzEwIFxcXFxuZXEgMjAnLCAnMTAgIT0gMjAnKTtcbiAgICBhc3NlcnRMYXRleFRvVGV4dCgnMTAgXFxcXG5lcScsICcxMCAhPSAwJyk7XG4gICAgYXNzZXJ0TGF0ZXhUb1RleHQoJ1xcXFxuZXEgMTAnLCAnMCAhPSAxMCcpO1xuICAgIGFzc2VydExhdGV4VG9UZXh0KCc0MCUnLCAncGVyY2VudCg0MCknKTtcbiAgICBhc3NlcnRMYXRleFRvVGV4dCgnJScsICdwZXJjZW50KDApJyk7XG4gICAgYXNzZXJ0TGF0ZXhUb1RleHQoJzEyJScsICdwZXJjZW50KDEyKScpO1xuICAgIGFzc2VydExhdGV4VG9UZXh0KCcxMlxcXFwlJywgJ3BlcmNlbnQoMTIpJyk7XG4gICAgYXNzZXJ0TGF0ZXhUb1RleHQoJy0xMi41JScsICctIHBlcmNlbnQoMTIuNSknKTtcbiAgICBhc3NlcnRMYXRleFRvVGV4dCgnLTEyLjVcXFxcJScsICctIHBlcmNlbnQoMTIuNSknKTtcbiAgfSk7XG5cbiAgY29uc3QgYXNzZXJ0ID0gKGlzRXF1YWwsIG9wdHMpID0+IChsYWJlbCkgPT5cbiAgICBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5mcm9tKGFyZ3VtZW50cyk7XG4gICAgICBjb25zdCBwYWlycyA9IF8uY2h1bmsoYXJncywgMik7XG5cbiAgICAgIGRlc2NyaWJlKGxhYmVsLCAoKSA9PiB7XG4gICAgICAgIHBhaXJzLmZvckVhY2goKFthLCBiXSkgPT4ge1xuICAgICAgICAgIGl0KGAke2F9ID09PSAke2J9ID8gJHtpc0VxdWFsfWAsICgpID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbChhLCBiLCBvcHRzKSkudG9CZShpc0VxdWFsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gIGNvbnN0IGFzc2VydEVxdWFsID0gYXNzZXJ0KHRydWUpO1xuICBjb25zdCBhc3NlcnROb3RFcXVhbCA9IGFzc2VydChmYWxzZSk7XG5cbiAgY29uc3QgYXNzZXJ0TGF0ZXhFcXVhbCA9IGFzc2VydCh0cnVlLCB7IGlzTGF0ZXg6IHRydWUgfSk7XG4gIGNvbnN0IGFzc2VydExhdGV4Tm90RXF1YWwgPSBhc3NlcnQoZmFsc2UsIHsgaXNMYXRleDogdHJ1ZSB9KTtcblxuICBjb25zdCBfYW1qcyA9IChvbmx5KSA9PiAoYSwgYiwgZXF1YWwpID0+IHtcbiAgICBjb25zdCBmbiA9IG9ubHkgPyBpdC5vbmx5IDogaXQ7XG4gICAgZm4oYCR7YX0gPT09ICR7Yn0gPT4gJHtlcXVhbH1gLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcyA9IGxhdGV4VG9UZXh0KGEpO1xuICAgICAgY29uc3QgYnMgPSBsYXRleFRvVGV4dChiKTtcbiAgICAgIGV4cGVjdChhdmUoYXMsIGJzKSkudG9FcXVhbChlcXVhbCk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgYXNzZXJ0VGhyb3VnaE1hdGhKcyA9IF9hbWpzKGZhbHNlKTtcbiAgYXNzZXJ0VGhyb3VnaE1hdGhKcy5vbmx5ID0gX2FtanModHJ1ZSk7XG5cbiAgY29uc3QgX2FscyA9IChvbmx5KSA9PiAoaW5wdXQsIGV4cGVjdGVkKSA9PiB7XG4gICAgY29uc3QgZm4gPSBvbmx5ID8gaXQub25seSA6IGl0O1xuICAgIGZuKGAke2lucHV0fSA9PiAke2V4cGVjdGVkfWAsICgpID0+IHtcbiAgICAgIGV4cGVjdChsYXRleFRvVGV4dChpbnB1dCkpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGFzc2VydExhdGV4RnJvbVN0cmluZyA9IF9hbHMoZmFsc2UpO1xuICBhc3NlcnRMYXRleEZyb21TdHJpbmcub25seSA9IF9hbHModHJ1ZSk7XG5cbiAgZGVzY3JpYmUoJ2NoNjQ1NicsICgpID0+IHtcbiAgICBhc3NlcnRFcXVhbCgncGVyY2VudCcpKCctMTIuNSUnLCAnLTEyLjUlJyk7XG4gICAgYXNzZXJ0RXF1YWwoJ3BlcmNlbnQnKSgnLTEyLjVcXFxcJScsICctMTIuNSUnKTtcbiAgICBhc3NlcnROb3RFcXVhbCgncGVyY2VudCcpKCctMTEuNSUnLCAnLTEyLjUlJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjaDY0NTYgLSBsYXRleCcsICgpID0+IHtcbiAgICBhc3NlcnRMYXRleEVxdWFsKCdwZXJjZW50JykoJ1xcXFxmcmFjezF9ezJ9IC0xMi41JScsICdcXFxcZnJhY3syfXs0fSAtMTIuNSUnKTtcbiAgICBhc3NlcnRMYXRleEVxdWFsKCdwZXJjZW50JykoJ1xcXFxmcmFjezF9ezJ9IC0xMi41JScsICdcXFxcZnJhY3syfXs0fSAtMTIuNVxcXFwlJyk7XG4gICAgYXNzZXJ0TGF0ZXhOb3RFcXVhbCgncGVyY2VudCcpKCdcXFxcZnJhY3s0fXsyfSAtMTIuNSUnLCAnXFxcXGZyYWN7Mn17NH0gLTEyLjVcXFxcJScpO1xuICAgIGFzc2VydExhdGV4Tm90RXF1YWwoJ3BlcmNlbnQnKSgnXFxcXGZyYWN7Mn17Mn0gLTEyLjUlJywgJ1xcXFxmcmFjezJ9ezR9IC0xMi41XFxcXCUnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BJRS0xODgtbWF0aC1leHByZXNzaW9ucycsICgpID0+IHtcbiAgICAvLyBpdCgncGFyc2VzIGV4cHJlc3Npb25zIGNvcnJlY3RseScsIGFzeW5jICgpID0+IHtcblxuICAgIC8vIGdlb21ldHJ5XG5cbiAgICAvLyBNVUxUSVBMWSBXSVRIIFZBUklBQkxFIEJBU0VEXG4gICAgYXNzZXJ0VGhyb3VnaE1hdGhKcygnXFxcXHBhcmFsbGVsIHgnLCAnXFxcXHBhcmFsbGVsIHgnLCB0cnVlKTtcbiAgICBhc3NlcnRUaHJvdWdoTWF0aEpzKCdcXFxccGFyYWxsZWwgeCcsICdcXFxccGFyYWxsZWwgICB4JywgdHJ1ZSk7XG4gICAgYXNzZXJ0VGhyb3VnaE1hdGhKcygnXFxcXHBhcmFsbGVsIHgnLCAnXFxcXHBhcmFsbGVsICAgMCcsIGZhbHNlKTtcbiAgICBhc3NlcnRUaHJvdWdoTWF0aEpzKCdcXFxcb3ZlcnJpZ2h0YXJyb3d7eCArIDR9JywgJ1xcXFxvdmVycmlnaHRhcnJvdyB7NCArIHh9JywgdHJ1ZSk7XG4gICAgYXNzZXJ0VGhyb3VnaE1hdGhKcygnXFxcXG92ZXJyaWdodGFycm93ezR4XjIgKyA0fScsICdcXFxcb3ZlcnJpZ2h0YXJyb3cgezR4XjIgKyA4IC0gNH0nLCB0cnVlKTtcbiAgICBhc3NlcnRUaHJvdWdoTWF0aEpzKCdcXFxcb3ZlcnJpZ2h0YXJyb3d7MjEqMip4fScsICdcXFxcb3ZlcnJpZ2h0YXJyb3cgezQyeH0nLCB0cnVlKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxucGFyYWxsZWwgeCcsICducGFyYWxsZWwgeCcpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXG92ZXJyaWdodGFycm93e3h9JywgJ292ZXJyaWdodGFycm93IHgnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxvdmVybGVmdHJpZ2h0YXJyb3d7eH0nLCAnb3ZlcmxlZnRyaWdodGFycm93IHgnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxwZXJwIHgnLCAncGVycCB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcYW5nbGUgeCcsICdhbmdsZSB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcb3ZlcmFyYyB4JywgJ292ZXJhcmMgeCcpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXG1lYXN1cmVkYW5nbGUgeCcsICdtZWFzdXJlZGFuZ2xlIHgnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFx0cmlhbmdsZSB4JywgJ3RyaWFuZ2xlIHgnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxwYXJhbGxlbG9ncmFtIHgnLCAncGFyYWxsZWxvZ3JhbSB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcb2RvdCB4JywgJ29kb3QgeCcpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXGRlZ3JlZSB4JywgJ2RlZ3JlZSB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcc2ltIHgnLCAnc2ltIHgnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxjb25nIHgnLCAnY29uZyB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcbmNvbmcgeCcsICduY29uZyB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcbmFwcHJveCB4JywgJ25hcHByb3ggeCcpOyAvLyBVTlJFQ09HTklaRUQgQlkgTEVBUk5PU0lUWVxuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXG5pbSB4JywgJ25pbSB4Jyk7IC8vIFVOUkVDT0dOSVpFRCBCWSBMRUFSTk9TSVRZXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcc2ltIHgnLCAnc2ltIHgnKTtcbiAgICBleHBlY3QoKCkgPT4gbGF0ZXhUb1RleHQoJ1xcXFxzaW0gNCcsIHsgdW5rbm93bkNvbW1hbmRCZWhhdmlvcjogJ2Vycm9yJyB9KSkudG9UaHJvdygpO1xuXG4gICAgLy8gY29tcGFyaXNvbnNcblxuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnMSBcXFxcbHQgMicsICcxIDwgMicpO1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCcxIFxcXFxndCAyJywgJzEgPiAyJyk7XG5cbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJzEgXFxcXGxlIDInLCAnMSDiiaQgMicpO1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCcxIFxcXFxnZSAyJywgJzEg4omlIDInKTtcblxuICAgIC8vIGV4cG9uZW50c1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCcyXjInLCAnMl4yJyk7XG5cbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJzJeezN9JywgJzJeMycpO1xuXG4gICAgLy8gcm9vdHNcblxuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXHNxcnR7Mn0nLCAnc3FydCgyKScpO1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcc3FydFt7M31dezN9JywgJzNeKDEvMyknKTtcblxuICAgIC8vIGZyYWN0aW9uc1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcZnJhY3szfXszfScsICczLzMnKTtcblxuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXGZyYWN7eH17M30nLCAneC8zJyk7XG5cbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ3hcXFxcZnJhY3s1fXszfScsICd4ICg1LzMpJyk7XG5cbiAgICAvLyBBQ1RVQUwgT1BFUkFUT1IgQkFTRURcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxvdmVybGluZXt4fScsICdvdmVybGluZSB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxccG0nLCAncG0nKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxhcHByb3ggeCcsICdhcHByb3ggeCcpO1xuXG4gICAgLy8gbG9nYXJpdGhtc1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKFwiNCdcIiwgXCI0J1wiKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxsb2cgNCcsICdsb2coNCknKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxsb2coNHgpJywgJ2xvZyg0IHgpJyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcbG4gNCcsICdsbig0KScpO1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCd8NHwnLCAnfDR8Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCcoNCknLCAnNCcpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnKDQgKyB4KSAqIDUnLCAnKDQgKyB4KSAqIDUnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1s0XScsICc0Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcbXUnLCAnzrwnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxTaWdtYScsICfOoycpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygneF57MTV9JywgJ3heMTUnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ3hfezE1fScsICd4XzE1Jyk7XG5cbiAgICAvLyBUcmlnb1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcc2luKHgpJywgJ3Npbih4KScpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXGNvcyh4KScsICdjb3MoeCknKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFx0YW4oeCknLCAndGFuKHgpJyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcc2VjKHgpJywgJ3NlYyh4KScpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXGNzYyh4KScsICdjc2MoeCknKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxjb3QoeCknLCAnY290KHgpJyk7XG4gIH0pO1xuXG4gIC8vIGFzc2VydE5vdEVxdWFsKCdjdXN0b20gbGF0ZXgnKSgnMTUzMCcsIGBcXFxcb2RvdGApO1xuICBhc3NlcnROb3RFcXVhbCgnZXZhbHVhdGVzIHNpbXBsZSBleHByZXNzaW9ucyBjb3JyZWN0bHknKSgnMCcsICd4JywgJzN4JywgJzR4Jyk7XG5cbiAgYXNzZXJ0RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5JykoJ3gnLCAneCcsICcyeCcsICcyeCcpO1xuXG4gIGRlc2NyaWJlKCdiYWQgZnJhYyB0aHJvd3MgZXJyb3InLCAoKSA9PiB7XG4gICAgaXQoJ3Rocm93cyBhbiBlcnJvcicsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiBhcmVWYWx1ZXNFcXVhbCgnXFxcXGZyYWMxMicsICdcXFxcZnJhYzM0JywgeyBpc0xhdGV4OiB0cnVlIH0pKS50b1Rocm93KCdFeHBlY3RpbmcgeycpO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJzcxMTknLCAoKSA9PiB7XG4gICAgaXQuZWFjaGBcbiAgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXNFcXVhbFxuICAgICAgJHsnNC41J30gICAgICAgICAgICAgICAgICAgICAgfCAke3RydWV9XG4gICAgICAkeyczLjIgKyAxLjMnfSAgICAgICAgICAgICAgICB8ICR7dHJ1ZX1cbiAgICAgICR7Jyg0IC0gXFxcXGZyYWN7NH17NX0pICsgMS4zJ30gfCAke3RydWV9XG4gICAgICAkeydcXFxcZnJhY3s5fXsyfSd9ICAgICAgICAgICAgIHwgJHt0cnVlfVxuICAgICAgJHsnNCBcXFxcZnJhY3sxfXsyfSd9ICAgICAgICAgICB8ICR7dHJ1ZX1cbiAgICAgICR7J1xcXFxmcmFjezEwfXsyfSAtIDAuNSd9ICAgICAgfCAke3RydWV9XG4gICAgICAkeyc0LjU1J30gICAgICAgICAgICAgICAgICAgICB8ICR7ZmFsc2V9XG4gICAgYCgnJGEgPT0gJGlzRXF1YWwnLCAoeyB2LCBpc0VxdWFsIH0pID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFyZVZhbHVlc0VxdWFsKCc0IFxcXFxmcmFjezF9ezJ9JywgdiwgeyBpc0xhdGV4OiB0cnVlIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChpc0VxdWFsKTtcbiAgICB9KTtcblxuICAgIGl0KCc/JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGxhdGV4VG9UZXh0KCc0XFxcXGZyYWN7MX17Mn0nKSkudG9FcXVhbCgnNCArIDEvMicpO1xuICAgIH0pO1xuICB9KTtcblxuICBhc3NlcnRFcXVhbCgnZXZhbHVhdGVzIHNpbXBsZSBleHByZXNzaW9ucyBjb3JyZWN0bHkgMicpKFxuICAgICcxMDAnLFxuICAgICcxMDAnLFxuICAgICc1MCArIDUwJyxcbiAgICAnMjUgKiA0JyxcbiAgICAnMjAwIC8gMicsXG4gICAgJzIwICogNScsXG4gICAgJzIuNSAqIDQwJyxcbiAgICAnMTAgKiAxMCcsXG4gICk7XG5cbiAgYXNzZXJ0Tm90RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5IDInKShcbiAgICAnMTAwJyxcbiAgICAnMCcsXG4gICAgJzAnLFxuICAgICc1MCAqIDInLFxuICAgICc0NCArIDU3JyxcbiAgICAnMTAwJyxcbiAgICAnNDQgKyA1NycsXG4gICAgJzUwICogMycsXG4gICk7XG5cbiAgYXNzZXJ0RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5IDMnKShcbiAgICAnNTAgKyA1MCcsXG4gICAgJzEwMCcsXG4gICAgJzEwMCAvIDIgKyA1MCcsXG4gICAgJzEwMCcsXG4gICAgJzIgKyAyJyxcbiAgICAnNCcsXG4gICAgJzEvMiArIC41JyxcbiAgICAnMScsXG4gICk7XG5cbiAgYXNzZXJ0Tm90RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5IDMnKShcbiAgICAnNTAgKyA1MScsXG4gICAgJzEwMCcsXG4gICAgJzI1ICogMiArIDUxJyxcbiAgICAnMTAwJyxcbiAgICAnMS8yICsgLjUnLFxuICAgICcxLjknLFxuICAgICcxLzIgKyAuNScsXG4gICAgJzEuMScsXG4gICk7XG5cbiAgYXNzZXJ0RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5IDQnKShcbiAgICAnNTAgKyA1MCcsXG4gICAgJzEwMCcsXG4gICAgJzEwMCAvIDIgKyA1MCcsXG4gICAgJzEwMCcsXG4gICAgJzIgKyAyJyxcbiAgICAnNCcsXG4gICAgJzEvMiArIC41JyxcbiAgICAnMScsXG4gICAgJzEzLzInLFxuICAgICcxMy8yJyxcbiAgICAnMjYvNCcsXG4gICAgJzEzLzInLFxuICAgICc2ICsgMS8yJyxcbiAgICAnMTMvMicsXG4gICAgJzYuNScsXG4gICAgJzEzLzInLFxuICApO1xuXG4gIGFzc2VydE5vdEVxdWFsKCdldmFsdWF0ZXMgc2ltcGxlIGV4cHJlc3Npb25zIGNvcnJlY3RseSA0JykoXG4gICAgJzUwICsgNTEnLFxuICAgICcxMDAnLFxuICAgICcyNSAqIDIgKyA1MScsXG4gICAgJzEwMCcsXG4gICAgJzEvMiArIC41JyxcbiAgICAnMS45JyxcbiAgICAnMS8yICsgLjUnLFxuICAgICcxLjEnLFxuICAgICcxNC8yJyxcbiAgICAnMTMvMicsXG4gICAgJzYuNicsXG4gICAgJzEzLzInLFxuICApO1xuXG4gIGl0LmVhY2hgXG4gICAgYSAgICAgICAgICAgICAgICAgICAgICAgIHwgYlxuICAgICR7JygoeF4yICsgeCkgLyB4KSAtIDEnfSB8ICR7J3gnfVxuICBgKCckYSA9PSAkYicsICh7IGEsIGIgfSkgPT4ge1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbChhLCBiKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgYXNzZXJ0RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgdmFyaWFibGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5JykoXG4gICAgJ3gnLFxuICAgICd4JyxcbiAgICAneCArIDAnLFxuICAgICd4JyxcbiAgICAnKHgtMikgKyAyJyxcbiAgICAneCcsXG4gICAgJygoeF4yICsgeCkgLyB4KSAtIDEnLFxuICAgICd4JyxcbiAgICAnMngvMicsXG4gICAgJ3gnLFxuICAgICcoeCArIDIpXjInLFxuICAgICcoeCArIDIpXjInLFxuICAgICd4XjIgKyA0eCArIDQnLFxuICAgICcoeCArIDIpXjInLFxuICAgICd4XjIgKyA0KHgrMSknLFxuICAgICcoeCArIDIpXjInLFxuICAgICd4XjIgKyA4ICgoeCsxKSAvIDIpJyxcbiAgICAnKHggKyAyKV4yJyxcbiAgKTtcblxuICBhc3NlcnROb3RFcXVhbCgnZXZhbHVhdGVzIHNpbXBsZSB2YXJpYWJsZSBleHByZXNzaW9ucyBjb3JyZWN0bHknKShcbiAgICAneScsXG4gICAgJ3gnLFxuICAgICd4ICsgMScsXG4gICAgJ3gnLFxuICAgICd4XjMgKyA0eCArIDQnLFxuICAgICcoeCArIDIpXjInLFxuICAgICd4XjIgKyA0KHgrMiknLFxuICAgICcoeCArIDIpXjInLFxuICApO1xuXG4gIGFzc2VydEVxdWFsKCdldmFsdWF0ZXMgc2ltcGxlIHZhcmlhYmxlIGV4cHJlc3Npb25zIGNvcnJlY3RseSAyJykoXG4gICAgJygyICsgeCleMicsXG4gICAgJyh4ICsgMileMicsXG4gICAgJ3heMiArIDR4ICsgNCcsXG4gICAgJyh4ICsgMileMicsXG4gICAgJ3heMiArIDQoeCsxKScsXG4gICAgJyh4ICsgMileMicsXG4gICAgJ3heMiArIDggKCh4KzEpIC8gMiknLFxuICAgICcoeCArIDIpXjInLFxuICApO1xuXG4gIGFzc2VydEVxdWFsKCdldmFsdWF0ZXMgZXhwcmVzc2lvbnMgY29ycmVjdGx5IHdpdGggdmFyaWFibGUgZXhwb25lbnRzJykoXG4gICAgJygyICsgeCleMngnLFxuICAgICcoeCArIDIpXjJ4JyxcbiAgICAneV4oMiB4KScsXG4gICAgJ3leKHgreCknLFxuICApO1xuXG4gIGFzc2VydEVxdWFsKCdldmFsdWF0ZXMgZnVuY3Rpb24gZXhwcmVzc2lvbnMgY29ycmVjdGx5IHdpdGggdmFyaWFibGUgcGFyYW1ldGVycycpKFxuICAgICdzcXJ0KDR4KScsXG4gICAgJ3NxcnQoMngrMngpJyxcbiAgICAnc3FydCh4XjIpJyxcbiAgICAnc3FydCgoKHgrMSleMikgLSAoKHgrMSleMikgKyB4XjIpJyxcbiAgKTtcblxuICBhc3NlcnROb3RFcXVhbCgnZXZhbHVhdGVzIHNpbXBsZSB2YXJpYWJsZSBleHByZXNzaW9ucyBjb3JyZWN0bHkgMicpKFxuICAgICd4XjMgKyA0eCArIDQnLFxuICAgICcoeCArIDIpXjInLFxuICAgICd4XjIgKyA0KHgrMiknLFxuICAgICcoeCArIDIpXjInLFxuICApO1xuXG4gIGl0KCdjb3JyZWN0bHkgY29uc3VtZXMgYWxsb3dEZWNpbWFscyBvcHRpb24nLCAoKSA9PiB7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxMjMnLCAnMTIzJywgeyBhbGxvd0RlY2ltYWxzOiB0cnVlIH0pKS50b0VxdWFsKHRydWUpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTIzJywgJzEyMy4wJywgeyBhbGxvd0RlY2ltYWxzOiB0cnVlIH0pKS50b0VxdWFsKHRydWUpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTIzLDAnLCAnMTIzLjAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxMjMsMCcsICcxMjMuMCcsIHsgYWxsb3dEZWNpbWFsczogZmFsc2UgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTIzJywgJzEyMy4wJywgeyBhbGxvd0RlY2ltYWxzOiBmYWxzZSB9KSkudG9FcXVhbChmYWxzZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxMjMnLCAnMTIzLDAnLCB7IGFsbG93RGVjaW1hbHM6IGZhbHNlIH0pKS50b0VxdWFsKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ2NvcnJlY3RseSBjb25zdW1lcyBhbGxvd0RlY2ltYWxzIG9wdGlvbiBmb3IgY29tcGxleCBleGFtcGxlcyB0b28nLCAoKSA9PiB7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxNTAwMDAwJywgJzE1MDAwMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxLDUwMCwwMDAnLCAnMSw1MDAsMDAwJywgeyBhbGxvd0RlY2ltYWxzOiB0cnVlIH0pKS50b0VxdWFsKHRydWUpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTUwMDAwMCcsICcxLDUwMCwwMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxNTAwMDAwJywgJzEsNTAwLDAwMC4wMCcsIHsgYWxsb3dEZWNpbWFsczogdHJ1ZSB9KSkudG9FcXVhbCh0cnVlKTtcbiAgICBleHBlY3QoYXJlVmFsdWVzRXF1YWwoJzE1MDAwMDAnLCAnMSw1MDAsMDAwLjAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxLDUwMCwwMDAuMCcsICcxLDUwMCwwMDAuMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxNTAwMDAwJywgJzEsNTAwMDAwJywgeyBhbGxvd0RlY2ltYWxzOiB0cnVlIH0pKS50b0VxdWFsKGZhbHNlKTtcbiAgICBleHBlY3QoYXJlVmFsdWVzRXF1YWwoJzE1MDAwMDAnLCAnMTUwMCwwMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTUwMDAwMCcsICcxLDUwMCwwMDAuMDEnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTUwMDAwMCcsICcxLDUwMCwwMCwwJywgeyBhbGxvd0RlY2ltYWxzOiB0cnVlIH0pKS50b0VxdWFsKGZhbHNlKTtcbiAgICBleHBlY3QoYXJlVmFsdWVzRXF1YWwoJzE1MDAwMDAnLCAnMTUwMCwwMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTUwMDAwMCcsICcsMTUwMCwwMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICB9KTtcblxuICBpdCgnZXZhbHVhdGVzIHNpbXBsZSB0cmlnbyBleHByZXNzaW9ucyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCdzaW4oeCknLCAnc2luKHgpJykpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCd0YW4oeCknLCAndGFuKHgpJykpLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdjb3JyZWN0bHkgY3JlYXRlcyBtYXRoIGV4cHJlc3Npb25zIDEnLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgYXJlVmFsdWVzRXF1YWwoJ2Zeey0xfVxcXFxsZWZ0KHhcXFxccmlnaHQpPVxcXFxzcXJ0e3gtMX0rMycsICdmXnstMX1cXFxcbGVmdCh4XFxcXHJpZ2h0KT1cXFxcc3FydHt4LTF9KzMnLCB7XG4gICAgICAgIGFsbG93RGVjaW1hbHM6IHRydWUsXG4gICAgICAgIGlzTGF0ZXg6IHRydWUsXG4gICAgICB9KSxcbiAgICApLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdjb3JyZWN0bHkgY3JlYXRlcyBtYXRoIGV4cHJlc3Npb25zIDInLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgYXJlVmFsdWVzRXF1YWwoJzcyXFxcXGRpdjEyPTZcXFxcdGV4dHtlZ2dzfScsICc3MlxcXFxkaXYxMj02XFxcXHRleHR7ZWdnc30nLCB7XG4gICAgICAgIGFsbG93RGVjaW1hbHM6IHRydWUsXG4gICAgICAgIGlzTGF0ZXg6IHRydWUsXG4gICAgICB9KSxcbiAgICApLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQRC0zJywgKCkgPT4ge1xuICAgIGl0LmVhY2hgXG4gICAgICBhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiXG4gICAgICAkeydcXFxcbGVmdCh4XFxcXHJpZ2h0KV57IFxcXFxmcmFjezF9e1xcXFxsZWZ0KHkgKyAzXFxcXHJpZ2h0KX19J30gICAgICAgIHwgJHsnXFxcXHNxcnRbXFxcXGxlZnQoeSArIDNcXFxccmlnaHQpXXt4fSd9XG4gICAgICAkeydcXFxcbGVmdCh4XFxcXHJpZ2h0KV57XFxcXGZyYWN7MX17M319J30gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkeydcXFxcc3FydFszXXt4fSd9XG4gICAgICAkeydcXFxcbGVmdCh4XFxcXHJpZ2h0KV57XFxcXGZyYWN7MX17bn19J30gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkeydcXFxcc3FydFtuXXt4fSd9XG4gICAgICAkeydcXFxcbGVmdCh4XFxcXHJpZ2h0KV57XFxcXGZyYWN7MX17Mn19J30gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkeydcXFxcc3FydHt4fSd9XG4gICAgICAkeydcXFxcbGVmdCh4LTFcXFxccmlnaHQpXntcXFxcZnJhY3sxfXsyfX0rMyd9ICAgICAgICAgICAgICAgICAgICAgICAgfCAkeydcXFxcc3FydHt4LTF9KzMnfVxuICAgICAgJHsnZl57LTF9XFxcXGxlZnQoeFxcXFxyaWdodCk9XFxcXGxlZnQoeC0xXFxcXHJpZ2h0KV57XFxcXGZyYWN7MX17Mn19KzMnfVxuICAgICAgJHsnZl57LTF9XFxcXGxlZnQoeFxcXFxyaWdodCk9XFxcXHNxcnR7eC0xfSszJ31cbiAgICBgKCckYSA9PSAkYicsICh7IGEsIGIgfSkgPT4ge1xuICAgICAgY29uc3Qgb3B0cyA9IHsgYWxsb3dEZWNpbWFsczogdHJ1ZSwgaXNMYXRleDogdHJ1ZSB9O1xuICAgICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKGEsIGIsIG9wdHMpKS50b0JlVHJ1dGh5KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=