@pol-studios/db 1.0.54 → 1.0.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/{DataLayerContext-C7cJtiO8.d.ts → DataLayerContext-BYZtDD0g.d.ts} +1 -1
  2. package/dist/auth/context.js +6 -4
  3. package/dist/auth/hooks.js +7 -5
  4. package/dist/auth/index.js +7 -5
  5. package/dist/{chunk-FIAXWEBK.js → chunk-4EO55YV2.js} +10 -7
  6. package/dist/chunk-4EO55YV2.js.map +1 -0
  7. package/dist/{chunk-DP3YEVSX.js → chunk-6SDH7M7J.js} +26 -10
  8. package/dist/chunk-6SDH7M7J.js.map +1 -0
  9. package/dist/{chunk-UJWETW36.js → chunk-AKIRHA4Q.js} +527 -418
  10. package/dist/chunk-AKIRHA4Q.js.map +1 -0
  11. package/dist/{chunk-2XS2PM62.js → chunk-DDL63KLQ.js} +388 -107
  12. package/dist/chunk-DDL63KLQ.js.map +1 -0
  13. package/dist/{chunk-YA6MUTA7.js → chunk-FI6JAD5G.js} +3 -3
  14. package/dist/{chunk-WQLIGVQR.js → chunk-GWYTROSD.js} +98 -1
  15. package/dist/chunk-GWYTROSD.js.map +1 -0
  16. package/dist/chunk-JOULSXOI.js +415 -0
  17. package/dist/chunk-JOULSXOI.js.map +1 -0
  18. package/dist/{chunk-OKYHI6JG.js → chunk-LF3V3ERS.js} +3 -3
  19. package/dist/{chunk-FMYXG4VN.js → chunk-MEBT5YHA.js} +2 -2
  20. package/dist/{chunk-BZSAPFFB.js → chunk-N4KK5G5T.js} +116 -18
  21. package/dist/chunk-N4KK5G5T.js.map +1 -0
  22. package/dist/chunk-QYAFI34Q.js +64 -0
  23. package/dist/chunk-QYAFI34Q.js.map +1 -0
  24. package/dist/{chunk-3Q74DK5K.js → chunk-VYFAMTHI.js} +2 -2
  25. package/dist/chunk-W7PERM66.js +215 -0
  26. package/dist/chunk-W7PERM66.js.map +1 -0
  27. package/dist/{chunk-ZGQ7Q4ZU.js → chunk-WM25QE7E.js} +2 -2
  28. package/dist/{chunk-HZIVE5AZ.js → chunk-YRIPM2AN.js} +253 -338
  29. package/dist/chunk-YRIPM2AN.js.map +1 -0
  30. package/dist/chunk-YUX6RGLZ.js +1858 -0
  31. package/dist/chunk-YUX6RGLZ.js.map +1 -0
  32. package/dist/{chunk-Z3EJX3VG.js → chunk-Z456IHCB.js} +3 -3
  33. package/dist/core/index.d.ts +24 -1
  34. package/dist/{executor-YJw4m7Q7.d.ts → executor-D15yjeMo.d.ts} +20 -0
  35. package/dist/hooks/index.d.ts +3 -3
  36. package/dist/hooks/index.js +4 -2
  37. package/dist/{index-jVYdTeWx.d.ts → index-CFUuTzXO.d.ts} +1 -1
  38. package/dist/index.d.ts +5 -5
  39. package/dist/index.js +16 -14
  40. package/dist/index.native.d.ts +62 -8
  41. package/dist/index.native.js +16 -14
  42. package/dist/index.web.d.ts +10 -9
  43. package/dist/index.web.js +30 -19
  44. package/dist/index.web.js.map +1 -1
  45. package/dist/mutation/index.js +3 -3
  46. package/dist/parser/index.js +3 -3
  47. package/dist/powersync-bridge/index.d.ts +1 -1
  48. package/dist/query/index.d.ts +4 -83
  49. package/dist/query/index.js +17 -7
  50. package/dist/realtime/index.d.ts +80 -1
  51. package/dist/realtime/index.js +14 -12
  52. package/dist/realtime/index.js.map +1 -1
  53. package/dist/select-parser-BAV7fOaM.d.ts +144 -0
  54. package/dist/types/index.d.ts +3 -3
  55. package/dist/types/index.js +4 -4
  56. package/dist/{useDbCount-DHLJzmkO.d.ts → useDbCount-Ckb-FhZk.d.ts} +1 -1
  57. package/dist/{useResolveFeedback-B0UcYWVI.d.ts → useResolveFeedback-CuUkdHoR.d.ts} +13 -29
  58. package/dist/with-auth/index.js +9 -7
  59. package/dist/with-auth/index.js.map +1 -1
  60. package/package.json +9 -4
  61. package/dist/chunk-2XS2PM62.js.map +0 -1
  62. package/dist/chunk-BZSAPFFB.js.map +0 -1
  63. package/dist/chunk-CTRY7JDP.js +0 -4112
  64. package/dist/chunk-CTRY7JDP.js.map +0 -1
  65. package/dist/chunk-DP3YEVSX.js.map +0 -1
  66. package/dist/chunk-FIAXWEBK.js.map +0 -1
  67. package/dist/chunk-HZIVE5AZ.js.map +0 -1
  68. package/dist/chunk-INEUG6MC.js +0 -521
  69. package/dist/chunk-INEUG6MC.js.map +0 -1
  70. package/dist/chunk-UJWETW36.js.map +0 -1
  71. package/dist/chunk-WQLIGVQR.js.map +0 -1
  72. /package/dist/{chunk-YA6MUTA7.js.map → chunk-FI6JAD5G.js.map} +0 -0
  73. /package/dist/{chunk-OKYHI6JG.js.map → chunk-LF3V3ERS.js.map} +0 -0
  74. /package/dist/{chunk-FMYXG4VN.js.map → chunk-MEBT5YHA.js.map} +0 -0
  75. /package/dist/{chunk-3Q74DK5K.js.map → chunk-VYFAMTHI.js.map} +0 -0
  76. /package/dist/{chunk-ZGQ7Q4ZU.js.map → chunk-WM25QE7E.js.map} +0 -0
  77. /package/dist/{chunk-Z3EJX3VG.js.map → chunk-Z456IHCB.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/tools/output/categories.js","../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/tools/output/properties.js","../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/tools/output/scripts.js","../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/xregexp.js","../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/addons/build.js","../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/addons/matchrecursive.js","../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/addons/unicode-base.js","../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/addons/unicode-categories.js","../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/addons/unicode-properties.js","../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/addons/unicode-scripts.js","../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/index.js","../../../../node_modules/.pnpm/flat@6.0.1/node_modules/flat/index.js","../../../../node_modules/.pnpm/fast-equals@5.2.2/node_modules/fast-equals/src/utils.ts","../../../../node_modules/.pnpm/fast-equals@5.2.2/node_modules/fast-equals/src/equals.ts","../../../../node_modules/.pnpm/fast-equals@5.2.2/node_modules/fast-equals/src/comparator.ts","../../../../node_modules/.pnpm/fast-equals@5.2.2/node_modules/fast-equals/src/index.ts"],"sourcesContent":["module.exports = [\n {\n 'name': 'C',\n 'alias': 'Other',\n 'isBmpLast': true,\n 'bmp': '\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u0380-\\u0383\\u038B\\u038D\\u03A2\\u0530\\u0557\\u0558\\u058B\\u058C\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EE\\u05F5-\\u0605\\u061C\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB\\u07FC\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F\\u086B-\\u086F\\u088F-\\u0897\\u08E2\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FF\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A77-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0AF8\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B54\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0BFF\\u0C0D\\u0C11\\u0C29\\u0C3A\\u0C3B\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C76\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDC\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0CFF\\u0D0D\\u0D11\\u0D45\\u0D49\\u0D50-\\u0D53\\u0D64\\u0D65\\u0D80\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DE5\\u0DF0\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F6\\u13F7\\u13FE\\u13FF\\u169D-\\u169F\\u16F9-\\u16FF\\u1716-\\u171E\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180E\\u181A-\\u181F\\u1879-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE\\u1AAF\\u1ACF-\\u1AFF\\u1B4D-\\u1B4F\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC8-\\u1CCF\\u1CFB-\\u1CFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20C1-\\u20CF\\u20F1-\\u20FF\\u218C-\\u218F\\u2427-\\u243F\\u244B-\\u245F\\u2B74\\u2B75\\u2B96\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E5E-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u3130\\u318F\\u31E4-\\u31EF\\u321F\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA6F8-\\uA6FF\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA82D-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C6-\\uA8CD\\uA8DA-\\uA8DF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB6C-\\uAB6F\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC3-\\uFBD2\\uFD90\\uFD91\\uFDC8-\\uFDCE\\uFDD0-\\uFDEF\\uFE1A-\\uFE1F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF',\n 'astral': '\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDCFF\\uDD03-\\uDD06\\uDD34-\\uDD36\\uDD8F\\uDD9D-\\uDD9F\\uDDA1-\\uDDCF\\uDDFE-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEDF\\uDEFC-\\uDEFF\\uDF24-\\uDF2C\\uDF4B-\\uDF4F\\uDF7B-\\uDF7F\\uDF9E\\uDFC4-\\uDFC7\\uDFD6-\\uDFFF]|\\uD801[\\uDC9E\\uDC9F\\uDCAA-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6E\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56\\uDC9F-\\uDCA6\\uDCB0-\\uDCDF\\uDCF3\\uDCF6-\\uDCFA\\uDD1C-\\uDD1E\\uDD3A-\\uDD3E\\uDD40-\\uDD7F\\uDDB8-\\uDDBB\\uDDD0\\uDDD1\\uDE04\\uDE07-\\uDE0B\\uDE14\\uDE18\\uDE36\\uDE37\\uDE3B-\\uDE3E\\uDE49-\\uDE4F\\uDE59-\\uDE5F\\uDEA0-\\uDEBF\\uDEE7-\\uDEEA\\uDEF7-\\uDEFF\\uDF36-\\uDF38\\uDF56\\uDF57\\uDF73-\\uDF77\\uDF92-\\uDF98\\uDF9D-\\uDFA8\\uDFB0-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCF9\\uDD28-\\uDD2F\\uDD3A-\\uDE5F\\uDE7F\\uDEAA\\uDEAE\\uDEAF\\uDEB2-\\uDEFF\\uDF28-\\uDF2F\\uDF5A-\\uDF6F\\uDF8A-\\uDFAF\\uDFCC-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC4E-\\uDC51\\uDC76-\\uDC7E\\uDCBD\\uDCC3-\\uDCCF\\uDCE9-\\uDCEF\\uDCFA-\\uDCFF\\uDD35\\uDD48-\\uDD4F\\uDD77-\\uDD7F\\uDDE0\\uDDF5-\\uDDFF\\uDE12\\uDE3F-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEAA-\\uDEAF\\uDEEB-\\uDEEF\\uDEFA-\\uDEFF\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A\\uDF45\\uDF46\\uDF49\\uDF4A\\uDF4E\\uDF4F\\uDF51-\\uDF56\\uDF58-\\uDF5C\\uDF64\\uDF65\\uDF6D-\\uDF6F\\uDF75-\\uDFFF]|\\uD805[\\uDC5C\\uDC62-\\uDC7F\\uDCC8-\\uDCCF\\uDCDA-\\uDD7F\\uDDB6\\uDDB7\\uDDDE-\\uDDFF\\uDE45-\\uDE4F\\uDE5A-\\uDE5F\\uDE6D-\\uDE7F\\uDEBA-\\uDEBF\\uDECA-\\uDEFF\\uDF1B\\uDF1C\\uDF2C-\\uDF2F\\uDF47-\\uDFFF]|\\uD806[\\uDC3C-\\uDC9F\\uDCF3-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD36\\uDD39\\uDD3A\\uDD47-\\uDD4F\\uDD5A-\\uDD9F\\uDDA8\\uDDA9\\uDDD8\\uDDD9\\uDDE5-\\uDDFF\\uDE48-\\uDE4F\\uDEA3-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC37\\uDC46-\\uDC4F\\uDC6D-\\uDC6F\\uDC90\\uDC91\\uDCA8\\uDCB7-\\uDCFF\\uDD07\\uDD0A\\uDD37-\\uDD39\\uDD3B\\uDD3E\\uDD48-\\uDD4F\\uDD5A-\\uDD5F\\uDD66\\uDD69\\uDD8F\\uDD92\\uDD99-\\uDD9F\\uDDAA-\\uDEDF\\uDEF9-\\uDFAF\\uDFB1-\\uDFBF\\uDFF2-\\uDFFE]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC6F\\uDC75-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD832\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDB3F\\uDB41-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF3-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F\\uDE6A-\\uDE6D\\uDEBF\\uDECA-\\uDECF\\uDEEE\\uDEEF\\uDEF6-\\uDEFF\\uDF46-\\uDF4F\\uDF5A\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE9B-\\uDEFF\\uDF4B-\\uDF4E\\uDF88-\\uDF8E\\uDFA0-\\uDFDF\\uDFE5-\\uDFEF\\uDFF2-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A\\uDC9B\\uDCA0-\\uDFFF]|\\uD833[\\uDC00-\\uDEFF\\uDF2E\\uDF2F\\uDF47-\\uDF4F\\uDFC4-\\uDFFF]|\\uD834[\\uDCF6-\\uDCFF\\uDD27\\uDD28\\uDD73-\\uDD7A\\uDDEB-\\uDDFF\\uDE46-\\uDEDF\\uDEF4-\\uDEFF\\uDF57-\\uDF5F\\uDF79-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDFCC\\uDFCD]|\\uD836[\\uDE8C-\\uDE9A\\uDEA0\\uDEB0-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC07\\uDC19\\uDC1A\\uDC22\\uDC25\\uDC2B-\\uDCFF\\uDD2D-\\uDD2F\\uDD3E\\uDD3F\\uDD4A-\\uDD4D\\uDD50-\\uDE8F\\uDEAF-\\uDEBF\\uDEFA-\\uDEFE\\uDF00-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5\\uDCC6\\uDCD7-\\uDCFF\\uDD4C-\\uDD4F\\uDD5A-\\uDD5D\\uDD60-\\uDFFF]|\\uD83B[\\uDC00-\\uDC70\\uDCB5-\\uDD00\\uDD3E-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDEEF\\uDEF2-\\uDFFF]|\\uD83C[\\uDC2C-\\uDC2F\\uDC94-\\uDC9F\\uDCAF\\uDCB0\\uDCC0\\uDCD0\\uDCF6-\\uDCFF\\uDDAE-\\uDDE5\\uDE03-\\uDE0F\\uDE3C-\\uDE3F\\uDE49-\\uDE4F\\uDE52-\\uDE5F\\uDE66-\\uDEFF]|\\uD83D[\\uDED8-\\uDEDC\\uDEED-\\uDEEF\\uDEFD-\\uDEFF\\uDF74-\\uDF7F\\uDFD9-\\uDFDF\\uDFEC-\\uDFEF\\uDFF1-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE\\uDCAF\\uDCB2-\\uDCFF\\uDE54-\\uDE5F\\uDE6E\\uDE6F\\uDE75-\\uDE77\\uDE7D-\\uDE7F\\uDE87-\\uDE8F\\uDEAD-\\uDEAF\\uDEBB-\\uDEBF\\uDEC6-\\uDECF\\uDEDA-\\uDEDF\\uDEE8-\\uDEEF\\uDEF7-\\uDEFF\\uDF93\\uDFCB-\\uDFEF\\uDFFA-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|\\uDB40[\\uDC00-\\uDCFF\\uDDF0-\\uDFFF]'\n },\n {\n 'name': 'Cc',\n 'alias': 'Control',\n 'bmp': '\\0-\\x1F\\x7F-\\x9F'\n },\n {\n 'name': 'Cf',\n 'alias': 'Format',\n 'bmp': '\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB',\n 'astral': '\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC38]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]'\n },\n {\n 'name': 'Cn',\n 'alias': 'Unassigned',\n 'bmp': '\\u0378\\u0379\\u0380-\\u0383\\u038B\\u038D\\u03A2\\u0530\\u0557\\u0558\\u058B\\u058C\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EE\\u05F5-\\u05FF\\u070E\\u074B\\u074C\\u07B2-\\u07BF\\u07FB\\u07FC\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F\\u086B-\\u086F\\u088F\\u0892-\\u0897\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FF\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A77-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0AF8\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B54\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0BFF\\u0C0D\\u0C11\\u0C29\\u0C3A\\u0C3B\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C76\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDC\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0CFF\\u0D0D\\u0D11\\u0D45\\u0D49\\u0D50-\\u0D53\\u0D64\\u0D65\\u0D80\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DE5\\u0DF0\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F6\\u13F7\\u13FE\\u13FF\\u169D-\\u169F\\u16F9-\\u16FF\\u1716-\\u171E\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u181A-\\u181F\\u1879-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE\\u1AAF\\u1ACF-\\u1AFF\\u1B4D-\\u1B4F\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC8-\\u1CCF\\u1CFB-\\u1CFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u2065\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20C1-\\u20CF\\u20F1-\\u20FF\\u218C-\\u218F\\u2427-\\u243F\\u244B-\\u245F\\u2B74\\u2B75\\u2B96\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E5E-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u3130\\u318F\\u31E4-\\u31EF\\u321F\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA6F8-\\uA6FF\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA82D-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C6-\\uA8CD\\uA8DA-\\uA8DF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB6C-\\uAB6F\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC3-\\uFBD2\\uFD90\\uFD91\\uFDC8-\\uFDCE\\uFDD0-\\uFDEF\\uFE1A-\\uFE1F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD\\uFEFE\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFF8\\uFFFE\\uFFFF',\n 'astral': '\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDCFF\\uDD03-\\uDD06\\uDD34-\\uDD36\\uDD8F\\uDD9D-\\uDD9F\\uDDA1-\\uDDCF\\uDDFE-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEDF\\uDEFC-\\uDEFF\\uDF24-\\uDF2C\\uDF4B-\\uDF4F\\uDF7B-\\uDF7F\\uDF9E\\uDFC4-\\uDFC7\\uDFD6-\\uDFFF]|\\uD801[\\uDC9E\\uDC9F\\uDCAA-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6E\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56\\uDC9F-\\uDCA6\\uDCB0-\\uDCDF\\uDCF3\\uDCF6-\\uDCFA\\uDD1C-\\uDD1E\\uDD3A-\\uDD3E\\uDD40-\\uDD7F\\uDDB8-\\uDDBB\\uDDD0\\uDDD1\\uDE04\\uDE07-\\uDE0B\\uDE14\\uDE18\\uDE36\\uDE37\\uDE3B-\\uDE3E\\uDE49-\\uDE4F\\uDE59-\\uDE5F\\uDEA0-\\uDEBF\\uDEE7-\\uDEEA\\uDEF7-\\uDEFF\\uDF36-\\uDF38\\uDF56\\uDF57\\uDF73-\\uDF77\\uDF92-\\uDF98\\uDF9D-\\uDFA8\\uDFB0-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCF9\\uDD28-\\uDD2F\\uDD3A-\\uDE5F\\uDE7F\\uDEAA\\uDEAE\\uDEAF\\uDEB2-\\uDEFF\\uDF28-\\uDF2F\\uDF5A-\\uDF6F\\uDF8A-\\uDFAF\\uDFCC-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC4E-\\uDC51\\uDC76-\\uDC7E\\uDCC3-\\uDCCC\\uDCCE\\uDCCF\\uDCE9-\\uDCEF\\uDCFA-\\uDCFF\\uDD35\\uDD48-\\uDD4F\\uDD77-\\uDD7F\\uDDE0\\uDDF5-\\uDDFF\\uDE12\\uDE3F-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEAA-\\uDEAF\\uDEEB-\\uDEEF\\uDEFA-\\uDEFF\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A\\uDF45\\uDF46\\uDF49\\uDF4A\\uDF4E\\uDF4F\\uDF51-\\uDF56\\uDF58-\\uDF5C\\uDF64\\uDF65\\uDF6D-\\uDF6F\\uDF75-\\uDFFF]|\\uD805[\\uDC5C\\uDC62-\\uDC7F\\uDCC8-\\uDCCF\\uDCDA-\\uDD7F\\uDDB6\\uDDB7\\uDDDE-\\uDDFF\\uDE45-\\uDE4F\\uDE5A-\\uDE5F\\uDE6D-\\uDE7F\\uDEBA-\\uDEBF\\uDECA-\\uDEFF\\uDF1B\\uDF1C\\uDF2C-\\uDF2F\\uDF47-\\uDFFF]|\\uD806[\\uDC3C-\\uDC9F\\uDCF3-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD36\\uDD39\\uDD3A\\uDD47-\\uDD4F\\uDD5A-\\uDD9F\\uDDA8\\uDDA9\\uDDD8\\uDDD9\\uDDE5-\\uDDFF\\uDE48-\\uDE4F\\uDEA3-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC37\\uDC46-\\uDC4F\\uDC6D-\\uDC6F\\uDC90\\uDC91\\uDCA8\\uDCB7-\\uDCFF\\uDD07\\uDD0A\\uDD37-\\uDD39\\uDD3B\\uDD3E\\uDD48-\\uDD4F\\uDD5A-\\uDD5F\\uDD66\\uDD69\\uDD8F\\uDD92\\uDD99-\\uDD9F\\uDDAA-\\uDEDF\\uDEF9-\\uDFAF\\uDFB1-\\uDFBF\\uDFF2-\\uDFFE]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC6F\\uDC75-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD832\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDB3F\\uDB41-\\uDB7F][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF3-\\uDFFF]|\\uD80D[\\uDC2F\\uDC39-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F\\uDE6A-\\uDE6D\\uDEBF\\uDECA-\\uDECF\\uDEEE\\uDEEF\\uDEF6-\\uDEFF\\uDF46-\\uDF4F\\uDF5A\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE9B-\\uDEFF\\uDF4B-\\uDF4E\\uDF88-\\uDF8E\\uDFA0-\\uDFDF\\uDFE5-\\uDFEF\\uDFF2-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A\\uDC9B\\uDCA4-\\uDFFF]|\\uD833[\\uDC00-\\uDEFF\\uDF2E\\uDF2F\\uDF47-\\uDF4F\\uDFC4-\\uDFFF]|\\uD834[\\uDCF6-\\uDCFF\\uDD27\\uDD28\\uDDEB-\\uDDFF\\uDE46-\\uDEDF\\uDEF4-\\uDEFF\\uDF57-\\uDF5F\\uDF79-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDFCC\\uDFCD]|\\uD836[\\uDE8C-\\uDE9A\\uDEA0\\uDEB0-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC07\\uDC19\\uDC1A\\uDC22\\uDC25\\uDC2B-\\uDCFF\\uDD2D-\\uDD2F\\uDD3E\\uDD3F\\uDD4A-\\uDD4D\\uDD50-\\uDE8F\\uDEAF-\\uDEBF\\uDEFA-\\uDEFE\\uDF00-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5\\uDCC6\\uDCD7-\\uDCFF\\uDD4C-\\uDD4F\\uDD5A-\\uDD5D\\uDD60-\\uDFFF]|\\uD83B[\\uDC00-\\uDC70\\uDCB5-\\uDD00\\uDD3E-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDEEF\\uDEF2-\\uDFFF]|\\uD83C[\\uDC2C-\\uDC2F\\uDC94-\\uDC9F\\uDCAF\\uDCB0\\uDCC0\\uDCD0\\uDCF6-\\uDCFF\\uDDAE-\\uDDE5\\uDE03-\\uDE0F\\uDE3C-\\uDE3F\\uDE49-\\uDE4F\\uDE52-\\uDE5F\\uDE66-\\uDEFF]|\\uD83D[\\uDED8-\\uDEDC\\uDEED-\\uDEEF\\uDEFD-\\uDEFF\\uDF74-\\uDF7F\\uDFD9-\\uDFDF\\uDFEC-\\uDFEF\\uDFF1-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE\\uDCAF\\uDCB2-\\uDCFF\\uDE54-\\uDE5F\\uDE6E\\uDE6F\\uDE75-\\uDE77\\uDE7D-\\uDE7F\\uDE87-\\uDE8F\\uDEAD-\\uDEAF\\uDEBB-\\uDEBF\\uDEC6-\\uDECF\\uDEDA-\\uDEDF\\uDEE8-\\uDEEF\\uDEF7-\\uDEFF\\uDF93\\uDFCB-\\uDFEF\\uDFFA-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|\\uDB40[\\uDC00\\uDC02-\\uDC1F\\uDC80-\\uDCFF\\uDDF0-\\uDFFF]|[\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]'\n },\n {\n 'name': 'Co',\n 'alias': 'Private_Use',\n 'bmp': '\\uE000-\\uF8FF',\n 'astral': '[\\uDB80-\\uDBBE\\uDBC0-\\uDBFE][\\uDC00-\\uDFFF]|[\\uDBBF\\uDBFF][\\uDC00-\\uDFFD]'\n },\n {\n 'name': 'Cs',\n 'alias': 'Surrogate',\n 'bmp': '\\uD800-\\uDFFF'\n },\n {\n 'name': 'L',\n 'alias': 'Letter',\n 'bmp': 'A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC',\n 'astral': '\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A]'\n },\n {\n 'name': 'LC',\n 'alias': 'Cased_Letter',\n 'bmp': 'A-Za-z\\xB5\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u01BA\\u01BC-\\u01BF\\u01C4-\\u0293\\u0295-\\u02AF\\u0370-\\u0373\\u0376\\u0377\\u037B-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0560-\\u0588\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FD-\\u10FF\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2134\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C7B\\u2C7E-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA640-\\uA66D\\uA680-\\uA69B\\uA722-\\uA76F\\uA771-\\uA787\\uA78B-\\uA78E\\uA790-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F5\\uA7F6\\uA7FA\\uAB30-\\uAB5A\\uAB60-\\uAB68\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF21-\\uFF3A\\uFF41-\\uFF5A',\n 'astral': '\\uD801[\\uDC00-\\uDC4F\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC]|\\uD803[\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD806[\\uDCA0-\\uDCDF]|\\uD81B[\\uDE40-\\uDE7F]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF09\\uDF0B-\\uDF1E]|\\uD83A[\\uDD00-\\uDD43]'\n },\n {\n 'name': 'Ll',\n 'alias': 'Lowercase_Letter',\n 'bmp': 'a-z\\xB5\\xDF-\\xF6\\xF8-\\xFF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02AF\\u0371\\u0373\\u0377\\u037B-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0529\\u052B\\u052D\\u052F\\u0560-\\u0588\\u10D0-\\u10FA\\u10FD-\\u10FF\\u13F8-\\u13FD\\u1C80-\\u1C88\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6\\u1FC7\\u1FD0-\\u1FD3\\u1FD6\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6\\u1FF7\\u210A\\u210E\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C\\u213D\\u2146-\\u2149\\u214E\\u2184\\u2C30-\\u2C5F\\u2C61\\u2C65\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73\\u2C74\\u2C76-\\u2C7B\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA699\\uA69B\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F\\uA771-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793-\\uA795\\uA797\\uA799\\uA79B\\uA79D\\uA79F\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7AF\\uA7B5\\uA7B7\\uA7B9\\uA7BB\\uA7BD\\uA7BF\\uA7C1\\uA7C3\\uA7C8\\uA7CA\\uA7D1\\uA7D3\\uA7D5\\uA7D7\\uA7D9\\uA7F6\\uA7FA\\uAB30-\\uAB5A\\uAB60-\\uAB68\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A',\n 'astral': '\\uD801[\\uDC28-\\uDC4F\\uDCD8-\\uDCFB\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC]|\\uD803[\\uDCC0-\\uDCF2]|\\uD806[\\uDCC0-\\uDCDF]|\\uD81B[\\uDE60-\\uDE7F]|\\uD835[\\uDC1A-\\uDC33\\uDC4E-\\uDC54\\uDC56-\\uDC67\\uDC82-\\uDC9B\\uDCB6-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDCEA-\\uDD03\\uDD1E-\\uDD37\\uDD52-\\uDD6B\\uDD86-\\uDD9F\\uDDBA-\\uDDD3\\uDDEE-\\uDE07\\uDE22-\\uDE3B\\uDE56-\\uDE6F\\uDE8A-\\uDEA5\\uDEC2-\\uDEDA\\uDEDC-\\uDEE1\\uDEFC-\\uDF14\\uDF16-\\uDF1B\\uDF36-\\uDF4E\\uDF50-\\uDF55\\uDF70-\\uDF88\\uDF8A-\\uDF8F\\uDFAA-\\uDFC2\\uDFC4-\\uDFC9\\uDFCB]|\\uD837[\\uDF00-\\uDF09\\uDF0B-\\uDF1E]|\\uD83A[\\uDD22-\\uDD43]'\n },\n {\n 'name': 'Lm',\n 'alias': 'Modifier_Letter',\n 'bmp': '\\u02B0-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0374\\u037A\\u0559\\u0640\\u06E5\\u06E6\\u07F4\\u07F5\\u07FA\\u081A\\u0824\\u0828\\u08C9\\u0971\\u0E46\\u0EC6\\u10FC\\u17D7\\u1843\\u1AA7\\u1C78-\\u1C7D\\u1D2C-\\u1D6A\\u1D78\\u1D9B-\\u1DBF\\u2071\\u207F\\u2090-\\u209C\\u2C7C\\u2C7D\\u2D6F\\u2E2F\\u3005\\u3031-\\u3035\\u303B\\u309D\\u309E\\u30FC-\\u30FE\\uA015\\uA4F8-\\uA4FD\\uA60C\\uA67F\\uA69C\\uA69D\\uA717-\\uA71F\\uA770\\uA788\\uA7F2-\\uA7F4\\uA7F8\\uA7F9\\uA9CF\\uA9E6\\uAA70\\uAADD\\uAAF3\\uAAF4\\uAB5C-\\uAB5F\\uAB69\\uFF70\\uFF9E\\uFF9F',\n 'astral': '\\uD801[\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD81A[\\uDF40-\\uDF43]|\\uD81B[\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD838[\\uDD37-\\uDD3D]|\\uD83A\\uDD4B'\n },\n {\n 'name': 'Lo',\n 'alias': 'Other_Letter',\n 'bmp': '\\xAA\\xBA\\u01BB\\u01C0-\\u01C3\\u0294\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u063F\\u0641-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u0800-\\u0815\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C8\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0972-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E45\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1100-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17DC\\u1820-\\u1842\\u1844-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C77\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u2135-\\u2138\\u2D30-\\u2D67\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3006\\u303C\\u3041-\\u3096\\u309F\\u30A1-\\u30FA\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA014\\uA016-\\uA48C\\uA4D0-\\uA4F7\\uA500-\\uA60B\\uA610-\\uA61F\\uA62A\\uA62B\\uA66E\\uA6A0-\\uA6E5\\uA78F\\uA7F7\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9E0-\\uA9E4\\uA9E7-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA6F\\uAA71-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB\\uAADC\\uAAE0-\\uAAEA\\uAAF2\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF66-\\uFF6F\\uFF71-\\uFF9D\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC',\n 'astral': '\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC50-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF4A\\uDF50]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD837\\uDF0A|\\uD838[\\uDD00-\\uDD2C\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A]'\n },\n {\n 'name': 'Lt',\n 'alias': 'Titlecase_Letter',\n 'bmp': '\\u01C5\\u01C8\\u01CB\\u01F2\\u1F88-\\u1F8F\\u1F98-\\u1F9F\\u1FA8-\\u1FAF\\u1FBC\\u1FCC\\u1FFC'\n },\n {\n 'name': 'Lu',\n 'alias': 'Uppercase_Letter',\n 'bmp': 'A-Z\\xC0-\\xD6\\xD8-\\xDE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178\\u0179\\u017B\\u017D\\u0181\\u0182\\u0184\\u0186\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193\\u0194\\u0196-\\u0198\\u019C\\u019D\\u019F\\u01A0\\u01A2\\u01A4\\u01A6\\u01A7\\u01A9\\u01AC\\u01AE\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A\\u023B\\u023D\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E\\u213F\\u2145\\u2183\\u2C00-\\u2C2F\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AE\\uA7B0-\\uA7B4\\uA7B6\\uA7B8\\uA7BA\\uA7BC\\uA7BE\\uA7C0\\uA7C2\\uA7C4-\\uA7C7\\uA7C9\\uA7D0\\uA7D6\\uA7D8\\uA7F5\\uFF21-\\uFF3A',\n 'astral': '\\uD801[\\uDC00-\\uDC27\\uDCB0-\\uDCD3\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95]|\\uD803[\\uDC80-\\uDCB2]|\\uD806[\\uDCA0-\\uDCBF]|\\uD81B[\\uDE40-\\uDE5F]|\\uD835[\\uDC00-\\uDC19\\uDC34-\\uDC4D\\uDC68-\\uDC81\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB5\\uDCD0-\\uDCE9\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD38\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD6C-\\uDD85\\uDDA0-\\uDDB9\\uDDD4-\\uDDED\\uDE08-\\uDE21\\uDE3C-\\uDE55\\uDE70-\\uDE89\\uDEA8-\\uDEC0\\uDEE2-\\uDEFA\\uDF1C-\\uDF34\\uDF56-\\uDF6E\\uDF90-\\uDFA8\\uDFCA]|\\uD83A[\\uDD00-\\uDD21]'\n },\n {\n 'name': 'M',\n 'alias': 'Mark',\n 'bmp': '\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0898-\\u089F\\u08CA-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F',\n 'astral': '\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCC2\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDD00-\\uDDEF]'\n },\n {\n 'name': 'Mc',\n 'alias': 'Spacing_Mark',\n 'bmp': '\\u0903\\u093B\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u094F\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u1715\\u1734\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u1A19\\u1A1A\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1BE7\\u1BEA-\\u1BEC\\u1BEE\\u1BF2\\u1BF3\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF7\\u302E\\u302F\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BE-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uAA7D\\uAAEB\\uAAEE\\uAAEF\\uAAF5\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC',\n 'astral': '\\uD804[\\uDC00\\uDC02\\uDC82\\uDCB0-\\uDCB2\\uDCB7\\uDCB8\\uDD2C\\uDD45\\uDD46\\uDD82\\uDDB3-\\uDDB5\\uDDBF\\uDDC0\\uDDCE\\uDE2C-\\uDE2E\\uDE32\\uDE33\\uDE35\\uDEE0-\\uDEE2\\uDF02\\uDF03\\uDF3E\\uDF3F\\uDF41-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63]|\\uD805[\\uDC35-\\uDC37\\uDC40\\uDC41\\uDC45\\uDCB0-\\uDCB2\\uDCB9\\uDCBB-\\uDCBE\\uDCC1\\uDDAF-\\uDDB1\\uDDB8-\\uDDBB\\uDDBE\\uDE30-\\uDE32\\uDE3B\\uDE3C\\uDE3E\\uDEAC\\uDEAE\\uDEAF\\uDEB6\\uDF20\\uDF21\\uDF26]|\\uD806[\\uDC2C-\\uDC2E\\uDC38\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3D\\uDD40\\uDD42\\uDDD1-\\uDDD3\\uDDDC-\\uDDDF\\uDDE4\\uDE39\\uDE57\\uDE58\\uDE97]|\\uD807[\\uDC2F\\uDC3E\\uDCA9\\uDCB1\\uDCB4\\uDD8A-\\uDD8E\\uDD93\\uDD94\\uDD96\\uDEF5\\uDEF6]|\\uD81B[\\uDF51-\\uDF87\\uDFF0\\uDFF1]|\\uD834[\\uDD65\\uDD66\\uDD6D-\\uDD72]'\n },\n {\n 'name': 'Me',\n 'alias': 'Enclosing_Mark',\n 'bmp': '\\u0488\\u0489\\u1ABE\\u20DD-\\u20E0\\u20E2-\\u20E4\\uA670-\\uA672'\n },\n {\n 'name': 'Mn',\n 'alias': 'Nonspacing_Mark',\n 'bmp': '\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0898-\\u089F\\u08CA-\\u08E1\\u08E3-\\u0902\\u093A\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0957\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u09FE\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B55\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C00\\u0C04\\u0C3C\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D00\\u0D01\\u0D3B\\u0D3C\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0D81\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732\\u1733\\u1752\\u1753\\u1772\\u1773\\u17B4\\u17B5\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A1B\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1AB0-\\u1ABD\\u1ABF-\\u1ACE\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1BAB-\\u1BAD\\u1BE6\\u1BE8\\u1BE9\\u1BED\\u1BEF-\\u1BF1\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302D\\u3099\\u309A\\uA66F\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA82C\\uA8C4\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uA9BD\\uA9E5\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAA7C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEC\\uAAED\\uAAF6\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F',\n 'astral': '\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC01\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC81\\uDCB3-\\uDCB6\\uDCB9\\uDCBA\\uDCC2\\uDD00-\\uDD02\\uDD27-\\uDD2B\\uDD2D-\\uDD34\\uDD73\\uDD80\\uDD81\\uDDB6-\\uDDBE\\uDDC9-\\uDDCC\\uDDCF\\uDE2F-\\uDE31\\uDE34\\uDE36\\uDE37\\uDE3E\\uDEDF\\uDEE3-\\uDEEA\\uDF00\\uDF01\\uDF3B\\uDF3C\\uDF40\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC38-\\uDC3F\\uDC42-\\uDC44\\uDC46\\uDC5E\\uDCB3-\\uDCB8\\uDCBA\\uDCBF\\uDCC0\\uDCC2\\uDCC3\\uDDB2-\\uDDB5\\uDDBC\\uDDBD\\uDDBF\\uDDC0\\uDDDC\\uDDDD\\uDE33-\\uDE3A\\uDE3D\\uDE3F\\uDE40\\uDEAB\\uDEAD\\uDEB0-\\uDEB5\\uDEB7\\uDF1D-\\uDF1F\\uDF22-\\uDF25\\uDF27-\\uDF2B]|\\uD806[\\uDC2F-\\uDC37\\uDC39\\uDC3A\\uDD3B\\uDD3C\\uDD3E\\uDD43\\uDDD4-\\uDDD7\\uDDDA\\uDDDB\\uDDE0\\uDE01-\\uDE0A\\uDE33-\\uDE38\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE56\\uDE59-\\uDE5B\\uDE8A-\\uDE96\\uDE98\\uDE99]|\\uD807[\\uDC30-\\uDC36\\uDC38-\\uDC3D\\uDC3F\\uDC92-\\uDCA7\\uDCAA-\\uDCB0\\uDCB2\\uDCB3\\uDCB5\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD90\\uDD91\\uDD95\\uDD97\\uDEF3\\uDEF4]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF8F-\\uDF92\\uDFE4]|\\uD82F[\\uDC9D\\uDC9E]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD67-\\uDD69\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDD00-\\uDDEF]'\n },\n {\n 'name': 'N',\n 'alias': 'Number',\n 'bmp': '0-9\\xB2\\xB3\\xB9\\xBC-\\xBE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D58-\\u0D5E\\u0D66-\\u0D78\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19',\n 'astral': '\\uD800[\\uDD07-\\uDD33\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDEE1-\\uDEFB\\uDF20-\\uDF23\\uDF41\\uDF4A\\uDFD1-\\uDFD5]|\\uD801[\\uDCA0-\\uDCA9]|\\uD802[\\uDC58-\\uDC5F\\uDC79-\\uDC7F\\uDCA7-\\uDCAF\\uDCFB-\\uDCFF\\uDD16-\\uDD1B\\uDDBC\\uDDBD\\uDDC0-\\uDDCF\\uDDD2-\\uDDFF\\uDE40-\\uDE48\\uDE7D\\uDE7E\\uDE9D-\\uDE9F\\uDEEB-\\uDEEF\\uDF58-\\uDF5F\\uDF78-\\uDF7F\\uDFA9-\\uDFAF]|\\uD803[\\uDCFA-\\uDCFF\\uDD30-\\uDD39\\uDE60-\\uDE7E\\uDF1D-\\uDF26\\uDF51-\\uDF54\\uDFC5-\\uDFCB]|\\uD804[\\uDC52-\\uDC6F\\uDCF0-\\uDCF9\\uDD36-\\uDD3F\\uDDD0-\\uDDD9\\uDDE1-\\uDDF4\\uDEF0-\\uDEF9]|\\uD805[\\uDC50-\\uDC59\\uDCD0-\\uDCD9\\uDE50-\\uDE59\\uDEC0-\\uDEC9\\uDF30-\\uDF3B]|\\uD806[\\uDCE0-\\uDCF2\\uDD50-\\uDD59]|\\uD807[\\uDC50-\\uDC6C\\uDD50-\\uDD59\\uDDA0-\\uDDA9\\uDFC0-\\uDFD4]|\\uD809[\\uDC00-\\uDC6E]|\\uD81A[\\uDE60-\\uDE69\\uDEC0-\\uDEC9\\uDF50-\\uDF59\\uDF5B-\\uDF61]|\\uD81B[\\uDE80-\\uDE96]|\\uD834[\\uDEE0-\\uDEF3\\uDF60-\\uDF78]|\\uD835[\\uDFCE-\\uDFFF]|\\uD838[\\uDD40-\\uDD49\\uDEF0-\\uDEF9]|\\uD83A[\\uDCC7-\\uDCCF\\uDD50-\\uDD59]|\\uD83B[\\uDC71-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDCB4\\uDD01-\\uDD2D\\uDD2F-\\uDD3D]|\\uD83C[\\uDD00-\\uDD0C]|\\uD83E[\\uDFF0-\\uDFF9]'\n },\n {\n 'name': 'Nd',\n 'alias': 'Decimal_Number',\n 'bmp': '0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19',\n 'astral': '\\uD801[\\uDCA0-\\uDCA9]|\\uD803[\\uDD30-\\uDD39]|\\uD804[\\uDC66-\\uDC6F\\uDCF0-\\uDCF9\\uDD36-\\uDD3F\\uDDD0-\\uDDD9\\uDEF0-\\uDEF9]|\\uD805[\\uDC50-\\uDC59\\uDCD0-\\uDCD9\\uDE50-\\uDE59\\uDEC0-\\uDEC9\\uDF30-\\uDF39]|\\uD806[\\uDCE0-\\uDCE9\\uDD50-\\uDD59]|\\uD807[\\uDC50-\\uDC59\\uDD50-\\uDD59\\uDDA0-\\uDDA9]|\\uD81A[\\uDE60-\\uDE69\\uDEC0-\\uDEC9\\uDF50-\\uDF59]|\\uD835[\\uDFCE-\\uDFFF]|\\uD838[\\uDD40-\\uDD49\\uDEF0-\\uDEF9]|\\uD83A[\\uDD50-\\uDD59]|\\uD83E[\\uDFF0-\\uDFF9]'\n },\n {\n 'name': 'Nl',\n 'alias': 'Letter_Number',\n 'bmp': '\\u16EE-\\u16F0\\u2160-\\u2182\\u2185-\\u2188\\u3007\\u3021-\\u3029\\u3038-\\u303A\\uA6E6-\\uA6EF',\n 'astral': '\\uD800[\\uDD40-\\uDD74\\uDF41\\uDF4A\\uDFD1-\\uDFD5]|\\uD809[\\uDC00-\\uDC6E]'\n },\n {\n 'name': 'No',\n 'alias': 'Other_Number',\n 'bmp': '\\xB2\\xB3\\xB9\\xBC-\\xBE\\u09F4-\\u09F9\\u0B72-\\u0B77\\u0BF0-\\u0BF2\\u0C78-\\u0C7E\\u0D58-\\u0D5E\\u0D70-\\u0D78\\u0F2A-\\u0F33\\u1369-\\u137C\\u17F0-\\u17F9\\u19DA\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u215F\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA830-\\uA835',\n 'astral': '\\uD800[\\uDD07-\\uDD33\\uDD75-\\uDD78\\uDD8A\\uDD8B\\uDEE1-\\uDEFB\\uDF20-\\uDF23]|\\uD802[\\uDC58-\\uDC5F\\uDC79-\\uDC7F\\uDCA7-\\uDCAF\\uDCFB-\\uDCFF\\uDD16-\\uDD1B\\uDDBC\\uDDBD\\uDDC0-\\uDDCF\\uDDD2-\\uDDFF\\uDE40-\\uDE48\\uDE7D\\uDE7E\\uDE9D-\\uDE9F\\uDEEB-\\uDEEF\\uDF58-\\uDF5F\\uDF78-\\uDF7F\\uDFA9-\\uDFAF]|\\uD803[\\uDCFA-\\uDCFF\\uDE60-\\uDE7E\\uDF1D-\\uDF26\\uDF51-\\uDF54\\uDFC5-\\uDFCB]|\\uD804[\\uDC52-\\uDC65\\uDDE1-\\uDDF4]|\\uD805[\\uDF3A\\uDF3B]|\\uD806[\\uDCEA-\\uDCF2]|\\uD807[\\uDC5A-\\uDC6C\\uDFC0-\\uDFD4]|\\uD81A[\\uDF5B-\\uDF61]|\\uD81B[\\uDE80-\\uDE96]|\\uD834[\\uDEE0-\\uDEF3\\uDF60-\\uDF78]|\\uD83A[\\uDCC7-\\uDCCF]|\\uD83B[\\uDC71-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDCB4\\uDD01-\\uDD2D\\uDD2F-\\uDD3D]|\\uD83C[\\uDD00-\\uDD0C]'\n },\n {\n 'name': 'P',\n 'alias': 'Punctuation',\n 'bmp': '!-#%-\\\\*,-\\\\/:;\\\\?@\\\\[-\\\\]_\\\\{\\\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65',\n 'astral': '\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDEAD\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]'\n },\n {\n 'name': 'Pc',\n 'alias': 'Connector_Punctuation',\n 'bmp': '_\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F'\n },\n {\n 'name': 'Pd',\n 'alias': 'Dash_Punctuation',\n 'bmp': '\\\\-\\u058A\\u05BE\\u1400\\u1806\\u2010-\\u2015\\u2E17\\u2E1A\\u2E3A\\u2E3B\\u2E40\\u2E5D\\u301C\\u3030\\u30A0\\uFE31\\uFE32\\uFE58\\uFE63\\uFF0D',\n 'astral': '\\uD803\\uDEAD'\n },\n {\n 'name': 'Pe',\n 'alias': 'Close_Punctuation',\n 'bmp': '\\\\)\\\\]\\\\}\\u0F3B\\u0F3D\\u169C\\u2046\\u207E\\u208E\\u2309\\u230B\\u232A\\u2769\\u276B\\u276D\\u276F\\u2771\\u2773\\u2775\\u27C6\\u27E7\\u27E9\\u27EB\\u27ED\\u27EF\\u2984\\u2986\\u2988\\u298A\\u298C\\u298E\\u2990\\u2992\\u2994\\u2996\\u2998\\u29D9\\u29DB\\u29FD\\u2E23\\u2E25\\u2E27\\u2E29\\u2E56\\u2E58\\u2E5A\\u2E5C\\u3009\\u300B\\u300D\\u300F\\u3011\\u3015\\u3017\\u3019\\u301B\\u301E\\u301F\\uFD3E\\uFE18\\uFE36\\uFE38\\uFE3A\\uFE3C\\uFE3E\\uFE40\\uFE42\\uFE44\\uFE48\\uFE5A\\uFE5C\\uFE5E\\uFF09\\uFF3D\\uFF5D\\uFF60\\uFF63'\n },\n {\n 'name': 'Pf',\n 'alias': 'Final_Punctuation',\n 'bmp': '\\xBB\\u2019\\u201D\\u203A\\u2E03\\u2E05\\u2E0A\\u2E0D\\u2E1D\\u2E21'\n },\n {\n 'name': 'Pi',\n 'alias': 'Initial_Punctuation',\n 'bmp': '\\xAB\\u2018\\u201B\\u201C\\u201F\\u2039\\u2E02\\u2E04\\u2E09\\u2E0C\\u2E1C\\u2E20'\n },\n {\n 'name': 'Po',\n 'alias': 'Other_Punctuation',\n 'bmp': '!-#%-\\'\\\\*,\\\\.\\\\/:;\\\\?@\\\\\\xA1\\xA7\\xB6\\xB7\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u166E\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u1805\\u1807-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2016\\u2017\\u2020-\\u2027\\u2030-\\u2038\\u203B-\\u203E\\u2041-\\u2043\\u2047-\\u2051\\u2053\\u2055-\\u205E\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00\\u2E01\\u2E06-\\u2E08\\u2E0B\\u2E0E-\\u2E16\\u2E18\\u2E19\\u2E1B\\u2E1E\\u2E1F\\u2E2A-\\u2E2E\\u2E30-\\u2E39\\u2E3C-\\u2E3F\\u2E41\\u2E43-\\u2E4F\\u2E52-\\u2E54\\u3001-\\u3003\\u303D\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFE10-\\uFE16\\uFE19\\uFE30\\uFE45\\uFE46\\uFE49-\\uFE4C\\uFE50-\\uFE52\\uFE54-\\uFE57\\uFE5F-\\uFE61\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF07\\uFF0A\\uFF0C\\uFF0E\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3C\\uFF61\\uFF64\\uFF65',\n 'astral': '\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]'\n },\n {\n 'name': 'Ps',\n 'alias': 'Open_Punctuation',\n 'bmp': '\\\\(\\\\[\\\\{\\u0F3A\\u0F3C\\u169B\\u201A\\u201E\\u2045\\u207D\\u208D\\u2308\\u230A\\u2329\\u2768\\u276A\\u276C\\u276E\\u2770\\u2772\\u2774\\u27C5\\u27E6\\u27E8\\u27EA\\u27EC\\u27EE\\u2983\\u2985\\u2987\\u2989\\u298B\\u298D\\u298F\\u2991\\u2993\\u2995\\u2997\\u29D8\\u29DA\\u29FC\\u2E22\\u2E24\\u2E26\\u2E28\\u2E42\\u2E55\\u2E57\\u2E59\\u2E5B\\u3008\\u300A\\u300C\\u300E\\u3010\\u3014\\u3016\\u3018\\u301A\\u301D\\uFD3F\\uFE17\\uFE35\\uFE37\\uFE39\\uFE3B\\uFE3D\\uFE3F\\uFE41\\uFE43\\uFE47\\uFE59\\uFE5B\\uFE5D\\uFF08\\uFF3B\\uFF5B\\uFF5F\\uFF62'\n },\n {\n 'name': 'S',\n 'alias': 'Symbol',\n 'bmp': '\\\\$\\\\+<->\\\\^`\\\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u0888\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20C0\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC2\\uFD40-\\uFD4F\\uFDCF\\uFDFC-\\uFDFF\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD',\n 'astral': '\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEDD-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF73\\uDF80-\\uDFD8\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE74\\uDE78-\\uDE7C\\uDE80-\\uDE86\\uDE90-\\uDEAC\\uDEB0-\\uDEBA\\uDEC0-\\uDEC5\\uDED0-\\uDED9\\uDEE0-\\uDEE7\\uDEF0-\\uDEF6\\uDF00-\\uDF92\\uDF94-\\uDFCA]'\n },\n {\n 'name': 'Sc',\n 'alias': 'Currency_Symbol',\n 'bmp': '\\\\$\\xA2-\\xA5\\u058F\\u060B\\u07FE\\u07FF\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20C0\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6',\n 'astral': '\\uD807[\\uDFDD-\\uDFE0]|\\uD838\\uDEFF|\\uD83B\\uDCB0'\n },\n {\n 'name': 'Sk',\n 'alias': 'Modifier_Symbol',\n 'bmp': '\\\\^`\\xA8\\xAF\\xB4\\xB8\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u0888\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u309B\\u309C\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uAB5B\\uAB6A\\uAB6B\\uFBB2-\\uFBC2\\uFF3E\\uFF40\\uFFE3',\n 'astral': '\\uD83C[\\uDFFB-\\uDFFF]'\n },\n {\n 'name': 'Sm',\n 'alias': 'Math_Symbol',\n 'bmp': '\\\\+<->\\\\|~\\xAC\\xB1\\xD7\\xF7\\u03F6\\u0606-\\u0608\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u2118\\u2140-\\u2144\\u214B\\u2190-\\u2194\\u219A\\u219B\\u21A0\\u21A3\\u21A6\\u21AE\\u21CE\\u21CF\\u21D2\\u21D4\\u21F4-\\u22FF\\u2320\\u2321\\u237C\\u239B-\\u23B3\\u23DC-\\u23E1\\u25B7\\u25C1\\u25F8-\\u25FF\\u266F\\u27C0-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u27FF\\u2900-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2AFF\\u2B30-\\u2B44\\u2B47-\\u2B4C\\uFB29\\uFE62\\uFE64-\\uFE66\\uFF0B\\uFF1C-\\uFF1E\\uFF5C\\uFF5E\\uFFE2\\uFFE9-\\uFFEC',\n 'astral': '\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD83B[\\uDEF0\\uDEF1]'\n },\n {\n 'name': 'So',\n 'alias': 'Other_Symbol',\n 'bmp': '\\xA6\\xA9\\xAE\\xB0\\u0482\\u058D\\u058E\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u09FA\\u0B70\\u0BF3-\\u0BF8\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116\\u2117\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u214A\\u214C\\u214D\\u214F\\u218A\\u218B\\u2195-\\u2199\\u219C-\\u219F\\u21A1\\u21A2\\u21A4\\u21A5\\u21A7-\\u21AD\\u21AF-\\u21CD\\u21D0\\u21D1\\u21D3\\u21D5-\\u21F3\\u2300-\\u2307\\u230C-\\u231F\\u2322-\\u2328\\u232B-\\u237B\\u237D-\\u239A\\u23B4-\\u23DB\\u23E2-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u25B6\\u25B8-\\u25C0\\u25C2-\\u25F7\\u2600-\\u266E\\u2670-\\u2767\\u2794-\\u27BF\\u2800-\\u28FF\\u2B00-\\u2B2F\\u2B45\\u2B46\\u2B4D-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA828-\\uA82B\\uA836\\uA837\\uA839\\uAA77-\\uAA79\\uFD40-\\uFD4F\\uFDCF\\uFDFD-\\uFDFF\\uFFE4\\uFFE8\\uFFED\\uFFEE\\uFFFC\\uFFFD',\n 'astral': '\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFDC\\uDFE1-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838\\uDD4F|\\uD83B[\\uDCAC\\uDD2E]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFA]|\\uD83D[\\uDC00-\\uDED7\\uDEDD-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF73\\uDF80-\\uDFD8\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE74\\uDE78-\\uDE7C\\uDE80-\\uDE86\\uDE90-\\uDEAC\\uDEB0-\\uDEBA\\uDEC0-\\uDEC5\\uDED0-\\uDED9\\uDEE0-\\uDEE7\\uDEF0-\\uDEF6\\uDF00-\\uDF92\\uDF94-\\uDFCA]'\n },\n {\n 'name': 'Z',\n 'alias': 'Separator',\n 'bmp': ' \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000'\n },\n {\n 'name': 'Zl',\n 'alias': 'Line_Separator',\n 'bmp': '\\u2028'\n },\n {\n 'name': 'Zp',\n 'alias': 'Paragraph_Separator',\n 'bmp': '\\u2029'\n },\n {\n 'name': 'Zs',\n 'alias': 'Space_Separator',\n 'bmp': ' \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000'\n }\n];\n","module.exports = [\n {\n 'name': 'ASCII',\n 'bmp': '\\0-\\x7F'\n },\n {\n 'name': 'Alphabetic',\n 'bmp': 'A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0345\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05B0-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0610-\\u061A\\u0620-\\u0657\\u0659-\\u065F\\u066E-\\u06D3\\u06D5-\\u06DC\\u06E1-\\u06E8\\u06ED-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710-\\u073F\\u074D-\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0817\\u081A-\\u082C\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u08D4-\\u08DF\\u08E3-\\u08E9\\u08F0-\\u093B\\u093D-\\u094C\\u094E-\\u0950\\u0955-\\u0963\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD-\\u09C4\\u09C7\\u09C8\\u09CB\\u09CC\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09F0\\u09F1\\u09FC\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B\\u0A4C\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A70-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB\\u0ACC\\u0AD0\\u0AE0-\\u0AE3\\u0AF9-\\u0AFC\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D-\\u0B44\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD0\\u0BD7\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4C\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C5D\\u0C60-\\u0C63\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCC\\u0CD5\\u0CD6\\u0CDD\\u0CDE\\u0CE0-\\u0CE3\\u0CF1\\u0CF2\\u0D00-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D7A-\\u0D7F\\u0D81-\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E46\\u0E4D\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ECD\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F81\\u0F88-\\u0F97\\u0F99-\\u0FBC\\u1000-\\u1036\\u1038\\u103B-\\u103F\\u1050-\\u108F\\u109A-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1713\\u171F-\\u1733\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17B3\\u17B6-\\u17C8\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u1938\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A61-\\u1A74\\u1AA7\\u1ABF\\u1AC0\\u1ACC-\\u1ACE\\u1B00-\\u1B33\\u1B35-\\u1B43\\u1B45-\\u1B4C\\u1B80-\\u1BA9\\u1BAC-\\u1BAF\\u1BBA-\\u1BE5\\u1BE7-\\u1BF1\\u1C00-\\u1C36\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1DE7-\\u1DF4\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u24B6-\\u24E9\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA674-\\uA67B\\uA67F-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA805\\uA807-\\uA827\\uA840-\\uA873\\uA880-\\uA8C3\\uA8C5\\uA8F2-\\uA8F7\\uA8FB\\uA8FD-\\uA8FF\\uA90A-\\uA92A\\uA930-\\uA952\\uA960-\\uA97C\\uA980-\\uA9B2\\uA9B4-\\uA9BF\\uA9CF\\uA9E0-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA60-\\uAA76\\uAA7A-\\uAABE\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF5\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABEA\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC',\n 'astral': '\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD27\\uDE80-\\uDEA9\\uDEAB\\uDEAC\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC00-\\uDC45\\uDC71-\\uDC75\\uDC82-\\uDCB8\\uDCC2\\uDCD0-\\uDCE8\\uDD00-\\uDD32\\uDD44-\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD80-\\uDDBF\\uDDC1-\\uDDC4\\uDDCE\\uDDCF\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE34\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEE8\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D-\\uDF44\\uDF47\\uDF48\\uDF4B\\uDF4C\\uDF50\\uDF57\\uDF5D-\\uDF63]|\\uD805[\\uDC00-\\uDC41\\uDC43-\\uDC45\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCC1\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDB5\\uDDB8-\\uDDBE\\uDDD8-\\uDDDD\\uDE00-\\uDE3E\\uDE40\\uDE44\\uDE80-\\uDEB5\\uDEB8\\uDF00-\\uDF1A\\uDF1D-\\uDF2A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC38\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD35\\uDD37\\uDD38\\uDD3B\\uDD3C\\uDD3F-\\uDD42\\uDDA0-\\uDDA7\\uDDAA-\\uDDD7\\uDDDA-\\uDDDF\\uDDE1\\uDDE3\\uDDE4\\uDE00-\\uDE32\\uDE35-\\uDE3E\\uDE50-\\uDE97\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC3E\\uDC40\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD41\\uDD43\\uDD46\\uDD47\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD96\\uDD98\\uDEE0-\\uDEF6\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF4F-\\uDF87\\uDF8F-\\uDF9F\\uDFE0\\uDFE1\\uDFE3\\uDFF0\\uDFF1]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9E]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD47\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD83C[\\uDD30-\\uDD49\\uDD50-\\uDD69\\uDD70-\\uDD89]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A]'\n },\n {\n 'name': 'Any',\n 'isBmpLast': true,\n 'bmp': '\\0-\\uFFFF',\n 'astral': '[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]'\n },\n {\n 'name': 'Default_Ignorable_Code_Point',\n 'bmp': '\\xAD\\u034F\\u061C\\u115F\\u1160\\u17B4\\u17B5\\u180B-\\u180F\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u3164\\uFE00-\\uFE0F\\uFEFF\\uFFA0\\uFFF0-\\uFFF8',\n 'astral': '\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|[\\uDB40-\\uDB43][\\uDC00-\\uDFFF]'\n },\n {\n 'name': 'Lowercase',\n 'bmp': 'a-z\\xAA\\xB5\\xBA\\xDF-\\xF6\\xF8-\\xFF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02B8\\u02C0\\u02C1\\u02E0-\\u02E4\\u0345\\u0371\\u0373\\u0377\\u037A-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0529\\u052B\\u052D\\u052F\\u0560-\\u0588\\u10D0-\\u10FA\\u10FD-\\u10FF\\u13F8-\\u13FD\\u1C80-\\u1C88\\u1D00-\\u1DBF\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6\\u1FC7\\u1FD0-\\u1FD3\\u1FD6\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6\\u1FF7\\u2071\\u207F\\u2090-\\u209C\\u210A\\u210E\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C\\u213D\\u2146-\\u2149\\u214E\\u2170-\\u217F\\u2184\\u24D0-\\u24E9\\u2C30-\\u2C5F\\u2C61\\u2C65\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73\\u2C74\\u2C76-\\u2C7D\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA699\\uA69B-\\uA69D\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793-\\uA795\\uA797\\uA799\\uA79B\\uA79D\\uA79F\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7AF\\uA7B5\\uA7B7\\uA7B9\\uA7BB\\uA7BD\\uA7BF\\uA7C1\\uA7C3\\uA7C8\\uA7CA\\uA7D1\\uA7D3\\uA7D5\\uA7D7\\uA7D9\\uA7F6\\uA7F8-\\uA7FA\\uAB30-\\uAB5A\\uAB5C-\\uAB68\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A',\n 'astral': '\\uD801[\\uDC28-\\uDC4F\\uDCD8-\\uDCFB\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDF80\\uDF83-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD803[\\uDCC0-\\uDCF2]|\\uD806[\\uDCC0-\\uDCDF]|\\uD81B[\\uDE60-\\uDE7F]|\\uD835[\\uDC1A-\\uDC33\\uDC4E-\\uDC54\\uDC56-\\uDC67\\uDC82-\\uDC9B\\uDCB6-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDCEA-\\uDD03\\uDD1E-\\uDD37\\uDD52-\\uDD6B\\uDD86-\\uDD9F\\uDDBA-\\uDDD3\\uDDEE-\\uDE07\\uDE22-\\uDE3B\\uDE56-\\uDE6F\\uDE8A-\\uDEA5\\uDEC2-\\uDEDA\\uDEDC-\\uDEE1\\uDEFC-\\uDF14\\uDF16-\\uDF1B\\uDF36-\\uDF4E\\uDF50-\\uDF55\\uDF70-\\uDF88\\uDF8A-\\uDF8F\\uDFAA-\\uDFC2\\uDFC4-\\uDFC9\\uDFCB]|\\uD837[\\uDF00-\\uDF09\\uDF0B-\\uDF1E]|\\uD83A[\\uDD22-\\uDD43]'\n },\n {\n 'name': 'Noncharacter_Code_Point',\n 'bmp': '\\uFDD0-\\uFDEF\\uFFFE\\uFFFF',\n 'astral': '[\\uD83F\\uD87F\\uD8BF\\uD8FF\\uD93F\\uD97F\\uD9BF\\uD9FF\\uDA3F\\uDA7F\\uDABF\\uDAFF\\uDB3F\\uDB7F\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]'\n },\n {\n 'name': 'Uppercase',\n 'bmp': 'A-Z\\xC0-\\xD6\\xD8-\\xDE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178\\u0179\\u017B\\u017D\\u0181\\u0182\\u0184\\u0186\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193\\u0194\\u0196-\\u0198\\u019C\\u019D\\u019F\\u01A0\\u01A2\\u01A4\\u01A6\\u01A7\\u01A9\\u01AC\\u01AE\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A\\u023B\\u023D\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E\\u213F\\u2145\\u2160-\\u216F\\u2183\\u24B6-\\u24CF\\u2C00-\\u2C2F\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AE\\uA7B0-\\uA7B4\\uA7B6\\uA7B8\\uA7BA\\uA7BC\\uA7BE\\uA7C0\\uA7C2\\uA7C4-\\uA7C7\\uA7C9\\uA7D0\\uA7D6\\uA7D8\\uA7F5\\uFF21-\\uFF3A',\n 'astral': '\\uD801[\\uDC00-\\uDC27\\uDCB0-\\uDCD3\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95]|\\uD803[\\uDC80-\\uDCB2]|\\uD806[\\uDCA0-\\uDCBF]|\\uD81B[\\uDE40-\\uDE5F]|\\uD835[\\uDC00-\\uDC19\\uDC34-\\uDC4D\\uDC68-\\uDC81\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB5\\uDCD0-\\uDCE9\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD38\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD6C-\\uDD85\\uDDA0-\\uDDB9\\uDDD4-\\uDDED\\uDE08-\\uDE21\\uDE3C-\\uDE55\\uDE70-\\uDE89\\uDEA8-\\uDEC0\\uDEE2-\\uDEFA\\uDF1C-\\uDF34\\uDF56-\\uDF6E\\uDF90-\\uDFA8\\uDFCA]|\\uD83A[\\uDD00-\\uDD21]|\\uD83C[\\uDD30-\\uDD49\\uDD50-\\uDD69\\uDD70-\\uDD89]'\n },\n {\n 'name': 'White_Space',\n 'bmp': '\\t-\\r \\x85\\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000'\n }\n];\n","module.exports = [\n {\n 'name': 'Adlam',\n 'astral': '\\uD83A[\\uDD00-\\uDD4B\\uDD50-\\uDD59\\uDD5E\\uDD5F]'\n },\n {\n 'name': 'Ahom',\n 'astral': '\\uD805[\\uDF00-\\uDF1A\\uDF1D-\\uDF2B\\uDF30-\\uDF46]'\n },\n {\n 'name': 'Anatolian_Hieroglyphs',\n 'astral': '\\uD811[\\uDC00-\\uDE46]'\n },\n {\n 'name': 'Arabic',\n 'bmp': '\\u0600-\\u0604\\u0606-\\u060B\\u060D-\\u061A\\u061C-\\u061E\\u0620-\\u063F\\u0641-\\u064A\\u0656-\\u066F\\u0671-\\u06DC\\u06DE-\\u06FF\\u0750-\\u077F\\u0870-\\u088E\\u0890\\u0891\\u0898-\\u08E1\\u08E3-\\u08FF\\uFB50-\\uFBC2\\uFBD3-\\uFD3D\\uFD40-\\uFD8F\\uFD92-\\uFDC7\\uFDCF\\uFDF0-\\uFDFF\\uFE70-\\uFE74\\uFE76-\\uFEFC',\n 'astral': '\\uD803[\\uDE60-\\uDE7E]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB\\uDEF0\\uDEF1]'\n },\n {\n 'name': 'Armenian',\n 'bmp': '\\u0531-\\u0556\\u0559-\\u058A\\u058D-\\u058F\\uFB13-\\uFB17'\n },\n {\n 'name': 'Avestan',\n 'astral': '\\uD802[\\uDF00-\\uDF35\\uDF39-\\uDF3F]'\n },\n {\n 'name': 'Balinese',\n 'bmp': '\\u1B00-\\u1B4C\\u1B50-\\u1B7E'\n },\n {\n 'name': 'Bamum',\n 'bmp': '\\uA6A0-\\uA6F7',\n 'astral': '\\uD81A[\\uDC00-\\uDE38]'\n },\n {\n 'name': 'Bassa_Vah',\n 'astral': '\\uD81A[\\uDED0-\\uDEED\\uDEF0-\\uDEF5]'\n },\n {\n 'name': 'Batak',\n 'bmp': '\\u1BC0-\\u1BF3\\u1BFC-\\u1BFF'\n },\n {\n 'name': 'Bengali',\n 'bmp': '\\u0980-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09FE'\n },\n {\n 'name': 'Bhaiksuki',\n 'astral': '\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC45\\uDC50-\\uDC6C]'\n },\n {\n 'name': 'Bopomofo',\n 'bmp': '\\u02EA\\u02EB\\u3105-\\u312F\\u31A0-\\u31BF'\n },\n {\n 'name': 'Brahmi',\n 'astral': '\\uD804[\\uDC00-\\uDC4D\\uDC52-\\uDC75\\uDC7F]'\n },\n {\n 'name': 'Braille',\n 'bmp': '\\u2800-\\u28FF'\n },\n {\n 'name': 'Buginese',\n 'bmp': '\\u1A00-\\u1A1B\\u1A1E\\u1A1F'\n },\n {\n 'name': 'Buhid',\n 'bmp': '\\u1740-\\u1753'\n },\n {\n 'name': 'Canadian_Aboriginal',\n 'bmp': '\\u1400-\\u167F\\u18B0-\\u18F5',\n 'astral': '\\uD806[\\uDEB0-\\uDEBF]'\n },\n {\n 'name': 'Carian',\n 'astral': '\\uD800[\\uDEA0-\\uDED0]'\n },\n {\n 'name': 'Caucasian_Albanian',\n 'astral': '\\uD801[\\uDD30-\\uDD63\\uDD6F]'\n },\n {\n 'name': 'Chakma',\n 'astral': '\\uD804[\\uDD00-\\uDD34\\uDD36-\\uDD47]'\n },\n {\n 'name': 'Cham',\n 'bmp': '\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA5C-\\uAA5F'\n },\n {\n 'name': 'Cherokee',\n 'bmp': '\\u13A0-\\u13F5\\u13F8-\\u13FD\\uAB70-\\uABBF'\n },\n {\n 'name': 'Chorasmian',\n 'astral': '\\uD803[\\uDFB0-\\uDFCB]'\n },\n {\n 'name': 'Common',\n 'bmp': '\\0-@\\\\[-`\\\\{-\\xA9\\xAB-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02B9-\\u02DF\\u02E5-\\u02E9\\u02EC-\\u02FF\\u0374\\u037E\\u0385\\u0387\\u0605\\u060C\\u061B\\u061F\\u0640\\u06DD\\u08E2\\u0964\\u0965\\u0E3F\\u0FD5-\\u0FD8\\u10FB\\u16EB-\\u16ED\\u1735\\u1736\\u1802\\u1803\\u1805\\u1CD3\\u1CE1\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5-\\u1CF7\\u1CFA\\u2000-\\u200B\\u200E-\\u2064\\u2066-\\u2070\\u2074-\\u207E\\u2080-\\u208E\\u20A0-\\u20C0\\u2100-\\u2125\\u2127-\\u2129\\u212C-\\u2131\\u2133-\\u214D\\u214F-\\u215F\\u2189-\\u218B\\u2190-\\u2426\\u2440-\\u244A\\u2460-\\u27FF\\u2900-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2E00-\\u2E5D\\u2FF0-\\u2FFB\\u3000-\\u3004\\u3006\\u3008-\\u3020\\u3030-\\u3037\\u303C-\\u303F\\u309B\\u309C\\u30A0\\u30FB\\u30FC\\u3190-\\u319F\\u31C0-\\u31E3\\u3220-\\u325F\\u327F-\\u32CF\\u32FF\\u3358-\\u33FF\\u4DC0-\\u4DFF\\uA700-\\uA721\\uA788-\\uA78A\\uA830-\\uA839\\uA92E\\uA9CF\\uAB5B\\uAB6A\\uAB6B\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFEFF\\uFF01-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFF70\\uFF9E\\uFF9F\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFF9-\\uFFFD',\n 'astral': '\\uD800[\\uDD00-\\uDD02\\uDD07-\\uDD33\\uDD37-\\uDD3F\\uDD90-\\uDD9C\\uDDD0-\\uDDFC\\uDEE1-\\uDEFB]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD833[\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD66\\uDD6A-\\uDD7A\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDEE0-\\uDEF3\\uDF00-\\uDF56\\uDF60-\\uDF78]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDFCB\\uDFCE-\\uDFFF]|\\uD83B[\\uDC71-\\uDCB4\\uDD01-\\uDD3D]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD00-\\uDDAD\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEDD-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF73\\uDF80-\\uDFD8\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE74\\uDE78-\\uDE7C\\uDE80-\\uDE86\\uDE90-\\uDEAC\\uDEB0-\\uDEBA\\uDEC0-\\uDEC5\\uDED0-\\uDED9\\uDEE0-\\uDEE7\\uDEF0-\\uDEF6\\uDF00-\\uDF92\\uDF94-\\uDFCA\\uDFF0-\\uDFF9]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]'\n },\n {\n 'name': 'Coptic',\n 'bmp': '\\u03E2-\\u03EF\\u2C80-\\u2CF3\\u2CF9-\\u2CFF'\n },\n {\n 'name': 'Cuneiform',\n 'astral': '\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC70-\\uDC74\\uDC80-\\uDD43]'\n },\n {\n 'name': 'Cypriot',\n 'astral': '\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F]'\n },\n {\n 'name': 'Cypro_Minoan',\n 'astral': '\\uD80B[\\uDF90-\\uDFF2]'\n },\n {\n 'name': 'Cyrillic',\n 'bmp': '\\u0400-\\u0484\\u0487-\\u052F\\u1C80-\\u1C88\\u1D2B\\u1D78\\u2DE0-\\u2DFF\\uA640-\\uA69F\\uFE2E\\uFE2F'\n },\n {\n 'name': 'Deseret',\n 'astral': '\\uD801[\\uDC00-\\uDC4F]'\n },\n {\n 'name': 'Devanagari',\n 'bmp': '\\u0900-\\u0950\\u0955-\\u0963\\u0966-\\u097F\\uA8E0-\\uA8FF'\n },\n {\n 'name': 'Dives_Akuru',\n 'astral': '\\uD806[\\uDD00-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD46\\uDD50-\\uDD59]'\n },\n {\n 'name': 'Dogra',\n 'astral': '\\uD806[\\uDC00-\\uDC3B]'\n },\n {\n 'name': 'Duployan',\n 'astral': '\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9C-\\uDC9F]'\n },\n {\n 'name': 'Egyptian_Hieroglyphs',\n 'astral': '\\uD80C[\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E\\uDC30-\\uDC38]'\n },\n {\n 'name': 'Elbasan',\n 'astral': '\\uD801[\\uDD00-\\uDD27]'\n },\n {\n 'name': 'Elymaic',\n 'astral': '\\uD803[\\uDFE0-\\uDFF6]'\n },\n {\n 'name': 'Ethiopic',\n 'bmp': '\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u137C\\u1380-\\u1399\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E',\n 'astral': '\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]'\n },\n {\n 'name': 'Georgian',\n 'bmp': '\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u10FF\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u2D00-\\u2D25\\u2D27\\u2D2D'\n },\n {\n 'name': 'Glagolitic',\n 'bmp': '\\u2C00-\\u2C5F',\n 'astral': '\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]'\n },\n {\n 'name': 'Gothic',\n 'astral': '\\uD800[\\uDF30-\\uDF4A]'\n },\n {\n 'name': 'Grantha',\n 'astral': '\\uD804[\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]'\n },\n {\n 'name': 'Greek',\n 'bmp': '\\u0370-\\u0373\\u0375-\\u0377\\u037A-\\u037D\\u037F\\u0384\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03E1\\u03F0-\\u03FF\\u1D26-\\u1D2A\\u1D5D-\\u1D61\\u1D66-\\u1D6A\\u1DBF\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FC4\\u1FC6-\\u1FD3\\u1FD6-\\u1FDB\\u1FDD-\\u1FEF\\u1FF2-\\u1FF4\\u1FF6-\\u1FFE\\u2126\\uAB65',\n 'astral': '\\uD800[\\uDD40-\\uDD8E\\uDDA0]|\\uD834[\\uDE00-\\uDE45]'\n },\n {\n 'name': 'Gujarati',\n 'bmp': '\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AF1\\u0AF9-\\u0AFF'\n },\n {\n 'name': 'Gunjala_Gondi',\n 'astral': '\\uD807[\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD98\\uDDA0-\\uDDA9]'\n },\n {\n 'name': 'Gurmukhi',\n 'bmp': '\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A76'\n },\n {\n 'name': 'Han',\n 'bmp': '\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u3005\\u3007\\u3021-\\u3029\\u3038-\\u303B\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFA6D\\uFA70-\\uFAD9',\n 'astral': '\\uD81B[\\uDFE2\\uDFE3\\uDFF0\\uDFF1]|[\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A]'\n },\n {\n 'name': 'Hangul',\n 'bmp': '\\u1100-\\u11FF\\u302E\\u302F\\u3131-\\u318E\\u3200-\\u321E\\u3260-\\u327E\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC'\n },\n {\n 'name': 'Hanifi_Rohingya',\n 'astral': '\\uD803[\\uDD00-\\uDD27\\uDD30-\\uDD39]'\n },\n {\n 'name': 'Hanunoo',\n 'bmp': '\\u1720-\\u1734'\n },\n {\n 'name': 'Hatran',\n 'astral': '\\uD802[\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDCFF]'\n },\n {\n 'name': 'Hebrew',\n 'bmp': '\\u0591-\\u05C7\\u05D0-\\u05EA\\u05EF-\\u05F4\\uFB1D-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFB4F'\n },\n {\n 'name': 'Hiragana',\n 'bmp': '\\u3041-\\u3096\\u309D-\\u309F',\n 'astral': '\\uD82C[\\uDC01-\\uDD1F\\uDD50-\\uDD52]|\\uD83C\\uDE00'\n },\n {\n 'name': 'Imperial_Aramaic',\n 'astral': '\\uD802[\\uDC40-\\uDC55\\uDC57-\\uDC5F]'\n },\n {\n 'name': 'Inherited',\n 'bmp': '\\u0300-\\u036F\\u0485\\u0486\\u064B-\\u0655\\u0670\\u0951-\\u0954\\u1AB0-\\u1ACE\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DFF\\u200C\\u200D\\u20D0-\\u20F0\\u302A-\\u302D\\u3099\\u309A\\uFE00-\\uFE0F\\uFE20-\\uFE2D',\n 'astral': '\\uD800[\\uDDFD\\uDEE0]|\\uD804\\uDF3B|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD67-\\uDD69\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD]|\\uDB40[\\uDD00-\\uDDEF]'\n },\n {\n 'name': 'Inscriptional_Pahlavi',\n 'astral': '\\uD802[\\uDF60-\\uDF72\\uDF78-\\uDF7F]'\n },\n {\n 'name': 'Inscriptional_Parthian',\n 'astral': '\\uD802[\\uDF40-\\uDF55\\uDF58-\\uDF5F]'\n },\n {\n 'name': 'Javanese',\n 'bmp': '\\uA980-\\uA9CD\\uA9D0-\\uA9D9\\uA9DE\\uA9DF'\n },\n {\n 'name': 'Kaithi',\n 'astral': '\\uD804[\\uDC80-\\uDCC2\\uDCCD]'\n },\n {\n 'name': 'Kannada',\n 'bmp': '\\u0C80-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDD\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2'\n },\n {\n 'name': 'Katakana',\n 'bmp': '\\u30A1-\\u30FA\\u30FD-\\u30FF\\u31F0-\\u31FF\\u32D0-\\u32FE\\u3300-\\u3357\\uFF66-\\uFF6F\\uFF71-\\uFF9D',\n 'astral': '\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00\\uDD20-\\uDD22\\uDD64-\\uDD67]'\n },\n {\n 'name': 'Kayah_Li',\n 'bmp': '\\uA900-\\uA92D\\uA92F'\n },\n {\n 'name': 'Kharoshthi',\n 'astral': '\\uD802[\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE38-\\uDE3A\\uDE3F-\\uDE48\\uDE50-\\uDE58]'\n },\n {\n 'name': 'Khitan_Small_Script',\n 'astral': '\\uD81B\\uDFE4|\\uD822[\\uDF00-\\uDFFF]|\\uD823[\\uDC00-\\uDCD5]'\n },\n {\n 'name': 'Khmer',\n 'bmp': '\\u1780-\\u17DD\\u17E0-\\u17E9\\u17F0-\\u17F9\\u19E0-\\u19FF'\n },\n {\n 'name': 'Khojki',\n 'astral': '\\uD804[\\uDE00-\\uDE11\\uDE13-\\uDE3E]'\n },\n {\n 'name': 'Khudawadi',\n 'astral': '\\uD804[\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9]'\n },\n {\n 'name': 'Lao',\n 'bmp': '\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF'\n },\n {\n 'name': 'Latin',\n 'bmp': 'A-Za-z\\xAA\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02B8\\u02E0-\\u02E4\\u1D00-\\u1D25\\u1D2C-\\u1D5C\\u1D62-\\u1D65\\u1D6B-\\u1D77\\u1D79-\\u1DBE\\u1E00-\\u1EFF\\u2071\\u207F\\u2090-\\u209C\\u212A\\u212B\\u2132\\u214E\\u2160-\\u2188\\u2C60-\\u2C7F\\uA722-\\uA787\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA7FF\\uAB30-\\uAB5A\\uAB5C-\\uAB64\\uAB66-\\uAB69\\uFB00-\\uFB06\\uFF21-\\uFF3A\\uFF41-\\uFF5A',\n 'astral': '\\uD801[\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD837[\\uDF00-\\uDF1E]'\n },\n {\n 'name': 'Lepcha',\n 'bmp': '\\u1C00-\\u1C37\\u1C3B-\\u1C49\\u1C4D-\\u1C4F'\n },\n {\n 'name': 'Limbu',\n 'bmp': '\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1940\\u1944-\\u194F'\n },\n {\n 'name': 'Linear_A',\n 'astral': '\\uD801[\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]'\n },\n {\n 'name': 'Linear_B',\n 'astral': '\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA]'\n },\n {\n 'name': 'Lisu',\n 'bmp': '\\uA4D0-\\uA4FF',\n 'astral': '\\uD807\\uDFB0'\n },\n {\n 'name': 'Lycian',\n 'astral': '\\uD800[\\uDE80-\\uDE9C]'\n },\n {\n 'name': 'Lydian',\n 'astral': '\\uD802[\\uDD20-\\uDD39\\uDD3F]'\n },\n {\n 'name': 'Mahajani',\n 'astral': '\\uD804[\\uDD50-\\uDD76]'\n },\n {\n 'name': 'Makasar',\n 'astral': '\\uD807[\\uDEE0-\\uDEF8]'\n },\n {\n 'name': 'Malayalam',\n 'bmp': '\\u0D00-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4F\\u0D54-\\u0D63\\u0D66-\\u0D7F'\n },\n {\n 'name': 'Mandaic',\n 'bmp': '\\u0840-\\u085B\\u085E'\n },\n {\n 'name': 'Manichaean',\n 'astral': '\\uD802[\\uDEC0-\\uDEE6\\uDEEB-\\uDEF6]'\n },\n {\n 'name': 'Marchen',\n 'astral': '\\uD807[\\uDC70-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6]'\n },\n {\n 'name': 'Masaram_Gondi',\n 'astral': '\\uD807[\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59]'\n },\n {\n 'name': 'Medefaidrin',\n 'astral': '\\uD81B[\\uDE40-\\uDE9A]'\n },\n {\n 'name': 'Meetei_Mayek',\n 'bmp': '\\uAAE0-\\uAAF6\\uABC0-\\uABED\\uABF0-\\uABF9'\n },\n {\n 'name': 'Mende_Kikakui',\n 'astral': '\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCD6]'\n },\n {\n 'name': 'Meroitic_Cursive',\n 'astral': '\\uD802[\\uDDA0-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDDFF]'\n },\n {\n 'name': 'Meroitic_Hieroglyphs',\n 'astral': '\\uD802[\\uDD80-\\uDD9F]'\n },\n {\n 'name': 'Miao',\n 'astral': '\\uD81B[\\uDF00-\\uDF4A\\uDF4F-\\uDF87\\uDF8F-\\uDF9F]'\n },\n {\n 'name': 'Modi',\n 'astral': '\\uD805[\\uDE00-\\uDE44\\uDE50-\\uDE59]'\n },\n {\n 'name': 'Mongolian',\n 'bmp': '\\u1800\\u1801\\u1804\\u1806-\\u1819\\u1820-\\u1878\\u1880-\\u18AA',\n 'astral': '\\uD805[\\uDE60-\\uDE6C]'\n },\n {\n 'name': 'Mro',\n 'astral': '\\uD81A[\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDE6E\\uDE6F]'\n },\n {\n 'name': 'Multani',\n 'astral': '\\uD804[\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA9]'\n },\n {\n 'name': 'Myanmar',\n 'bmp': '\\u1000-\\u109F\\uA9E0-\\uA9FE\\uAA60-\\uAA7F'\n },\n {\n 'name': 'Nabataean',\n 'astral': '\\uD802[\\uDC80-\\uDC9E\\uDCA7-\\uDCAF]'\n },\n {\n 'name': 'Nandinagari',\n 'astral': '\\uD806[\\uDDA0-\\uDDA7\\uDDAA-\\uDDD7\\uDDDA-\\uDDE4]'\n },\n {\n 'name': 'New_Tai_Lue',\n 'bmp': '\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u19DE\\u19DF'\n },\n {\n 'name': 'Newa',\n 'astral': '\\uD805[\\uDC00-\\uDC5B\\uDC5D-\\uDC61]'\n },\n {\n 'name': 'Nko',\n 'bmp': '\\u07C0-\\u07FA\\u07FD-\\u07FF'\n },\n {\n 'name': 'Nushu',\n 'astral': '\\uD81B\\uDFE1|\\uD82C[\\uDD70-\\uDEFB]'\n },\n {\n 'name': 'Nyiakeng_Puachue_Hmong',\n 'astral': '\\uD838[\\uDD00-\\uDD2C\\uDD30-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDD4F]'\n },\n {\n 'name': 'Ogham',\n 'bmp': '\\u1680-\\u169C'\n },\n {\n 'name': 'Ol_Chiki',\n 'bmp': '\\u1C50-\\u1C7F'\n },\n {\n 'name': 'Old_Hungarian',\n 'astral': '\\uD803[\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDCFF]'\n },\n {\n 'name': 'Old_Italic',\n 'astral': '\\uD800[\\uDF00-\\uDF23\\uDF2D-\\uDF2F]'\n },\n {\n 'name': 'Old_North_Arabian',\n 'astral': '\\uD802[\\uDE80-\\uDE9F]'\n },\n {\n 'name': 'Old_Permic',\n 'astral': '\\uD800[\\uDF50-\\uDF7A]'\n },\n {\n 'name': 'Old_Persian',\n 'astral': '\\uD800[\\uDFA0-\\uDFC3\\uDFC8-\\uDFD5]'\n },\n {\n 'name': 'Old_Sogdian',\n 'astral': '\\uD803[\\uDF00-\\uDF27]'\n },\n {\n 'name': 'Old_South_Arabian',\n 'astral': '\\uD802[\\uDE60-\\uDE7F]'\n },\n {\n 'name': 'Old_Turkic',\n 'astral': '\\uD803[\\uDC00-\\uDC48]'\n },\n {\n 'name': 'Old_Uyghur',\n 'astral': '\\uD803[\\uDF70-\\uDF89]'\n },\n {\n 'name': 'Oriya',\n 'bmp': '\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B77'\n },\n {\n 'name': 'Osage',\n 'astral': '\\uD801[\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB]'\n },\n {\n 'name': 'Osmanya',\n 'astral': '\\uD801[\\uDC80-\\uDC9D\\uDCA0-\\uDCA9]'\n },\n {\n 'name': 'Pahawh_Hmong',\n 'astral': '\\uD81A[\\uDF00-\\uDF45\\uDF50-\\uDF59\\uDF5B-\\uDF61\\uDF63-\\uDF77\\uDF7D-\\uDF8F]'\n },\n {\n 'name': 'Palmyrene',\n 'astral': '\\uD802[\\uDC60-\\uDC7F]'\n },\n {\n 'name': 'Pau_Cin_Hau',\n 'astral': '\\uD806[\\uDEC0-\\uDEF8]'\n },\n {\n 'name': 'Phags_Pa',\n 'bmp': '\\uA840-\\uA877'\n },\n {\n 'name': 'Phoenician',\n 'astral': '\\uD802[\\uDD00-\\uDD1B\\uDD1F]'\n },\n {\n 'name': 'Psalter_Pahlavi',\n 'astral': '\\uD802[\\uDF80-\\uDF91\\uDF99-\\uDF9C\\uDFA9-\\uDFAF]'\n },\n {\n 'name': 'Rejang',\n 'bmp': '\\uA930-\\uA953\\uA95F'\n },\n {\n 'name': 'Runic',\n 'bmp': '\\u16A0-\\u16EA\\u16EE-\\u16F8'\n },\n {\n 'name': 'Samaritan',\n 'bmp': '\\u0800-\\u082D\\u0830-\\u083E'\n },\n {\n 'name': 'Saurashtra',\n 'bmp': '\\uA880-\\uA8C5\\uA8CE-\\uA8D9'\n },\n {\n 'name': 'Sharada',\n 'astral': '\\uD804[\\uDD80-\\uDDDF]'\n },\n {\n 'name': 'Shavian',\n 'astral': '\\uD801[\\uDC50-\\uDC7F]'\n },\n {\n 'name': 'Siddham',\n 'astral': '\\uD805[\\uDD80-\\uDDB5\\uDDB8-\\uDDDD]'\n },\n {\n 'name': 'SignWriting',\n 'astral': '\\uD836[\\uDC00-\\uDE8B\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]'\n },\n {\n 'name': 'Sinhala',\n 'bmp': '\\u0D81-\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2-\\u0DF4',\n 'astral': '\\uD804[\\uDDE1-\\uDDF4]'\n },\n {\n 'name': 'Sogdian',\n 'astral': '\\uD803[\\uDF30-\\uDF59]'\n },\n {\n 'name': 'Sora_Sompeng',\n 'astral': '\\uD804[\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9]'\n },\n {\n 'name': 'Soyombo',\n 'astral': '\\uD806[\\uDE50-\\uDEA2]'\n },\n {\n 'name': 'Sundanese',\n 'bmp': '\\u1B80-\\u1BBF\\u1CC0-\\u1CC7'\n },\n {\n 'name': 'Syloti_Nagri',\n 'bmp': '\\uA800-\\uA82C'\n },\n {\n 'name': 'Syriac',\n 'bmp': '\\u0700-\\u070D\\u070F-\\u074A\\u074D-\\u074F\\u0860-\\u086A'\n },\n {\n 'name': 'Tagalog',\n 'bmp': '\\u1700-\\u1715\\u171F'\n },\n {\n 'name': 'Tagbanwa',\n 'bmp': '\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773'\n },\n {\n 'name': 'Tai_Le',\n 'bmp': '\\u1950-\\u196D\\u1970-\\u1974'\n },\n {\n 'name': 'Tai_Tham',\n 'bmp': '\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA0-\\u1AAD'\n },\n {\n 'name': 'Tai_Viet',\n 'bmp': '\\uAA80-\\uAAC2\\uAADB-\\uAADF'\n },\n {\n 'name': 'Takri',\n 'astral': '\\uD805[\\uDE80-\\uDEB9\\uDEC0-\\uDEC9]'\n },\n {\n 'name': 'Tamil',\n 'bmp': '\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BFA',\n 'astral': '\\uD807[\\uDFC0-\\uDFF1\\uDFFF]'\n },\n {\n 'name': 'Tangsa',\n 'astral': '\\uD81A[\\uDE70-\\uDEBE\\uDEC0-\\uDEC9]'\n },\n {\n 'name': 'Tangut',\n 'astral': '\\uD81B\\uDFE0|[\\uD81C-\\uD820][\\uDC00-\\uDFFF]|\\uD821[\\uDC00-\\uDFF7]|\\uD822[\\uDC00-\\uDEFF]|\\uD823[\\uDD00-\\uDD08]'\n },\n {\n 'name': 'Telugu',\n 'bmp': '\\u0C00-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3C-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C5D\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C77-\\u0C7F'\n },\n {\n 'name': 'Thaana',\n 'bmp': '\\u0780-\\u07B1'\n },\n {\n 'name': 'Thai',\n 'bmp': '\\u0E01-\\u0E3A\\u0E40-\\u0E5B'\n },\n {\n 'name': 'Tibetan',\n 'bmp': '\\u0F00-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F97\\u0F99-\\u0FBC\\u0FBE-\\u0FCC\\u0FCE-\\u0FD4\\u0FD9\\u0FDA'\n },\n {\n 'name': 'Tifinagh',\n 'bmp': '\\u2D30-\\u2D67\\u2D6F\\u2D70\\u2D7F'\n },\n {\n 'name': 'Tirhuta',\n 'astral': '\\uD805[\\uDC80-\\uDCC7\\uDCD0-\\uDCD9]'\n },\n {\n 'name': 'Toto',\n 'astral': '\\uD838[\\uDE90-\\uDEAE]'\n },\n {\n 'name': 'Ugaritic',\n 'astral': '\\uD800[\\uDF80-\\uDF9D\\uDF9F]'\n },\n {\n 'name': 'Vai',\n 'bmp': '\\uA500-\\uA62B'\n },\n {\n 'name': 'Vithkuqi',\n 'astral': '\\uD801[\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC]'\n },\n {\n 'name': 'Wancho',\n 'astral': '\\uD838[\\uDEC0-\\uDEF9\\uDEFF]'\n },\n {\n 'name': 'Warang_Citi',\n 'astral': '\\uD806[\\uDCA0-\\uDCF2\\uDCFF]'\n },\n {\n 'name': 'Yezidi',\n 'astral': '\\uD803[\\uDE80-\\uDEA9\\uDEAB-\\uDEAD\\uDEB0\\uDEB1]'\n },\n {\n 'name': 'Yi',\n 'bmp': '\\uA000-\\uA48C\\uA490-\\uA4C6'\n },\n {\n 'name': 'Zanabazar_Square',\n 'astral': '\\uD806[\\uDE00-\\uDE47]'\n }\n];\n","/*!\n * XRegExp 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2007-present MIT License\n */\n\n/**\n * XRegExp provides augmented, extensible regular expressions. You get additional regex syntax and\n * flags, beyond what browsers support natively. XRegExp is also a regex utility belt with tools to\n * make your client-side grepping simpler and more powerful, while freeing you from related\n * cross-browser inconsistencies.\n */\n\n// ==--------------------------==\n// Private stuff\n// ==--------------------------==\n\n// Property name used for extended regex instance data\nconst REGEX_DATA = 'xregexp';\n// Optional features that can be installed and uninstalled\nconst features = {\n astral: false,\n namespacing: true\n};\n// Storage for fixed/extended native methods\nconst fixed = {};\n// Storage for regexes cached by `XRegExp.cache`\nlet regexCache = {};\n// Storage for pattern details cached by the `XRegExp` constructor\nlet patternCache = {};\n// Storage for regex syntax tokens added internally or by `XRegExp.addToken`\nconst tokens = [];\n// Token scopes\nconst defaultScope = 'default';\nconst classScope = 'class';\n// Regexes that match native regex syntax, including octals\nconst nativeTokens = {\n // Any native multicharacter token in default scope, or any single character\n 'default': /\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\d*|x[\\dA-Fa-f]{2}|u(?:[\\dA-Fa-f]{4}|{[\\dA-Fa-f]+})|c[A-Za-z]|[\\s\\S])|\\(\\?(?:[:=!]|<[=!])|[?*+]\\?|{\\d+(?:,\\d*)?}\\??|[\\s\\S]/,\n // Any native multicharacter token in character class scope, or any single character\n 'class': /\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\dA-Fa-f]{2}|u(?:[\\dA-Fa-f]{4}|{[\\dA-Fa-f]+})|c[A-Za-z]|[\\s\\S])|[\\s\\S]/\n};\n// Any backreference or dollar-prefixed character in replacement strings\nconst replacementToken = /\\$(?:\\{([^\\}]+)\\}|<([^>]+)>|(\\d\\d?|[\\s\\S]?))/g;\n// Check for correct `exec` handling of nonparticipating capturing groups\nconst correctExecNpcg = /()??/.exec('')[1] === undefined;\n// Check for ES6 `flags` prop support\nconst hasFlagsProp = /x/.flags !== undefined;\n\nfunction hasNativeFlag(flag) {\n // Can't check based on the presence of properties/getters since browsers might support such\n // properties even when they don't support the corresponding flag in regex construction (tested\n // in Chrome 48, where `'unicode' in /x/` is true but trying to construct a regex with flag `u`\n // throws an error)\n let isSupported = true;\n try {\n // Can't use regex literals for testing even in a `try` because regex literals with\n // unsupported flags cause a compilation error in IE\n new RegExp('', flag);\n\n // Work around a broken/incomplete IE11 polyfill for sticky introduced in core-js 3.6.0\n if (flag === 'y') {\n // Using function to avoid babel transform to regex literal\n const gy = (() => 'gy')();\n const incompleteY = '.a'.replace(new RegExp('a', gy), '.') === '..';\n if (incompleteY) {\n isSupported = false;\n }\n }\n } catch (exception) {\n isSupported = false;\n }\n return isSupported;\n}\n// Check for ES2021 `d` flag support\nconst hasNativeD = hasNativeFlag('d');\n// Check for ES2018 `s` flag support\nconst hasNativeS = hasNativeFlag('s');\n// Check for ES6 `u` flag support\nconst hasNativeU = hasNativeFlag('u');\n// Check for ES6 `y` flag support\nconst hasNativeY = hasNativeFlag('y');\n// Tracker for known flags, including addon flags\nconst registeredFlags = {\n d: hasNativeD,\n g: true,\n i: true,\n m: true,\n s: hasNativeS,\n u: hasNativeU,\n y: hasNativeY\n};\n// Flags to remove when passing to native `RegExp` constructor\nconst nonnativeFlags = hasNativeS ? /[^dgimsuy]+/g : /[^dgimuy]+/g;\n\n/**\n * Attaches extended data and `XRegExp.prototype` properties to a regex object.\n *\n * @private\n * @param {RegExp} regex Regex to augment.\n * @param {Array} captureNames Array with capture names, or `null`.\n * @param {String} xSource XRegExp pattern used to generate `regex`, or `null` if N/A.\n * @param {String} xFlags XRegExp flags used to generate `regex`, or `null` if N/A.\n * @param {Boolean} [isInternalOnly=false] Whether the regex will be used only for internal\n * operations, and never exposed to users. For internal-only regexes, we can improve perf by\n * skipping some operations like attaching `XRegExp.prototype` properties.\n * @returns {!RegExp} Augmented regex.\n */\nfunction augment(regex, captureNames, xSource, xFlags, isInternalOnly) {\n regex[REGEX_DATA] = {\n captureNames\n };\n\n if (isInternalOnly) {\n return regex;\n }\n\n // Can't auto-inherit these since the XRegExp constructor returns a nonprimitive value\n if (regex.__proto__) {\n regex.__proto__ = XRegExp.prototype;\n } else {\n for (const p in XRegExp.prototype) {\n // An `XRegExp.prototype.hasOwnProperty(p)` check wouldn't be worth it here, since this\n // is performance sensitive, and enumerable `Object.prototype` or `RegExp.prototype`\n // extensions exist on `regex.prototype` anyway\n regex[p] = XRegExp.prototype[p];\n }\n }\n\n regex[REGEX_DATA].source = xSource;\n // Emulate the ES6 `flags` prop by ensuring flags are in alphabetical order\n regex[REGEX_DATA].flags = xFlags ? xFlags.split('').sort().join('') : xFlags;\n\n return regex;\n}\n\n/**\n * Removes any duplicate characters from the provided string.\n *\n * @private\n * @param {String} str String to remove duplicate characters from.\n * @returns {string} String with any duplicate characters removed.\n */\nfunction clipDuplicates(str) {\n return str.replace(/([\\s\\S])(?=[\\s\\S]*\\1)/g, '');\n}\n\n/**\n * Copies a regex object while preserving extended data and augmenting with `XRegExp.prototype`\n * properties. The copy has a fresh `lastIndex` property (set to zero). Allows adding and removing\n * flags g and y while copying the regex.\n *\n * @private\n * @param {RegExp} regex Regex to copy.\n * @param {Object} [options] Options object with optional properties:\n * - `addG` {Boolean} Add flag g while copying the regex.\n * - `addY` {Boolean} Add flag y while copying the regex.\n * - `removeG` {Boolean} Remove flag g while copying the regex.\n * - `removeY` {Boolean} Remove flag y while copying the regex.\n * - `isInternalOnly` {Boolean} Whether the copied regex will be used only for internal\n * operations, and never exposed to users. For internal-only regexes, we can improve perf by\n * skipping some operations like attaching `XRegExp.prototype` properties.\n * - `source` {String} Overrides `<regex>.source`, for special cases.\n * @returns {RegExp} Copy of the provided regex, possibly with modified flags.\n */\nfunction copyRegex(regex, options) {\n if (!XRegExp.isRegExp(regex)) {\n throw new TypeError('Type RegExp expected');\n }\n\n const xData = regex[REGEX_DATA] || {};\n let flags = getNativeFlags(regex);\n let flagsToAdd = '';\n let flagsToRemove = '';\n let xregexpSource = null;\n let xregexpFlags = null;\n\n options = options || {};\n\n if (options.removeG) {flagsToRemove += 'g';}\n if (options.removeY) {flagsToRemove += 'y';}\n if (flagsToRemove) {\n flags = flags.replace(new RegExp(`[${flagsToRemove}]+`, 'g'), '');\n }\n\n if (options.addG) {flagsToAdd += 'g';}\n if (options.addY) {flagsToAdd += 'y';}\n if (flagsToAdd) {\n flags = clipDuplicates(flags + flagsToAdd);\n }\n\n if (!options.isInternalOnly) {\n if (xData.source !== undefined) {\n xregexpSource = xData.source;\n }\n // null or undefined; don't want to add to `flags` if the previous value was null, since\n // that indicates we're not tracking original precompilation flags\n if (xData.flags != null) {\n // Flags are only added for non-internal regexes by `XRegExp.globalize`. Flags are never\n // removed for non-internal regexes, so don't need to handle it\n xregexpFlags = flagsToAdd ? clipDuplicates(xData.flags + flagsToAdd) : xData.flags;\n }\n }\n\n // Augment with `XRegExp.prototype` properties, but use the native `RegExp` constructor to avoid\n // searching for special tokens. That would be wrong for regexes constructed by `RegExp`, and\n // unnecessary for regexes constructed by `XRegExp` because the regex has already undergone the\n // translation to native regex syntax\n regex = augment(\n new RegExp(options.source || regex.source, flags),\n hasNamedCapture(regex) ? xData.captureNames.slice(0) : null,\n xregexpSource,\n xregexpFlags,\n options.isInternalOnly\n );\n\n return regex;\n}\n\n/**\n * Converts hexadecimal to decimal.\n *\n * @private\n * @param {String} hex\n * @returns {number}\n */\nfunction dec(hex) {\n return parseInt(hex, 16);\n}\n\n/**\n * Returns a pattern that can be used in a native RegExp in place of an ignorable token such as an\n * inline comment or whitespace with flag x. This is used directly as a token handler function\n * passed to `XRegExp.addToken`.\n *\n * @private\n * @param {String} match Match arg of `XRegExp.addToken` handler\n * @param {String} scope Scope arg of `XRegExp.addToken` handler\n * @param {String} flags Flags arg of `XRegExp.addToken` handler\n * @returns {string} Either '' or '(?:)', depending on which is needed in the context of the match.\n */\nfunction getContextualTokenSeparator(match, scope, flags) {\n const matchEndPos = match.index + match[0].length;\n const precedingChar = match.input[match.index - 1];\n const followingChar = match.input[matchEndPos];\n if (\n // No need to separate tokens if at the beginning or end of a group, before or after a\n // group, or before or after a `|`\n /^[()|]$/.test(precedingChar) ||\n /^[()|]$/.test(followingChar) ||\n // No need to separate tokens if at the beginning or end of the pattern\n match.index === 0 ||\n matchEndPos === match.input.length ||\n // No need to separate tokens if at the beginning of a noncapturing group or lookaround.\n // Looks only at the last 4 chars (at most) for perf when constructing long regexes.\n /\\(\\?(?:[:=!]|<[=!])$/.test(match.input.substring(match.index - 4, match.index)) ||\n // Avoid separating tokens when the following token is a quantifier\n isQuantifierNext(match.input, matchEndPos, flags)\n ) {\n return '';\n }\n // Keep tokens separated. This avoids e.g. inadvertedly changing `\\1 1` or `\\1(?#)1` to `\\11`.\n // This also ensures all tokens remain as discrete atoms, e.g. it prevents converting the\n // syntax error `(? :` into `(?:`.\n return '(?:)';\n}\n\n/**\n * Returns native `RegExp` flags used by a regex object.\n *\n * @private\n * @param {RegExp} regex Regex to check.\n * @returns {string} Native flags in use.\n */\nfunction getNativeFlags(regex) {\n return hasFlagsProp ?\n regex.flags :\n // Explicitly using `RegExp.prototype.toString` (rather than e.g. `String` or concatenation\n // with an empty string) allows this to continue working predictably when\n // `XRegExp.proptotype.toString` is overridden\n /\\/([a-z]*)$/i.exec(RegExp.prototype.toString.call(regex))[1];\n}\n\n/**\n * Determines whether a regex has extended instance data used to track capture names.\n *\n * @private\n * @param {RegExp} regex Regex to check.\n * @returns {boolean} Whether the regex uses named capture.\n */\nfunction hasNamedCapture(regex) {\n return !!(regex[REGEX_DATA] && regex[REGEX_DATA].captureNames);\n}\n\n/**\n * Converts decimal to hexadecimal.\n *\n * @private\n * @param {Number|String} dec\n * @returns {string}\n */\nfunction hex(dec) {\n return parseInt(dec, 10).toString(16);\n}\n\n/**\n * Checks whether the next nonignorable token after the specified position is a quantifier.\n *\n * @private\n * @param {String} pattern Pattern to search within.\n * @param {Number} pos Index in `pattern` to search at.\n * @param {String} flags Flags used by the pattern.\n * @returns {Boolean} Whether the next nonignorable token is a quantifier.\n */\nfunction isQuantifierNext(pattern, pos, flags) {\n const inlineCommentPattern = '\\\\(\\\\?#[^)]*\\\\)';\n const lineCommentPattern = '#[^#\\\\n]*';\n const quantifierPattern = '[?*+]|{\\\\d+(?:,\\\\d*)?}';\n const regex = flags.includes('x') ?\n // Ignore any leading whitespace, line comments, and inline comments\n new RegExp(`^(?:\\\\s|${lineCommentPattern}|${inlineCommentPattern})*(?:${quantifierPattern})`) :\n // Ignore any leading inline comments\n new RegExp(`^(?:${inlineCommentPattern})*(?:${quantifierPattern})`);\n return regex.test(pattern.slice(pos));\n}\n\n/**\n * Determines whether a value is of the specified type, by resolving its internal [[Class]].\n *\n * @private\n * @param {*} value Object to check.\n * @param {String} type Type to check for, in TitleCase.\n * @returns {boolean} Whether the object matches the type.\n */\nfunction isType(value, type) {\n return Object.prototype.toString.call(value) === `[object ${type}]`;\n}\n\n/**\n * Returns the object, or throws an error if it is `null` or `undefined`. This is used to follow\n * the ES5 abstract operation `ToObject`.\n *\n * @private\n * @param {*} value Object to check and return.\n * @returns {*} The provided object.\n */\nfunction nullThrows(value) {\n // null or undefined\n if (value == null) {\n throw new TypeError('Cannot convert null or undefined to object');\n }\n\n return value;\n}\n\n/**\n * Adds leading zeros if shorter than four characters. Used for fixed-length hexadecimal values.\n *\n * @private\n * @param {String} str\n * @returns {string}\n */\nfunction pad4(str) {\n while (str.length < 4) {\n str = `0${str}`;\n }\n return str;\n}\n\n/**\n * Checks for flag-related errors, and strips/applies flags in a leading mode modifier. Offloads\n * the flag preparation logic from the `XRegExp` constructor.\n *\n * @private\n * @param {String} pattern Regex pattern, possibly with a leading mode modifier.\n * @param {String} flags Any combination of flags.\n * @returns {!Object} Object with properties `pattern` and `flags`.\n */\nfunction prepareFlags(pattern, flags) {\n // Recent browsers throw on duplicate flags, so copy this behavior for nonnative flags\n if (clipDuplicates(flags) !== flags) {\n throw new SyntaxError(`Invalid duplicate regex flag ${flags}`);\n }\n\n // Strip and apply a leading mode modifier with any combination of flags except `dgy`\n pattern = pattern.replace(/^\\(\\?([\\w$]+)\\)/, ($0, $1) => {\n if (/[dgy]/.test($1)) {\n throw new SyntaxError(`Cannot use flags dgy in mode modifier ${$0}`);\n }\n // Allow duplicate flags within the mode modifier\n flags = clipDuplicates(flags + $1);\n return '';\n });\n\n // Throw on unknown native or nonnative flags\n for (const flag of flags) {\n if (!registeredFlags[flag]) {\n throw new SyntaxError(`Unknown regex flag ${flag}`);\n }\n }\n\n return {\n pattern,\n flags\n };\n}\n\n/**\n * Prepares an options object from the given value.\n *\n * @private\n * @param {String|Object} value Value to convert to an options object.\n * @returns {Object} Options object.\n */\nfunction prepareOptions(value) {\n const options = {};\n\n if (isType(value, 'String')) {\n XRegExp.forEach(value, /[^\\s,]+/, (match) => {\n options[match] = true;\n });\n\n return options;\n }\n\n return value;\n}\n\n/**\n * Registers a flag so it doesn't throw an 'unknown flag' error.\n *\n * @private\n * @param {String} flag Single-character flag to register.\n */\nfunction registerFlag(flag) {\n if (!/^[\\w$]$/.test(flag)) {\n throw new Error('Flag must be a single character A-Za-z0-9_$');\n }\n\n registeredFlags[flag] = true;\n}\n\n/**\n * Runs built-in and custom regex syntax tokens in reverse insertion order at the specified\n * position, until a match is found.\n *\n * @private\n * @param {String} pattern Original pattern from which an XRegExp object is being built.\n * @param {String} flags Flags being used to construct the regex.\n * @param {Number} pos Position to search for tokens within `pattern`.\n * @param {Number} scope Regex scope to apply: 'default' or 'class'.\n * @param {Object} context Context object to use for token handler functions.\n * @returns {Object} Object with properties `matchLength`, `output`, and `reparse`; or `null`.\n */\nfunction runTokens(pattern, flags, pos, scope, context) {\n let i = tokens.length;\n const leadChar = pattern[pos];\n let result = null;\n let match;\n let t;\n\n // Run in reverse insertion order\n while (i--) {\n t = tokens[i];\n if (\n (t.leadChar && t.leadChar !== leadChar) ||\n (t.scope !== scope && t.scope !== 'all') ||\n (t.flag && !flags.includes(t.flag))\n ) {\n continue;\n }\n\n match = XRegExp.exec(pattern, t.regex, pos, 'sticky');\n if (match) {\n result = {\n matchLength: match[0].length,\n output: t.handler.call(context, match, scope, flags),\n reparse: t.reparse\n };\n // Finished with token tests\n break;\n }\n }\n\n return result;\n}\n\n/**\n * Enables or disables implicit astral mode opt-in. When enabled, flag A is automatically added to\n * all new regexes created by XRegExp. This causes an error to be thrown when creating regexes if\n * the Unicode Base addon is not available, since flag A is registered by that addon.\n *\n * @private\n * @param {Boolean} on `true` to enable; `false` to disable.\n */\nfunction setAstral(on) {\n features.astral = on;\n}\n\n/**\n * Adds named capture groups to the `groups` property of match arrays. See here for details:\n * https://github.com/tc39/proposal-regexp-named-groups\n *\n * @private\n * @param {Boolean} on `true` to enable; `false` to disable.\n */\nfunction setNamespacing(on) {\n features.namespacing = on;\n}\n\n// ==--------------------------==\n// Constructor\n// ==--------------------------==\n\n/**\n * Creates an extended regular expression object for matching text with a pattern. Differs from a\n * native regular expression in that additional syntax and flags are supported. The returned object\n * is in fact a native `RegExp` and works with all native methods.\n *\n * @class XRegExp\n * @constructor\n * @param {String|RegExp} pattern Regex pattern string, or an existing regex object to copy.\n * @param {String} [flags] Any combination of flags.\n * Native flags:\n * - `d` - indices for capturing groups (ES2021)\n * - `g` - global\n * - `i` - ignore case\n * - `m` - multiline anchors\n * - `u` - unicode (ES6)\n * - `y` - sticky (Firefox 3+, ES6)\n * Additional XRegExp flags:\n * - `n` - named capture only\n * - `s` - dot matches all (aka singleline) - works even when not natively supported\n * - `x` - free-spacing and line comments (aka extended)\n * - `A` - 21-bit Unicode properties (aka astral) - requires the Unicode Base addon\n * Flags cannot be provided when constructing one `RegExp` from another.\n * @returns {RegExp} Extended regular expression object.\n * @example\n *\n * // With named capture and flag x\n * XRegExp(`(?<year> [0-9]{4} ) -? # year\n * (?<month> [0-9]{2} ) -? # month\n * (?<day> [0-9]{2} ) # day`, 'x');\n *\n * // Providing a regex object copies it. Native regexes are recompiled using native (not XRegExp)\n * // syntax. Copies maintain extended data, are augmented with `XRegExp.prototype` properties, and\n * // have fresh `lastIndex` properties (set to zero).\n * XRegExp(/regex/);\n */\nfunction XRegExp(pattern, flags) {\n if (XRegExp.isRegExp(pattern)) {\n if (flags !== undefined) {\n throw new TypeError('Cannot supply flags when copying a RegExp');\n }\n return copyRegex(pattern);\n }\n\n // Copy the argument behavior of `RegExp`\n pattern = pattern === undefined ? '' : String(pattern);\n flags = flags === undefined ? '' : String(flags);\n\n if (XRegExp.isInstalled('astral') && !flags.includes('A')) {\n // This causes an error to be thrown if the Unicode Base addon is not available\n flags += 'A';\n }\n\n if (!patternCache[pattern]) {\n patternCache[pattern] = {};\n }\n\n if (!patternCache[pattern][flags]) {\n const context = {\n hasNamedCapture: false,\n captureNames: []\n };\n let scope = defaultScope;\n let output = '';\n let pos = 0;\n let result;\n\n // Check for flag-related errors, and strip/apply flags in a leading mode modifier\n const applied = prepareFlags(pattern, flags);\n let appliedPattern = applied.pattern;\n const appliedFlags = applied.flags;\n\n // Use XRegExp's tokens to translate the pattern to a native regex pattern.\n // `appliedPattern.length` may change on each iteration if tokens use `reparse`\n while (pos < appliedPattern.length) {\n do {\n // Check for custom tokens at the current position\n result = runTokens(appliedPattern, appliedFlags, pos, scope, context);\n // If the matched token used the `reparse` option, splice its output into the\n // pattern before running tokens again at the same position\n if (result && result.reparse) {\n appliedPattern = appliedPattern.slice(0, pos) +\n result.output +\n appliedPattern.slice(pos + result.matchLength);\n }\n } while (result && result.reparse);\n\n if (result) {\n output += result.output;\n pos += (result.matchLength || 1);\n } else {\n // Get the native token at the current position\n const [token] = XRegExp.exec(appliedPattern, nativeTokens[scope], pos, 'sticky');\n output += token;\n pos += token.length;\n if (token === '[' && scope === defaultScope) {\n scope = classScope;\n } else if (token === ']' && scope === classScope) {\n scope = defaultScope;\n }\n }\n }\n\n patternCache[pattern][flags] = {\n // Use basic cleanup to collapse repeated empty groups like `(?:)(?:)` to `(?:)`. Empty\n // groups are sometimes inserted during regex transpilation in order to keep tokens\n // separated. However, more than one empty group in a row is never needed.\n pattern: output.replace(/(?:\\(\\?:\\))+/g, '(?:)'),\n // Strip all but native flags\n flags: appliedFlags.replace(nonnativeFlags, ''),\n // `context.captureNames` has an item for each capturing group, even if unnamed\n captures: context.hasNamedCapture ? context.captureNames : null\n };\n }\n\n const generated = patternCache[pattern][flags];\n return augment(\n new RegExp(generated.pattern, generated.flags),\n generated.captures,\n pattern,\n flags\n );\n}\n\n// Add `RegExp.prototype` to the prototype chain\nXRegExp.prototype = new RegExp();\n\n// ==--------------------------==\n// Public properties\n// ==--------------------------==\n\n/**\n * The XRegExp version number as a string containing three dot-separated parts. For example,\n * '2.0.0-beta-3'.\n *\n * @static\n * @memberOf XRegExp\n * @type String\n */\nXRegExp.version = '5.1.1';\n\n// ==--------------------------==\n// Public methods\n// ==--------------------------==\n\n// Intentionally undocumented; used in tests and addons\nXRegExp._clipDuplicates = clipDuplicates;\nXRegExp._hasNativeFlag = hasNativeFlag;\nXRegExp._dec = dec;\nXRegExp._hex = hex;\nXRegExp._pad4 = pad4;\n\n/**\n * Extends XRegExp syntax and allows custom flags. This is used internally and can be used to\n * create XRegExp addons. If more than one token can match the same string, the last added wins.\n *\n * @memberOf XRegExp\n * @param {RegExp} regex Regex object that matches the new token.\n * @param {Function} handler Function that returns a new pattern string (using native regex syntax)\n * to replace the matched token within all future XRegExp regexes. Has access to persistent\n * properties of the regex being built, through `this`. Invoked with three arguments:\n * - The match array, with named backreference properties.\n * - The regex scope where the match was found: 'default' or 'class'.\n * - The flags used by the regex, including any flags in a leading mode modifier.\n * The handler function becomes part of the XRegExp construction process, so be careful not to\n * construct XRegExps within the function or you will trigger infinite recursion.\n * @param {Object} [options] Options object with optional properties:\n * - `scope` {String} Scope where the token applies: 'default', 'class', or 'all'.\n * - `flag` {String} Single-character flag that triggers the token. This also registers the\n * flag, which prevents XRegExp from throwing an 'unknown flag' error when the flag is used.\n * - `optionalFlags` {String} Any custom flags checked for within the token `handler` that are\n * not required to trigger the token. This registers the flags, to prevent XRegExp from\n * throwing an 'unknown flag' error when any of the flags are used.\n * - `reparse` {Boolean} Whether the `handler` function's output should not be treated as\n * final, and instead be reparseable by other tokens (including the current token). Allows\n * token chaining or deferring.\n * - `leadChar` {String} Single character that occurs at the beginning of any successful match\n * of the token (not always applicable). This doesn't change the behavior of the token unless\n * you provide an erroneous value. However, providing it can increase the token's performance\n * since the token can be skipped at any positions where this character doesn't appear.\n * @example\n *\n * // Basic usage: Add \\a for the ALERT control code\n * XRegExp.addToken(\n * /\\\\a/,\n * () => '\\\\x07',\n * {scope: 'all'}\n * );\n * XRegExp('\\\\a[\\\\a-\\\\n]+').test('\\x07\\n\\x07'); // -> true\n *\n * // Add the U (ungreedy) flag from PCRE and RE2, which reverses greedy and lazy quantifiers.\n * // Since `scope` is not specified, it uses 'default' (i.e., transformations apply outside of\n * // character classes only)\n * XRegExp.addToken(\n * /([?*+]|{\\d+(?:,\\d*)?})(\\??)/,\n * (match) => `${match[1]}${match[2] ? '' : '?'}`,\n * {flag: 'U'}\n * );\n * XRegExp('a+', 'U').exec('aaa')[0]; // -> 'a'\n * XRegExp('a+?', 'U').exec('aaa')[0]; // -> 'aaa'\n */\nXRegExp.addToken = (regex, handler, options) => {\n options = options || {};\n let {optionalFlags} = options;\n\n if (options.flag) {\n registerFlag(options.flag);\n }\n\n if (optionalFlags) {\n optionalFlags = optionalFlags.split('');\n for (const flag of optionalFlags) {\n registerFlag(flag);\n }\n }\n\n // Add to the private list of syntax tokens\n tokens.push({\n regex: copyRegex(regex, {\n addG: true,\n addY: hasNativeY,\n isInternalOnly: true\n }),\n handler,\n scope: options.scope || defaultScope,\n flag: options.flag,\n reparse: options.reparse,\n leadChar: options.leadChar\n });\n\n // Reset the pattern cache used by the `XRegExp` constructor, since the same pattern and flags\n // might now produce different results\n XRegExp.cache.flush('patterns');\n};\n\n/**\n * Caches and returns the result of calling `XRegExp(pattern, flags)`. On any subsequent call with\n * the same pattern and flag combination, the cached copy of the regex is returned.\n *\n * @memberOf XRegExp\n * @param {String} pattern Regex pattern string.\n * @param {String} [flags] Any combination of XRegExp flags.\n * @returns {RegExp} Cached XRegExp object.\n * @example\n *\n * let match;\n * while (match = XRegExp.cache('.', 'gs').exec('abc')) {\n * // The regex is compiled once only\n * }\n */\nXRegExp.cache = (pattern, flags) => {\n if (!regexCache[pattern]) {\n regexCache[pattern] = {};\n }\n return regexCache[pattern][flags] || (\n regexCache[pattern][flags] = XRegExp(pattern, flags)\n );\n};\n\n// Intentionally undocumented; used in tests\nXRegExp.cache.flush = (cacheName) => {\n if (cacheName === 'patterns') {\n // Flush the pattern cache used by the `XRegExp` constructor\n patternCache = {};\n } else {\n // Flush the regex cache populated by `XRegExp.cache`\n regexCache = {};\n }\n};\n\n/**\n * Escapes any regular expression metacharacters, for use when matching literal strings. The result\n * can safely be used at any position within a regex that uses any flags.\n *\n * @memberOf XRegExp\n * @param {String} str String to escape.\n * @returns {string} String with regex metacharacters escaped.\n * @example\n *\n * XRegExp.escape('Escaped? <.>');\n * // -> 'Escaped\\?\\u0020<\\.>'\n */\n// Following are the contexts where each metacharacter needs to be escaped because it would\n// otherwise have a special meaning, change the meaning of surrounding characters, or cause an\n// error. Context 'default' means outside character classes only.\n// - `\\` - context: all\n// - `[()*+?.$|` - context: default\n// - `]` - context: default with flag u or if forming the end of a character class\n// - `{}` - context: default with flag u or if part of a valid/complete quantifier pattern\n// - `,` - context: default if in a position that causes an unescaped `{` to turn into a quantifier.\n// Ex: `/^a{1\\,2}$/` matches `'a{1,2}'`, but `/^a{1,2}$/` matches `'a'` or `'aa'`\n// - `#` and <whitespace> - context: default with flag x\n// - `^` - context: default, and context: class if it's the first character in the class\n// - `-` - context: class if part of a valid character class range\nXRegExp.escape = (str) => String(nullThrows(str)).\n // Escape most special chars with a backslash\n replace(/[\\\\\\[\\]{}()*+?.^$|]/g, '\\\\$&').\n // Convert to \\uNNNN for special chars that can't be escaped when used with ES6 flag `u`\n replace(/[\\s#\\-,]/g, (match) => `\\\\u${pad4(hex(match.charCodeAt(0)))}`);\n\n/**\n * Executes a regex search in a specified string. Returns a match array or `null`. If the provided\n * regex uses named capture, named capture properties are included on the match array's `groups`\n * property. Optional `pos` and `sticky` arguments specify the search start position, and whether\n * the match must start at the specified position only. The `lastIndex` property of the provided\n * regex is not used, but is updated for compatibility. Also fixes browser bugs compared to the\n * native `RegExp.prototype.exec` and can be used reliably cross-browser.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {RegExp} regex Regex to search with.\n * @param {Number} [pos=0] Zero-based index at which to start the search.\n * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position\n * only. The string `'sticky'` is accepted as an alternative to `true`.\n * @returns {Array} Match array with named capture properties on the `groups` object, or `null`. If\n * the `namespacing` feature is off, named capture properties are directly on the match array.\n * @example\n *\n * // Basic use, with named capturing group\n * let match = XRegExp.exec('U+2620', XRegExp('U\\\\+(?<hex>[0-9A-F]{4})'));\n * match.groups.hex; // -> '2620'\n *\n * // With pos and sticky, in a loop\n * let pos = 3, result = [], match;\n * while (match = XRegExp.exec('<1><2><3><4>5<6>', /<(\\d)>/, pos, 'sticky')) {\n * result.push(match[1]);\n * pos = match.index + match[0].length;\n * }\n * // result -> ['2', '3', '4']\n */\nXRegExp.exec = (str, regex, pos, sticky) => {\n let cacheKey = 'g';\n let addY = false;\n let fakeY = false;\n let match;\n\n addY = hasNativeY && !!(sticky || (regex.sticky && sticky !== false));\n if (addY) {\n cacheKey += 'y';\n } else if (sticky) {\n // Simulate sticky matching by appending an empty capture to the original regex. The\n // resulting regex will succeed no matter what at the current index (set with `lastIndex`),\n // and will not search the rest of the subject string. We'll know that the original regex\n // has failed if that last capture is `''` rather than `undefined` (i.e., if that last\n // capture participated in the match).\n fakeY = true;\n cacheKey += 'FakeY';\n }\n\n regex[REGEX_DATA] = regex[REGEX_DATA] || {};\n\n // Shares cached copies with `XRegExp.match`/`replace`\n const r2 = regex[REGEX_DATA][cacheKey] || (\n regex[REGEX_DATA][cacheKey] = copyRegex(regex, {\n addG: true,\n addY,\n source: fakeY ? `${regex.source}|()` : undefined,\n removeY: sticky === false,\n isInternalOnly: true\n })\n );\n\n pos = pos || 0;\n r2.lastIndex = pos;\n\n // Fixed `exec` required for `lastIndex` fix, named backreferences, etc.\n match = fixed.exec.call(r2, str);\n\n // Get rid of the capture added by the pseudo-sticky matcher if needed. An empty string means\n // the original regexp failed (see above).\n if (fakeY && match && match.pop() === '') {\n match = null;\n }\n\n if (regex.global) {\n regex.lastIndex = match ? r2.lastIndex : 0;\n }\n\n return match;\n};\n\n/**\n * Executes a provided function once per regex match. Searches always start at the beginning of the\n * string and continue until the end, regardless of the state of the regex's `global` property and\n * initial `lastIndex`.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {RegExp} regex Regex to search with.\n * @param {Function} callback Function to execute for each match. Invoked with four arguments:\n * - The match array, with named backreference properties.\n * - The zero-based match index.\n * - The string being traversed.\n * - The regex object being used to traverse the string.\n * @example\n *\n * // Extracts every other digit from a string\n * const evens = [];\n * XRegExp.forEach('1a2345', /\\d/, (match, i) => {\n * if (i % 2) evens.push(+match[0]);\n * });\n * // evens -> [2, 4]\n */\nXRegExp.forEach = (str, regex, callback) => {\n let pos = 0;\n let i = -1;\n let match;\n\n while ((match = XRegExp.exec(str, regex, pos))) {\n // Because `regex` is provided to `callback`, the function could use the deprecated/\n // nonstandard `RegExp.prototype.compile` to mutate the regex. However, since `XRegExp.exec`\n // doesn't use `lastIndex` to set the search position, this can't lead to an infinite loop,\n // at least. Actually, because of the way `XRegExp.exec` caches globalized versions of\n // regexes, mutating the regex will not have any effect on the iteration or matched strings,\n // which is a nice side effect that brings extra safety.\n callback(match, ++i, str, regex);\n\n pos = match.index + (match[0].length || 1);\n }\n};\n\n/**\n * Copies a regex object and adds flag `g`. The copy maintains extended data, is augmented with\n * `XRegExp.prototype` properties, and has a fresh `lastIndex` property (set to zero). Native\n * regexes are not recompiled using XRegExp syntax.\n *\n * @memberOf XRegExp\n * @param {RegExp} regex Regex to globalize.\n * @returns {RegExp} Copy of the provided regex with flag `g` added.\n * @example\n *\n * const globalCopy = XRegExp.globalize(/regex/);\n * globalCopy.global; // -> true\n */\nXRegExp.globalize = (regex) => copyRegex(regex, {addG: true});\n\n/**\n * Installs optional features according to the specified options. Can be undone using\n * `XRegExp.uninstall`.\n *\n * @memberOf XRegExp\n * @param {Object|String} options Options object or string.\n * @example\n *\n * // With an options object\n * XRegExp.install({\n * // Enables support for astral code points in Unicode addons (implicitly sets flag A)\n * astral: true,\n *\n * // Adds named capture groups to the `groups` property of matches\n * namespacing: true\n * });\n *\n * // With an options string\n * XRegExp.install('astral namespacing');\n */\nXRegExp.install = (options) => {\n options = prepareOptions(options);\n\n if (!features.astral && options.astral) {\n setAstral(true);\n }\n\n if (!features.namespacing && options.namespacing) {\n setNamespacing(true);\n }\n};\n\n/**\n * Checks whether an individual optional feature is installed.\n *\n * @memberOf XRegExp\n * @param {String} feature Name of the feature to check. One of:\n * - `astral`\n * - `namespacing`\n * @returns {boolean} Whether the feature is installed.\n * @example\n *\n * XRegExp.isInstalled('astral');\n */\nXRegExp.isInstalled = (feature) => !!(features[feature]);\n\n/**\n * Returns `true` if an object is a regex; `false` if it isn't. This works correctly for regexes\n * created in another frame, when `instanceof` and `constructor` checks would fail.\n *\n * @memberOf XRegExp\n * @param {*} value Object to check.\n * @returns {boolean} Whether the object is a `RegExp` object.\n * @example\n *\n * XRegExp.isRegExp('string'); // -> false\n * XRegExp.isRegExp(/regex/i); // -> true\n * XRegExp.isRegExp(RegExp('^', 'm')); // -> true\n * XRegExp.isRegExp(XRegExp('(?s).')); // -> true\n */\nXRegExp.isRegExp = (value) => Object.prototype.toString.call(value) === '[object RegExp]';\n// Same as `isType(value, 'RegExp')`, but avoiding that function call here for perf since\n// `isRegExp` is used heavily by internals including regex construction\n\n/**\n * Returns the first matched string, or in global mode, an array containing all matched strings.\n * This is essentially a more convenient re-implementation of `String.prototype.match` that gives\n * the result types you actually want (string instead of `exec`-style array in match-first mode,\n * and an empty array instead of `null` when no matches are found in match-all mode). It also lets\n * you override flag g and ignore `lastIndex`, and fixes browser bugs.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {RegExp} regex Regex to search with.\n * @param {String} [scope='one'] Use 'one' to return the first match as a string. Use 'all' to\n * return an array of all matched strings. If not explicitly specified and `regex` uses flag g,\n * `scope` is 'all'.\n * @returns {String|Array} In match-first mode: First match as a string, or `null`. In match-all\n * mode: Array of all matched strings, or an empty array.\n * @example\n *\n * // Match first\n * XRegExp.match('abc', /\\w/); // -> 'a'\n * XRegExp.match('abc', /\\w/g, 'one'); // -> 'a'\n * XRegExp.match('abc', /x/g, 'one'); // -> null\n *\n * // Match all\n * XRegExp.match('abc', /\\w/g); // -> ['a', 'b', 'c']\n * XRegExp.match('abc', /\\w/, 'all'); // -> ['a', 'b', 'c']\n * XRegExp.match('abc', /x/, 'all'); // -> []\n */\nXRegExp.match = (str, regex, scope) => {\n const global = (regex.global && scope !== 'one') || scope === 'all';\n const cacheKey = ((global ? 'g' : '') + (regex.sticky ? 'y' : '')) || 'noGY';\n\n regex[REGEX_DATA] = regex[REGEX_DATA] || {};\n\n // Shares cached copies with `XRegExp.exec`/`replace`\n const r2 = regex[REGEX_DATA][cacheKey] || (\n regex[REGEX_DATA][cacheKey] = copyRegex(regex, {\n addG: !!global,\n removeG: scope === 'one',\n isInternalOnly: true\n })\n );\n\n const result = String(nullThrows(str)).match(r2);\n\n if (regex.global) {\n regex.lastIndex = (\n (scope === 'one' && result) ?\n // Can't use `r2.lastIndex` since `r2` is nonglobal in this case\n (result.index + result[0].length) : 0\n );\n }\n\n return global ? (result || []) : (result && result[0]);\n};\n\n/**\n * Retrieves the matches from searching a string using a chain of regexes that successively search\n * within previous matches. The provided `chain` array can contain regexes and or objects with\n * `regex` and `backref` properties. When a backreference is specified, the named or numbered\n * backreference is passed forward to the next regex or returned.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {Array} chain Regexes that each search for matches within preceding results.\n * @returns {Array} Matches by the last regex in the chain, or an empty array.\n * @example\n *\n * // Basic usage; matches numbers within <b> tags\n * XRegExp.matchChain('1 <b>2</b> 3 <b>4 a 56</b>', [\n * XRegExp('(?is)<b>.*?</b>'),\n * /\\d+/\n * ]);\n * // -> ['2', '4', '56']\n *\n * // Passing forward and returning specific backreferences\n * const html = `<a href=\"http://xregexp.com/api/\">XRegExp</a>\n * <a href=\"http://www.google.com/\">Google</a>`;\n * XRegExp.matchChain(html, [\n * {regex: /<a href=\"([^\"]+)\">/i, backref: 1},\n * {regex: XRegExp('(?i)^https?://(?<domain>[^/?#]+)'), backref: 'domain'}\n * ]);\n * // -> ['xregexp.com', 'www.google.com']\n */\nXRegExp.matchChain = (str, chain) => (function recurseChain(values, level) {\n const item = chain[level].regex ? chain[level] : {regex: chain[level]};\n const matches = [];\n\n function addMatch(match) {\n if (item.backref) {\n const ERR_UNDEFINED_GROUP = `Backreference to undefined group: ${item.backref}`;\n const isNamedBackref = isNaN(item.backref);\n\n if (isNamedBackref && XRegExp.isInstalled('namespacing')) {\n // `groups` has `null` as prototype, so using `in` instead of `hasOwnProperty`\n if (!(match.groups && item.backref in match.groups)) {\n throw new ReferenceError(ERR_UNDEFINED_GROUP);\n }\n } else if (!match.hasOwnProperty(item.backref)) {\n throw new ReferenceError(ERR_UNDEFINED_GROUP);\n }\n\n const backrefValue = isNamedBackref && XRegExp.isInstalled('namespacing') ?\n match.groups[item.backref] :\n match[item.backref];\n\n matches.push(backrefValue || '');\n } else {\n matches.push(match[0]);\n }\n }\n\n for (const value of values) {\n XRegExp.forEach(value, item.regex, addMatch);\n }\n\n return ((level === chain.length - 1) || !matches.length) ?\n matches :\n recurseChain(matches, level + 1);\n}([str], 0));\n\n/**\n * Returns a new string with one or all matches of a pattern replaced. The pattern can be a string\n * or regex, and the replacement can be a string or a function to be called for each match. To\n * perform a global search and replace, use the optional `scope` argument or include flag g if using\n * a regex. Replacement strings can use `$<n>` or `${n}` for named and numbered backreferences.\n * Replacement functions can use named backreferences via the last argument. Also fixes browser bugs\n * compared to the native `String.prototype.replace` and can be used reliably cross-browser.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {RegExp|String} search Search pattern to be replaced.\n * @param {String|Function} replacement Replacement string or a function invoked to create it.\n * Replacement strings can include special replacement syntax:\n * - $$ - Inserts a literal $ character.\n * - $&, $0 - Inserts the matched substring.\n * - $` - Inserts the string that precedes the matched substring (left context).\n * - $' - Inserts the string that follows the matched substring (right context).\n * - $n, $nn - Where n/nn are digits referencing an existing capturing group, inserts\n * backreference n/nn.\n * - $<n>, ${n} - Where n is a name or any number of digits that reference an existing capturing\n * group, inserts backreference n.\n * Replacement functions are invoked with three or more arguments:\n * - args[0] - The matched substring (corresponds to `$&` above). If the `namespacing` feature\n * is off, named backreferences are accessible as properties of this argument.\n * - args[1..n] - One argument for each backreference (corresponding to `$1`, `$2`, etc. above).\n * If the regex has no capturing groups, no arguments appear in this position.\n * - args[n+1] - The zero-based index of the match within the entire search string.\n * - args[n+2] - The total string being searched.\n * - args[n+3] - If the the search pattern is a regex with named capturing groups, the last\n * argument is the groups object. Its keys are the backreference names and its values are the\n * backreference values. If the `namespacing` feature is off, this argument is not present.\n * @param {String} [scope] Use 'one' to replace the first match only, or 'all'. Defaults to 'one'.\n * Defaults to 'all' if using a regex with flag g.\n * @returns {String} New string with one or all matches replaced.\n * @example\n *\n * // Regex search, using named backreferences in replacement string\n * const name = XRegExp('(?<first>\\\\w+) (?<last>\\\\w+)');\n * XRegExp.replace('John Smith', name, '$<last>, $<first>');\n * // -> 'Smith, John'\n *\n * // Regex search, using named backreferences in replacement function\n * XRegExp.replace('John Smith', name, (...args) => {\n * const groups = args[args.length - 1];\n * return `${groups.last}, ${groups.first}`;\n * });\n * // -> 'Smith, John'\n *\n * // String search, with replace-all\n * XRegExp.replace('RegExp builds RegExps', 'RegExp', 'XRegExp', 'all');\n * // -> 'XRegExp builds XRegExps'\n */\nXRegExp.replace = (str, search, replacement, scope) => {\n const isRegex = XRegExp.isRegExp(search);\n const global = (search.global && scope !== 'one') || scope === 'all';\n const cacheKey = ((global ? 'g' : '') + (search.sticky ? 'y' : '')) || 'noGY';\n let s2 = search;\n\n if (isRegex) {\n search[REGEX_DATA] = search[REGEX_DATA] || {};\n\n // Shares cached copies with `XRegExp.exec`/`match`. Since a copy is used, `search`'s\n // `lastIndex` isn't updated *during* replacement iterations\n s2 = search[REGEX_DATA][cacheKey] || (\n search[REGEX_DATA][cacheKey] = copyRegex(search, {\n addG: !!global,\n removeG: scope === 'one',\n isInternalOnly: true\n })\n );\n } else if (global) {\n s2 = new RegExp(XRegExp.escape(String(search)), 'g');\n }\n\n // Fixed `replace` required for named backreferences, etc.\n const result = fixed.replace.call(nullThrows(str), s2, replacement);\n\n if (isRegex && search.global) {\n // Fixes IE, Safari bug (last tested IE 9, Safari 5.1)\n search.lastIndex = 0;\n }\n\n return result;\n};\n\n/**\n * Performs batch processing of string replacements. Used like `XRegExp.replace`, but accepts an\n * array of replacement details. Later replacements operate on the output of earlier replacements.\n * Replacement details are accepted as an array with a regex or string to search for, the\n * replacement string or function, and an optional scope of 'one' or 'all'. Uses the XRegExp\n * replacement text syntax, which supports named backreference properties via `$<name>` or\n * `${name}`.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {Array} replacements Array of replacement detail arrays.\n * @returns {String} New string with all replacements.\n * @example\n *\n * str = XRegExp.replaceEach(str, [\n * [XRegExp('(?<name>a)'), 'z$<name>'],\n * [/b/gi, 'y'],\n * [/c/g, 'x', 'one'], // scope 'one' overrides /g\n * [/d/, 'w', 'all'], // scope 'all' overrides lack of /g\n * ['e', 'v', 'all'], // scope 'all' allows replace-all for strings\n * [/f/g, (match) => match.toUpperCase()]\n * ]);\n */\nXRegExp.replaceEach = (str, replacements) => {\n for (const r of replacements) {\n str = XRegExp.replace(str, r[0], r[1], r[2]);\n }\n\n return str;\n};\n\n/**\n * Splits a string into an array of strings using a regex or string separator. Matches of the\n * separator are not included in the result array. However, if `separator` is a regex that contains\n * capturing groups, backreferences are spliced into the result each time `separator` is matched.\n * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably\n * cross-browser.\n *\n * @memberOf XRegExp\n * @param {String} str String to split.\n * @param {RegExp|String} separator Regex or string to use for separating the string.\n * @param {Number} [limit] Maximum number of items to include in the result array.\n * @returns {Array} Array of substrings.\n * @example\n *\n * // Basic use\n * XRegExp.split('a b c', ' ');\n * // -> ['a', 'b', 'c']\n *\n * // With limit\n * XRegExp.split('a b c', ' ', 2);\n * // -> ['a', 'b']\n *\n * // Backreferences in result array\n * XRegExp.split('..word1..', /([a-z]+)(\\d+)/i);\n * // -> ['..', 'word', '1', '..']\n */\nXRegExp.split = (str, separator, limit) => fixed.split.call(nullThrows(str), separator, limit);\n\n/**\n * Executes a regex search in a specified string. Returns `true` or `false`. Optional `pos` and\n * `sticky` arguments specify the search start position, and whether the match must start at the\n * specified position only. The `lastIndex` property of the provided regex is not used, but is\n * updated for compatibility. Also fixes browser bugs compared to the native\n * `RegExp.prototype.test` and can be used reliably cross-browser.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {RegExp} regex Regex to search with.\n * @param {Number} [pos=0] Zero-based index at which to start the search.\n * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position\n * only. The string `'sticky'` is accepted as an alternative to `true`.\n * @returns {boolean} Whether the regex matched the provided value.\n * @example\n *\n * // Basic use\n * XRegExp.test('abc', /c/); // -> true\n *\n * // With pos and sticky\n * XRegExp.test('abc', /c/, 0, 'sticky'); // -> false\n * XRegExp.test('abc', /c/, 2, 'sticky'); // -> true\n */\n// Do this the easy way :-)\nXRegExp.test = (str, regex, pos, sticky) => !!XRegExp.exec(str, regex, pos, sticky);\n\n/**\n * Uninstalls optional features according to the specified options. Used to undo the actions of\n * `XRegExp.install`.\n *\n * @memberOf XRegExp\n * @param {Object|String} options Options object or string.\n * @example\n *\n * // With an options object\n * XRegExp.uninstall({\n * // Disables support for astral code points in Unicode addons (unless enabled per regex)\n * astral: true,\n *\n * // Don't add named capture groups to the `groups` property of matches\n * namespacing: true\n * });\n *\n * // With an options string\n * XRegExp.uninstall('astral namespacing');\n */\nXRegExp.uninstall = (options) => {\n options = prepareOptions(options);\n\n if (features.astral && options.astral) {\n setAstral(false);\n }\n\n if (features.namespacing && options.namespacing) {\n setNamespacing(false);\n }\n};\n\n/**\n * Returns an XRegExp object that is the union of the given patterns. Patterns can be provided as\n * regex objects or strings. Metacharacters are escaped in patterns provided as strings.\n * Backreferences in provided regex objects are automatically renumbered to work correctly within\n * the larger combined pattern. Native flags used by provided regexes are ignored in favor of the\n * `flags` argument.\n *\n * @memberOf XRegExp\n * @param {Array} patterns Regexes and strings to combine.\n * @param {String} [flags] Any combination of XRegExp flags.\n * @param {Object} [options] Options object with optional properties:\n * - `conjunction` {String} Type of conjunction to use: 'or' (default) or 'none'.\n * @returns {RegExp} Union of the provided regexes and strings.\n * @example\n *\n * XRegExp.union(['a+b*c', /(dogs)\\1/, /(cats)\\1/], 'i');\n * // -> /a\\+b\\*c|(dogs)\\1|(cats)\\2/i\n *\n * XRegExp.union([/man/, /bear/, /pig/], 'i', {conjunction: 'none'});\n * // -> /manbearpig/i\n */\nXRegExp.union = (patterns, flags, options) => {\n options = options || {};\n const conjunction = options.conjunction || 'or';\n let numCaptures = 0;\n let numPriorCaptures;\n let captureNames;\n\n function rewrite(match, paren, backref) {\n const name = captureNames[numCaptures - numPriorCaptures];\n\n // Capturing group\n if (paren) {\n ++numCaptures;\n // If the current capture has a name, preserve the name\n if (name) {\n return `(?<${name}>`;\n }\n // Backreference\n } else if (backref) {\n // Rewrite the backreference\n return `\\\\${+backref + numPriorCaptures}`;\n }\n\n return match;\n }\n\n if (!(isType(patterns, 'Array') && patterns.length)) {\n throw new TypeError('Must provide a nonempty array of patterns to merge');\n }\n\n const parts = /(\\()(?!\\?)|\\\\([1-9]\\d*)|\\\\[\\s\\S]|\\[(?:[^\\\\\\]]|\\\\[\\s\\S])*\\]/g;\n const output = [];\n for (const pattern of patterns) {\n if (XRegExp.isRegExp(pattern)) {\n numPriorCaptures = numCaptures;\n captureNames = (pattern[REGEX_DATA] && pattern[REGEX_DATA].captureNames) || [];\n\n // Rewrite backreferences. Passing to XRegExp dies on octals and ensures patterns are\n // independently valid; helps keep this simple. Named captures are put back\n output.push(XRegExp(pattern.source).source.replace(parts, rewrite));\n } else {\n output.push(XRegExp.escape(pattern));\n }\n }\n\n const separator = conjunction === 'none' ? '' : '|';\n return XRegExp(output.join(separator), flags);\n};\n\n// ==--------------------------==\n// Fixed/extended native methods\n// ==--------------------------==\n\n/**\n * Adds named capture support (with backreferences returned as `result.name`), and fixes browser\n * bugs in the native `RegExp.prototype.exec`. Use via `XRegExp.exec`.\n *\n * @memberOf RegExp\n * @param {String} str String to search.\n * @returns {Array} Match array with named backreference properties, or `null`.\n */\nfixed.exec = function(str) {\n const origLastIndex = this.lastIndex;\n const match = RegExp.prototype.exec.apply(this, arguments);\n\n if (match) {\n // Fix browsers whose `exec` methods don't return `undefined` for nonparticipating capturing\n // groups. This fixes IE 5.5-8, but not IE 9's quirks mode or emulation of older IEs. IE 9\n // in standards mode follows the spec.\n if (!correctExecNpcg && match.length > 1 && match.includes('')) {\n const r2 = copyRegex(this, {\n removeG: true,\n isInternalOnly: true\n });\n // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed\n // matching due to characters outside the match\n String(str).slice(match.index).replace(r2, (...args) => {\n const len = args.length;\n // Skip index 0 and the last 2\n for (let i = 1; i < len - 2; ++i) {\n if (args[i] === undefined) {\n match[i] = undefined;\n }\n }\n });\n }\n\n // Attach named capture properties\n if (this[REGEX_DATA] && this[REGEX_DATA].captureNames) {\n let groupsObject = match;\n if (XRegExp.isInstalled('namespacing')) {\n // https://tc39.github.io/proposal-regexp-named-groups/#sec-regexpbuiltinexec\n match.groups = Object.create(null);\n groupsObject = match.groups;\n }\n // Skip index 0\n for (let i = 1; i < match.length; ++i) {\n const name = this[REGEX_DATA].captureNames[i - 1];\n if (name) {\n groupsObject[name] = match[i];\n }\n }\n // Preserve any existing `groups` obj that came from native ES2018 named capture\n } else if (!match.groups && XRegExp.isInstalled('namespacing')) {\n match.groups = undefined;\n }\n\n // Fix browsers that increment `lastIndex` after zero-length matches\n if (this.global && !match[0].length && (this.lastIndex > match.index)) {\n this.lastIndex = match.index;\n }\n }\n\n if (!this.global) {\n // Fixes IE, Opera bug (last tested IE 9, Opera 11.6)\n this.lastIndex = origLastIndex;\n }\n\n return match;\n};\n\n/**\n * Fixes browser bugs in the native `RegExp.prototype.test`.\n *\n * @memberOf RegExp\n * @param {String} str String to search.\n * @returns {boolean} Whether the regex matched the provided value.\n */\nfixed.test = function(str) {\n // Do this the easy way :-)\n return !!fixed.exec.call(this, str);\n};\n\n/**\n * Adds named capture support (with backreferences returned as `result.name`), and fixes browser\n * bugs in the native `String.prototype.match`.\n *\n * @memberOf String\n * @param {RegExp|*} regex Regex to search with. If not a regex object, it is passed to `RegExp`.\n * @returns {Array} If `regex` uses flag g, an array of match strings or `null`. Without flag g,\n * the result of calling `regex.exec(this)`.\n */\nfixed.match = function(regex) {\n if (!XRegExp.isRegExp(regex)) {\n // Use the native `RegExp` rather than `XRegExp`\n regex = new RegExp(regex);\n } else if (regex.global) {\n const result = String.prototype.match.apply(this, arguments);\n // Fixes IE bug\n regex.lastIndex = 0;\n\n return result;\n }\n\n return fixed.exec.call(regex, nullThrows(this));\n};\n\n/**\n * Adds support for `${n}` (or `$<n>`) tokens for named and numbered backreferences in replacement\n * text, and provides named backreferences to replacement functions as `arguments[0].name`. Also\n * fixes browser bugs in replacement text syntax when performing a replacement using a nonregex\n * search value, and the value of a replacement regex's `lastIndex` property during replacement\n * iterations and upon completion. Note that this doesn't support SpiderMonkey's proprietary third\n * (`flags`) argument. Use via `XRegExp.replace`.\n *\n * @memberOf String\n * @param {RegExp|String} search Search pattern to be replaced.\n * @param {String|Function} replacement Replacement string or a function invoked to create it.\n * @returns {string} New string with one or all matches replaced.\n */\nfixed.replace = function(search, replacement) {\n const isRegex = XRegExp.isRegExp(search);\n let origLastIndex;\n let captureNames;\n let result;\n\n if (isRegex) {\n if (search[REGEX_DATA]) {\n ({captureNames} = search[REGEX_DATA]);\n }\n // Only needed if `search` is nonglobal\n origLastIndex = search.lastIndex;\n } else {\n search += ''; // Type-convert\n }\n\n // Don't use `typeof`; some older browsers return 'function' for regex objects\n if (isType(replacement, 'Function')) {\n // Stringifying `this` fixes a bug in IE < 9 where the last argument in replacement\n // functions isn't type-converted to a string\n result = String(this).replace(search, (...args) => {\n if (captureNames) {\n let groupsObject;\n\n if (XRegExp.isInstalled('namespacing')) {\n // https://tc39.github.io/proposal-regexp-named-groups/#sec-regexpbuiltinexec\n groupsObject = Object.create(null);\n args.push(groupsObject);\n } else {\n // Change the `args[0]` string primitive to a `String` object that can store\n // properties. This really does need to use `String` as a constructor\n args[0] = new String(args[0]);\n [groupsObject] = args;\n }\n\n // Store named backreferences\n for (let i = 0; i < captureNames.length; ++i) {\n if (captureNames[i]) {\n groupsObject[captureNames[i]] = args[i + 1];\n }\n }\n }\n // ES6 specs the context for replacement functions as `undefined`\n return replacement(...args);\n });\n } else {\n // Ensure that the last value of `args` will be a string when given nonstring `this`,\n // while still throwing on null or undefined context\n result = String(nullThrows(this)).replace(search, (...args) => {\n return String(replacement).replace(replacementToken, replacer);\n\n function replacer($0, bracketed, angled, dollarToken) {\n bracketed = bracketed || angled;\n\n // ES2018 added a new trailing `groups` arg that's passed to replacement functions\n // when the search regex uses native named capture\n const numNonCaptureArgs = isType(args[args.length - 1], 'Object') ? 4 : 3;\n const numCaptures = args.length - numNonCaptureArgs;\n\n // Handle named or numbered backreference with curly or angled braces: ${n}, $<n>\n if (bracketed) {\n // Handle backreference to numbered capture, if `bracketed` is an integer. Use\n // `0` for the entire match. Any number of leading zeros may be used.\n if (/^\\d+$/.test(bracketed)) {\n // Type-convert and drop leading zeros\n const n = +bracketed;\n if (n <= numCaptures) {\n return args[n] || '';\n }\n }\n\n // Handle backreference to named capture. If the name does not refer to an\n // existing capturing group, it's an error. Also handles the error for numbered\n // backference that does not refer to an existing group.\n // Using `indexOf` since having groups with the same name is already an error,\n // otherwise would need `lastIndexOf`.\n const n = captureNames ? captureNames.indexOf(bracketed) : -1;\n if (n < 0) {\n throw new SyntaxError(`Backreference to undefined group ${$0}`);\n }\n return args[n + 1] || '';\n }\n\n // Handle `$`-prefixed variable\n // Handle space/blank first because type conversion with `+` drops space padding\n // and converts spaces and empty strings to `0`\n if (dollarToken === '' || dollarToken === ' ') {\n throw new SyntaxError(`Invalid token ${$0}`);\n }\n if (dollarToken === '&' || +dollarToken === 0) { // $&, $0 (not followed by 1-9), $00\n return args[0];\n }\n if (dollarToken === '$') { // $$\n return '$';\n }\n if (dollarToken === '`') { // $` (left context)\n return args[args.length - 1].slice(0, args[args.length - 2]);\n }\n if (dollarToken === \"'\") { // $' (right context)\n return args[args.length - 1].slice(args[args.length - 2] + args[0].length);\n }\n\n // Handle numbered backreference without braces\n // Type-convert and drop leading zero\n dollarToken = +dollarToken;\n // XRegExp behavior for `$n` and `$nn`:\n // - Backrefs end after 1 or 2 digits. Use `${..}` or `$<..>` for more digits.\n // - `$1` is an error if no capturing groups.\n // - `$10` is an error if less than 10 capturing groups. Use `${1}0` or `$<1>0`\n // instead.\n // - `$01` is `$1` if at least one capturing group, else it's an error.\n // - `$0` (not followed by 1-9) and `$00` are the entire match.\n // Native behavior, for comparison:\n // - Backrefs end after 1 or 2 digits. Cannot reference capturing group 100+.\n // - `$1` is a literal `$1` if no capturing groups.\n // - `$10` is `$1` followed by a literal `0` if less than 10 capturing groups.\n // - `$01` is `$1` if at least one capturing group, else it's a literal `$01`.\n // - `$0` is a literal `$0`.\n if (!isNaN(dollarToken)) {\n if (dollarToken > numCaptures) {\n throw new SyntaxError(`Backreference to undefined group ${$0}`);\n }\n return args[dollarToken] || '';\n }\n\n // `$` followed by an unsupported char is an error, unlike native JS\n throw new SyntaxError(`Invalid token ${$0}`);\n }\n });\n }\n\n if (isRegex) {\n if (search.global) {\n // Fixes IE, Safari bug (last tested IE 9, Safari 5.1)\n search.lastIndex = 0;\n } else {\n // Fixes IE, Opera bug (last tested IE 9, Opera 11.6)\n search.lastIndex = origLastIndex;\n }\n }\n\n return result;\n};\n\n/**\n * Fixes browser bugs in the native `String.prototype.split`. Use via `XRegExp.split`.\n *\n * @memberOf String\n * @param {RegExp|String} separator Regex or string to use for separating the string.\n * @param {Number} [limit] Maximum number of items to include in the result array.\n * @returns {!Array} Array of substrings.\n */\nfixed.split = function(separator, limit) {\n if (!XRegExp.isRegExp(separator)) {\n // Browsers handle nonregex split correctly, so use the faster native method\n return String.prototype.split.apply(this, arguments);\n }\n\n const str = String(this);\n const output = [];\n const origLastIndex = separator.lastIndex;\n let lastLastIndex = 0;\n let lastLength;\n\n // Values for `limit`, per the spec:\n // If undefined: pow(2,32) - 1\n // If 0, Infinity, or NaN: 0\n // If positive number: limit = floor(limit); if (limit >= pow(2,32)) limit -= pow(2,32);\n // If negative number: pow(2,32) - floor(abs(limit))\n // If other: Type-convert, then use the above rules\n // This line fails in very strange ways for some values of `limit` in Opera 10.5-10.63, unless\n // Opera Dragonfly is open (go figure). It works in at least Opera 9.5-10.1 and 11+\n limit = (limit === undefined ? -1 : limit) >>> 0;\n\n XRegExp.forEach(str, separator, (match) => {\n // This condition is not the same as `if (match[0].length)`\n if ((match.index + match[0].length) > lastLastIndex) {\n output.push(str.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < str.length) {\n Array.prototype.push.apply(output, match.slice(1));\n }\n lastLength = match[0].length;\n lastLastIndex = match.index + lastLength;\n }\n });\n\n if (lastLastIndex === str.length) {\n if (!separator.test('') || lastLength) {\n output.push('');\n }\n } else {\n output.push(str.slice(lastLastIndex));\n }\n\n separator.lastIndex = origLastIndex;\n return output.length > limit ? output.slice(0, limit) : output;\n};\n\n// ==--------------------------==\n// Built-in syntax/flag tokens\n// ==--------------------------==\n\n/*\n * Letter escapes that natively match literal characters: `\\a`, `\\A`, etc. These should be\n * SyntaxErrors but are allowed in web reality. XRegExp makes them errors for cross-browser\n * consistency and to reserve their syntax, but lets them be superseded by addons.\n */\nXRegExp.addToken(\n /\\\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\\dA-Fa-f]{4}|{[\\dA-Fa-f]+})|x(?![\\dA-Fa-f]{2}))/,\n (match, scope) => {\n // \\B is allowed in default scope only\n if (match[1] === 'B' && scope === defaultScope) {\n return match[0];\n }\n throw new SyntaxError(`Invalid escape ${match[0]}`);\n },\n {\n scope: 'all',\n leadChar: '\\\\'\n }\n);\n\n/*\n * Unicode code point escape with curly braces: `\\u{N..}`. `N..` is any one or more digit\n * hexadecimal number from 0-10FFFF, and can include leading zeros. Requires the native ES6 `u` flag\n * to support code points greater than U+FFFF. Avoids converting code points above U+FFFF to\n * surrogate pairs (which could be done without flag `u`), since that could lead to broken behavior\n * if you follow a `\\u{N..}` token that references a code point above U+FFFF with a quantifier, or\n * if you use the same in a character class.\n */\nXRegExp.addToken(\n /\\\\u{([\\dA-Fa-f]+)}/,\n (match, scope, flags) => {\n const code = dec(match[1]);\n if (code > 0x10FFFF) {\n throw new SyntaxError(`Invalid Unicode code point ${match[0]}`);\n }\n if (code <= 0xFFFF) {\n // Converting to \\uNNNN avoids needing to escape the literal character and keep it\n // separate from preceding tokens\n return `\\\\u${pad4(hex(code))}`;\n }\n // If `code` is between 0xFFFF and 0x10FFFF, require and defer to native handling\n if (hasNativeU && flags.includes('u')) {\n return match[0];\n }\n throw new SyntaxError('Cannot use Unicode code point above \\\\u{FFFF} without flag u');\n },\n {\n scope: 'all',\n leadChar: '\\\\'\n }\n);\n\n/*\n * Comment pattern: `(?# )`. Inline comments are an alternative to the line comments allowed in\n * free-spacing mode (flag x).\n */\nXRegExp.addToken(\n /\\(\\?#[^)]*\\)/,\n getContextualTokenSeparator,\n {leadChar: '('}\n);\n\n/*\n * Whitespace and line comments, in free-spacing mode (aka extended mode, flag x) only.\n */\nXRegExp.addToken(\n /\\s+|#[^\\n]*\\n?/,\n getContextualTokenSeparator,\n {flag: 'x'}\n);\n\n/*\n * Dot, in dotAll mode (aka singleline mode, flag s) only.\n */\nif (!hasNativeS) {\n XRegExp.addToken(\n /\\./,\n () => '[\\\\s\\\\S]',\n {\n flag: 's',\n leadChar: '.'\n }\n );\n}\n\n/*\n * Named backreference: `\\k<name>`. Backreference names can use RegExpIdentifierName characters\n * only. Also allows numbered backreferences as `\\k<n>`.\n */\nXRegExp.addToken(\n /\\\\k<([^>]+)>/,\n function(match) {\n // Groups with the same name is an error, else would need `lastIndexOf`\n const index = isNaN(match[1]) ? (this.captureNames.indexOf(match[1]) + 1) : +match[1];\n const endIndex = match.index + match[0].length;\n if (!index || index > this.captureNames.length) {\n throw new SyntaxError(`Backreference to undefined group ${match[0]}`);\n }\n // Keep backreferences separate from subsequent literal numbers. This avoids e.g.\n // inadvertedly changing `(?<n>)\\k<n>1` to `()\\11`.\n return `\\\\${index}${\n endIndex === match.input.length || isNaN(match.input[endIndex]) ?\n '' : '(?:)'\n }`;\n },\n {leadChar: '\\\\'}\n);\n\n/*\n * Numbered backreference or octal, plus any following digits: `\\0`, `\\11`, etc. Octals except `\\0`\n * not followed by 0-9 and backreferences to unopened capture groups throw an error. Other matches\n * are returned unaltered. IE < 9 doesn't support backreferences above `\\99` in regex syntax.\n */\nXRegExp.addToken(\n /\\\\(\\d+)/,\n function(match, scope) {\n if (\n !(\n scope === defaultScope &&\n /^[1-9]/.test(match[1]) &&\n +match[1] <= this.captureNames.length\n ) &&\n match[1] !== '0'\n ) {\n throw new SyntaxError(`Cannot use octal escape or backreference to undefined group ${match[0]}`);\n }\n return match[0];\n },\n {\n scope: 'all',\n leadChar: '\\\\'\n }\n);\n\n/*\n * Named capturing group; match the opening delimiter only: `(?<name>`. Capture names can use the\n * RegExpIdentifierName characters only. Names can't be integers. Supports Python-style\n * `(?P<name>` as an alternate syntax to avoid issues in some older versions of Opera which natively\n * supported the Python-style syntax. Otherwise, XRegExp might treat numbered backreferences to\n * Python-style named capture as octals.\n */\nXRegExp.addToken(\n /\\(\\?P?<([\\p{ID_Start}$_][\\p{ID_Continue}$_\\u200C\\u200D]*)>/u,\n function(match) {\n if (!XRegExp.isInstalled('namespacing') && (match[1] === 'length' || match[1] === '__proto__')) {\n throw new SyntaxError(`Cannot use reserved word as capture name ${match[0]}`);\n }\n if (this.captureNames.includes(match[1])) {\n throw new SyntaxError(`Cannot use same name for multiple groups ${match[0]}`);\n }\n this.captureNames.push(match[1]);\n this.hasNamedCapture = true;\n return '(';\n },\n {leadChar: '('}\n);\n\n/*\n * Capturing group; match the opening parenthesis only. Required for support of named capturing\n * groups. Also adds named capture only mode (flag n).\n */\nXRegExp.addToken(\n /\\((?!\\?)/,\n function(match, scope, flags) {\n if (flags.includes('n')) {\n return '(?:';\n }\n this.captureNames.push(null);\n return '(';\n },\n {\n optionalFlags: 'n',\n leadChar: '('\n }\n);\n\nexport default XRegExp;\n","/*!\n * XRegExp.build 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2012-present MIT License\n */\n\nexport default (XRegExp) => {\n const REGEX_DATA = 'xregexp';\n const subParts = /(\\()(?!\\?)|\\\\([1-9]\\d*)|\\\\[\\s\\S]|\\[(?:[^\\\\\\]]|\\\\[\\s\\S])*\\]/g;\n const parts = XRegExp.union([/\\({{([\\w$]+)}}\\)|{{([\\w$]+)}}/, subParts], 'g', {\n conjunction: 'or'\n });\n\n /**\n * Strips a leading `^` and trailing unescaped `$`, if both are present.\n *\n * @private\n * @param {String} pattern Pattern to process.\n * @returns {String} Pattern with edge anchors removed.\n */\n function deanchor(pattern) {\n // Allow any number of empty noncapturing groups before/after anchors, because regexes\n // built/generated by XRegExp sometimes include them\n const leadingAnchor = /^(?:\\(\\?:\\))*\\^/;\n const trailingAnchor = /\\$(?:\\(\\?:\\))*$/;\n\n if (\n leadingAnchor.test(pattern) &&\n trailingAnchor.test(pattern) &&\n // Ensure that the trailing `$` isn't escaped\n trailingAnchor.test(pattern.replace(/\\\\[\\s\\S]/g, ''))\n ) {\n return pattern.replace(leadingAnchor, '').replace(trailingAnchor, '');\n }\n\n return pattern;\n }\n\n /**\n * Converts the provided value to an XRegExp. Native RegExp flags are not preserved.\n *\n * @private\n * @param {String|RegExp} value Value to convert.\n * @param {Boolean} [addFlagX] Whether to apply the `x` flag in cases when `value` is not\n * already a regex generated by XRegExp\n * @returns {RegExp} XRegExp object with XRegExp syntax applied.\n */\n function asXRegExp(value, addFlagX) {\n const flags = addFlagX ? 'x' : '';\n return XRegExp.isRegExp(value) ?\n (value[REGEX_DATA] && value[REGEX_DATA].captureNames ?\n // Don't recompile, to preserve capture names\n value :\n // Recompile as XRegExp\n XRegExp(value.source, flags)\n ) :\n // Compile string as XRegExp\n XRegExp(value, flags);\n }\n\n function interpolate(substitution) {\n return substitution instanceof RegExp ? substitution : XRegExp.escape(substitution);\n }\n\n function reduceToSubpatternsObject(subpatterns, interpolated, subpatternIndex) {\n subpatterns[`subpattern${subpatternIndex}`] = interpolated;\n return subpatterns;\n }\n\n function embedSubpatternAfter(raw, subpatternIndex, rawLiterals) {\n const hasSubpattern = subpatternIndex < rawLiterals.length - 1;\n return raw + (hasSubpattern ? `{{subpattern${subpatternIndex}}}` : '');\n }\n\n /**\n * Provides tagged template literals that create regexes with XRegExp syntax and flags. The\n * provided pattern is handled as a raw string, so backslashes don't need to be escaped.\n *\n * Interpolation of strings and regexes shares the features of `XRegExp.build`. Interpolated\n * patterns are treated as atomic units when quantified, interpolated strings have their special\n * characters escaped, a leading `^` and trailing unescaped `$` are stripped from interpolated\n * regexes if both are present, and any backreferences within an interpolated regex are\n * rewritten to work within the overall pattern.\n *\n * @memberOf XRegExp\n * @param {String} [flags] Any combination of XRegExp flags.\n * @returns {Function} Handler for template literals that construct regexes with XRegExp syntax.\n * @example\n *\n * XRegExp.tag()`\\b\\w+\\b`.test('word'); // -> true\n *\n * const hours = /1[0-2]|0?[1-9]/;\n * const minutes = /(?<minutes>[0-5][0-9])/;\n * const time = XRegExp.tag('x')`\\b ${hours} : ${minutes} \\b`;\n * time.test('10:59'); // -> true\n * XRegExp.exec('10:59', time).groups.minutes; // -> '59'\n *\n * const backref1 = /(a)\\1/;\n * const backref2 = /(b)\\1/;\n * XRegExp.tag()`${backref1}${backref2}`.test('aabb'); // -> true\n */\n XRegExp.tag = (flags) => (literals, ...substitutions) => {\n const subpatterns = substitutions.map(interpolate).reduce(reduceToSubpatternsObject, {});\n const pattern = literals.raw.map(embedSubpatternAfter).join('');\n return XRegExp.build(pattern, subpatterns, flags);\n };\n\n /**\n * Builds regexes using named subpatterns, for readability and pattern reuse. Backreferences in\n * the outer pattern and provided subpatterns are automatically renumbered to work correctly.\n * Native flags used by provided subpatterns are ignored in favor of the `flags` argument.\n *\n * @memberOf XRegExp\n * @param {String} pattern XRegExp pattern using `{{name}}` for embedded subpatterns. Allows\n * `({{name}})` as shorthand for `(?<name>{{name}})`. Patterns cannot be embedded within\n * character classes.\n * @param {Object} subs Lookup object for named subpatterns. Values can be strings or regexes. A\n * leading `^` and trailing unescaped `$` are stripped from subpatterns, if both are present.\n * @param {String} [flags] Any combination of XRegExp flags.\n * @returns {RegExp} Regex with interpolated subpatterns.\n * @example\n *\n * const time = XRegExp.build('(?x)^ {{hours}} ({{minutes}}) $', {\n * hours: XRegExp.build('{{h12}} : | {{h24}}', {\n * h12: /1[0-2]|0?[1-9]/,\n * h24: /2[0-3]|[01][0-9]/\n * }, 'x'),\n * minutes: /^[0-5][0-9]$/\n * });\n * time.test('10:59'); // -> true\n * XRegExp.exec('10:59', time).groups.minutes; // -> '59'\n */\n XRegExp.build = (pattern, subs, flags) => {\n flags = flags || '';\n // Used with `asXRegExp` calls for `pattern` and subpatterns in `subs`, to work around how\n // some browsers convert `RegExp('\\n')` to a regex that contains the literal characters `\\`\n // and `n`. See more details at <https://github.com/slevithan/xregexp/pull/163>.\n const addFlagX = flags.includes('x');\n const inlineFlags = /^\\(\\?([\\w$]+)\\)/.exec(pattern);\n // Add flags within a leading mode modifier to the overall pattern's flags\n if (inlineFlags) {\n flags = XRegExp._clipDuplicates(flags + inlineFlags[1]);\n }\n\n const data = {};\n for (const p in subs) {\n if (subs.hasOwnProperty(p)) {\n // Passing to XRegExp enables extended syntax and ensures independent validity,\n // lest an unescaped `(`, `)`, `[`, or trailing `\\` breaks the `(?:)` wrapper. For\n // subpatterns provided as native regexes, it dies on octals and adds the property\n // used to hold extended regex instance data, for simplicity.\n const sub = asXRegExp(subs[p], addFlagX);\n data[p] = {\n // Deanchoring allows embedding independently useful anchored regexes. If you\n // really need to keep your anchors, double them (i.e., `^^...$$`).\n pattern: deanchor(sub.source),\n names: sub[REGEX_DATA].captureNames || []\n };\n }\n }\n\n // Passing to XRegExp dies on octals and ensures the outer pattern is independently valid;\n // helps keep this simple. Named captures will be put back.\n const patternAsRegex = asXRegExp(pattern, addFlagX);\n\n // 'Caps' is short for 'captures'\n let numCaps = 0;\n let numPriorCaps;\n let numOuterCaps = 0;\n const outerCapsMap = [0];\n const outerCapNames = patternAsRegex[REGEX_DATA].captureNames || [];\n const output = patternAsRegex.source.replace(parts, ($0, $1, $2, $3, $4) => {\n const subName = $1 || $2;\n let capName;\n let intro;\n let localCapIndex;\n // Named subpattern\n if (subName) {\n if (!data.hasOwnProperty(subName)) {\n throw new ReferenceError(`Undefined property ${$0}`);\n }\n // Named subpattern was wrapped in a capturing group\n if ($1) {\n capName = outerCapNames[numOuterCaps];\n outerCapsMap[++numOuterCaps] = ++numCaps;\n // If it's a named group, preserve the name. Otherwise, use the subpattern name\n // as the capture name\n intro = `(?<${capName || subName}>`;\n } else {\n intro = '(?:';\n }\n numPriorCaps = numCaps;\n const rewrittenSubpattern = data[subName].pattern.replace(subParts, (match, paren, backref) => {\n // Capturing group\n if (paren) {\n capName = data[subName].names[numCaps - numPriorCaps];\n ++numCaps;\n // If the current capture has a name, preserve the name\n if (capName) {\n return `(?<${capName}>`;\n }\n // Backreference\n } else if (backref) {\n localCapIndex = +backref - 1;\n // Rewrite the backreference\n return data[subName].names[localCapIndex] ?\n // Need to preserve the backreference name in case using flag `n`\n `\\\\k<${data[subName].names[localCapIndex]}>` :\n `\\\\${+backref + numPriorCaps}`;\n }\n return match;\n });\n return `${intro}${rewrittenSubpattern})`;\n }\n // Capturing group\n if ($3) {\n capName = outerCapNames[numOuterCaps];\n outerCapsMap[++numOuterCaps] = ++numCaps;\n // If the current capture has a name, preserve the name\n if (capName) {\n return `(?<${capName}>`;\n }\n // Backreference\n } else if ($4) {\n localCapIndex = +$4 - 1;\n // Rewrite the backreference\n return outerCapNames[localCapIndex] ?\n // Need to preserve the backreference name in case using flag `n`\n `\\\\k<${outerCapNames[localCapIndex]}>` :\n `\\\\${outerCapsMap[+$4]}`;\n }\n return $0;\n });\n\n return XRegExp(output, flags);\n };\n};\n","/*!\n * XRegExp.matchRecursive 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2009-present MIT License\n */\n\nexport default (XRegExp) => {\n\n /**\n * Returns a match detail object composed of the provided values.\n *\n * @private\n */\n function row(name, value, start, end) {\n return {\n name,\n value,\n start,\n end\n };\n }\n\n /**\n * Returns an array of match strings between outermost left and right delimiters, or an array of\n * objects with detailed match parts and position data. By default, an error is thrown if\n * delimiters are unbalanced within the subject string.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {String} left Left delimiter as an XRegExp pattern.\n * @param {String} right Right delimiter as an XRegExp pattern.\n * @param {String} [flags] Any combination of XRegExp flags, used for the left and right delimiters.\n * @param {Object} [options] Options object with optional properties:\n * - `valueNames` {Array} Providing `valueNames` changes the return value from an array of\n * matched strings to an array of objects that provide the value and start/end positions\n * for the matched strings as well as the matched delimiters and unmatched string segments.\n * To use this extended information mode, provide an array of 4 strings that name the parts\n * to be returned:\n * 1. String segments outside of (before, between, and after) matches.\n * 2. Matched outermost left delimiters.\n * 3. Matched text between the outermost left and right delimiters.\n * 4. Matched outermost right delimiters.\n * Taken together, these parts include the entire subject string if used with flag g.\n * Use `null` for any of these values to omit unneeded parts from the returned results.\n * - `escapeChar` {String} Single char used to escape delimiters within the subject string.\n * - `unbalanced` {String} Handling mode for unbalanced delimiters. Options are:\n * - 'error' - throw (default)\n * - 'skip' - unbalanced delimiters are treated as part of the text between delimiters, and\n * searches continue at the end of the unbalanced delimiter.\n * - 'skip-lazy' - unbalanced delimiters are treated as part of the text between delimiters,\n * and searches continue one character after the start of the unbalanced delimiter.\n * @returns {Array} Array of matches, or an empty array.\n * @example\n *\n * // Basic usage\n * const str1 = '(t((e))s)t()(ing)';\n * XRegExp.matchRecursive(str1, '\\\\(', '\\\\)', 'g');\n * // -> ['t((e))s', '', 'ing']\n *\n * // Extended information mode with valueNames\n * const str2 = 'Here is <div> <div>an</div></div> example';\n * XRegExp.matchRecursive(str2, '<div\\\\s*>', '</div>', 'gi', {\n * valueNames: ['between', 'left', 'match', 'right']\n * });\n * // -> [\n * // {name: 'between', value: 'Here is ', start: 0, end: 8},\n * // {name: 'left', value: '<div>', start: 8, end: 13},\n * // {name: 'match', value: ' <div>an</div>', start: 13, end: 27},\n * // {name: 'right', value: '</div>', start: 27, end: 33},\n * // {name: 'between', value: ' example', start: 33, end: 41}\n * // ]\n *\n * // Omitting unneeded parts with null valueNames, and using escapeChar\n * const str3 = '...{1}.\\\\{{function(x,y){return {y:x}}}';\n * XRegExp.matchRecursive(str3, '{', '}', 'g', {\n * valueNames: ['literal', null, 'value', null],\n * escapeChar: '\\\\'\n * });\n * // -> [\n * // {name: 'literal', value: '...', start: 0, end: 3},\n * // {name: 'value', value: '1', start: 4, end: 5},\n * // {name: 'literal', value: '.\\\\{', start: 6, end: 9},\n * // {name: 'value', value: 'function(x,y){return {y:x}}', start: 10, end: 37}\n * // ]\n *\n * // Sticky mode via flag y\n * const str4 = '<1><<<2>>><3>4<5>';\n * XRegExp.matchRecursive(str4, '<', '>', 'gy');\n * // -> ['1', '<<2>>', '3']\n *\n * // Skipping unbalanced delimiters instead of erroring\n * const str5 = 'Here is <div> <div>an</div> unbalanced example';\n * XRegExp.matchRecursive(str5, '<div\\\\s*>', '</div>', 'gi', {\n * unbalanced: 'skip'\n * });\n * // -> ['an']\n */\n XRegExp.matchRecursive = (str, left, right, flags, options) => {\n flags = flags || '';\n options = options || {};\n const global = flags.includes('g');\n const sticky = flags.includes('y');\n // Flag `y` is handled manually\n const basicFlags = flags.replace(/y/g, '');\n left = XRegExp(left, basicFlags);\n right = XRegExp(right, basicFlags);\n\n let esc;\n let {escapeChar} = options;\n if (escapeChar) {\n if (escapeChar.length > 1) {\n throw new Error('Cannot use more than one escape character');\n }\n escapeChar = XRegExp.escape(escapeChar);\n // Example of concatenated `esc` regex:\n // `escapeChar`: '%'\n // `left`: '<'\n // `right`: '>'\n // Regex is: /(?:%[\\S\\s]|(?:(?!<|>)[^%])+)+/\n esc = new RegExp(\n `(?:${escapeChar}[\\\\S\\\\s]|(?:(?!${\n // Using `XRegExp.union` safely rewrites backreferences in `left` and `right`.\n // Intentionally not passing `basicFlags` to `XRegExp.union` since any syntax\n // transformation resulting from those flags was already applied to `left` and\n // `right` when they were passed through the XRegExp constructor above.\n XRegExp.union([left, right], '', {conjunction: 'or'}).source\n })[^${escapeChar}])+)+`,\n // Flags `dgy` not needed here\n flags.replace(XRegExp._hasNativeFlag('s') ? /[^imsu]/g : /[^imu]/g, '')\n );\n }\n\n let openTokens = 0;\n let delimStart = 0;\n let delimEnd = 0;\n let lastOuterEnd = 0;\n let outerStart;\n let innerStart;\n let leftMatch;\n let rightMatch;\n const vN = options.valueNames;\n const output = [];\n\n while (true) {\n // If using an escape character, advance to the delimiter's next starting position,\n // skipping any escaped characters in between\n if (escapeChar) {\n delimEnd += (XRegExp.exec(str, esc, delimEnd, 'sticky') || [''])[0].length;\n }\n\n leftMatch = XRegExp.exec(str, left, delimEnd);\n rightMatch = XRegExp.exec(str, right, delimEnd);\n // Keep the leftmost match only\n if (leftMatch && rightMatch) {\n if (leftMatch.index <= rightMatch.index) {\n rightMatch = null;\n } else {\n leftMatch = null;\n }\n }\n\n // Paths (LM: leftMatch, RM: rightMatch, OT: openTokens):\n // LM | RM | OT | Result\n // 1 | 0 | 1 | loop\n // 1 | 0 | 0 | loop\n // 0 | 1 | 1 | loop\n // 0 | 1 | 0 | throw\n // 0 | 0 | 1 | throw\n // 0 | 0 | 0 | break\n // The paths above don't include the sticky mode special case. The loop ends after the\n // first completed match if not `global`.\n if (leftMatch || rightMatch) {\n delimStart = (leftMatch || rightMatch).index;\n delimEnd = delimStart + (leftMatch || rightMatch)[0].length;\n } else if (!openTokens) {\n break;\n }\n if (sticky && !openTokens && delimStart > lastOuterEnd) {\n break;\n }\n if (leftMatch) {\n if (!openTokens) {\n outerStart = delimStart;\n innerStart = delimEnd;\n }\n openTokens += 1;\n } else if (rightMatch && openTokens) {\n openTokens -= 1;\n if (!openTokens) {\n if (vN) {\n if (vN[0] && outerStart > lastOuterEnd) {\n output.push(row(vN[0], str.slice(lastOuterEnd, outerStart), lastOuterEnd, outerStart));\n }\n if (vN[1]) {\n output.push(row(vN[1], str.slice(outerStart, innerStart), outerStart, innerStart));\n }\n if (vN[2]) {\n output.push(row(vN[2], str.slice(innerStart, delimStart), innerStart, delimStart));\n }\n if (vN[3]) {\n output.push(row(vN[3], str.slice(delimStart, delimEnd), delimStart, delimEnd));\n }\n } else {\n output.push(str.slice(innerStart, delimStart));\n }\n lastOuterEnd = delimEnd;\n if (!global) {\n break;\n }\n }\n // Found unbalanced delimiter\n } else {\n const unbalanced = options.unbalanced || 'error';\n if (unbalanced === 'skip' || unbalanced === 'skip-lazy') {\n if (rightMatch) {\n rightMatch = null;\n // No `leftMatch` for unbalanced left delimiter because we've reached the string end\n } else {\n if (unbalanced === 'skip') {\n const outerStartDelimLength = XRegExp.exec(str, left, outerStart, 'sticky')[0].length;\n delimEnd = outerStart + (outerStartDelimLength || 1);\n } else {\n delimEnd = outerStart + 1;\n }\n openTokens = 0;\n }\n } else if (unbalanced === 'error') {\n const delimSide = rightMatch ? 'right' : 'left';\n const errorPos = rightMatch ? delimStart : outerStart;\n throw new Error(`Unbalanced ${delimSide} delimiter found in string at position ${errorPos}`);\n } else {\n throw new Error(`Unsupported value for unbalanced: ${unbalanced}`);\n }\n }\n\n // If the delimiter matched an empty string, avoid an infinite loop\n if (delimStart === delimEnd) {\n delimEnd += 1;\n }\n }\n\n if (global && output.length > 0 && !sticky && vN && vN[0] && str.length > lastOuterEnd) {\n output.push(row(vN[0], str.slice(lastOuterEnd), lastOuterEnd, str.length));\n }\n\n return output;\n };\n};\n","/*!\n * XRegExp Unicode Base 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2008-present MIT License\n */\n\nexport default (XRegExp) => {\n\n /**\n * Adds base support for Unicode matching:\n * - Adds syntax `\\p{..}` for matching Unicode tokens. Tokens can be inverted using `\\P{..}` or\n * `\\p{^..}`. Token names ignore case, spaces, hyphens, and underscores. You can omit the\n * braces for token names that are a single letter (e.g. `\\pL` or `PL`).\n * - Adds flag A (astral), which enables 21-bit Unicode support.\n * - Adds the `XRegExp.addUnicodeData` method used by other addons to provide character data.\n *\n * Unicode Base relies on externally provided Unicode character data. Official addons are\n * available to provide data for Unicode categories, scripts, and properties.\n *\n * @requires XRegExp\n */\n\n // ==--------------------------==\n // Private stuff\n // ==--------------------------==\n\n // Storage for Unicode data\n const unicode = {};\n const unicodeTypes = {};\n\n // Reuse utils\n const dec = XRegExp._dec;\n const hex = XRegExp._hex;\n const pad4 = XRegExp._pad4;\n\n // Generates a token lookup name: lowercase, with hyphens, spaces, and underscores removed\n function normalize(name) {\n return name.replace(/[- _]+/g, '').toLowerCase();\n }\n\n // Gets the decimal code of a literal code unit, \\xHH, \\uHHHH, or a backslash-escaped literal\n function charCode(chr) {\n const esc = /^\\\\[xu](.+)/.exec(chr);\n return esc ?\n dec(esc[1]) :\n chr.charCodeAt(chr[0] === '\\\\' ? 1 : 0);\n }\n\n // Inverts a list of ordered BMP characters and ranges\n function invertBmp(range) {\n let output = '';\n let lastEnd = -1;\n\n XRegExp.forEach(\n range,\n /(\\\\x..|\\\\u....|\\\\?[\\s\\S])(?:-(\\\\x..|\\\\u....|\\\\?[\\s\\S]))?/,\n (m) => {\n const start = charCode(m[1]);\n if (start > (lastEnd + 1)) {\n output += `\\\\u${pad4(hex(lastEnd + 1))}`;\n if (start > (lastEnd + 2)) {\n output += `-\\\\u${pad4(hex(start - 1))}`;\n }\n }\n lastEnd = charCode(m[2] || m[1]);\n }\n );\n\n if (lastEnd < 0xFFFF) {\n output += `\\\\u${pad4(hex(lastEnd + 1))}`;\n if (lastEnd < 0xFFFE) {\n output += '-\\\\uFFFF';\n }\n }\n\n return output;\n }\n\n // Generates an inverted BMP range on first use\n function cacheInvertedBmp(slug) {\n const prop = 'b!';\n return (\n unicode[slug][prop] ||\n (unicode[slug][prop] = invertBmp(unicode[slug].bmp))\n );\n }\n\n // Combines and optionally negates BMP and astral data\n function buildAstral(slug, isNegated) {\n const item = unicode[slug];\n let combined = '';\n\n if (item.bmp && !item.isBmpLast) {\n combined = `[${item.bmp}]${item.astral ? '|' : ''}`;\n }\n if (item.astral) {\n combined += item.astral;\n }\n if (item.isBmpLast && item.bmp) {\n combined += `${item.astral ? '|' : ''}[${item.bmp}]`;\n }\n\n // Astral Unicode tokens always match a code point, never a code unit\n return isNegated ?\n `(?:(?!${combined})(?:[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\0-\\uFFFF]))` :\n `(?:${combined})`;\n }\n\n // Builds a complete astral pattern on first use\n function cacheAstral(slug, isNegated) {\n const prop = isNegated ? 'a!' : 'a=';\n return (\n unicode[slug][prop] ||\n (unicode[slug][prop] = buildAstral(slug, isNegated))\n );\n }\n\n // ==--------------------------==\n // Core functionality\n // ==--------------------------==\n\n /*\n * Add astral mode (flag A) and Unicode token syntax: `\\p{..}`, `\\P{..}`, `\\p{^..}`, `\\pC`.\n */\n XRegExp.addToken(\n // Use `*` instead of `+` to avoid capturing `^` as the token name in `\\p{^}`\n /\\\\([pP])(?:{(\\^?)(?:(\\w+)=)?([^}]*)}|([A-Za-z]))/,\n (match, scope, flags) => {\n const ERR_DOUBLE_NEG = 'Invalid double negation ';\n const ERR_UNKNOWN_NAME = 'Unknown Unicode token ';\n const ERR_UNKNOWN_REF = 'Unicode token missing data ';\n const ERR_ASTRAL_ONLY = 'Astral mode required for Unicode token ';\n const ERR_ASTRAL_IN_CLASS = 'Astral mode does not support Unicode tokens within character classes';\n const [\n fullToken,\n pPrefix,\n caretNegation,\n typePrefix,\n tokenName,\n tokenSingleCharName\n ] = match;\n // Negated via \\P{..} or \\p{^..}\n let isNegated = pPrefix === 'P' || !!caretNegation;\n // Switch from BMP (0-FFFF) to astral (0-10FFFF) mode via flag A\n const isAstralMode = flags.includes('A');\n // Token lookup name. Check `tokenSingleCharName` first to avoid passing `undefined`\n // via `\\p{}`\n let slug = normalize(tokenSingleCharName || tokenName);\n // Token data object\n let item = unicode[slug];\n\n if (pPrefix === 'P' && caretNegation) {\n throw new SyntaxError(ERR_DOUBLE_NEG + fullToken);\n }\n if (!unicode.hasOwnProperty(slug)) {\n throw new SyntaxError(ERR_UNKNOWN_NAME + fullToken);\n }\n\n if (typePrefix) {\n if (!(unicodeTypes[typePrefix] && unicodeTypes[typePrefix][slug])) {\n throw new SyntaxError(ERR_UNKNOWN_NAME + fullToken);\n }\n }\n\n // Switch to the negated form of the referenced Unicode token\n if (item.inverseOf) {\n slug = normalize(item.inverseOf);\n if (!unicode.hasOwnProperty(slug)) {\n throw new ReferenceError(`${ERR_UNKNOWN_REF + fullToken} -> ${item.inverseOf}`);\n }\n item = unicode[slug];\n isNegated = !isNegated;\n }\n\n if (!(item.bmp || isAstralMode)) {\n throw new SyntaxError(ERR_ASTRAL_ONLY + fullToken);\n }\n if (isAstralMode) {\n if (scope === 'class') {\n throw new SyntaxError(ERR_ASTRAL_IN_CLASS);\n }\n\n return cacheAstral(slug, isNegated);\n }\n\n return scope === 'class' ?\n (isNegated ? cacheInvertedBmp(slug) : item.bmp) :\n `${(isNegated ? '[^' : '[') + item.bmp}]`;\n },\n {\n scope: 'all',\n optionalFlags: 'A',\n leadChar: '\\\\'\n }\n );\n\n /**\n * Adds to the list of Unicode tokens that XRegExp regexes can match via `\\p` or `\\P`.\n *\n * @memberOf XRegExp\n * @param {Array} data Objects with named character ranges. Each object may have properties\n * `name`, `alias`, `isBmpLast`, `inverseOf`, `bmp`, and `astral`. All but `name` are\n * optional, although one of `bmp` or `astral` is required (unless `inverseOf` is set). If\n * `astral` is absent, the `bmp` data is used for BMP and astral modes. If `bmp` is absent,\n * the name errors in BMP mode but works in astral mode. If both `bmp` and `astral` are\n * provided, the `bmp` data only is used in BMP mode, and the combination of `bmp` and\n * `astral` data is used in astral mode. `isBmpLast` is needed when a token matches orphan\n * high surrogates *and* uses surrogate pairs to match astral code points. The `bmp` and\n * `astral` data should be a combination of literal characters and `\\xHH` or `\\uHHHH` escape\n * sequences, with hyphens to create ranges. Any regex metacharacters in the data should be\n * escaped, apart from range-creating hyphens. The `astral` data can additionally use\n * character classes and alternation, and should use surrogate pairs to represent astral code\n * points. `inverseOf` can be used to avoid duplicating character data if a Unicode token is\n * defined as the exact inverse of another token.\n * @param {String} [typePrefix] Enables optionally using this type as a prefix for all of the\n * provided Unicode tokens, e.g. if given `'Type'`, then `\\p{TokenName}` can also be written\n * as `\\p{Type=TokenName}`.\n * @example\n *\n * // Basic use\n * XRegExp.addUnicodeData([{\n * name: 'XDigit',\n * alias: 'Hexadecimal',\n * bmp: '0-9A-Fa-f'\n * }]);\n * XRegExp('\\\\p{XDigit}:\\\\p{Hexadecimal}+').test('0:3D'); // -> true\n */\n XRegExp.addUnicodeData = (data, typePrefix) => {\n const ERR_NO_NAME = 'Unicode token requires name';\n const ERR_NO_DATA = 'Unicode token has no character data ';\n\n if (typePrefix) {\n // Case sensitive to match ES2018\n unicodeTypes[typePrefix] = {};\n }\n\n for (const item of data) {\n if (!item.name) {\n throw new Error(ERR_NO_NAME);\n }\n if (!(item.inverseOf || item.bmp || item.astral)) {\n throw new Error(ERR_NO_DATA + item.name);\n }\n\n const normalizedName = normalize(item.name);\n unicode[normalizedName] = item;\n if (typePrefix) {\n unicodeTypes[typePrefix][normalizedName] = true;\n }\n\n if (item.alias) {\n const normalizedAlias = normalize(item.alias);\n unicode[normalizedAlias] = item;\n if (typePrefix) {\n unicodeTypes[typePrefix][normalizedAlias] = true;\n }\n }\n }\n\n // Reset the pattern cache used by the `XRegExp` constructor, since the same pattern and\n // flags might now produce different results\n XRegExp.cache.flush('patterns');\n };\n\n /**\n * @ignore\n *\n * Return a reference to the internal Unicode definition structure for the given Unicode\n * Property if the given name is a legal Unicode Property for use in XRegExp `\\p` or `\\P` regex\n * constructs.\n *\n * @memberOf XRegExp\n * @param {String} name Name by which the Unicode Property may be recognized (case-insensitive),\n * e.g. `'N'` or `'Number'`. The given name is matched against all registered Unicode\n * Properties and Property Aliases.\n * @returns {Object} Reference to definition structure when the name matches a Unicode Property.\n *\n * @note\n * For more info on Unicode Properties, see also http://unicode.org/reports/tr18/#Categories.\n *\n * @note\n * This method is *not* part of the officially documented API and may change or be removed in\n * the future. It is meant for userland code that wishes to reuse the (large) internal Unicode\n * structures set up by XRegExp.\n */\n XRegExp._getUnicodeProperty = (name) => {\n const slug = normalize(name);\n return unicode[slug];\n };\n};\n","/*!\n * XRegExp Unicode Categories 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2010-present MIT License\n * Unicode data by Mathias Bynens <mathiasbynens.be>\n */\n\nimport categories from '../../tools/output/categories';\n\nexport default (XRegExp) => {\n\n /**\n * Adds support for Unicode's general categories. E.g., `\\p{Lu}` or `\\p{Uppercase Letter}`. See\n * category descriptions in UAX #44 <http://unicode.org/reports/tr44/#GC_Values_Table>. Token\n * names are case insensitive, and any spaces, hyphens, and underscores are ignored.\n *\n * Uses Unicode 14.0.0.\n *\n * @requires XRegExp, Unicode Base\n */\n\n if (!XRegExp.addUnicodeData) {\n throw new ReferenceError('Unicode Base must be loaded before Unicode Categories');\n }\n\n XRegExp.addUnicodeData(categories);\n};\n","/*!\n * XRegExp Unicode Properties 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2012-present MIT License\n * Unicode data by Mathias Bynens <mathiasbynens.be>\n */\n\nimport properties from '../../tools/output/properties';\n\nexport default (XRegExp) => {\n\n /**\n * Adds properties to meet the UTS #18 Level 1 RL1.2 requirements for Unicode regex support. See\n * <http://unicode.org/reports/tr18/#RL1.2>. Following are definitions of these properties from\n * UAX #44 <http://unicode.org/reports/tr44/>:\n *\n * - Alphabetic\n * Characters with the Alphabetic property. Generated from: Lowercase + Uppercase + Lt + Lm +\n * Lo + Nl + Other_Alphabetic.\n *\n * - Default_Ignorable_Code_Point\n * For programmatic determination of default ignorable code points. New characters that should\n * be ignored in rendering (unless explicitly supported) will be assigned in these ranges,\n * permitting programs to correctly handle the default rendering of such characters when not\n * otherwise supported.\n *\n * - Lowercase\n * Characters with the Lowercase property. Generated from: Ll + Other_Lowercase.\n *\n * - Noncharacter_Code_Point\n * Code points permanently reserved for internal use.\n *\n * - Uppercase\n * Characters with the Uppercase property. Generated from: Lu + Other_Uppercase.\n *\n * - White_Space\n * Spaces, separator characters and other control characters which should be treated by\n * programming languages as \"white space\" for the purpose of parsing elements.\n *\n * The properties ASCII, Any, and Assigned are also included but are not defined in UAX #44. UTS\n * #18 RL1.2 additionally requires support for Unicode scripts and general categories. These are\n * included in XRegExp's Unicode Categories and Unicode Scripts addons.\n *\n * Token names are case insensitive, and any spaces, hyphens, and underscores are ignored.\n *\n * Uses Unicode 14.0.0.\n *\n * @requires XRegExp, Unicode Base\n */\n\n if (!XRegExp.addUnicodeData) {\n throw new ReferenceError('Unicode Base must be loaded before Unicode Properties');\n }\n\n const unicodeData = properties;\n\n // Add non-generated data\n unicodeData.push({\n name: 'Assigned',\n // Since this is defined as the inverse of Unicode category Cn (Unassigned), the Unicode\n // Categories addon is required to use this property\n inverseOf: 'Cn'\n });\n\n XRegExp.addUnicodeData(unicodeData);\n};\n","/*!\n * XRegExp Unicode Scripts 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2010-present MIT License\n * Unicode data by Mathias Bynens <mathiasbynens.be>\n */\n\nimport scripts from '../../tools/output/scripts';\n\nexport default (XRegExp) => {\n\n /**\n * Adds support for all Unicode scripts. E.g., `\\p{Latin}`. Token names are case insensitive,\n * and any spaces, hyphens, and underscores are ignored.\n *\n * Uses Unicode 14.0.0.\n *\n * @requires XRegExp, Unicode Base\n */\n\n if (!XRegExp.addUnicodeData) {\n throw new ReferenceError('Unicode Base must be loaded before Unicode Scripts');\n }\n\n XRegExp.addUnicodeData(scripts, 'Script');\n};\n","import XRegExp from './xregexp';\n\nimport build from './addons/build';\nimport matchRecursive from './addons/matchrecursive';\nimport unicodeBase from './addons/unicode-base';\nimport unicodeCategories from './addons/unicode-categories';\nimport unicodeProperties from './addons/unicode-properties';\nimport unicodeScripts from './addons/unicode-scripts';\n\nbuild(XRegExp);\nmatchRecursive(XRegExp);\nunicodeBase(XRegExp);\nunicodeCategories(XRegExp);\nunicodeProperties(XRegExp);\nunicodeScripts(XRegExp);\n\nexport default XRegExp;\n","function isBuffer (obj) {\n return obj &&\n obj.constructor &&\n (typeof obj.constructor.isBuffer === 'function') &&\n obj.constructor.isBuffer(obj)\n}\n\nfunction keyIdentity (key) {\n return key\n}\n\nexport function flatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const maxDepth = opts.maxDepth\n const transformKey = opts.transformKey || keyIdentity\n const output = {}\n\n function step (object, prev, currentDepth) {\n currentDepth = currentDepth || 1\n Object.keys(object).forEach(function (key) {\n const value = object[key]\n const isarray = opts.safe && Array.isArray(value)\n const type = Object.prototype.toString.call(value)\n const isbuffer = isBuffer(value)\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n const newKey = prev\n ? prev + delimiter + transformKey(key)\n : transformKey(key)\n\n if (!isarray && !isbuffer && isobject && Object.keys(value).length &&\n (!opts.maxDepth || currentDepth < maxDepth)) {\n return step(value, newKey, currentDepth + 1)\n }\n\n output[newKey] = value\n })\n }\n\n step(target)\n\n return output\n}\n\nexport function unflatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const overwrite = opts.overwrite || false\n const transformKey = opts.transformKey || keyIdentity\n const result = {}\n\n const isbuffer = isBuffer(target)\n if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') {\n return target\n }\n\n // safely ensure that the key is\n // an integer.\n function getkey (key) {\n const parsedKey = Number(key)\n\n return (\n isNaN(parsedKey) ||\n key.indexOf('.') !== -1 ||\n opts.object\n )\n ? key\n : parsedKey\n }\n\n function addKeys (keyPrefix, recipient, target) {\n return Object.keys(target).reduce(function (result, key) {\n result[keyPrefix + delimiter + key] = target[key]\n\n return result\n }, recipient)\n }\n\n function isEmpty (val) {\n const type = Object.prototype.toString.call(val)\n const isArray = type === '[object Array]'\n const isObject = type === '[object Object]'\n\n if (!val) {\n return true\n } else if (isArray) {\n return !val.length\n } else if (isObject) {\n return !Object.keys(val).length\n }\n }\n\n target = Object.keys(target).reduce(function (result, key) {\n const type = Object.prototype.toString.call(target[key])\n const isObject = (type === '[object Object]' || type === '[object Array]')\n if (!isObject || isEmpty(target[key])) {\n result[key] = target[key]\n return result\n } else {\n return addKeys(\n key,\n result,\n flatten(target[key], opts)\n )\n }\n }, {})\n\n Object.keys(target).forEach(function (key) {\n const split = key.split(delimiter).map(transformKey)\n let key1 = getkey(split.shift())\n let key2 = getkey(split[0])\n let recipient = result\n\n while (key2 !== undefined) {\n if (key1 === '__proto__') {\n return\n }\n\n const type = Object.prototype.toString.call(recipient[key1])\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n // do not write over falsey, non-undefined values if overwrite is false\n if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') {\n return\n }\n\n if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) {\n recipient[key1] = (\n typeof key2 === 'number' &&\n !opts.object\n ? []\n : {}\n )\n }\n\n recipient = recipient[key1]\n if (split.length > 0) {\n key1 = getkey(split.shift())\n key2 = getkey(split[0])\n }\n }\n\n // unflatten again for 'messy objects'\n recipient[key1] = unflatten(target[key], opts)\n })\n\n return result\n}\n","import type {\n AnyEqualityComparator,\n Cache,\n CircularState,\n Dictionary,\n State,\n TypeEqualityComparator,\n} from './internalTypes';\n\nconst { getOwnPropertyNames, getOwnPropertySymbols } = Object;\nconst { hasOwnProperty } = Object.prototype;\n\n/**\n * Combine two comparators into a single comparators.\n */\nexport function combineComparators<Meta>(\n comparatorA: AnyEqualityComparator<Meta>,\n comparatorB: AnyEqualityComparator<Meta>,\n) {\n return function isEqual<A, B>(a: A, b: B, state: State<Meta>) {\n return comparatorA(a, b, state) && comparatorB(a, b, state);\n };\n}\n\n/**\n * Wrap the provided `areItemsEqual` method to manage the circular state, allowing\n * for circular references to be safely included in the comparison without creating\n * stack overflows.\n */\nexport function createIsCircular<\n AreItemsEqual extends TypeEqualityComparator<any, any>,\n>(areItemsEqual: AreItemsEqual): AreItemsEqual {\n return function isCircular(\n a: any,\n b: any,\n state: CircularState<Cache<any, any>>,\n ) {\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') {\n return areItemsEqual(a, b, state);\n }\n\n const { cache } = state;\n\n const cachedA = cache.get(a);\n const cachedB = cache.get(b);\n\n if (cachedA && cachedB) {\n return cachedA === b && cachedB === a;\n }\n\n cache.set(a, b);\n cache.set(b, a);\n\n const result = areItemsEqual(a, b, state);\n\n cache.delete(a);\n cache.delete(b);\n\n return result;\n } as AreItemsEqual;\n}\n\n/**\n * Get the properties to strictly examine, which include both own properties that are\n * not enumerable and symbol properties.\n */\nexport function getStrictProperties(\n object: Dictionary,\n): Array<string | symbol> {\n return (getOwnPropertyNames(object) as Array<string | symbol>).concat(\n getOwnPropertySymbols(object),\n );\n}\n\n/**\n * Whether the object contains the property passed as an own property.\n */\nexport const hasOwn =\n Object.hasOwn ||\n ((object: Dictionary, property: number | string | symbol) =>\n hasOwnProperty.call(object, property));\n\n/**\n * Whether the values passed are strictly equal or both NaN.\n */\nexport function sameValueZeroEqual(a: any, b: any): boolean {\n return a === b || (!a && !b && a !== a && b !== b);\n}\n","import { getStrictProperties, hasOwn, sameValueZeroEqual } from './utils';\nimport type {\n Dictionary,\n PrimitiveWrapper,\n State,\n TypedArray,\n} from './internalTypes';\n\nconst PREACT_VNODE = '__v';\nconst PREACT_OWNER = '__o';\nconst REACT_OWNER = '_owner';\n\nconst { getOwnPropertyDescriptor, keys } = Object;\n\n/**\n * Whether the arrays are equal in value.\n */\nexport function areArraysEqual(a: any[], b: any[], state: State<any>) {\n let index = a.length;\n\n if (b.length !== index) {\n return false;\n }\n\n while (index-- > 0) {\n if (!state.equals(a[index], b[index], index, index, a, b, state)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the dates passed are equal in value.\n */\nexport function areDatesEqual(a: Date, b: Date): boolean {\n return sameValueZeroEqual(a.getTime(), b.getTime());\n}\n\n/**\n * Whether the errors passed are equal in value.\n */\nexport function areErrorsEqual(a: Error, b: Error): boolean {\n return (\n a.name === b.name &&\n a.message === b.message &&\n a.cause === b.cause &&\n a.stack === b.stack\n );\n}\n\n/**\n * Whether the functions passed are equal in value.\n */\nexport function areFunctionsEqual(\n a: (...args: any[]) => any,\n b: (...args: any[]) => any,\n): boolean {\n return a === b;\n}\n\n/**\n * Whether the `Map`s are equal in value.\n */\nexport function areMapsEqual(\n a: Map<any, any>,\n b: Map<any, any>,\n state: State<any>,\n): boolean {\n const size = a.size;\n\n if (size !== b.size) {\n return false;\n }\n\n if (!size) {\n return true;\n }\n\n const matchedIndices: Array<true | undefined> = new Array(size);\n const aIterable = a.entries();\n\n let aResult: IteratorResult<[any, any]>;\n let bResult: IteratorResult<[any, any]>;\n let index = 0;\n\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n\n const bIterable = b.entries();\n\n let hasMatch = false;\n let matchIndex = 0;\n\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n\n if (matchedIndices[matchIndex]) {\n matchIndex++;\n continue;\n }\n\n const aEntry = aResult.value;\n const bEntry = bResult.value;\n\n if (\n state.equals(aEntry[0], bEntry[0], index, matchIndex, a, b, state) &&\n state.equals(aEntry[1], bEntry[1], aEntry[0], bEntry[0], a, b, state)\n ) {\n hasMatch = matchedIndices[matchIndex] = true;\n break;\n }\n\n matchIndex++;\n }\n\n if (!hasMatch) {\n return false;\n }\n\n index++;\n }\n\n return true;\n}\n\n/**\n * Whether the numbers are equal in value.\n */\nexport const areNumbersEqual = sameValueZeroEqual;\n\n/**\n * Whether the objects are equal in value.\n */\nexport function areObjectsEqual(\n a: Dictionary,\n b: Dictionary,\n state: State<any>,\n): boolean {\n const properties = keys(a);\n\n let index = properties.length;\n\n if (keys(b).length !== index) {\n return false;\n }\n\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n if (!isPropertyEqual(a, b, state, properties[index]!)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the objects are equal in value with strict property checking.\n */\nexport function areObjectsEqualStrict(\n a: Dictionary,\n b: Dictionary,\n state: State<any>,\n): boolean {\n const properties = getStrictProperties(a);\n\n let index = properties.length;\n\n if (getStrictProperties(b).length !== index) {\n return false;\n }\n\n let property: string | symbol;\n let descriptorA: ReturnType<typeof getOwnPropertyDescriptor>;\n let descriptorB: ReturnType<typeof getOwnPropertyDescriptor>;\n\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n property = properties[index]!;\n\n if (!isPropertyEqual(a, b, state, property)) {\n return false;\n }\n\n descriptorA = getOwnPropertyDescriptor(a, property);\n descriptorB = getOwnPropertyDescriptor(b, property);\n\n if (\n (descriptorA || descriptorB) &&\n (!descriptorA ||\n !descriptorB ||\n descriptorA.configurable !== descriptorB.configurable ||\n descriptorA.enumerable !== descriptorB.enumerable ||\n descriptorA.writable !== descriptorB.writable)\n ) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the primitive wrappers passed are equal in value.\n */\nexport function arePrimitiveWrappersEqual(\n a: PrimitiveWrapper,\n b: PrimitiveWrapper,\n): boolean {\n return sameValueZeroEqual(a.valueOf(), b.valueOf());\n}\n\n/**\n * Whether the regexps passed are equal in value.\n */\nexport function areRegExpsEqual(a: RegExp, b: RegExp): boolean {\n return a.source === b.source && a.flags === b.flags;\n}\n\n/**\n * Whether the `Set`s are equal in value.\n */\nexport function areSetsEqual(\n a: Set<any>,\n b: Set<any>,\n state: State<any>,\n): boolean {\n const size = a.size;\n\n if (size !== b.size) {\n return false;\n }\n\n if (!size) {\n return true;\n }\n\n const matchedIndices: Array<true | undefined> = new Array(size);\n const aIterable = a.values();\n\n let aResult: IteratorResult<any>;\n let bResult: IteratorResult<any>;\n\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n\n const bIterable = b.values();\n\n let hasMatch = false;\n let matchIndex = 0;\n\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n\n if (\n !matchedIndices[matchIndex] &&\n state.equals(\n aResult.value,\n bResult.value,\n aResult.value,\n bResult.value,\n a,\n b,\n state,\n )\n ) {\n hasMatch = matchedIndices[matchIndex] = true;\n break;\n }\n\n matchIndex++;\n }\n\n if (!hasMatch) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the TypedArray instances are equal in value.\n */\nexport function areTypedArraysEqual(a: TypedArray, b: TypedArray) {\n let index = a.length;\n\n if (b.length !== index) {\n return false;\n }\n\n while (index-- > 0) {\n if (a[index] !== b[index]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the URL instances are equal in value.\n */\nexport function areUrlsEqual(a: URL, b: URL): boolean {\n return (\n a.hostname === b.hostname &&\n a.pathname === b.pathname &&\n a.protocol === b.protocol &&\n a.port === b.port &&\n a.hash === b.hash &&\n a.username === b.username &&\n a.password === b.password\n );\n}\n\nfunction isPropertyEqual(\n a: Dictionary,\n b: Dictionary,\n state: State<any>,\n property: string | symbol,\n) {\n if (\n (property === REACT_OWNER ||\n property === PREACT_OWNER ||\n property === PREACT_VNODE) &&\n (a.$$typeof || b.$$typeof)\n ) {\n return true;\n }\n\n return (\n hasOwn(b, property) &&\n state.equals(a[property], b[property], property, property, a, b, state)\n );\n}\n","import {\n areArraysEqual as areArraysEqualDefault,\n areDatesEqual as areDatesEqualDefault,\n areErrorsEqual as areErrorsEqualDefault,\n areFunctionsEqual as areFunctionsEqualDefault,\n areMapsEqual as areMapsEqualDefault,\n areNumbersEqual as areNumbersEqualDefault,\n areObjectsEqual as areObjectsEqualDefault,\n areObjectsEqualStrict as areObjectsEqualStrictDefault,\n arePrimitiveWrappersEqual as arePrimitiveWrappersEqualDefault,\n areRegExpsEqual as areRegExpsEqualDefault,\n areSetsEqual as areSetsEqualDefault,\n areTypedArraysEqual as areTypedArraysEqualDefault,\n areUrlsEqual as areUrlsEqualDefault,\n} from './equals';\nimport { combineComparators, createIsCircular } from './utils';\nimport type {\n ComparatorConfig,\n CreateState,\n CustomEqualCreatorOptions,\n EqualityComparator,\n InternalEqualityComparator,\n State,\n} from './internalTypes';\n\nconst ARGUMENTS_TAG = '[object Arguments]';\nconst BOOLEAN_TAG = '[object Boolean]';\nconst DATE_TAG = '[object Date]';\nconst ERROR_TAG = '[object Error]';\nconst MAP_TAG = '[object Map]';\nconst NUMBER_TAG = '[object Number]';\nconst OBJECT_TAG = '[object Object]';\nconst REG_EXP_TAG = '[object RegExp]';\nconst SET_TAG = '[object Set]';\nconst STRING_TAG = '[object String]';\nconst URL_TAG = '[object URL]';\n\nconst { isArray } = Array;\nconst isTypedArray =\n typeof ArrayBuffer === 'function' && ArrayBuffer.isView\n ? ArrayBuffer.isView\n : null;\nconst { assign } = Object;\nconst getTag = Object.prototype.toString.call.bind(\n Object.prototype.toString,\n) as (a: object) => string;\n\ninterface CreateIsEqualOptions<Meta> {\n circular: boolean;\n comparator: EqualityComparator<Meta>;\n createState: CreateState<Meta> | undefined;\n equals: InternalEqualityComparator<Meta>;\n strict: boolean;\n}\n\n/**\n * Create a comparator method based on the type-specific equality comparators passed.\n */\nexport function createEqualityComparator<Meta>({\n areArraysEqual,\n areDatesEqual,\n areErrorsEqual,\n areFunctionsEqual,\n areMapsEqual,\n areNumbersEqual,\n areObjectsEqual,\n arePrimitiveWrappersEqual,\n areRegExpsEqual,\n areSetsEqual,\n areTypedArraysEqual,\n areUrlsEqual,\n}: ComparatorConfig<Meta>): EqualityComparator<Meta> {\n /**\n * compare the value of the two objects and return true if they are equivalent in values\n */\n return function comparator(a: any, b: any, state: State<Meta>): boolean {\n // If the items are strictly equal, no need to do a value comparison.\n if (a === b) {\n return true;\n }\n\n // If either of the items are nullish and fail the strictly equal check\n // above, then they must be unequal.\n if (a == null || b == null) {\n return false;\n }\n\n const type = typeof a;\n\n if (type !== typeof b) {\n return false;\n }\n\n if (type !== 'object') {\n if (type === 'number') {\n return areNumbersEqual(a, b, state);\n }\n\n if (type === 'function') {\n return areFunctionsEqual(a, b, state);\n }\n\n // If a primitive value that is not strictly equal, it must be unequal.\n return false;\n }\n\n const constructor = a.constructor;\n\n // Checks are listed in order of commonality of use-case:\n // 1. Common complex object types (plain object, array)\n // 2. Common data values (date, regexp)\n // 3. Less-common complex object types (map, set)\n // 4. Less-common data values (promise, primitive wrappers)\n // Inherently this is both subjective and assumptive, however\n // when reviewing comparable libraries in the wild this order\n // appears to be generally consistent.\n\n // Constructors should match, otherwise there is potential for false positives\n // between class and subclass or custom object and POJO.\n if (constructor !== b.constructor) {\n return false;\n }\n\n // `isPlainObject` only checks against the object's own realm. Cross-realm\n // comparisons are rare, and will be handled in the ultimate fallback, so\n // we can avoid capturing the string tag.\n if (constructor === Object) {\n return areObjectsEqual(a, b, state);\n }\n\n // `isArray()` works on subclasses and is cross-realm, so we can avoid capturing\n // the string tag or doing an `instanceof` check.\n if (isArray(a)) {\n return areArraysEqual(a, b, state);\n }\n\n // `isTypedArray()` works on all possible TypedArray classes, so we can avoid\n // capturing the string tag or comparing against all possible constructors.\n if (isTypedArray != null && isTypedArray(a)) {\n return areTypedArraysEqual(a, b, state);\n }\n\n // Try to fast-path equality checks for other complex object types in the\n // same realm to avoid capturing the string tag. Strict equality is used\n // instead of `instanceof` because it is more performant for the common\n // use-case. If someone is subclassing a native class, it will be handled\n // with the string tag comparison.\n\n if (constructor === Date) {\n return areDatesEqual(a, b, state);\n }\n\n if (constructor === RegExp) {\n return areRegExpsEqual(a, b, state);\n }\n\n if (constructor === Map) {\n return areMapsEqual(a, b, state);\n }\n\n if (constructor === Set) {\n return areSetsEqual(a, b, state);\n }\n\n // Since this is a custom object, capture the string tag to determing its type.\n // This is reasonably performant in modern environments like v8 and SpiderMonkey.\n const tag = getTag(a);\n\n if (tag === DATE_TAG) {\n return areDatesEqual(a, b, state);\n }\n\n // For RegExp, the properties are not enumerable, and therefore will give false positives if\n // tested like a standard object.\n if (tag === REG_EXP_TAG) {\n return areRegExpsEqual(a, b, state);\n }\n\n if (tag === MAP_TAG) {\n return areMapsEqual(a, b, state);\n }\n\n if (tag === SET_TAG) {\n return areSetsEqual(a, b, state);\n }\n\n if (tag === OBJECT_TAG) {\n // The exception for value comparison is custom `Promise`-like class instances. These should\n // be treated the same as standard `Promise` objects, which means strict equality, and if\n // it reaches this point then that strict equality comparison has already failed.\n return (\n typeof a.then !== 'function' &&\n typeof b.then !== 'function' &&\n areObjectsEqual(a, b, state)\n );\n }\n\n // If a URL tag, it should be tested explicitly. Like RegExp, the properties are not\n // enumerable, and therefore will give false positives if tested like a standard object.\n if (tag === URL_TAG) {\n return areUrlsEqual(a, b, state);\n }\n\n // If an error tag, it should be tested explicitly. Like RegExp, the properties are not\n // enumerable, and therefore will give false positives if tested like a standard object.\n if (tag === ERROR_TAG) {\n return areErrorsEqual(a, b, state);\n }\n\n // If an arguments tag, it should be treated as a standard object.\n if (tag === ARGUMENTS_TAG) {\n return areObjectsEqual(a, b, state);\n }\n\n // As the penultimate fallback, check if the values passed are primitive wrappers. This\n // is very rare in modern JS, which is why it is deprioritized compared to all other object\n // types.\n if (tag === BOOLEAN_TAG || tag === NUMBER_TAG || tag === STRING_TAG) {\n return arePrimitiveWrappersEqual(a, b, state);\n }\n\n // If not matching any tags that require a specific type of comparison, then we hard-code false because\n // the only thing remaining is strict equality, which has already been compared. This is for a few reasons:\n // - Certain types that cannot be introspected (e.g., `WeakMap`). For these types, this is the only\n // comparison that can be made.\n // - For types that can be introspected, but rarely have requirements to be compared\n // (`ArrayBuffer`, `DataView`, etc.), the cost is avoided to prioritize the common\n // use-cases (may be included in a future release, if requested enough).\n // - For types that can be introspected but do not have an objective definition of what\n // equality is (`Error`, etc.), the subjective decision is to be conservative and strictly compare.\n // In all cases, these decisions should be reevaluated based on changes to the language and\n // common development practices.\n return false;\n };\n}\n\n/**\n * Create the configuration object used for building comparators.\n */\nexport function createEqualityComparatorConfig<Meta>({\n circular,\n createCustomConfig,\n strict,\n}: CustomEqualCreatorOptions<Meta>): ComparatorConfig<Meta> {\n let config = {\n areArraysEqual: strict\n ? areObjectsEqualStrictDefault\n : areArraysEqualDefault,\n areDatesEqual: areDatesEqualDefault,\n areErrorsEqual: areErrorsEqualDefault,\n areFunctionsEqual: areFunctionsEqualDefault,\n areMapsEqual: strict\n ? combineComparators(areMapsEqualDefault, areObjectsEqualStrictDefault)\n : areMapsEqualDefault,\n areNumbersEqual: areNumbersEqualDefault,\n areObjectsEqual: strict\n ? areObjectsEqualStrictDefault\n : areObjectsEqualDefault,\n arePrimitiveWrappersEqual: arePrimitiveWrappersEqualDefault,\n areRegExpsEqual: areRegExpsEqualDefault,\n areSetsEqual: strict\n ? combineComparators(areSetsEqualDefault, areObjectsEqualStrictDefault)\n : areSetsEqualDefault,\n areTypedArraysEqual: strict\n ? areObjectsEqualStrictDefault\n : areTypedArraysEqualDefault,\n areUrlsEqual: areUrlsEqualDefault,\n };\n\n if (createCustomConfig) {\n config = assign({}, config, createCustomConfig(config));\n }\n\n if (circular) {\n const areArraysEqual = createIsCircular(config.areArraysEqual);\n const areMapsEqual = createIsCircular(config.areMapsEqual);\n const areObjectsEqual = createIsCircular(config.areObjectsEqual);\n const areSetsEqual = createIsCircular(config.areSetsEqual);\n\n config = assign({}, config, {\n areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areSetsEqual,\n });\n }\n\n return config;\n}\n\n/**\n * Default equality comparator pass-through, used as the standard `isEqual` creator for\n * use inside the built comparator.\n */\nexport function createInternalEqualityComparator<Meta>(\n compare: EqualityComparator<Meta>,\n): InternalEqualityComparator<Meta> {\n return function (\n a: any,\n b: any,\n _indexOrKeyA: any,\n _indexOrKeyB: any,\n _parentA: any,\n _parentB: any,\n state: State<Meta>,\n ) {\n return compare(a, b, state);\n };\n}\n\n/**\n * Create the `isEqual` function used by the consuming application.\n */\nexport function createIsEqual<Meta>({\n circular,\n comparator,\n createState,\n equals,\n strict,\n}: CreateIsEqualOptions<Meta>) {\n if (createState) {\n return function isEqual<A, B>(a: A, b: B): boolean {\n const { cache = circular ? new WeakMap() : undefined, meta } =\n createState!();\n\n return comparator(a, b, {\n cache,\n equals,\n meta,\n strict,\n } as State<Meta>);\n };\n }\n\n if (circular) {\n return function isEqual<A, B>(a: A, b: B): boolean {\n return comparator(a, b, {\n cache: new WeakMap(),\n equals,\n meta: undefined as Meta,\n strict,\n } as State<Meta>);\n };\n }\n\n const state = {\n cache: undefined,\n equals,\n meta: undefined,\n strict,\n } as State<Meta>;\n\n return function isEqual<A, B>(a: A, b: B): boolean {\n return comparator(a, b, state);\n };\n}\n","import {\n createEqualityComparatorConfig,\n createEqualityComparator,\n createInternalEqualityComparator,\n createIsEqual,\n} from './comparator';\nimport type { CustomEqualCreatorOptions } from './internalTypes';\nimport { sameValueZeroEqual } from './utils';\n\nexport { sameValueZeroEqual };\nexport type {\n AnyEqualityComparator,\n Cache,\n CircularState,\n ComparatorConfig,\n CreateCustomComparatorConfig,\n CreateState,\n CustomEqualCreatorOptions,\n DefaultState,\n Dictionary,\n EqualityComparator,\n EqualityComparatorCreator,\n InternalEqualityComparator,\n PrimitiveWrapper,\n State,\n TypeEqualityComparator,\n TypedArray,\n} from './internalTypes';\n\n/**\n * Whether the items passed are deeply-equal in value.\n */\nexport const deepEqual = createCustomEqual();\n\n/**\n * Whether the items passed are deeply-equal in value based on strict comparison.\n */\nexport const strictDeepEqual = createCustomEqual({ strict: true });\n\n/**\n * Whether the items passed are deeply-equal in value, including circular references.\n */\nexport const circularDeepEqual = createCustomEqual({ circular: true });\n\n/**\n * Whether the items passed are deeply-equal in value, including circular references,\n * based on strict comparison.\n */\nexport const strictCircularDeepEqual = createCustomEqual({\n circular: true,\n strict: true,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value.\n */\nexport const shallowEqual = createCustomEqual({\n createInternalComparator: () => sameValueZeroEqual,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value based on strict comparison\n */\nexport const strictShallowEqual = createCustomEqual({\n strict: true,\n createInternalComparator: () => sameValueZeroEqual,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value, including circular references.\n */\nexport const circularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueZeroEqual,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value, including circular references,\n * based on strict comparison.\n */\nexport const strictCircularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueZeroEqual,\n strict: true,\n});\n\n/**\n * Create a custom equality comparison method.\n *\n * This can be done to create very targeted comparisons in extreme hot-path scenarios\n * where the standard methods are not performant enough, but can also be used to provide\n * support for legacy environments that do not support expected features like\n * `RegExp.prototype.flags` out of the box.\n */\nexport function createCustomEqual<Meta = undefined>(\n options: CustomEqualCreatorOptions<Meta> = {},\n) {\n const {\n circular = false,\n createInternalComparator: createCustomInternalComparator,\n createState,\n strict = false,\n } = options;\n\n const config = createEqualityComparatorConfig<Meta>(options);\n const comparator = createEqualityComparator(config);\n const equals = createCustomInternalComparator\n ? createCustomInternalComparator(comparator)\n : createInternalEqualityComparator(comparator);\n\n return createIsEqual({ circular, comparator, createState, equals, strict });\n}\n"],"mappings":"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d;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MAC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","names":["hex","dec","n","XRegExp","REGEX_DATA","XRegExp","XRegExp","dec","hex","pad4","XRegExp","categories","XRegExp","properties","XRegExp","scripts","target","result","isArray","properties","areArraysEqual","areDatesEqual","areErrorsEqual","areFunctionsEqual","areMapsEqual","areNumbersEqual","areObjectsEqual","arePrimitiveWrappersEqual","areRegExpsEqual","areSetsEqual","areTypedArraysEqual","areUrlsEqual","areObjectsEqualStrictDefault","areArraysEqualDefault","areMapsEqualDefault","areObjectsEqualDefault","areSetsEqualDefault","areTypedArraysEqualDefault","_a"]}