koichi12 commited on
Commit
16ee8e5
·
verified ·
1 Parent(s): 9e7e760

Add files using upload-large-folder tool

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +1 -0
  2. .venv/lib/python3.11/site-packages/pip/_vendor/idna/__init__.py +44 -0
  3. .venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-311.pyc +0 -0
  4. .venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-311.pyc +0 -0
  5. .venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/core.cpython-311.pyc +0 -0
  6. .venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc +0 -0
  7. .venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc +0 -0
  8. .venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc +0 -0
  9. .venv/lib/python3.11/site-packages/pip/_vendor/idna/codec.py +112 -0
  10. .venv/lib/python3.11/site-packages/pip/_vendor/idna/compat.py +13 -0
  11. .venv/lib/python3.11/site-packages/pip/_vendor/idna/core.py +400 -0
  12. .venv/lib/python3.11/site-packages/pip/_vendor/idna/idnadata.py +2151 -0
  13. .venv/lib/python3.11/site-packages/pip/_vendor/idna/intranges.py +54 -0
  14. .venv/lib/python3.11/site-packages/pip/_vendor/idna/package_data.py +2 -0
  15. .venv/lib/python3.11/site-packages/pip/_vendor/idna/py.typed +0 -0
  16. .venv/lib/python3.11/site-packages/pip/_vendor/idna/uts46data.py +0 -0
  17. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc +0 -0
  18. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-311.pyc +0 -0
  19. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-311.pyc +0 -0
  20. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-311.pyc +0 -0
  21. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-311.pyc +0 -0
  22. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-311.pyc +0 -0
  23. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-311.pyc +0 -0
  24. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc +0 -0
  25. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc +0 -0
  26. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc +0 -0
  27. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-311.pyc +0 -0
  28. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-311.pyc +0 -0
  29. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-311.pyc +0 -0
  30. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-311.pyc +0 -0
  31. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-311.pyc +0 -0
  32. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-311.pyc +0 -0
  33. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__init__.py +158 -0
  34. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-311.pyc +0 -0
  35. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-311.pyc +0 -0
  36. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-311.pyc +0 -0
  37. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-311.pyc +0 -0
  38. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-311.pyc +0 -0
  39. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-311.pyc +0 -0
  40. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-311.pyc +0 -0
  41. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-311.pyc +0 -0
  42. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-311.pyc +0 -0
  43. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-311.pyc +0 -0
  44. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-311.pyc +0 -0
  45. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-311.pyc +0 -0
  46. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-311.pyc +0 -0
  47. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-311.pyc +0 -0
  48. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/_mapping.py +23 -0
  49. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/html.py +989 -0
  50. .venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/other.py +161 -0
.gitattributes CHANGED
@@ -336,3 +336,4 @@ tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia/cudnn/lib/
336
  .venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
337
  .venv/lib/python3.11/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
338
  .venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
 
 
336
  .venv/lib/python3.11/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
337
  .venv/lib/python3.11/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
338
  .venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
339
+ .venv/lib/python3.11/site-packages/pip/_vendor/rich/__pycache__/console.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
.venv/lib/python3.11/site-packages/pip/_vendor/idna/__init__.py ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from .package_data import __version__
2
+ from .core import (
3
+ IDNABidiError,
4
+ IDNAError,
5
+ InvalidCodepoint,
6
+ InvalidCodepointContext,
7
+ alabel,
8
+ check_bidi,
9
+ check_hyphen_ok,
10
+ check_initial_combiner,
11
+ check_label,
12
+ check_nfc,
13
+ decode,
14
+ encode,
15
+ ulabel,
16
+ uts46_remap,
17
+ valid_contextj,
18
+ valid_contexto,
19
+ valid_label_length,
20
+ valid_string_length,
21
+ )
22
+ from .intranges import intranges_contain
23
+
24
+ __all__ = [
25
+ "IDNABidiError",
26
+ "IDNAError",
27
+ "InvalidCodepoint",
28
+ "InvalidCodepointContext",
29
+ "alabel",
30
+ "check_bidi",
31
+ "check_hyphen_ok",
32
+ "check_initial_combiner",
33
+ "check_label",
34
+ "check_nfc",
35
+ "decode",
36
+ "encode",
37
+ "intranges_contain",
38
+ "ulabel",
39
+ "uts46_remap",
40
+ "valid_contextj",
41
+ "valid_contexto",
42
+ "valid_label_length",
43
+ "valid_string_length",
44
+ ]
.venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-311.pyc ADDED
Binary file (5.38 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-311.pyc ADDED
Binary file (1.01 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/core.cpython-311.pyc ADDED
Binary file (19.4 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc ADDED
Binary file (39 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc ADDED
Binary file (2.98 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc ADDED
Binary file (211 Bytes). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/idna/codec.py ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from .core import encode, decode, alabel, ulabel, IDNAError
2
+ import codecs
3
+ import re
4
+ from typing import Tuple, Optional
5
+
6
+ _unicode_dots_re = re.compile('[\u002e\u3002\uff0e\uff61]')
7
+
8
+ class Codec(codecs.Codec):
9
+
10
+ def encode(self, data: str, errors: str = 'strict') -> Tuple[bytes, int]:
11
+ if errors != 'strict':
12
+ raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
13
+
14
+ if not data:
15
+ return b"", 0
16
+
17
+ return encode(data), len(data)
18
+
19
+ def decode(self, data: bytes, errors: str = 'strict') -> Tuple[str, int]:
20
+ if errors != 'strict':
21
+ raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
22
+
23
+ if not data:
24
+ return '', 0
25
+
26
+ return decode(data), len(data)
27
+
28
+ class IncrementalEncoder(codecs.BufferedIncrementalEncoder):
29
+ def _buffer_encode(self, data: str, errors: str, final: bool) -> Tuple[str, int]: # type: ignore
30
+ if errors != 'strict':
31
+ raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
32
+
33
+ if not data:
34
+ return "", 0
35
+
36
+ labels = _unicode_dots_re.split(data)
37
+ trailing_dot = ''
38
+ if labels:
39
+ if not labels[-1]:
40
+ trailing_dot = '.'
41
+ del labels[-1]
42
+ elif not final:
43
+ # Keep potentially unfinished label until the next call
44
+ del labels[-1]
45
+ if labels:
46
+ trailing_dot = '.'
47
+
48
+ result = []
49
+ size = 0
50
+ for label in labels:
51
+ result.append(alabel(label))
52
+ if size:
53
+ size += 1
54
+ size += len(label)
55
+
56
+ # Join with U+002E
57
+ result_str = '.'.join(result) + trailing_dot # type: ignore
58
+ size += len(trailing_dot)
59
+ return result_str, size
60
+
61
+ class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
62
+ def _buffer_decode(self, data: str, errors: str, final: bool) -> Tuple[str, int]: # type: ignore
63
+ if errors != 'strict':
64
+ raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
65
+
66
+ if not data:
67
+ return ('', 0)
68
+
69
+ labels = _unicode_dots_re.split(data)
70
+ trailing_dot = ''
71
+ if labels:
72
+ if not labels[-1]:
73
+ trailing_dot = '.'
74
+ del labels[-1]
75
+ elif not final:
76
+ # Keep potentially unfinished label until the next call
77
+ del labels[-1]
78
+ if labels:
79
+ trailing_dot = '.'
80
+
81
+ result = []
82
+ size = 0
83
+ for label in labels:
84
+ result.append(ulabel(label))
85
+ if size:
86
+ size += 1
87
+ size += len(label)
88
+
89
+ result_str = '.'.join(result) + trailing_dot
90
+ size += len(trailing_dot)
91
+ return (result_str, size)
92
+
93
+
94
+ class StreamWriter(Codec, codecs.StreamWriter):
95
+ pass
96
+
97
+
98
+ class StreamReader(Codec, codecs.StreamReader):
99
+ pass
100
+
101
+
102
+ def getregentry() -> codecs.CodecInfo:
103
+ # Compatibility as a search_function for codecs.register()
104
+ return codecs.CodecInfo(
105
+ name='idna',
106
+ encode=Codec().encode, # type: ignore
107
+ decode=Codec().decode, # type: ignore
108
+ incrementalencoder=IncrementalEncoder,
109
+ incrementaldecoder=IncrementalDecoder,
110
+ streamwriter=StreamWriter,
111
+ streamreader=StreamReader,
112
+ )
.venv/lib/python3.11/site-packages/pip/_vendor/idna/compat.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from .core import *
2
+ from .codec import *
3
+ from typing import Any, Union
4
+
5
+ def ToASCII(label: str) -> bytes:
6
+ return encode(label)
7
+
8
+ def ToUnicode(label: Union[bytes, bytearray]) -> str:
9
+ return decode(label)
10
+
11
+ def nameprep(s: Any) -> None:
12
+ raise NotImplementedError('IDNA 2008 does not utilise nameprep protocol')
13
+
.venv/lib/python3.11/site-packages/pip/_vendor/idna/core.py ADDED
@@ -0,0 +1,400 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from . import idnadata
2
+ import bisect
3
+ import unicodedata
4
+ import re
5
+ from typing import Union, Optional
6
+ from .intranges import intranges_contain
7
+
8
+ _virama_combining_class = 9
9
+ _alabel_prefix = b'xn--'
10
+ _unicode_dots_re = re.compile('[\u002e\u3002\uff0e\uff61]')
11
+
12
+ class IDNAError(UnicodeError):
13
+ """ Base exception for all IDNA-encoding related problems """
14
+ pass
15
+
16
+
17
+ class IDNABidiError(IDNAError):
18
+ """ Exception when bidirectional requirements are not satisfied """
19
+ pass
20
+
21
+
22
+ class InvalidCodepoint(IDNAError):
23
+ """ Exception when a disallowed or unallocated codepoint is used """
24
+ pass
25
+
26
+
27
+ class InvalidCodepointContext(IDNAError):
28
+ """ Exception when the codepoint is not valid in the context it is used """
29
+ pass
30
+
31
+
32
+ def _combining_class(cp: int) -> int:
33
+ v = unicodedata.combining(chr(cp))
34
+ if v == 0:
35
+ if not unicodedata.name(chr(cp)):
36
+ raise ValueError('Unknown character in unicodedata')
37
+ return v
38
+
39
+ def _is_script(cp: str, script: str) -> bool:
40
+ return intranges_contain(ord(cp), idnadata.scripts[script])
41
+
42
+ def _punycode(s: str) -> bytes:
43
+ return s.encode('punycode')
44
+
45
+ def _unot(s: int) -> str:
46
+ return 'U+{:04X}'.format(s)
47
+
48
+
49
+ def valid_label_length(label: Union[bytes, str]) -> bool:
50
+ if len(label) > 63:
51
+ return False
52
+ return True
53
+
54
+
55
+ def valid_string_length(label: Union[bytes, str], trailing_dot: bool) -> bool:
56
+ if len(label) > (254 if trailing_dot else 253):
57
+ return False
58
+ return True
59
+
60
+
61
+ def check_bidi(label: str, check_ltr: bool = False) -> bool:
62
+ # Bidi rules should only be applied if string contains RTL characters
63
+ bidi_label = False
64
+ for (idx, cp) in enumerate(label, 1):
65
+ direction = unicodedata.bidirectional(cp)
66
+ if direction == '':
67
+ # String likely comes from a newer version of Unicode
68
+ raise IDNABidiError('Unknown directionality in label {} at position {}'.format(repr(label), idx))
69
+ if direction in ['R', 'AL', 'AN']:
70
+ bidi_label = True
71
+ if not bidi_label and not check_ltr:
72
+ return True
73
+
74
+ # Bidi rule 1
75
+ direction = unicodedata.bidirectional(label[0])
76
+ if direction in ['R', 'AL']:
77
+ rtl = True
78
+ elif direction == 'L':
79
+ rtl = False
80
+ else:
81
+ raise IDNABidiError('First codepoint in label {} must be directionality L, R or AL'.format(repr(label)))
82
+
83
+ valid_ending = False
84
+ number_type = None # type: Optional[str]
85
+ for (idx, cp) in enumerate(label, 1):
86
+ direction = unicodedata.bidirectional(cp)
87
+
88
+ if rtl:
89
+ # Bidi rule 2
90
+ if not direction in ['R', 'AL', 'AN', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']:
91
+ raise IDNABidiError('Invalid direction for codepoint at position {} in a right-to-left label'.format(idx))
92
+ # Bidi rule 3
93
+ if direction in ['R', 'AL', 'EN', 'AN']:
94
+ valid_ending = True
95
+ elif direction != 'NSM':
96
+ valid_ending = False
97
+ # Bidi rule 4
98
+ if direction in ['AN', 'EN']:
99
+ if not number_type:
100
+ number_type = direction
101
+ else:
102
+ if number_type != direction:
103
+ raise IDNABidiError('Can not mix numeral types in a right-to-left label')
104
+ else:
105
+ # Bidi rule 5
106
+ if not direction in ['L', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']:
107
+ raise IDNABidiError('Invalid direction for codepoint at position {} in a left-to-right label'.format(idx))
108
+ # Bidi rule 6
109
+ if direction in ['L', 'EN']:
110
+ valid_ending = True
111
+ elif direction != 'NSM':
112
+ valid_ending = False
113
+
114
+ if not valid_ending:
115
+ raise IDNABidiError('Label ends with illegal codepoint directionality')
116
+
117
+ return True
118
+
119
+
120
+ def check_initial_combiner(label: str) -> bool:
121
+ if unicodedata.category(label[0])[0] == 'M':
122
+ raise IDNAError('Label begins with an illegal combining character')
123
+ return True
124
+
125
+
126
+ def check_hyphen_ok(label: str) -> bool:
127
+ if label[2:4] == '--':
128
+ raise IDNAError('Label has disallowed hyphens in 3rd and 4th position')
129
+ if label[0] == '-' or label[-1] == '-':
130
+ raise IDNAError('Label must not start or end with a hyphen')
131
+ return True
132
+
133
+
134
+ def check_nfc(label: str) -> None:
135
+ if unicodedata.normalize('NFC', label) != label:
136
+ raise IDNAError('Label must be in Normalization Form C')
137
+
138
+
139
+ def valid_contextj(label: str, pos: int) -> bool:
140
+ cp_value = ord(label[pos])
141
+
142
+ if cp_value == 0x200c:
143
+
144
+ if pos > 0:
145
+ if _combining_class(ord(label[pos - 1])) == _virama_combining_class:
146
+ return True
147
+
148
+ ok = False
149
+ for i in range(pos-1, -1, -1):
150
+ joining_type = idnadata.joining_types.get(ord(label[i]))
151
+ if joining_type == ord('T'):
152
+ continue
153
+ if joining_type in [ord('L'), ord('D')]:
154
+ ok = True
155
+ break
156
+
157
+ if not ok:
158
+ return False
159
+
160
+ ok = False
161
+ for i in range(pos+1, len(label)):
162
+ joining_type = idnadata.joining_types.get(ord(label[i]))
163
+ if joining_type == ord('T'):
164
+ continue
165
+ if joining_type in [ord('R'), ord('D')]:
166
+ ok = True
167
+ break
168
+ return ok
169
+
170
+ if cp_value == 0x200d:
171
+
172
+ if pos > 0:
173
+ if _combining_class(ord(label[pos - 1])) == _virama_combining_class:
174
+ return True
175
+ return False
176
+
177
+ else:
178
+
179
+ return False
180
+
181
+
182
+ def valid_contexto(label: str, pos: int, exception: bool = False) -> bool:
183
+ cp_value = ord(label[pos])
184
+
185
+ if cp_value == 0x00b7:
186
+ if 0 < pos < len(label)-1:
187
+ if ord(label[pos - 1]) == 0x006c and ord(label[pos + 1]) == 0x006c:
188
+ return True
189
+ return False
190
+
191
+ elif cp_value == 0x0375:
192
+ if pos < len(label)-1 and len(label) > 1:
193
+ return _is_script(label[pos + 1], 'Greek')
194
+ return False
195
+
196
+ elif cp_value == 0x05f3 or cp_value == 0x05f4:
197
+ if pos > 0:
198
+ return _is_script(label[pos - 1], 'Hebrew')
199
+ return False
200
+
201
+ elif cp_value == 0x30fb:
202
+ for cp in label:
203
+ if cp == '\u30fb':
204
+ continue
205
+ if _is_script(cp, 'Hiragana') or _is_script(cp, 'Katakana') or _is_script(cp, 'Han'):
206
+ return True
207
+ return False
208
+
209
+ elif 0x660 <= cp_value <= 0x669:
210
+ for cp in label:
211
+ if 0x6f0 <= ord(cp) <= 0x06f9:
212
+ return False
213
+ return True
214
+
215
+ elif 0x6f0 <= cp_value <= 0x6f9:
216
+ for cp in label:
217
+ if 0x660 <= ord(cp) <= 0x0669:
218
+ return False
219
+ return True
220
+
221
+ return False
222
+
223
+
224
+ def check_label(label: Union[str, bytes, bytearray]) -> None:
225
+ if isinstance(label, (bytes, bytearray)):
226
+ label = label.decode('utf-8')
227
+ if len(label) == 0:
228
+ raise IDNAError('Empty Label')
229
+
230
+ check_nfc(label)
231
+ check_hyphen_ok(label)
232
+ check_initial_combiner(label)
233
+
234
+ for (pos, cp) in enumerate(label):
235
+ cp_value = ord(cp)
236
+ if intranges_contain(cp_value, idnadata.codepoint_classes['PVALID']):
237
+ continue
238
+ elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTJ']):
239
+ try:
240
+ if not valid_contextj(label, pos):
241
+ raise InvalidCodepointContext('Joiner {} not allowed at position {} in {}'.format(
242
+ _unot(cp_value), pos+1, repr(label)))
243
+ except ValueError:
244
+ raise IDNAError('Unknown codepoint adjacent to joiner {} at position {} in {}'.format(
245
+ _unot(cp_value), pos+1, repr(label)))
246
+ elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTO']):
247
+ if not valid_contexto(label, pos):
248
+ raise InvalidCodepointContext('Codepoint {} not allowed at position {} in {}'.format(_unot(cp_value), pos+1, repr(label)))
249
+ else:
250
+ raise InvalidCodepoint('Codepoint {} at position {} of {} not allowed'.format(_unot(cp_value), pos+1, repr(label)))
251
+
252
+ check_bidi(label)
253
+
254
+
255
+ def alabel(label: str) -> bytes:
256
+ try:
257
+ label_bytes = label.encode('ascii')
258
+ ulabel(label_bytes)
259
+ if not valid_label_length(label_bytes):
260
+ raise IDNAError('Label too long')
261
+ return label_bytes
262
+ except UnicodeEncodeError:
263
+ pass
264
+
265
+ if not label:
266
+ raise IDNAError('No Input')
267
+
268
+ label = str(label)
269
+ check_label(label)
270
+ label_bytes = _punycode(label)
271
+ label_bytes = _alabel_prefix + label_bytes
272
+
273
+ if not valid_label_length(label_bytes):
274
+ raise IDNAError('Label too long')
275
+
276
+ return label_bytes
277
+
278
+
279
+ def ulabel(label: Union[str, bytes, bytearray]) -> str:
280
+ if not isinstance(label, (bytes, bytearray)):
281
+ try:
282
+ label_bytes = label.encode('ascii')
283
+ except UnicodeEncodeError:
284
+ check_label(label)
285
+ return label
286
+ else:
287
+ label_bytes = label
288
+
289
+ label_bytes = label_bytes.lower()
290
+ if label_bytes.startswith(_alabel_prefix):
291
+ label_bytes = label_bytes[len(_alabel_prefix):]
292
+ if not label_bytes:
293
+ raise IDNAError('Malformed A-label, no Punycode eligible content found')
294
+ if label_bytes.decode('ascii')[-1] == '-':
295
+ raise IDNAError('A-label must not end with a hyphen')
296
+ else:
297
+ check_label(label_bytes)
298
+ return label_bytes.decode('ascii')
299
+
300
+ try:
301
+ label = label_bytes.decode('punycode')
302
+ except UnicodeError:
303
+ raise IDNAError('Invalid A-label')
304
+ check_label(label)
305
+ return label
306
+
307
+
308
+ def uts46_remap(domain: str, std3_rules: bool = True, transitional: bool = False) -> str:
309
+ """Re-map the characters in the string according to UTS46 processing."""
310
+ from .uts46data import uts46data
311
+ output = ''
312
+
313
+ for pos, char in enumerate(domain):
314
+ code_point = ord(char)
315
+ try:
316
+ uts46row = uts46data[code_point if code_point < 256 else
317
+ bisect.bisect_left(uts46data, (code_point, 'Z')) - 1]
318
+ status = uts46row[1]
319
+ replacement = None # type: Optional[str]
320
+ if len(uts46row) == 3:
321
+ replacement = uts46row[2] # type: ignore
322
+ if (status == 'V' or
323
+ (status == 'D' and not transitional) or
324
+ (status == '3' and not std3_rules and replacement is None)):
325
+ output += char
326
+ elif replacement is not None and (status == 'M' or
327
+ (status == '3' and not std3_rules) or
328
+ (status == 'D' and transitional)):
329
+ output += replacement
330
+ elif status != 'I':
331
+ raise IndexError()
332
+ except IndexError:
333
+ raise InvalidCodepoint(
334
+ 'Codepoint {} not allowed at position {} in {}'.format(
335
+ _unot(code_point), pos + 1, repr(domain)))
336
+
337
+ return unicodedata.normalize('NFC', output)
338
+
339
+
340
+ def encode(s: Union[str, bytes, bytearray], strict: bool = False, uts46: bool = False, std3_rules: bool = False, transitional: bool = False) -> bytes:
341
+ if isinstance(s, (bytes, bytearray)):
342
+ try:
343
+ s = s.decode('ascii')
344
+ except UnicodeDecodeError:
345
+ raise IDNAError('should pass a unicode string to the function rather than a byte string.')
346
+ if uts46:
347
+ s = uts46_remap(s, std3_rules, transitional)
348
+ trailing_dot = False
349
+ result = []
350
+ if strict:
351
+ labels = s.split('.')
352
+ else:
353
+ labels = _unicode_dots_re.split(s)
354
+ if not labels or labels == ['']:
355
+ raise IDNAError('Empty domain')
356
+ if labels[-1] == '':
357
+ del labels[-1]
358
+ trailing_dot = True
359
+ for label in labels:
360
+ s = alabel(label)
361
+ if s:
362
+ result.append(s)
363
+ else:
364
+ raise IDNAError('Empty label')
365
+ if trailing_dot:
366
+ result.append(b'')
367
+ s = b'.'.join(result)
368
+ if not valid_string_length(s, trailing_dot):
369
+ raise IDNAError('Domain too long')
370
+ return s
371
+
372
+
373
+ def decode(s: Union[str, bytes, bytearray], strict: bool = False, uts46: bool = False, std3_rules: bool = False) -> str:
374
+ try:
375
+ if isinstance(s, (bytes, bytearray)):
376
+ s = s.decode('ascii')
377
+ except UnicodeDecodeError:
378
+ raise IDNAError('Invalid ASCII in A-label')
379
+ if uts46:
380
+ s = uts46_remap(s, std3_rules, False)
381
+ trailing_dot = False
382
+ result = []
383
+ if not strict:
384
+ labels = _unicode_dots_re.split(s)
385
+ else:
386
+ labels = s.split('.')
387
+ if not labels or labels == ['']:
388
+ raise IDNAError('Empty domain')
389
+ if not labels[-1]:
390
+ del labels[-1]
391
+ trailing_dot = True
392
+ for label in labels:
393
+ s = ulabel(label)
394
+ if s:
395
+ result.append(s)
396
+ else:
397
+ raise IDNAError('Empty label')
398
+ if trailing_dot:
399
+ result.append('')
400
+ return '.'.join(result)
.venv/lib/python3.11/site-packages/pip/_vendor/idna/idnadata.py ADDED
@@ -0,0 +1,2151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file is automatically generated by tools/idna-data
2
+
3
+ __version__ = '15.0.0'
4
+ scripts = {
5
+ 'Greek': (
6
+ 0x37000000374,
7
+ 0x37500000378,
8
+ 0x37a0000037e,
9
+ 0x37f00000380,
10
+ 0x38400000385,
11
+ 0x38600000387,
12
+ 0x3880000038b,
13
+ 0x38c0000038d,
14
+ 0x38e000003a2,
15
+ 0x3a3000003e2,
16
+ 0x3f000000400,
17
+ 0x1d2600001d2b,
18
+ 0x1d5d00001d62,
19
+ 0x1d6600001d6b,
20
+ 0x1dbf00001dc0,
21
+ 0x1f0000001f16,
22
+ 0x1f1800001f1e,
23
+ 0x1f2000001f46,
24
+ 0x1f4800001f4e,
25
+ 0x1f5000001f58,
26
+ 0x1f5900001f5a,
27
+ 0x1f5b00001f5c,
28
+ 0x1f5d00001f5e,
29
+ 0x1f5f00001f7e,
30
+ 0x1f8000001fb5,
31
+ 0x1fb600001fc5,
32
+ 0x1fc600001fd4,
33
+ 0x1fd600001fdc,
34
+ 0x1fdd00001ff0,
35
+ 0x1ff200001ff5,
36
+ 0x1ff600001fff,
37
+ 0x212600002127,
38
+ 0xab650000ab66,
39
+ 0x101400001018f,
40
+ 0x101a0000101a1,
41
+ 0x1d2000001d246,
42
+ ),
43
+ 'Han': (
44
+ 0x2e8000002e9a,
45
+ 0x2e9b00002ef4,
46
+ 0x2f0000002fd6,
47
+ 0x300500003006,
48
+ 0x300700003008,
49
+ 0x30210000302a,
50
+ 0x30380000303c,
51
+ 0x340000004dc0,
52
+ 0x4e000000a000,
53
+ 0xf9000000fa6e,
54
+ 0xfa700000fada,
55
+ 0x16fe200016fe4,
56
+ 0x16ff000016ff2,
57
+ 0x200000002a6e0,
58
+ 0x2a7000002b73a,
59
+ 0x2b7400002b81e,
60
+ 0x2b8200002cea2,
61
+ 0x2ceb00002ebe1,
62
+ 0x2f8000002fa1e,
63
+ 0x300000003134b,
64
+ 0x31350000323b0,
65
+ ),
66
+ 'Hebrew': (
67
+ 0x591000005c8,
68
+ 0x5d0000005eb,
69
+ 0x5ef000005f5,
70
+ 0xfb1d0000fb37,
71
+ 0xfb380000fb3d,
72
+ 0xfb3e0000fb3f,
73
+ 0xfb400000fb42,
74
+ 0xfb430000fb45,
75
+ 0xfb460000fb50,
76
+ ),
77
+ 'Hiragana': (
78
+ 0x304100003097,
79
+ 0x309d000030a0,
80
+ 0x1b0010001b120,
81
+ 0x1b1320001b133,
82
+ 0x1b1500001b153,
83
+ 0x1f2000001f201,
84
+ ),
85
+ 'Katakana': (
86
+ 0x30a1000030fb,
87
+ 0x30fd00003100,
88
+ 0x31f000003200,
89
+ 0x32d0000032ff,
90
+ 0x330000003358,
91
+ 0xff660000ff70,
92
+ 0xff710000ff9e,
93
+ 0x1aff00001aff4,
94
+ 0x1aff50001affc,
95
+ 0x1affd0001afff,
96
+ 0x1b0000001b001,
97
+ 0x1b1200001b123,
98
+ 0x1b1550001b156,
99
+ 0x1b1640001b168,
100
+ ),
101
+ }
102
+ joining_types = {
103
+ 0x600: 85,
104
+ 0x601: 85,
105
+ 0x602: 85,
106
+ 0x603: 85,
107
+ 0x604: 85,
108
+ 0x605: 85,
109
+ 0x608: 85,
110
+ 0x60b: 85,
111
+ 0x620: 68,
112
+ 0x621: 85,
113
+ 0x622: 82,
114
+ 0x623: 82,
115
+ 0x624: 82,
116
+ 0x625: 82,
117
+ 0x626: 68,
118
+ 0x627: 82,
119
+ 0x628: 68,
120
+ 0x629: 82,
121
+ 0x62a: 68,
122
+ 0x62b: 68,
123
+ 0x62c: 68,
124
+ 0x62d: 68,
125
+ 0x62e: 68,
126
+ 0x62f: 82,
127
+ 0x630: 82,
128
+ 0x631: 82,
129
+ 0x632: 82,
130
+ 0x633: 68,
131
+ 0x634: 68,
132
+ 0x635: 68,
133
+ 0x636: 68,
134
+ 0x637: 68,
135
+ 0x638: 68,
136
+ 0x639: 68,
137
+ 0x63a: 68,
138
+ 0x63b: 68,
139
+ 0x63c: 68,
140
+ 0x63d: 68,
141
+ 0x63e: 68,
142
+ 0x63f: 68,
143
+ 0x640: 67,
144
+ 0x641: 68,
145
+ 0x642: 68,
146
+ 0x643: 68,
147
+ 0x644: 68,
148
+ 0x645: 68,
149
+ 0x646: 68,
150
+ 0x647: 68,
151
+ 0x648: 82,
152
+ 0x649: 68,
153
+ 0x64a: 68,
154
+ 0x66e: 68,
155
+ 0x66f: 68,
156
+ 0x671: 82,
157
+ 0x672: 82,
158
+ 0x673: 82,
159
+ 0x674: 85,
160
+ 0x675: 82,
161
+ 0x676: 82,
162
+ 0x677: 82,
163
+ 0x678: 68,
164
+ 0x679: 68,
165
+ 0x67a: 68,
166
+ 0x67b: 68,
167
+ 0x67c: 68,
168
+ 0x67d: 68,
169
+ 0x67e: 68,
170
+ 0x67f: 68,
171
+ 0x680: 68,
172
+ 0x681: 68,
173
+ 0x682: 68,
174
+ 0x683: 68,
175
+ 0x684: 68,
176
+ 0x685: 68,
177
+ 0x686: 68,
178
+ 0x687: 68,
179
+ 0x688: 82,
180
+ 0x689: 82,
181
+ 0x68a: 82,
182
+ 0x68b: 82,
183
+ 0x68c: 82,
184
+ 0x68d: 82,
185
+ 0x68e: 82,
186
+ 0x68f: 82,
187
+ 0x690: 82,
188
+ 0x691: 82,
189
+ 0x692: 82,
190
+ 0x693: 82,
191
+ 0x694: 82,
192
+ 0x695: 82,
193
+ 0x696: 82,
194
+ 0x697: 82,
195
+ 0x698: 82,
196
+ 0x699: 82,
197
+ 0x69a: 68,
198
+ 0x69b: 68,
199
+ 0x69c: 68,
200
+ 0x69d: 68,
201
+ 0x69e: 68,
202
+ 0x69f: 68,
203
+ 0x6a0: 68,
204
+ 0x6a1: 68,
205
+ 0x6a2: 68,
206
+ 0x6a3: 68,
207
+ 0x6a4: 68,
208
+ 0x6a5: 68,
209
+ 0x6a6: 68,
210
+ 0x6a7: 68,
211
+ 0x6a8: 68,
212
+ 0x6a9: 68,
213
+ 0x6aa: 68,
214
+ 0x6ab: 68,
215
+ 0x6ac: 68,
216
+ 0x6ad: 68,
217
+ 0x6ae: 68,
218
+ 0x6af: 68,
219
+ 0x6b0: 68,
220
+ 0x6b1: 68,
221
+ 0x6b2: 68,
222
+ 0x6b3: 68,
223
+ 0x6b4: 68,
224
+ 0x6b5: 68,
225
+ 0x6b6: 68,
226
+ 0x6b7: 68,
227
+ 0x6b8: 68,
228
+ 0x6b9: 68,
229
+ 0x6ba: 68,
230
+ 0x6bb: 68,
231
+ 0x6bc: 68,
232
+ 0x6bd: 68,
233
+ 0x6be: 68,
234
+ 0x6bf: 68,
235
+ 0x6c0: 82,
236
+ 0x6c1: 68,
237
+ 0x6c2: 68,
238
+ 0x6c3: 82,
239
+ 0x6c4: 82,
240
+ 0x6c5: 82,
241
+ 0x6c6: 82,
242
+ 0x6c7: 82,
243
+ 0x6c8: 82,
244
+ 0x6c9: 82,
245
+ 0x6ca: 82,
246
+ 0x6cb: 82,
247
+ 0x6cc: 68,
248
+ 0x6cd: 82,
249
+ 0x6ce: 68,
250
+ 0x6cf: 82,
251
+ 0x6d0: 68,
252
+ 0x6d1: 68,
253
+ 0x6d2: 82,
254
+ 0x6d3: 82,
255
+ 0x6d5: 82,
256
+ 0x6dd: 85,
257
+ 0x6ee: 82,
258
+ 0x6ef: 82,
259
+ 0x6fa: 68,
260
+ 0x6fb: 68,
261
+ 0x6fc: 68,
262
+ 0x6ff: 68,
263
+ 0x70f: 84,
264
+ 0x710: 82,
265
+ 0x712: 68,
266
+ 0x713: 68,
267
+ 0x714: 68,
268
+ 0x715: 82,
269
+ 0x716: 82,
270
+ 0x717: 82,
271
+ 0x718: 82,
272
+ 0x719: 82,
273
+ 0x71a: 68,
274
+ 0x71b: 68,
275
+ 0x71c: 68,
276
+ 0x71d: 68,
277
+ 0x71e: 82,
278
+ 0x71f: 68,
279
+ 0x720: 68,
280
+ 0x721: 68,
281
+ 0x722: 68,
282
+ 0x723: 68,
283
+ 0x724: 68,
284
+ 0x725: 68,
285
+ 0x726: 68,
286
+ 0x727: 68,
287
+ 0x728: 82,
288
+ 0x729: 68,
289
+ 0x72a: 82,
290
+ 0x72b: 68,
291
+ 0x72c: 82,
292
+ 0x72d: 68,
293
+ 0x72e: 68,
294
+ 0x72f: 82,
295
+ 0x74d: 82,
296
+ 0x74e: 68,
297
+ 0x74f: 68,
298
+ 0x750: 68,
299
+ 0x751: 68,
300
+ 0x752: 68,
301
+ 0x753: 68,
302
+ 0x754: 68,
303
+ 0x755: 68,
304
+ 0x756: 68,
305
+ 0x757: 68,
306
+ 0x758: 68,
307
+ 0x759: 82,
308
+ 0x75a: 82,
309
+ 0x75b: 82,
310
+ 0x75c: 68,
311
+ 0x75d: 68,
312
+ 0x75e: 68,
313
+ 0x75f: 68,
314
+ 0x760: 68,
315
+ 0x761: 68,
316
+ 0x762: 68,
317
+ 0x763: 68,
318
+ 0x764: 68,
319
+ 0x765: 68,
320
+ 0x766: 68,
321
+ 0x767: 68,
322
+ 0x768: 68,
323
+ 0x769: 68,
324
+ 0x76a: 68,
325
+ 0x76b: 82,
326
+ 0x76c: 82,
327
+ 0x76d: 68,
328
+ 0x76e: 68,
329
+ 0x76f: 68,
330
+ 0x770: 68,
331
+ 0x771: 82,
332
+ 0x772: 68,
333
+ 0x773: 82,
334
+ 0x774: 82,
335
+ 0x775: 68,
336
+ 0x776: 68,
337
+ 0x777: 68,
338
+ 0x778: 82,
339
+ 0x779: 82,
340
+ 0x77a: 68,
341
+ 0x77b: 68,
342
+ 0x77c: 68,
343
+ 0x77d: 68,
344
+ 0x77e: 68,
345
+ 0x77f: 68,
346
+ 0x7ca: 68,
347
+ 0x7cb: 68,
348
+ 0x7cc: 68,
349
+ 0x7cd: 68,
350
+ 0x7ce: 68,
351
+ 0x7cf: 68,
352
+ 0x7d0: 68,
353
+ 0x7d1: 68,
354
+ 0x7d2: 68,
355
+ 0x7d3: 68,
356
+ 0x7d4: 68,
357
+ 0x7d5: 68,
358
+ 0x7d6: 68,
359
+ 0x7d7: 68,
360
+ 0x7d8: 68,
361
+ 0x7d9: 68,
362
+ 0x7da: 68,
363
+ 0x7db: 68,
364
+ 0x7dc: 68,
365
+ 0x7dd: 68,
366
+ 0x7de: 68,
367
+ 0x7df: 68,
368
+ 0x7e0: 68,
369
+ 0x7e1: 68,
370
+ 0x7e2: 68,
371
+ 0x7e3: 68,
372
+ 0x7e4: 68,
373
+ 0x7e5: 68,
374
+ 0x7e6: 68,
375
+ 0x7e7: 68,
376
+ 0x7e8: 68,
377
+ 0x7e9: 68,
378
+ 0x7ea: 68,
379
+ 0x7fa: 67,
380
+ 0x840: 82,
381
+ 0x841: 68,
382
+ 0x842: 68,
383
+ 0x843: 68,
384
+ 0x844: 68,
385
+ 0x845: 68,
386
+ 0x846: 82,
387
+ 0x847: 82,
388
+ 0x848: 68,
389
+ 0x849: 82,
390
+ 0x84a: 68,
391
+ 0x84b: 68,
392
+ 0x84c: 68,
393
+ 0x84d: 68,
394
+ 0x84e: 68,
395
+ 0x84f: 68,
396
+ 0x850: 68,
397
+ 0x851: 68,
398
+ 0x852: 68,
399
+ 0x853: 68,
400
+ 0x854: 82,
401
+ 0x855: 68,
402
+ 0x856: 82,
403
+ 0x857: 82,
404
+ 0x858: 82,
405
+ 0x860: 68,
406
+ 0x861: 85,
407
+ 0x862: 68,
408
+ 0x863: 68,
409
+ 0x864: 68,
410
+ 0x865: 68,
411
+ 0x866: 85,
412
+ 0x867: 82,
413
+ 0x868: 68,
414
+ 0x869: 82,
415
+ 0x86a: 82,
416
+ 0x870: 82,
417
+ 0x871: 82,
418
+ 0x872: 82,
419
+ 0x873: 82,
420
+ 0x874: 82,
421
+ 0x875: 82,
422
+ 0x876: 82,
423
+ 0x877: 82,
424
+ 0x878: 82,
425
+ 0x879: 82,
426
+ 0x87a: 82,
427
+ 0x87b: 82,
428
+ 0x87c: 82,
429
+ 0x87d: 82,
430
+ 0x87e: 82,
431
+ 0x87f: 82,
432
+ 0x880: 82,
433
+ 0x881: 82,
434
+ 0x882: 82,
435
+ 0x883: 67,
436
+ 0x884: 67,
437
+ 0x885: 67,
438
+ 0x886: 68,
439
+ 0x887: 85,
440
+ 0x888: 85,
441
+ 0x889: 68,
442
+ 0x88a: 68,
443
+ 0x88b: 68,
444
+ 0x88c: 68,
445
+ 0x88d: 68,
446
+ 0x88e: 82,
447
+ 0x890: 85,
448
+ 0x891: 85,
449
+ 0x8a0: 68,
450
+ 0x8a1: 68,
451
+ 0x8a2: 68,
452
+ 0x8a3: 68,
453
+ 0x8a4: 68,
454
+ 0x8a5: 68,
455
+ 0x8a6: 68,
456
+ 0x8a7: 68,
457
+ 0x8a8: 68,
458
+ 0x8a9: 68,
459
+ 0x8aa: 82,
460
+ 0x8ab: 82,
461
+ 0x8ac: 82,
462
+ 0x8ad: 85,
463
+ 0x8ae: 82,
464
+ 0x8af: 68,
465
+ 0x8b0: 68,
466
+ 0x8b1: 82,
467
+ 0x8b2: 82,
468
+ 0x8b3: 68,
469
+ 0x8b4: 68,
470
+ 0x8b5: 68,
471
+ 0x8b6: 68,
472
+ 0x8b7: 68,
473
+ 0x8b8: 68,
474
+ 0x8b9: 82,
475
+ 0x8ba: 68,
476
+ 0x8bb: 68,
477
+ 0x8bc: 68,
478
+ 0x8bd: 68,
479
+ 0x8be: 68,
480
+ 0x8bf: 68,
481
+ 0x8c0: 68,
482
+ 0x8c1: 68,
483
+ 0x8c2: 68,
484
+ 0x8c3: 68,
485
+ 0x8c4: 68,
486
+ 0x8c5: 68,
487
+ 0x8c6: 68,
488
+ 0x8c7: 68,
489
+ 0x8c8: 68,
490
+ 0x8e2: 85,
491
+ 0x1806: 85,
492
+ 0x1807: 68,
493
+ 0x180a: 67,
494
+ 0x180e: 85,
495
+ 0x1820: 68,
496
+ 0x1821: 68,
497
+ 0x1822: 68,
498
+ 0x1823: 68,
499
+ 0x1824: 68,
500
+ 0x1825: 68,
501
+ 0x1826: 68,
502
+ 0x1827: 68,
503
+ 0x1828: 68,
504
+ 0x1829: 68,
505
+ 0x182a: 68,
506
+ 0x182b: 68,
507
+ 0x182c: 68,
508
+ 0x182d: 68,
509
+ 0x182e: 68,
510
+ 0x182f: 68,
511
+ 0x1830: 68,
512
+ 0x1831: 68,
513
+ 0x1832: 68,
514
+ 0x1833: 68,
515
+ 0x1834: 68,
516
+ 0x1835: 68,
517
+ 0x1836: 68,
518
+ 0x1837: 68,
519
+ 0x1838: 68,
520
+ 0x1839: 68,
521
+ 0x183a: 68,
522
+ 0x183b: 68,
523
+ 0x183c: 68,
524
+ 0x183d: 68,
525
+ 0x183e: 68,
526
+ 0x183f: 68,
527
+ 0x1840: 68,
528
+ 0x1841: 68,
529
+ 0x1842: 68,
530
+ 0x1843: 68,
531
+ 0x1844: 68,
532
+ 0x1845: 68,
533
+ 0x1846: 68,
534
+ 0x1847: 68,
535
+ 0x1848: 68,
536
+ 0x1849: 68,
537
+ 0x184a: 68,
538
+ 0x184b: 68,
539
+ 0x184c: 68,
540
+ 0x184d: 68,
541
+ 0x184e: 68,
542
+ 0x184f: 68,
543
+ 0x1850: 68,
544
+ 0x1851: 68,
545
+ 0x1852: 68,
546
+ 0x1853: 68,
547
+ 0x1854: 68,
548
+ 0x1855: 68,
549
+ 0x1856: 68,
550
+ 0x1857: 68,
551
+ 0x1858: 68,
552
+ 0x1859: 68,
553
+ 0x185a: 68,
554
+ 0x185b: 68,
555
+ 0x185c: 68,
556
+ 0x185d: 68,
557
+ 0x185e: 68,
558
+ 0x185f: 68,
559
+ 0x1860: 68,
560
+ 0x1861: 68,
561
+ 0x1862: 68,
562
+ 0x1863: 68,
563
+ 0x1864: 68,
564
+ 0x1865: 68,
565
+ 0x1866: 68,
566
+ 0x1867: 68,
567
+ 0x1868: 68,
568
+ 0x1869: 68,
569
+ 0x186a: 68,
570
+ 0x186b: 68,
571
+ 0x186c: 68,
572
+ 0x186d: 68,
573
+ 0x186e: 68,
574
+ 0x186f: 68,
575
+ 0x1870: 68,
576
+ 0x1871: 68,
577
+ 0x1872: 68,
578
+ 0x1873: 68,
579
+ 0x1874: 68,
580
+ 0x1875: 68,
581
+ 0x1876: 68,
582
+ 0x1877: 68,
583
+ 0x1878: 68,
584
+ 0x1880: 85,
585
+ 0x1881: 85,
586
+ 0x1882: 85,
587
+ 0x1883: 85,
588
+ 0x1884: 85,
589
+ 0x1885: 84,
590
+ 0x1886: 84,
591
+ 0x1887: 68,
592
+ 0x1888: 68,
593
+ 0x1889: 68,
594
+ 0x188a: 68,
595
+ 0x188b: 68,
596
+ 0x188c: 68,
597
+ 0x188d: 68,
598
+ 0x188e: 68,
599
+ 0x188f: 68,
600
+ 0x1890: 68,
601
+ 0x1891: 68,
602
+ 0x1892: 68,
603
+ 0x1893: 68,
604
+ 0x1894: 68,
605
+ 0x1895: 68,
606
+ 0x1896: 68,
607
+ 0x1897: 68,
608
+ 0x1898: 68,
609
+ 0x1899: 68,
610
+ 0x189a: 68,
611
+ 0x189b: 68,
612
+ 0x189c: 68,
613
+ 0x189d: 68,
614
+ 0x189e: 68,
615
+ 0x189f: 68,
616
+ 0x18a0: 68,
617
+ 0x18a1: 68,
618
+ 0x18a2: 68,
619
+ 0x18a3: 68,
620
+ 0x18a4: 68,
621
+ 0x18a5: 68,
622
+ 0x18a6: 68,
623
+ 0x18a7: 68,
624
+ 0x18a8: 68,
625
+ 0x18aa: 68,
626
+ 0x200c: 85,
627
+ 0x200d: 67,
628
+ 0x202f: 85,
629
+ 0x2066: 85,
630
+ 0x2067: 85,
631
+ 0x2068: 85,
632
+ 0x2069: 85,
633
+ 0xa840: 68,
634
+ 0xa841: 68,
635
+ 0xa842: 68,
636
+ 0xa843: 68,
637
+ 0xa844: 68,
638
+ 0xa845: 68,
639
+ 0xa846: 68,
640
+ 0xa847: 68,
641
+ 0xa848: 68,
642
+ 0xa849: 68,
643
+ 0xa84a: 68,
644
+ 0xa84b: 68,
645
+ 0xa84c: 68,
646
+ 0xa84d: 68,
647
+ 0xa84e: 68,
648
+ 0xa84f: 68,
649
+ 0xa850: 68,
650
+ 0xa851: 68,
651
+ 0xa852: 68,
652
+ 0xa853: 68,
653
+ 0xa854: 68,
654
+ 0xa855: 68,
655
+ 0xa856: 68,
656
+ 0xa857: 68,
657
+ 0xa858: 68,
658
+ 0xa859: 68,
659
+ 0xa85a: 68,
660
+ 0xa85b: 68,
661
+ 0xa85c: 68,
662
+ 0xa85d: 68,
663
+ 0xa85e: 68,
664
+ 0xa85f: 68,
665
+ 0xa860: 68,
666
+ 0xa861: 68,
667
+ 0xa862: 68,
668
+ 0xa863: 68,
669
+ 0xa864: 68,
670
+ 0xa865: 68,
671
+ 0xa866: 68,
672
+ 0xa867: 68,
673
+ 0xa868: 68,
674
+ 0xa869: 68,
675
+ 0xa86a: 68,
676
+ 0xa86b: 68,
677
+ 0xa86c: 68,
678
+ 0xa86d: 68,
679
+ 0xa86e: 68,
680
+ 0xa86f: 68,
681
+ 0xa870: 68,
682
+ 0xa871: 68,
683
+ 0xa872: 76,
684
+ 0xa873: 85,
685
+ 0x10ac0: 68,
686
+ 0x10ac1: 68,
687
+ 0x10ac2: 68,
688
+ 0x10ac3: 68,
689
+ 0x10ac4: 68,
690
+ 0x10ac5: 82,
691
+ 0x10ac6: 85,
692
+ 0x10ac7: 82,
693
+ 0x10ac8: 85,
694
+ 0x10ac9: 82,
695
+ 0x10aca: 82,
696
+ 0x10acb: 85,
697
+ 0x10acc: 85,
698
+ 0x10acd: 76,
699
+ 0x10ace: 82,
700
+ 0x10acf: 82,
701
+ 0x10ad0: 82,
702
+ 0x10ad1: 82,
703
+ 0x10ad2: 82,
704
+ 0x10ad3: 68,
705
+ 0x10ad4: 68,
706
+ 0x10ad5: 68,
707
+ 0x10ad6: 68,
708
+ 0x10ad7: 76,
709
+ 0x10ad8: 68,
710
+ 0x10ad9: 68,
711
+ 0x10ada: 68,
712
+ 0x10adb: 68,
713
+ 0x10adc: 68,
714
+ 0x10add: 82,
715
+ 0x10ade: 68,
716
+ 0x10adf: 68,
717
+ 0x10ae0: 68,
718
+ 0x10ae1: 82,
719
+ 0x10ae2: 85,
720
+ 0x10ae3: 85,
721
+ 0x10ae4: 82,
722
+ 0x10aeb: 68,
723
+ 0x10aec: 68,
724
+ 0x10aed: 68,
725
+ 0x10aee: 68,
726
+ 0x10aef: 82,
727
+ 0x10b80: 68,
728
+ 0x10b81: 82,
729
+ 0x10b82: 68,
730
+ 0x10b83: 82,
731
+ 0x10b84: 82,
732
+ 0x10b85: 82,
733
+ 0x10b86: 68,
734
+ 0x10b87: 68,
735
+ 0x10b88: 68,
736
+ 0x10b89: 82,
737
+ 0x10b8a: 68,
738
+ 0x10b8b: 68,
739
+ 0x10b8c: 82,
740
+ 0x10b8d: 68,
741
+ 0x10b8e: 82,
742
+ 0x10b8f: 82,
743
+ 0x10b90: 68,
744
+ 0x10b91: 82,
745
+ 0x10ba9: 82,
746
+ 0x10baa: 82,
747
+ 0x10bab: 82,
748
+ 0x10bac: 82,
749
+ 0x10bad: 68,
750
+ 0x10bae: 68,
751
+ 0x10baf: 85,
752
+ 0x10d00: 76,
753
+ 0x10d01: 68,
754
+ 0x10d02: 68,
755
+ 0x10d03: 68,
756
+ 0x10d04: 68,
757
+ 0x10d05: 68,
758
+ 0x10d06: 68,
759
+ 0x10d07: 68,
760
+ 0x10d08: 68,
761
+ 0x10d09: 68,
762
+ 0x10d0a: 68,
763
+ 0x10d0b: 68,
764
+ 0x10d0c: 68,
765
+ 0x10d0d: 68,
766
+ 0x10d0e: 68,
767
+ 0x10d0f: 68,
768
+ 0x10d10: 68,
769
+ 0x10d11: 68,
770
+ 0x10d12: 68,
771
+ 0x10d13: 68,
772
+ 0x10d14: 68,
773
+ 0x10d15: 68,
774
+ 0x10d16: 68,
775
+ 0x10d17: 68,
776
+ 0x10d18: 68,
777
+ 0x10d19: 68,
778
+ 0x10d1a: 68,
779
+ 0x10d1b: 68,
780
+ 0x10d1c: 68,
781
+ 0x10d1d: 68,
782
+ 0x10d1e: 68,
783
+ 0x10d1f: 68,
784
+ 0x10d20: 68,
785
+ 0x10d21: 68,
786
+ 0x10d22: 82,
787
+ 0x10d23: 68,
788
+ 0x10f30: 68,
789
+ 0x10f31: 68,
790
+ 0x10f32: 68,
791
+ 0x10f33: 82,
792
+ 0x10f34: 68,
793
+ 0x10f35: 68,
794
+ 0x10f36: 68,
795
+ 0x10f37: 68,
796
+ 0x10f38: 68,
797
+ 0x10f39: 68,
798
+ 0x10f3a: 68,
799
+ 0x10f3b: 68,
800
+ 0x10f3c: 68,
801
+ 0x10f3d: 68,
802
+ 0x10f3e: 68,
803
+ 0x10f3f: 68,
804
+ 0x10f40: 68,
805
+ 0x10f41: 68,
806
+ 0x10f42: 68,
807
+ 0x10f43: 68,
808
+ 0x10f44: 68,
809
+ 0x10f45: 85,
810
+ 0x10f51: 68,
811
+ 0x10f52: 68,
812
+ 0x10f53: 68,
813
+ 0x10f54: 82,
814
+ 0x10f70: 68,
815
+ 0x10f71: 68,
816
+ 0x10f72: 68,
817
+ 0x10f73: 68,
818
+ 0x10f74: 82,
819
+ 0x10f75: 82,
820
+ 0x10f76: 68,
821
+ 0x10f77: 68,
822
+ 0x10f78: 68,
823
+ 0x10f79: 68,
824
+ 0x10f7a: 68,
825
+ 0x10f7b: 68,
826
+ 0x10f7c: 68,
827
+ 0x10f7d: 68,
828
+ 0x10f7e: 68,
829
+ 0x10f7f: 68,
830
+ 0x10f80: 68,
831
+ 0x10f81: 68,
832
+ 0x10fb0: 68,
833
+ 0x10fb1: 85,
834
+ 0x10fb2: 68,
835
+ 0x10fb3: 68,
836
+ 0x10fb4: 82,
837
+ 0x10fb5: 82,
838
+ 0x10fb6: 82,
839
+ 0x10fb7: 85,
840
+ 0x10fb8: 68,
841
+ 0x10fb9: 82,
842
+ 0x10fba: 82,
843
+ 0x10fbb: 68,
844
+ 0x10fbc: 68,
845
+ 0x10fbd: 82,
846
+ 0x10fbe: 68,
847
+ 0x10fbf: 68,
848
+ 0x10fc0: 85,
849
+ 0x10fc1: 68,
850
+ 0x10fc2: 82,
851
+ 0x10fc3: 82,
852
+ 0x10fc4: 68,
853
+ 0x10fc5: 85,
854
+ 0x10fc6: 85,
855
+ 0x10fc7: 85,
856
+ 0x10fc8: 85,
857
+ 0x10fc9: 82,
858
+ 0x10fca: 68,
859
+ 0x10fcb: 76,
860
+ 0x110bd: 85,
861
+ 0x110cd: 85,
862
+ 0x1e900: 68,
863
+ 0x1e901: 68,
864
+ 0x1e902: 68,
865
+ 0x1e903: 68,
866
+ 0x1e904: 68,
867
+ 0x1e905: 68,
868
+ 0x1e906: 68,
869
+ 0x1e907: 68,
870
+ 0x1e908: 68,
871
+ 0x1e909: 68,
872
+ 0x1e90a: 68,
873
+ 0x1e90b: 68,
874
+ 0x1e90c: 68,
875
+ 0x1e90d: 68,
876
+ 0x1e90e: 68,
877
+ 0x1e90f: 68,
878
+ 0x1e910: 68,
879
+ 0x1e911: 68,
880
+ 0x1e912: 68,
881
+ 0x1e913: 68,
882
+ 0x1e914: 68,
883
+ 0x1e915: 68,
884
+ 0x1e916: 68,
885
+ 0x1e917: 68,
886
+ 0x1e918: 68,
887
+ 0x1e919: 68,
888
+ 0x1e91a: 68,
889
+ 0x1e91b: 68,
890
+ 0x1e91c: 68,
891
+ 0x1e91d: 68,
892
+ 0x1e91e: 68,
893
+ 0x1e91f: 68,
894
+ 0x1e920: 68,
895
+ 0x1e921: 68,
896
+ 0x1e922: 68,
897
+ 0x1e923: 68,
898
+ 0x1e924: 68,
899
+ 0x1e925: 68,
900
+ 0x1e926: 68,
901
+ 0x1e927: 68,
902
+ 0x1e928: 68,
903
+ 0x1e929: 68,
904
+ 0x1e92a: 68,
905
+ 0x1e92b: 68,
906
+ 0x1e92c: 68,
907
+ 0x1e92d: 68,
908
+ 0x1e92e: 68,
909
+ 0x1e92f: 68,
910
+ 0x1e930: 68,
911
+ 0x1e931: 68,
912
+ 0x1e932: 68,
913
+ 0x1e933: 68,
914
+ 0x1e934: 68,
915
+ 0x1e935: 68,
916
+ 0x1e936: 68,
917
+ 0x1e937: 68,
918
+ 0x1e938: 68,
919
+ 0x1e939: 68,
920
+ 0x1e93a: 68,
921
+ 0x1e93b: 68,
922
+ 0x1e93c: 68,
923
+ 0x1e93d: 68,
924
+ 0x1e93e: 68,
925
+ 0x1e93f: 68,
926
+ 0x1e940: 68,
927
+ 0x1e941: 68,
928
+ 0x1e942: 68,
929
+ 0x1e943: 68,
930
+ 0x1e94b: 84,
931
+ }
932
+ codepoint_classes = {
933
+ 'PVALID': (
934
+ 0x2d0000002e,
935
+ 0x300000003a,
936
+ 0x610000007b,
937
+ 0xdf000000f7,
938
+ 0xf800000100,
939
+ 0x10100000102,
940
+ 0x10300000104,
941
+ 0x10500000106,
942
+ 0x10700000108,
943
+ 0x1090000010a,
944
+ 0x10b0000010c,
945
+ 0x10d0000010e,
946
+ 0x10f00000110,
947
+ 0x11100000112,
948
+ 0x11300000114,
949
+ 0x11500000116,
950
+ 0x11700000118,
951
+ 0x1190000011a,
952
+ 0x11b0000011c,
953
+ 0x11d0000011e,
954
+ 0x11f00000120,
955
+ 0x12100000122,
956
+ 0x12300000124,
957
+ 0x12500000126,
958
+ 0x12700000128,
959
+ 0x1290000012a,
960
+ 0x12b0000012c,
961
+ 0x12d0000012e,
962
+ 0x12f00000130,
963
+ 0x13100000132,
964
+ 0x13500000136,
965
+ 0x13700000139,
966
+ 0x13a0000013b,
967
+ 0x13c0000013d,
968
+ 0x13e0000013f,
969
+ 0x14200000143,
970
+ 0x14400000145,
971
+ 0x14600000147,
972
+ 0x14800000149,
973
+ 0x14b0000014c,
974
+ 0x14d0000014e,
975
+ 0x14f00000150,
976
+ 0x15100000152,
977
+ 0x15300000154,
978
+ 0x15500000156,
979
+ 0x15700000158,
980
+ 0x1590000015a,
981
+ 0x15b0000015c,
982
+ 0x15d0000015e,
983
+ 0x15f00000160,
984
+ 0x16100000162,
985
+ 0x16300000164,
986
+ 0x16500000166,
987
+ 0x16700000168,
988
+ 0x1690000016a,
989
+ 0x16b0000016c,
990
+ 0x16d0000016e,
991
+ 0x16f00000170,
992
+ 0x17100000172,
993
+ 0x17300000174,
994
+ 0x17500000176,
995
+ 0x17700000178,
996
+ 0x17a0000017b,
997
+ 0x17c0000017d,
998
+ 0x17e0000017f,
999
+ 0x18000000181,
1000
+ 0x18300000184,
1001
+ 0x18500000186,
1002
+ 0x18800000189,
1003
+ 0x18c0000018e,
1004
+ 0x19200000193,
1005
+ 0x19500000196,
1006
+ 0x1990000019c,
1007
+ 0x19e0000019f,
1008
+ 0x1a1000001a2,
1009
+ 0x1a3000001a4,
1010
+ 0x1a5000001a6,
1011
+ 0x1a8000001a9,
1012
+ 0x1aa000001ac,
1013
+ 0x1ad000001ae,
1014
+ 0x1b0000001b1,
1015
+ 0x1b4000001b5,
1016
+ 0x1b6000001b7,
1017
+ 0x1b9000001bc,
1018
+ 0x1bd000001c4,
1019
+ 0x1ce000001cf,
1020
+ 0x1d0000001d1,
1021
+ 0x1d2000001d3,
1022
+ 0x1d4000001d5,
1023
+ 0x1d6000001d7,
1024
+ 0x1d8000001d9,
1025
+ 0x1da000001db,
1026
+ 0x1dc000001de,
1027
+ 0x1df000001e0,
1028
+ 0x1e1000001e2,
1029
+ 0x1e3000001e4,
1030
+ 0x1e5000001e6,
1031
+ 0x1e7000001e8,
1032
+ 0x1e9000001ea,
1033
+ 0x1eb000001ec,
1034
+ 0x1ed000001ee,
1035
+ 0x1ef000001f1,
1036
+ 0x1f5000001f6,
1037
+ 0x1f9000001fa,
1038
+ 0x1fb000001fc,
1039
+ 0x1fd000001fe,
1040
+ 0x1ff00000200,
1041
+ 0x20100000202,
1042
+ 0x20300000204,
1043
+ 0x20500000206,
1044
+ 0x20700000208,
1045
+ 0x2090000020a,
1046
+ 0x20b0000020c,
1047
+ 0x20d0000020e,
1048
+ 0x20f00000210,
1049
+ 0x21100000212,
1050
+ 0x21300000214,
1051
+ 0x21500000216,
1052
+ 0x21700000218,
1053
+ 0x2190000021a,
1054
+ 0x21b0000021c,
1055
+ 0x21d0000021e,
1056
+ 0x21f00000220,
1057
+ 0x22100000222,
1058
+ 0x22300000224,
1059
+ 0x22500000226,
1060
+ 0x22700000228,
1061
+ 0x2290000022a,
1062
+ 0x22b0000022c,
1063
+ 0x22d0000022e,
1064
+ 0x22f00000230,
1065
+ 0x23100000232,
1066
+ 0x2330000023a,
1067
+ 0x23c0000023d,
1068
+ 0x23f00000241,
1069
+ 0x24200000243,
1070
+ 0x24700000248,
1071
+ 0x2490000024a,
1072
+ 0x24b0000024c,
1073
+ 0x24d0000024e,
1074
+ 0x24f000002b0,
1075
+ 0x2b9000002c2,
1076
+ 0x2c6000002d2,
1077
+ 0x2ec000002ed,
1078
+ 0x2ee000002ef,
1079
+ 0x30000000340,
1080
+ 0x34200000343,
1081
+ 0x3460000034f,
1082
+ 0x35000000370,
1083
+ 0x37100000372,
1084
+ 0x37300000374,
1085
+ 0x37700000378,
1086
+ 0x37b0000037e,
1087
+ 0x39000000391,
1088
+ 0x3ac000003cf,
1089
+ 0x3d7000003d8,
1090
+ 0x3d9000003da,
1091
+ 0x3db000003dc,
1092
+ 0x3dd000003de,
1093
+ 0x3df000003e0,
1094
+ 0x3e1000003e2,
1095
+ 0x3e3000003e4,
1096
+ 0x3e5000003e6,
1097
+ 0x3e7000003e8,
1098
+ 0x3e9000003ea,
1099
+ 0x3eb000003ec,
1100
+ 0x3ed000003ee,
1101
+ 0x3ef000003f0,
1102
+ 0x3f3000003f4,
1103
+ 0x3f8000003f9,
1104
+ 0x3fb000003fd,
1105
+ 0x43000000460,
1106
+ 0x46100000462,
1107
+ 0x46300000464,
1108
+ 0x46500000466,
1109
+ 0x46700000468,
1110
+ 0x4690000046a,
1111
+ 0x46b0000046c,
1112
+ 0x46d0000046e,
1113
+ 0x46f00000470,
1114
+ 0x47100000472,
1115
+ 0x47300000474,
1116
+ 0x47500000476,
1117
+ 0x47700000478,
1118
+ 0x4790000047a,
1119
+ 0x47b0000047c,
1120
+ 0x47d0000047e,
1121
+ 0x47f00000480,
1122
+ 0x48100000482,
1123
+ 0x48300000488,
1124
+ 0x48b0000048c,
1125
+ 0x48d0000048e,
1126
+ 0x48f00000490,
1127
+ 0x49100000492,
1128
+ 0x49300000494,
1129
+ 0x49500000496,
1130
+ 0x49700000498,
1131
+ 0x4990000049a,
1132
+ 0x49b0000049c,
1133
+ 0x49d0000049e,
1134
+ 0x49f000004a0,
1135
+ 0x4a1000004a2,
1136
+ 0x4a3000004a4,
1137
+ 0x4a5000004a6,
1138
+ 0x4a7000004a8,
1139
+ 0x4a9000004aa,
1140
+ 0x4ab000004ac,
1141
+ 0x4ad000004ae,
1142
+ 0x4af000004b0,
1143
+ 0x4b1000004b2,
1144
+ 0x4b3000004b4,
1145
+ 0x4b5000004b6,
1146
+ 0x4b7000004b8,
1147
+ 0x4b9000004ba,
1148
+ 0x4bb000004bc,
1149
+ 0x4bd000004be,
1150
+ 0x4bf000004c0,
1151
+ 0x4c2000004c3,
1152
+ 0x4c4000004c5,
1153
+ 0x4c6000004c7,
1154
+ 0x4c8000004c9,
1155
+ 0x4ca000004cb,
1156
+ 0x4cc000004cd,
1157
+ 0x4ce000004d0,
1158
+ 0x4d1000004d2,
1159
+ 0x4d3000004d4,
1160
+ 0x4d5000004d6,
1161
+ 0x4d7000004d8,
1162
+ 0x4d9000004da,
1163
+ 0x4db000004dc,
1164
+ 0x4dd000004de,
1165
+ 0x4df000004e0,
1166
+ 0x4e1000004e2,
1167
+ 0x4e3000004e4,
1168
+ 0x4e5000004e6,
1169
+ 0x4e7000004e8,
1170
+ 0x4e9000004ea,
1171
+ 0x4eb000004ec,
1172
+ 0x4ed000004ee,
1173
+ 0x4ef000004f0,
1174
+ 0x4f1000004f2,
1175
+ 0x4f3000004f4,
1176
+ 0x4f5000004f6,
1177
+ 0x4f7000004f8,
1178
+ 0x4f9000004fa,
1179
+ 0x4fb000004fc,
1180
+ 0x4fd000004fe,
1181
+ 0x4ff00000500,
1182
+ 0x50100000502,
1183
+ 0x50300000504,
1184
+ 0x50500000506,
1185
+ 0x50700000508,
1186
+ 0x5090000050a,
1187
+ 0x50b0000050c,
1188
+ 0x50d0000050e,
1189
+ 0x50f00000510,
1190
+ 0x51100000512,
1191
+ 0x51300000514,
1192
+ 0x51500000516,
1193
+ 0x51700000518,
1194
+ 0x5190000051a,
1195
+ 0x51b0000051c,
1196
+ 0x51d0000051e,
1197
+ 0x51f00000520,
1198
+ 0x52100000522,
1199
+ 0x52300000524,
1200
+ 0x52500000526,
1201
+ 0x52700000528,
1202
+ 0x5290000052a,
1203
+ 0x52b0000052c,
1204
+ 0x52d0000052e,
1205
+ 0x52f00000530,
1206
+ 0x5590000055a,
1207
+ 0x56000000587,
1208
+ 0x58800000589,
1209
+ 0x591000005be,
1210
+ 0x5bf000005c0,
1211
+ 0x5c1000005c3,
1212
+ 0x5c4000005c6,
1213
+ 0x5c7000005c8,
1214
+ 0x5d0000005eb,
1215
+ 0x5ef000005f3,
1216
+ 0x6100000061b,
1217
+ 0x62000000640,
1218
+ 0x64100000660,
1219
+ 0x66e00000675,
1220
+ 0x679000006d4,
1221
+ 0x6d5000006dd,
1222
+ 0x6df000006e9,
1223
+ 0x6ea000006f0,
1224
+ 0x6fa00000700,
1225
+ 0x7100000074b,
1226
+ 0x74d000007b2,
1227
+ 0x7c0000007f6,
1228
+ 0x7fd000007fe,
1229
+ 0x8000000082e,
1230
+ 0x8400000085c,
1231
+ 0x8600000086b,
1232
+ 0x87000000888,
1233
+ 0x8890000088f,
1234
+ 0x898000008e2,
1235
+ 0x8e300000958,
1236
+ 0x96000000964,
1237
+ 0x96600000970,
1238
+ 0x97100000984,
1239
+ 0x9850000098d,
1240
+ 0x98f00000991,
1241
+ 0x993000009a9,
1242
+ 0x9aa000009b1,
1243
+ 0x9b2000009b3,
1244
+ 0x9b6000009ba,
1245
+ 0x9bc000009c5,
1246
+ 0x9c7000009c9,
1247
+ 0x9cb000009cf,
1248
+ 0x9d7000009d8,
1249
+ 0x9e0000009e4,
1250
+ 0x9e6000009f2,
1251
+ 0x9fc000009fd,
1252
+ 0x9fe000009ff,
1253
+ 0xa0100000a04,
1254
+ 0xa0500000a0b,
1255
+ 0xa0f00000a11,
1256
+ 0xa1300000a29,
1257
+ 0xa2a00000a31,
1258
+ 0xa3200000a33,
1259
+ 0xa3500000a36,
1260
+ 0xa3800000a3a,
1261
+ 0xa3c00000a3d,
1262
+ 0xa3e00000a43,
1263
+ 0xa4700000a49,
1264
+ 0xa4b00000a4e,
1265
+ 0xa5100000a52,
1266
+ 0xa5c00000a5d,
1267
+ 0xa6600000a76,
1268
+ 0xa8100000a84,
1269
+ 0xa8500000a8e,
1270
+ 0xa8f00000a92,
1271
+ 0xa9300000aa9,
1272
+ 0xaaa00000ab1,
1273
+ 0xab200000ab4,
1274
+ 0xab500000aba,
1275
+ 0xabc00000ac6,
1276
+ 0xac700000aca,
1277
+ 0xacb00000ace,
1278
+ 0xad000000ad1,
1279
+ 0xae000000ae4,
1280
+ 0xae600000af0,
1281
+ 0xaf900000b00,
1282
+ 0xb0100000b04,
1283
+ 0xb0500000b0d,
1284
+ 0xb0f00000b11,
1285
+ 0xb1300000b29,
1286
+ 0xb2a00000b31,
1287
+ 0xb3200000b34,
1288
+ 0xb3500000b3a,
1289
+ 0xb3c00000b45,
1290
+ 0xb4700000b49,
1291
+ 0xb4b00000b4e,
1292
+ 0xb5500000b58,
1293
+ 0xb5f00000b64,
1294
+ 0xb6600000b70,
1295
+ 0xb7100000b72,
1296
+ 0xb8200000b84,
1297
+ 0xb8500000b8b,
1298
+ 0xb8e00000b91,
1299
+ 0xb9200000b96,
1300
+ 0xb9900000b9b,
1301
+ 0xb9c00000b9d,
1302
+ 0xb9e00000ba0,
1303
+ 0xba300000ba5,
1304
+ 0xba800000bab,
1305
+ 0xbae00000bba,
1306
+ 0xbbe00000bc3,
1307
+ 0xbc600000bc9,
1308
+ 0xbca00000bce,
1309
+ 0xbd000000bd1,
1310
+ 0xbd700000bd8,
1311
+ 0xbe600000bf0,
1312
+ 0xc0000000c0d,
1313
+ 0xc0e00000c11,
1314
+ 0xc1200000c29,
1315
+ 0xc2a00000c3a,
1316
+ 0xc3c00000c45,
1317
+ 0xc4600000c49,
1318
+ 0xc4a00000c4e,
1319
+ 0xc5500000c57,
1320
+ 0xc5800000c5b,
1321
+ 0xc5d00000c5e,
1322
+ 0xc6000000c64,
1323
+ 0xc6600000c70,
1324
+ 0xc8000000c84,
1325
+ 0xc8500000c8d,
1326
+ 0xc8e00000c91,
1327
+ 0xc9200000ca9,
1328
+ 0xcaa00000cb4,
1329
+ 0xcb500000cba,
1330
+ 0xcbc00000cc5,
1331
+ 0xcc600000cc9,
1332
+ 0xcca00000cce,
1333
+ 0xcd500000cd7,
1334
+ 0xcdd00000cdf,
1335
+ 0xce000000ce4,
1336
+ 0xce600000cf0,
1337
+ 0xcf100000cf4,
1338
+ 0xd0000000d0d,
1339
+ 0xd0e00000d11,
1340
+ 0xd1200000d45,
1341
+ 0xd4600000d49,
1342
+ 0xd4a00000d4f,
1343
+ 0xd5400000d58,
1344
+ 0xd5f00000d64,
1345
+ 0xd6600000d70,
1346
+ 0xd7a00000d80,
1347
+ 0xd8100000d84,
1348
+ 0xd8500000d97,
1349
+ 0xd9a00000db2,
1350
+ 0xdb300000dbc,
1351
+ 0xdbd00000dbe,
1352
+ 0xdc000000dc7,
1353
+ 0xdca00000dcb,
1354
+ 0xdcf00000dd5,
1355
+ 0xdd600000dd7,
1356
+ 0xdd800000de0,
1357
+ 0xde600000df0,
1358
+ 0xdf200000df4,
1359
+ 0xe0100000e33,
1360
+ 0xe3400000e3b,
1361
+ 0xe4000000e4f,
1362
+ 0xe5000000e5a,
1363
+ 0xe8100000e83,
1364
+ 0xe8400000e85,
1365
+ 0xe8600000e8b,
1366
+ 0xe8c00000ea4,
1367
+ 0xea500000ea6,
1368
+ 0xea700000eb3,
1369
+ 0xeb400000ebe,
1370
+ 0xec000000ec5,
1371
+ 0xec600000ec7,
1372
+ 0xec800000ecf,
1373
+ 0xed000000eda,
1374
+ 0xede00000ee0,
1375
+ 0xf0000000f01,
1376
+ 0xf0b00000f0c,
1377
+ 0xf1800000f1a,
1378
+ 0xf2000000f2a,
1379
+ 0xf3500000f36,
1380
+ 0xf3700000f38,
1381
+ 0xf3900000f3a,
1382
+ 0xf3e00000f43,
1383
+ 0xf4400000f48,
1384
+ 0xf4900000f4d,
1385
+ 0xf4e00000f52,
1386
+ 0xf5300000f57,
1387
+ 0xf5800000f5c,
1388
+ 0xf5d00000f69,
1389
+ 0xf6a00000f6d,
1390
+ 0xf7100000f73,
1391
+ 0xf7400000f75,
1392
+ 0xf7a00000f81,
1393
+ 0xf8200000f85,
1394
+ 0xf8600000f93,
1395
+ 0xf9400000f98,
1396
+ 0xf9900000f9d,
1397
+ 0xf9e00000fa2,
1398
+ 0xfa300000fa7,
1399
+ 0xfa800000fac,
1400
+ 0xfad00000fb9,
1401
+ 0xfba00000fbd,
1402
+ 0xfc600000fc7,
1403
+ 0x10000000104a,
1404
+ 0x10500000109e,
1405
+ 0x10d0000010fb,
1406
+ 0x10fd00001100,
1407
+ 0x120000001249,
1408
+ 0x124a0000124e,
1409
+ 0x125000001257,
1410
+ 0x125800001259,
1411
+ 0x125a0000125e,
1412
+ 0x126000001289,
1413
+ 0x128a0000128e,
1414
+ 0x1290000012b1,
1415
+ 0x12b2000012b6,
1416
+ 0x12b8000012bf,
1417
+ 0x12c0000012c1,
1418
+ 0x12c2000012c6,
1419
+ 0x12c8000012d7,
1420
+ 0x12d800001311,
1421
+ 0x131200001316,
1422
+ 0x13180000135b,
1423
+ 0x135d00001360,
1424
+ 0x138000001390,
1425
+ 0x13a0000013f6,
1426
+ 0x14010000166d,
1427
+ 0x166f00001680,
1428
+ 0x16810000169b,
1429
+ 0x16a0000016eb,
1430
+ 0x16f1000016f9,
1431
+ 0x170000001716,
1432
+ 0x171f00001735,
1433
+ 0x174000001754,
1434
+ 0x17600000176d,
1435
+ 0x176e00001771,
1436
+ 0x177200001774,
1437
+ 0x1780000017b4,
1438
+ 0x17b6000017d4,
1439
+ 0x17d7000017d8,
1440
+ 0x17dc000017de,
1441
+ 0x17e0000017ea,
1442
+ 0x18100000181a,
1443
+ 0x182000001879,
1444
+ 0x1880000018ab,
1445
+ 0x18b0000018f6,
1446
+ 0x19000000191f,
1447
+ 0x19200000192c,
1448
+ 0x19300000193c,
1449
+ 0x19460000196e,
1450
+ 0x197000001975,
1451
+ 0x1980000019ac,
1452
+ 0x19b0000019ca,
1453
+ 0x19d0000019da,
1454
+ 0x1a0000001a1c,
1455
+ 0x1a2000001a5f,
1456
+ 0x1a6000001a7d,
1457
+ 0x1a7f00001a8a,
1458
+ 0x1a9000001a9a,
1459
+ 0x1aa700001aa8,
1460
+ 0x1ab000001abe,
1461
+ 0x1abf00001acf,
1462
+ 0x1b0000001b4d,
1463
+ 0x1b5000001b5a,
1464
+ 0x1b6b00001b74,
1465
+ 0x1b8000001bf4,
1466
+ 0x1c0000001c38,
1467
+ 0x1c4000001c4a,
1468
+ 0x1c4d00001c7e,
1469
+ 0x1cd000001cd3,
1470
+ 0x1cd400001cfb,
1471
+ 0x1d0000001d2c,
1472
+ 0x1d2f00001d30,
1473
+ 0x1d3b00001d3c,
1474
+ 0x1d4e00001d4f,
1475
+ 0x1d6b00001d78,
1476
+ 0x1d7900001d9b,
1477
+ 0x1dc000001e00,
1478
+ 0x1e0100001e02,
1479
+ 0x1e0300001e04,
1480
+ 0x1e0500001e06,
1481
+ 0x1e0700001e08,
1482
+ 0x1e0900001e0a,
1483
+ 0x1e0b00001e0c,
1484
+ 0x1e0d00001e0e,
1485
+ 0x1e0f00001e10,
1486
+ 0x1e1100001e12,
1487
+ 0x1e1300001e14,
1488
+ 0x1e1500001e16,
1489
+ 0x1e1700001e18,
1490
+ 0x1e1900001e1a,
1491
+ 0x1e1b00001e1c,
1492
+ 0x1e1d00001e1e,
1493
+ 0x1e1f00001e20,
1494
+ 0x1e2100001e22,
1495
+ 0x1e2300001e24,
1496
+ 0x1e2500001e26,
1497
+ 0x1e2700001e28,
1498
+ 0x1e2900001e2a,
1499
+ 0x1e2b00001e2c,
1500
+ 0x1e2d00001e2e,
1501
+ 0x1e2f00001e30,
1502
+ 0x1e3100001e32,
1503
+ 0x1e3300001e34,
1504
+ 0x1e3500001e36,
1505
+ 0x1e3700001e38,
1506
+ 0x1e3900001e3a,
1507
+ 0x1e3b00001e3c,
1508
+ 0x1e3d00001e3e,
1509
+ 0x1e3f00001e40,
1510
+ 0x1e4100001e42,
1511
+ 0x1e4300001e44,
1512
+ 0x1e4500001e46,
1513
+ 0x1e4700001e48,
1514
+ 0x1e4900001e4a,
1515
+ 0x1e4b00001e4c,
1516
+ 0x1e4d00001e4e,
1517
+ 0x1e4f00001e50,
1518
+ 0x1e5100001e52,
1519
+ 0x1e5300001e54,
1520
+ 0x1e5500001e56,
1521
+ 0x1e5700001e58,
1522
+ 0x1e5900001e5a,
1523
+ 0x1e5b00001e5c,
1524
+ 0x1e5d00001e5e,
1525
+ 0x1e5f00001e60,
1526
+ 0x1e6100001e62,
1527
+ 0x1e6300001e64,
1528
+ 0x1e6500001e66,
1529
+ 0x1e6700001e68,
1530
+ 0x1e6900001e6a,
1531
+ 0x1e6b00001e6c,
1532
+ 0x1e6d00001e6e,
1533
+ 0x1e6f00001e70,
1534
+ 0x1e7100001e72,
1535
+ 0x1e7300001e74,
1536
+ 0x1e7500001e76,
1537
+ 0x1e7700001e78,
1538
+ 0x1e7900001e7a,
1539
+ 0x1e7b00001e7c,
1540
+ 0x1e7d00001e7e,
1541
+ 0x1e7f00001e80,
1542
+ 0x1e8100001e82,
1543
+ 0x1e8300001e84,
1544
+ 0x1e8500001e86,
1545
+ 0x1e8700001e88,
1546
+ 0x1e8900001e8a,
1547
+ 0x1e8b00001e8c,
1548
+ 0x1e8d00001e8e,
1549
+ 0x1e8f00001e90,
1550
+ 0x1e9100001e92,
1551
+ 0x1e9300001e94,
1552
+ 0x1e9500001e9a,
1553
+ 0x1e9c00001e9e,
1554
+ 0x1e9f00001ea0,
1555
+ 0x1ea100001ea2,
1556
+ 0x1ea300001ea4,
1557
+ 0x1ea500001ea6,
1558
+ 0x1ea700001ea8,
1559
+ 0x1ea900001eaa,
1560
+ 0x1eab00001eac,
1561
+ 0x1ead00001eae,
1562
+ 0x1eaf00001eb0,
1563
+ 0x1eb100001eb2,
1564
+ 0x1eb300001eb4,
1565
+ 0x1eb500001eb6,
1566
+ 0x1eb700001eb8,
1567
+ 0x1eb900001eba,
1568
+ 0x1ebb00001ebc,
1569
+ 0x1ebd00001ebe,
1570
+ 0x1ebf00001ec0,
1571
+ 0x1ec100001ec2,
1572
+ 0x1ec300001ec4,
1573
+ 0x1ec500001ec6,
1574
+ 0x1ec700001ec8,
1575
+ 0x1ec900001eca,
1576
+ 0x1ecb00001ecc,
1577
+ 0x1ecd00001ece,
1578
+ 0x1ecf00001ed0,
1579
+ 0x1ed100001ed2,
1580
+ 0x1ed300001ed4,
1581
+ 0x1ed500001ed6,
1582
+ 0x1ed700001ed8,
1583
+ 0x1ed900001eda,
1584
+ 0x1edb00001edc,
1585
+ 0x1edd00001ede,
1586
+ 0x1edf00001ee0,
1587
+ 0x1ee100001ee2,
1588
+ 0x1ee300001ee4,
1589
+ 0x1ee500001ee6,
1590
+ 0x1ee700001ee8,
1591
+ 0x1ee900001eea,
1592
+ 0x1eeb00001eec,
1593
+ 0x1eed00001eee,
1594
+ 0x1eef00001ef0,
1595
+ 0x1ef100001ef2,
1596
+ 0x1ef300001ef4,
1597
+ 0x1ef500001ef6,
1598
+ 0x1ef700001ef8,
1599
+ 0x1ef900001efa,
1600
+ 0x1efb00001efc,
1601
+ 0x1efd00001efe,
1602
+ 0x1eff00001f08,
1603
+ 0x1f1000001f16,
1604
+ 0x1f2000001f28,
1605
+ 0x1f3000001f38,
1606
+ 0x1f4000001f46,
1607
+ 0x1f5000001f58,
1608
+ 0x1f6000001f68,
1609
+ 0x1f7000001f71,
1610
+ 0x1f7200001f73,
1611
+ 0x1f7400001f75,
1612
+ 0x1f7600001f77,
1613
+ 0x1f7800001f79,
1614
+ 0x1f7a00001f7b,
1615
+ 0x1f7c00001f7d,
1616
+ 0x1fb000001fb2,
1617
+ 0x1fb600001fb7,
1618
+ 0x1fc600001fc7,
1619
+ 0x1fd000001fd3,
1620
+ 0x1fd600001fd8,
1621
+ 0x1fe000001fe3,
1622
+ 0x1fe400001fe8,
1623
+ 0x1ff600001ff7,
1624
+ 0x214e0000214f,
1625
+ 0x218400002185,
1626
+ 0x2c3000002c60,
1627
+ 0x2c6100002c62,
1628
+ 0x2c6500002c67,
1629
+ 0x2c6800002c69,
1630
+ 0x2c6a00002c6b,
1631
+ 0x2c6c00002c6d,
1632
+ 0x2c7100002c72,
1633
+ 0x2c7300002c75,
1634
+ 0x2c7600002c7c,
1635
+ 0x2c8100002c82,
1636
+ 0x2c8300002c84,
1637
+ 0x2c8500002c86,
1638
+ 0x2c8700002c88,
1639
+ 0x2c8900002c8a,
1640
+ 0x2c8b00002c8c,
1641
+ 0x2c8d00002c8e,
1642
+ 0x2c8f00002c90,
1643
+ 0x2c9100002c92,
1644
+ 0x2c9300002c94,
1645
+ 0x2c9500002c96,
1646
+ 0x2c9700002c98,
1647
+ 0x2c9900002c9a,
1648
+ 0x2c9b00002c9c,
1649
+ 0x2c9d00002c9e,
1650
+ 0x2c9f00002ca0,
1651
+ 0x2ca100002ca2,
1652
+ 0x2ca300002ca4,
1653
+ 0x2ca500002ca6,
1654
+ 0x2ca700002ca8,
1655
+ 0x2ca900002caa,
1656
+ 0x2cab00002cac,
1657
+ 0x2cad00002cae,
1658
+ 0x2caf00002cb0,
1659
+ 0x2cb100002cb2,
1660
+ 0x2cb300002cb4,
1661
+ 0x2cb500002cb6,
1662
+ 0x2cb700002cb8,
1663
+ 0x2cb900002cba,
1664
+ 0x2cbb00002cbc,
1665
+ 0x2cbd00002cbe,
1666
+ 0x2cbf00002cc0,
1667
+ 0x2cc100002cc2,
1668
+ 0x2cc300002cc4,
1669
+ 0x2cc500002cc6,
1670
+ 0x2cc700002cc8,
1671
+ 0x2cc900002cca,
1672
+ 0x2ccb00002ccc,
1673
+ 0x2ccd00002cce,
1674
+ 0x2ccf00002cd0,
1675
+ 0x2cd100002cd2,
1676
+ 0x2cd300002cd4,
1677
+ 0x2cd500002cd6,
1678
+ 0x2cd700002cd8,
1679
+ 0x2cd900002cda,
1680
+ 0x2cdb00002cdc,
1681
+ 0x2cdd00002cde,
1682
+ 0x2cdf00002ce0,
1683
+ 0x2ce100002ce2,
1684
+ 0x2ce300002ce5,
1685
+ 0x2cec00002ced,
1686
+ 0x2cee00002cf2,
1687
+ 0x2cf300002cf4,
1688
+ 0x2d0000002d26,
1689
+ 0x2d2700002d28,
1690
+ 0x2d2d00002d2e,
1691
+ 0x2d3000002d68,
1692
+ 0x2d7f00002d97,
1693
+ 0x2da000002da7,
1694
+ 0x2da800002daf,
1695
+ 0x2db000002db7,
1696
+ 0x2db800002dbf,
1697
+ 0x2dc000002dc7,
1698
+ 0x2dc800002dcf,
1699
+ 0x2dd000002dd7,
1700
+ 0x2dd800002ddf,
1701
+ 0x2de000002e00,
1702
+ 0x2e2f00002e30,
1703
+ 0x300500003008,
1704
+ 0x302a0000302e,
1705
+ 0x303c0000303d,
1706
+ 0x304100003097,
1707
+ 0x30990000309b,
1708
+ 0x309d0000309f,
1709
+ 0x30a1000030fb,
1710
+ 0x30fc000030ff,
1711
+ 0x310500003130,
1712
+ 0x31a0000031c0,
1713
+ 0x31f000003200,
1714
+ 0x340000004dc0,
1715
+ 0x4e000000a48d,
1716
+ 0xa4d00000a4fe,
1717
+ 0xa5000000a60d,
1718
+ 0xa6100000a62c,
1719
+ 0xa6410000a642,
1720
+ 0xa6430000a644,
1721
+ 0xa6450000a646,
1722
+ 0xa6470000a648,
1723
+ 0xa6490000a64a,
1724
+ 0xa64b0000a64c,
1725
+ 0xa64d0000a64e,
1726
+ 0xa64f0000a650,
1727
+ 0xa6510000a652,
1728
+ 0xa6530000a654,
1729
+ 0xa6550000a656,
1730
+ 0xa6570000a658,
1731
+ 0xa6590000a65a,
1732
+ 0xa65b0000a65c,
1733
+ 0xa65d0000a65e,
1734
+ 0xa65f0000a660,
1735
+ 0xa6610000a662,
1736
+ 0xa6630000a664,
1737
+ 0xa6650000a666,
1738
+ 0xa6670000a668,
1739
+ 0xa6690000a66a,
1740
+ 0xa66b0000a66c,
1741
+ 0xa66d0000a670,
1742
+ 0xa6740000a67e,
1743
+ 0xa67f0000a680,
1744
+ 0xa6810000a682,
1745
+ 0xa6830000a684,
1746
+ 0xa6850000a686,
1747
+ 0xa6870000a688,
1748
+ 0xa6890000a68a,
1749
+ 0xa68b0000a68c,
1750
+ 0xa68d0000a68e,
1751
+ 0xa68f0000a690,
1752
+ 0xa6910000a692,
1753
+ 0xa6930000a694,
1754
+ 0xa6950000a696,
1755
+ 0xa6970000a698,
1756
+ 0xa6990000a69a,
1757
+ 0xa69b0000a69c,
1758
+ 0xa69e0000a6e6,
1759
+ 0xa6f00000a6f2,
1760
+ 0xa7170000a720,
1761
+ 0xa7230000a724,
1762
+ 0xa7250000a726,
1763
+ 0xa7270000a728,
1764
+ 0xa7290000a72a,
1765
+ 0xa72b0000a72c,
1766
+ 0xa72d0000a72e,
1767
+ 0xa72f0000a732,
1768
+ 0xa7330000a734,
1769
+ 0xa7350000a736,
1770
+ 0xa7370000a738,
1771
+ 0xa7390000a73a,
1772
+ 0xa73b0000a73c,
1773
+ 0xa73d0000a73e,
1774
+ 0xa73f0000a740,
1775
+ 0xa7410000a742,
1776
+ 0xa7430000a744,
1777
+ 0xa7450000a746,
1778
+ 0xa7470000a748,
1779
+ 0xa7490000a74a,
1780
+ 0xa74b0000a74c,
1781
+ 0xa74d0000a74e,
1782
+ 0xa74f0000a750,
1783
+ 0xa7510000a752,
1784
+ 0xa7530000a754,
1785
+ 0xa7550000a756,
1786
+ 0xa7570000a758,
1787
+ 0xa7590000a75a,
1788
+ 0xa75b0000a75c,
1789
+ 0xa75d0000a75e,
1790
+ 0xa75f0000a760,
1791
+ 0xa7610000a762,
1792
+ 0xa7630000a764,
1793
+ 0xa7650000a766,
1794
+ 0xa7670000a768,
1795
+ 0xa7690000a76a,
1796
+ 0xa76b0000a76c,
1797
+ 0xa76d0000a76e,
1798
+ 0xa76f0000a770,
1799
+ 0xa7710000a779,
1800
+ 0xa77a0000a77b,
1801
+ 0xa77c0000a77d,
1802
+ 0xa77f0000a780,
1803
+ 0xa7810000a782,
1804
+ 0xa7830000a784,
1805
+ 0xa7850000a786,
1806
+ 0xa7870000a789,
1807
+ 0xa78c0000a78d,
1808
+ 0xa78e0000a790,
1809
+ 0xa7910000a792,
1810
+ 0xa7930000a796,
1811
+ 0xa7970000a798,
1812
+ 0xa7990000a79a,
1813
+ 0xa79b0000a79c,
1814
+ 0xa79d0000a79e,
1815
+ 0xa79f0000a7a0,
1816
+ 0xa7a10000a7a2,
1817
+ 0xa7a30000a7a4,
1818
+ 0xa7a50000a7a6,
1819
+ 0xa7a70000a7a8,
1820
+ 0xa7a90000a7aa,
1821
+ 0xa7af0000a7b0,
1822
+ 0xa7b50000a7b6,
1823
+ 0xa7b70000a7b8,
1824
+ 0xa7b90000a7ba,
1825
+ 0xa7bb0000a7bc,
1826
+ 0xa7bd0000a7be,
1827
+ 0xa7bf0000a7c0,
1828
+ 0xa7c10000a7c2,
1829
+ 0xa7c30000a7c4,
1830
+ 0xa7c80000a7c9,
1831
+ 0xa7ca0000a7cb,
1832
+ 0xa7d10000a7d2,
1833
+ 0xa7d30000a7d4,
1834
+ 0xa7d50000a7d6,
1835
+ 0xa7d70000a7d8,
1836
+ 0xa7d90000a7da,
1837
+ 0xa7f20000a7f5,
1838
+ 0xa7f60000a7f8,
1839
+ 0xa7fa0000a828,
1840
+ 0xa82c0000a82d,
1841
+ 0xa8400000a874,
1842
+ 0xa8800000a8c6,
1843
+ 0xa8d00000a8da,
1844
+ 0xa8e00000a8f8,
1845
+ 0xa8fb0000a8fc,
1846
+ 0xa8fd0000a92e,
1847
+ 0xa9300000a954,
1848
+ 0xa9800000a9c1,
1849
+ 0xa9cf0000a9da,
1850
+ 0xa9e00000a9ff,
1851
+ 0xaa000000aa37,
1852
+ 0xaa400000aa4e,
1853
+ 0xaa500000aa5a,
1854
+ 0xaa600000aa77,
1855
+ 0xaa7a0000aac3,
1856
+ 0xaadb0000aade,
1857
+ 0xaae00000aaf0,
1858
+ 0xaaf20000aaf7,
1859
+ 0xab010000ab07,
1860
+ 0xab090000ab0f,
1861
+ 0xab110000ab17,
1862
+ 0xab200000ab27,
1863
+ 0xab280000ab2f,
1864
+ 0xab300000ab5b,
1865
+ 0xab600000ab69,
1866
+ 0xabc00000abeb,
1867
+ 0xabec0000abee,
1868
+ 0xabf00000abfa,
1869
+ 0xac000000d7a4,
1870
+ 0xfa0e0000fa10,
1871
+ 0xfa110000fa12,
1872
+ 0xfa130000fa15,
1873
+ 0xfa1f0000fa20,
1874
+ 0xfa210000fa22,
1875
+ 0xfa230000fa25,
1876
+ 0xfa270000fa2a,
1877
+ 0xfb1e0000fb1f,
1878
+ 0xfe200000fe30,
1879
+ 0xfe730000fe74,
1880
+ 0x100000001000c,
1881
+ 0x1000d00010027,
1882
+ 0x100280001003b,
1883
+ 0x1003c0001003e,
1884
+ 0x1003f0001004e,
1885
+ 0x100500001005e,
1886
+ 0x10080000100fb,
1887
+ 0x101fd000101fe,
1888
+ 0x102800001029d,
1889
+ 0x102a0000102d1,
1890
+ 0x102e0000102e1,
1891
+ 0x1030000010320,
1892
+ 0x1032d00010341,
1893
+ 0x103420001034a,
1894
+ 0x103500001037b,
1895
+ 0x103800001039e,
1896
+ 0x103a0000103c4,
1897
+ 0x103c8000103d0,
1898
+ 0x104280001049e,
1899
+ 0x104a0000104aa,
1900
+ 0x104d8000104fc,
1901
+ 0x1050000010528,
1902
+ 0x1053000010564,
1903
+ 0x10597000105a2,
1904
+ 0x105a3000105b2,
1905
+ 0x105b3000105ba,
1906
+ 0x105bb000105bd,
1907
+ 0x1060000010737,
1908
+ 0x1074000010756,
1909
+ 0x1076000010768,
1910
+ 0x1078000010786,
1911
+ 0x10787000107b1,
1912
+ 0x107b2000107bb,
1913
+ 0x1080000010806,
1914
+ 0x1080800010809,
1915
+ 0x1080a00010836,
1916
+ 0x1083700010839,
1917
+ 0x1083c0001083d,
1918
+ 0x1083f00010856,
1919
+ 0x1086000010877,
1920
+ 0x108800001089f,
1921
+ 0x108e0000108f3,
1922
+ 0x108f4000108f6,
1923
+ 0x1090000010916,
1924
+ 0x109200001093a,
1925
+ 0x10980000109b8,
1926
+ 0x109be000109c0,
1927
+ 0x10a0000010a04,
1928
+ 0x10a0500010a07,
1929
+ 0x10a0c00010a14,
1930
+ 0x10a1500010a18,
1931
+ 0x10a1900010a36,
1932
+ 0x10a3800010a3b,
1933
+ 0x10a3f00010a40,
1934
+ 0x10a6000010a7d,
1935
+ 0x10a8000010a9d,
1936
+ 0x10ac000010ac8,
1937
+ 0x10ac900010ae7,
1938
+ 0x10b0000010b36,
1939
+ 0x10b4000010b56,
1940
+ 0x10b6000010b73,
1941
+ 0x10b8000010b92,
1942
+ 0x10c0000010c49,
1943
+ 0x10cc000010cf3,
1944
+ 0x10d0000010d28,
1945
+ 0x10d3000010d3a,
1946
+ 0x10e8000010eaa,
1947
+ 0x10eab00010ead,
1948
+ 0x10eb000010eb2,
1949
+ 0x10efd00010f1d,
1950
+ 0x10f2700010f28,
1951
+ 0x10f3000010f51,
1952
+ 0x10f7000010f86,
1953
+ 0x10fb000010fc5,
1954
+ 0x10fe000010ff7,
1955
+ 0x1100000011047,
1956
+ 0x1106600011076,
1957
+ 0x1107f000110bb,
1958
+ 0x110c2000110c3,
1959
+ 0x110d0000110e9,
1960
+ 0x110f0000110fa,
1961
+ 0x1110000011135,
1962
+ 0x1113600011140,
1963
+ 0x1114400011148,
1964
+ 0x1115000011174,
1965
+ 0x1117600011177,
1966
+ 0x11180000111c5,
1967
+ 0x111c9000111cd,
1968
+ 0x111ce000111db,
1969
+ 0x111dc000111dd,
1970
+ 0x1120000011212,
1971
+ 0x1121300011238,
1972
+ 0x1123e00011242,
1973
+ 0x1128000011287,
1974
+ 0x1128800011289,
1975
+ 0x1128a0001128e,
1976
+ 0x1128f0001129e,
1977
+ 0x1129f000112a9,
1978
+ 0x112b0000112eb,
1979
+ 0x112f0000112fa,
1980
+ 0x1130000011304,
1981
+ 0x113050001130d,
1982
+ 0x1130f00011311,
1983
+ 0x1131300011329,
1984
+ 0x1132a00011331,
1985
+ 0x1133200011334,
1986
+ 0x113350001133a,
1987
+ 0x1133b00011345,
1988
+ 0x1134700011349,
1989
+ 0x1134b0001134e,
1990
+ 0x1135000011351,
1991
+ 0x1135700011358,
1992
+ 0x1135d00011364,
1993
+ 0x113660001136d,
1994
+ 0x1137000011375,
1995
+ 0x114000001144b,
1996
+ 0x114500001145a,
1997
+ 0x1145e00011462,
1998
+ 0x11480000114c6,
1999
+ 0x114c7000114c8,
2000
+ 0x114d0000114da,
2001
+ 0x11580000115b6,
2002
+ 0x115b8000115c1,
2003
+ 0x115d8000115de,
2004
+ 0x1160000011641,
2005
+ 0x1164400011645,
2006
+ 0x116500001165a,
2007
+ 0x11680000116b9,
2008
+ 0x116c0000116ca,
2009
+ 0x117000001171b,
2010
+ 0x1171d0001172c,
2011
+ 0x117300001173a,
2012
+ 0x1174000011747,
2013
+ 0x118000001183b,
2014
+ 0x118c0000118ea,
2015
+ 0x118ff00011907,
2016
+ 0x119090001190a,
2017
+ 0x1190c00011914,
2018
+ 0x1191500011917,
2019
+ 0x1191800011936,
2020
+ 0x1193700011939,
2021
+ 0x1193b00011944,
2022
+ 0x119500001195a,
2023
+ 0x119a0000119a8,
2024
+ 0x119aa000119d8,
2025
+ 0x119da000119e2,
2026
+ 0x119e3000119e5,
2027
+ 0x11a0000011a3f,
2028
+ 0x11a4700011a48,
2029
+ 0x11a5000011a9a,
2030
+ 0x11a9d00011a9e,
2031
+ 0x11ab000011af9,
2032
+ 0x11c0000011c09,
2033
+ 0x11c0a00011c37,
2034
+ 0x11c3800011c41,
2035
+ 0x11c5000011c5a,
2036
+ 0x11c7200011c90,
2037
+ 0x11c9200011ca8,
2038
+ 0x11ca900011cb7,
2039
+ 0x11d0000011d07,
2040
+ 0x11d0800011d0a,
2041
+ 0x11d0b00011d37,
2042
+ 0x11d3a00011d3b,
2043
+ 0x11d3c00011d3e,
2044
+ 0x11d3f00011d48,
2045
+ 0x11d5000011d5a,
2046
+ 0x11d6000011d66,
2047
+ 0x11d6700011d69,
2048
+ 0x11d6a00011d8f,
2049
+ 0x11d9000011d92,
2050
+ 0x11d9300011d99,
2051
+ 0x11da000011daa,
2052
+ 0x11ee000011ef7,
2053
+ 0x11f0000011f11,
2054
+ 0x11f1200011f3b,
2055
+ 0x11f3e00011f43,
2056
+ 0x11f5000011f5a,
2057
+ 0x11fb000011fb1,
2058
+ 0x120000001239a,
2059
+ 0x1248000012544,
2060
+ 0x12f9000012ff1,
2061
+ 0x1300000013430,
2062
+ 0x1344000013456,
2063
+ 0x1440000014647,
2064
+ 0x1680000016a39,
2065
+ 0x16a4000016a5f,
2066
+ 0x16a6000016a6a,
2067
+ 0x16a7000016abf,
2068
+ 0x16ac000016aca,
2069
+ 0x16ad000016aee,
2070
+ 0x16af000016af5,
2071
+ 0x16b0000016b37,
2072
+ 0x16b4000016b44,
2073
+ 0x16b5000016b5a,
2074
+ 0x16b6300016b78,
2075
+ 0x16b7d00016b90,
2076
+ 0x16e6000016e80,
2077
+ 0x16f0000016f4b,
2078
+ 0x16f4f00016f88,
2079
+ 0x16f8f00016fa0,
2080
+ 0x16fe000016fe2,
2081
+ 0x16fe300016fe5,
2082
+ 0x16ff000016ff2,
2083
+ 0x17000000187f8,
2084
+ 0x1880000018cd6,
2085
+ 0x18d0000018d09,
2086
+ 0x1aff00001aff4,
2087
+ 0x1aff50001affc,
2088
+ 0x1affd0001afff,
2089
+ 0x1b0000001b123,
2090
+ 0x1b1320001b133,
2091
+ 0x1b1500001b153,
2092
+ 0x1b1550001b156,
2093
+ 0x1b1640001b168,
2094
+ 0x1b1700001b2fc,
2095
+ 0x1bc000001bc6b,
2096
+ 0x1bc700001bc7d,
2097
+ 0x1bc800001bc89,
2098
+ 0x1bc900001bc9a,
2099
+ 0x1bc9d0001bc9f,
2100
+ 0x1cf000001cf2e,
2101
+ 0x1cf300001cf47,
2102
+ 0x1da000001da37,
2103
+ 0x1da3b0001da6d,
2104
+ 0x1da750001da76,
2105
+ 0x1da840001da85,
2106
+ 0x1da9b0001daa0,
2107
+ 0x1daa10001dab0,
2108
+ 0x1df000001df1f,
2109
+ 0x1df250001df2b,
2110
+ 0x1e0000001e007,
2111
+ 0x1e0080001e019,
2112
+ 0x1e01b0001e022,
2113
+ 0x1e0230001e025,
2114
+ 0x1e0260001e02b,
2115
+ 0x1e0300001e06e,
2116
+ 0x1e08f0001e090,
2117
+ 0x1e1000001e12d,
2118
+ 0x1e1300001e13e,
2119
+ 0x1e1400001e14a,
2120
+ 0x1e14e0001e14f,
2121
+ 0x1e2900001e2af,
2122
+ 0x1e2c00001e2fa,
2123
+ 0x1e4d00001e4fa,
2124
+ 0x1e7e00001e7e7,
2125
+ 0x1e7e80001e7ec,
2126
+ 0x1e7ed0001e7ef,
2127
+ 0x1e7f00001e7ff,
2128
+ 0x1e8000001e8c5,
2129
+ 0x1e8d00001e8d7,
2130
+ 0x1e9220001e94c,
2131
+ 0x1e9500001e95a,
2132
+ 0x200000002a6e0,
2133
+ 0x2a7000002b73a,
2134
+ 0x2b7400002b81e,
2135
+ 0x2b8200002cea2,
2136
+ 0x2ceb00002ebe1,
2137
+ 0x300000003134b,
2138
+ 0x31350000323b0,
2139
+ ),
2140
+ 'CONTEXTJ': (
2141
+ 0x200c0000200e,
2142
+ ),
2143
+ 'CONTEXTO': (
2144
+ 0xb7000000b8,
2145
+ 0x37500000376,
2146
+ 0x5f3000005f5,
2147
+ 0x6600000066a,
2148
+ 0x6f0000006fa,
2149
+ 0x30fb000030fc,
2150
+ ),
2151
+ }
.venv/lib/python3.11/site-packages/pip/_vendor/idna/intranges.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Given a list of integers, made up of (hopefully) a small number of long runs
3
+ of consecutive integers, compute a representation of the form
4
+ ((start1, end1), (start2, end2) ...). Then answer the question "was x present
5
+ in the original list?" in time O(log(# runs)).
6
+ """
7
+
8
+ import bisect
9
+ from typing import List, Tuple
10
+
11
+ def intranges_from_list(list_: List[int]) -> Tuple[int, ...]:
12
+ """Represent a list of integers as a sequence of ranges:
13
+ ((start_0, end_0), (start_1, end_1), ...), such that the original
14
+ integers are exactly those x such that start_i <= x < end_i for some i.
15
+
16
+ Ranges are encoded as single integers (start << 32 | end), not as tuples.
17
+ """
18
+
19
+ sorted_list = sorted(list_)
20
+ ranges = []
21
+ last_write = -1
22
+ for i in range(len(sorted_list)):
23
+ if i+1 < len(sorted_list):
24
+ if sorted_list[i] == sorted_list[i+1]-1:
25
+ continue
26
+ current_range = sorted_list[last_write+1:i+1]
27
+ ranges.append(_encode_range(current_range[0], current_range[-1] + 1))
28
+ last_write = i
29
+
30
+ return tuple(ranges)
31
+
32
+ def _encode_range(start: int, end: int) -> int:
33
+ return (start << 32) | end
34
+
35
+ def _decode_range(r: int) -> Tuple[int, int]:
36
+ return (r >> 32), (r & ((1 << 32) - 1))
37
+
38
+
39
+ def intranges_contain(int_: int, ranges: Tuple[int, ...]) -> bool:
40
+ """Determine if `int_` falls into one of the ranges in `ranges`."""
41
+ tuple_ = _encode_range(int_, 0)
42
+ pos = bisect.bisect_left(ranges, tuple_)
43
+ # we could be immediately ahead of a tuple (start, end)
44
+ # with start < int_ <= end
45
+ if pos > 0:
46
+ left, right = _decode_range(ranges[pos-1])
47
+ if left <= int_ < right:
48
+ return True
49
+ # or we could be immediately behind a tuple (int_, end)
50
+ if pos < len(ranges):
51
+ left, _ = _decode_range(ranges[pos])
52
+ if left == int_:
53
+ return True
54
+ return False
.venv/lib/python3.11/site-packages/pip/_vendor/idna/package_data.py ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ __version__ = '3.4'
2
+
.venv/lib/python3.11/site-packages/pip/_vendor/idna/py.typed ADDED
File without changes
.venv/lib/python3.11/site-packages/pip/_vendor/idna/uts46data.py ADDED
The diff for this file is too large to render. See raw diff
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (3.83 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-311.pyc ADDED
Binary file (774 Bytes). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-311.pyc ADDED
Binary file (30.3 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-311.pyc ADDED
Binary file (3.04 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-311.pyc ADDED
Binary file (3.5 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-311.pyc ADDED
Binary file (4.81 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-311.pyc ADDED
Binary file (42.3 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc ADDED
Binary file (1.72 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc ADDED
Binary file (3.73 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc ADDED
Binary file (5.02 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-311.pyc ADDED
Binary file (4.88 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-311.pyc ADDED
Binary file (12.8 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-311.pyc ADDED
Binary file (7.42 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-311.pyc ADDED
Binary file (7.46 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-311.pyc ADDED
Binary file (33.8 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-311.pyc ADDED
Binary file (15.7 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__init__.py ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters
3
+ ~~~~~~~~~~~~~~~~~~~
4
+
5
+ Pygments formatters.
6
+
7
+ :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+ import sys
13
+ import types
14
+ import fnmatch
15
+ from os.path import basename
16
+
17
+ from pip._vendor.pygments.formatters._mapping import FORMATTERS
18
+ from pip._vendor.pygments.plugin import find_plugin_formatters
19
+ from pip._vendor.pygments.util import ClassNotFound
20
+
21
+ __all__ = ['get_formatter_by_name', 'get_formatter_for_filename',
22
+ 'get_all_formatters', 'load_formatter_from_file'] + list(FORMATTERS)
23
+
24
+ _formatter_cache = {} # classes by name
25
+ _pattern_cache = {}
26
+
27
+
28
+ def _fn_matches(fn, glob):
29
+ """Return whether the supplied file name fn matches pattern filename."""
30
+ if glob not in _pattern_cache:
31
+ pattern = _pattern_cache[glob] = re.compile(fnmatch.translate(glob))
32
+ return pattern.match(fn)
33
+ return _pattern_cache[glob].match(fn)
34
+
35
+
36
+ def _load_formatters(module_name):
37
+ """Load a formatter (and all others in the module too)."""
38
+ mod = __import__(module_name, None, None, ['__all__'])
39
+ for formatter_name in mod.__all__:
40
+ cls = getattr(mod, formatter_name)
41
+ _formatter_cache[cls.name] = cls
42
+
43
+
44
+ def get_all_formatters():
45
+ """Return a generator for all formatter classes."""
46
+ # NB: this returns formatter classes, not info like get_all_lexers().
47
+ for info in FORMATTERS.values():
48
+ if info[1] not in _formatter_cache:
49
+ _load_formatters(info[0])
50
+ yield _formatter_cache[info[1]]
51
+ for _, formatter in find_plugin_formatters():
52
+ yield formatter
53
+
54
+
55
+ def find_formatter_class(alias):
56
+ """Lookup a formatter by alias.
57
+
58
+ Returns None if not found.
59
+ """
60
+ for module_name, name, aliases, _, _ in FORMATTERS.values():
61
+ if alias in aliases:
62
+ if name not in _formatter_cache:
63
+ _load_formatters(module_name)
64
+ return _formatter_cache[name]
65
+ for _, cls in find_plugin_formatters():
66
+ if alias in cls.aliases:
67
+ return cls
68
+
69
+
70
+ def get_formatter_by_name(_alias, **options):
71
+ """
72
+ Return an instance of a :class:`.Formatter` subclass that has `alias` in its
73
+ aliases list. The formatter is given the `options` at its instantiation.
74
+
75
+ Will raise :exc:`pygments.util.ClassNotFound` if no formatter with that
76
+ alias is found.
77
+ """
78
+ cls = find_formatter_class(_alias)
79
+ if cls is None:
80
+ raise ClassNotFound("no formatter found for name %r" % _alias)
81
+ return cls(**options)
82
+
83
+
84
+ def load_formatter_from_file(filename, formattername="CustomFormatter", **options):
85
+ """
86
+ Return a `Formatter` subclass instance loaded from the provided file, relative
87
+ to the current directory.
88
+
89
+ The file is expected to contain a Formatter class named ``formattername``
90
+ (by default, CustomFormatter). Users should be very careful with the input, because
91
+ this method is equivalent to running ``eval()`` on the input file. The formatter is
92
+ given the `options` at its instantiation.
93
+
94
+ :exc:`pygments.util.ClassNotFound` is raised if there are any errors loading
95
+ the formatter.
96
+
97
+ .. versionadded:: 2.2
98
+ """
99
+ try:
100
+ # This empty dict will contain the namespace for the exec'd file
101
+ custom_namespace = {}
102
+ with open(filename, 'rb') as f:
103
+ exec(f.read(), custom_namespace)
104
+ # Retrieve the class `formattername` from that namespace
105
+ if formattername not in custom_namespace:
106
+ raise ClassNotFound('no valid %s class found in %s' %
107
+ (formattername, filename))
108
+ formatter_class = custom_namespace[formattername]
109
+ # And finally instantiate it with the options
110
+ return formatter_class(**options)
111
+ except OSError as err:
112
+ raise ClassNotFound('cannot read %s: %s' % (filename, err))
113
+ except ClassNotFound:
114
+ raise
115
+ except Exception as err:
116
+ raise ClassNotFound('error when loading custom formatter: %s' % err)
117
+
118
+
119
+ def get_formatter_for_filename(fn, **options):
120
+ """
121
+ Return a :class:`.Formatter` subclass instance that has a filename pattern
122
+ matching `fn`. The formatter is given the `options` at its instantiation.
123
+
124
+ Will raise :exc:`pygments.util.ClassNotFound` if no formatter for that filename
125
+ is found.
126
+ """
127
+ fn = basename(fn)
128
+ for modname, name, _, filenames, _ in FORMATTERS.values():
129
+ for filename in filenames:
130
+ if _fn_matches(fn, filename):
131
+ if name not in _formatter_cache:
132
+ _load_formatters(modname)
133
+ return _formatter_cache[name](**options)
134
+ for cls in find_plugin_formatters():
135
+ for filename in cls.filenames:
136
+ if _fn_matches(fn, filename):
137
+ return cls(**options)
138
+ raise ClassNotFound("no formatter found for file name %r" % fn)
139
+
140
+
141
+ class _automodule(types.ModuleType):
142
+ """Automatically import formatters."""
143
+
144
+ def __getattr__(self, name):
145
+ info = FORMATTERS.get(name)
146
+ if info:
147
+ _load_formatters(info[0])
148
+ cls = _formatter_cache[info[1]]
149
+ setattr(self, name, cls)
150
+ return cls
151
+ raise AttributeError(name)
152
+
153
+
154
+ oldmod = sys.modules[__name__]
155
+ newmod = _automodule(__name__)
156
+ newmod.__dict__.update(oldmod.__dict__)
157
+ sys.modules[__name__] = newmod
158
+ del newmod.newmod, newmod.oldmod, newmod.sys, newmod.types
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (7.76 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-311.pyc ADDED
Binary file (4.22 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-311.pyc ADDED
Binary file (4.47 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-311.pyc ADDED
Binary file (7.85 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-311.pyc ADDED
Binary file (42.6 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-311.pyc ADDED
Binary file (28.6 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-311.pyc ADDED
Binary file (6.4 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-311.pyc ADDED
Binary file (21.8 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-311.pyc ADDED
Binary file (7.63 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-311.pyc ADDED
Binary file (3.17 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-311.pyc ADDED
Binary file (6.84 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-311.pyc ADDED
Binary file (9.66 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-311.pyc ADDED
Binary file (6.04 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-311.pyc ADDED
Binary file (16.4 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/_mapping.py ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Automatically generated by scripts/gen_mapfiles.py.
2
+ # DO NOT EDIT BY HAND; run `tox -e mapfiles` instead.
3
+
4
+ FORMATTERS = {
5
+ 'BBCodeFormatter': ('pygments.formatters.bbcode', 'BBCode', ('bbcode', 'bb'), (), 'Format tokens with BBcodes. These formatting codes are used by many bulletin boards, so you can highlight your sourcecode with pygments before posting it there.'),
6
+ 'BmpImageFormatter': ('pygments.formatters.img', 'img_bmp', ('bmp', 'bitmap'), ('*.bmp',), 'Create a bitmap image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'),
7
+ 'GifImageFormatter': ('pygments.formatters.img', 'img_gif', ('gif',), ('*.gif',), 'Create a GIF image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'),
8
+ 'GroffFormatter': ('pygments.formatters.groff', 'groff', ('groff', 'troff', 'roff'), (), 'Format tokens with groff escapes to change their color and font style.'),
9
+ 'HtmlFormatter': ('pygments.formatters.html', 'HTML', ('html',), ('*.html', '*.htm'), "Format tokens as HTML 4 ``<span>`` tags. By default, the content is enclosed in a ``<pre>`` tag, itself wrapped in a ``<div>`` tag (but see the `nowrap` option). The ``<div>``'s CSS class can be set by the `cssclass` option."),
10
+ 'IRCFormatter': ('pygments.formatters.irc', 'IRC', ('irc', 'IRC'), (), 'Format tokens with IRC color sequences'),
11
+ 'ImageFormatter': ('pygments.formatters.img', 'img', ('img', 'IMG', 'png'), ('*.png',), 'Create a PNG image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'),
12
+ 'JpgImageFormatter': ('pygments.formatters.img', 'img_jpg', ('jpg', 'jpeg'), ('*.jpg',), 'Create a JPEG image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'),
13
+ 'LatexFormatter': ('pygments.formatters.latex', 'LaTeX', ('latex', 'tex'), ('*.tex',), 'Format tokens as LaTeX code. This needs the `fancyvrb` and `color` standard packages.'),
14
+ 'NullFormatter': ('pygments.formatters.other', 'Text only', ('text', 'null'), ('*.txt',), 'Output the text unchanged without any formatting.'),
15
+ 'PangoMarkupFormatter': ('pygments.formatters.pangomarkup', 'Pango Markup', ('pango', 'pangomarkup'), (), 'Format tokens as Pango Markup code. It can then be rendered to an SVG.'),
16
+ 'RawTokenFormatter': ('pygments.formatters.other', 'Raw tokens', ('raw', 'tokens'), ('*.raw',), 'Format tokens as a raw representation for storing token streams.'),
17
+ 'RtfFormatter': ('pygments.formatters.rtf', 'RTF', ('rtf',), ('*.rtf',), 'Format tokens as RTF markup. This formatter automatically outputs full RTF documents with color information and other useful stuff. Perfect for Copy and Paste into Microsoft(R) Word(R) documents.'),
18
+ 'SvgFormatter': ('pygments.formatters.svg', 'SVG', ('svg',), ('*.svg',), 'Format tokens as an SVG graphics file. This formatter is still experimental. Each line of code is a ``<text>`` element with explicit ``x`` and ``y`` coordinates containing ``<tspan>`` elements with the individual token styles.'),
19
+ 'Terminal256Formatter': ('pygments.formatters.terminal256', 'Terminal256', ('terminal256', 'console256', '256'), (), 'Format tokens with ANSI color sequences, for output in a 256-color terminal or console. Like in `TerminalFormatter` color sequences are terminated at newlines, so that paging the output works correctly.'),
20
+ 'TerminalFormatter': ('pygments.formatters.terminal', 'Terminal', ('terminal', 'console'), (), 'Format tokens with ANSI color sequences, for output in a text console. Color sequences are terminated at newlines, so that paging the output works correctly.'),
21
+ 'TerminalTrueColorFormatter': ('pygments.formatters.terminal256', 'TerminalTrueColor', ('terminal16m', 'console16m', '16m'), (), 'Format tokens with ANSI color sequences, for output in a true-color terminal or console. Like in `TerminalFormatter` color sequences are terminated at newlines, so that paging the output works correctly.'),
22
+ 'TestcaseFormatter': ('pygments.formatters.other', 'Testcase', ('testcase',), (), 'Format tokens as appropriate for a new testcase.'),
23
+ }
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/html.py ADDED
@@ -0,0 +1,989 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters.html
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Formatter for HTML output.
6
+
7
+ :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import functools
12
+ import os
13
+ import sys
14
+ import os.path
15
+ from io import StringIO
16
+
17
+ from pip._vendor.pygments.formatter import Formatter
18
+ from pip._vendor.pygments.token import Token, Text, STANDARD_TYPES
19
+ from pip._vendor.pygments.util import get_bool_opt, get_int_opt, get_list_opt
20
+
21
+ try:
22
+ import ctags
23
+ except ImportError:
24
+ ctags = None
25
+
26
+ __all__ = ['HtmlFormatter']
27
+
28
+
29
+ _escape_html_table = {
30
+ ord('&'): '&amp;',
31
+ ord('<'): '&lt;',
32
+ ord('>'): '&gt;',
33
+ ord('"'): '&quot;',
34
+ ord("'"): '&#39;',
35
+ }
36
+
37
+
38
+ def escape_html(text, table=_escape_html_table):
39
+ """Escape &, <, > as well as single and double quotes for HTML."""
40
+ return text.translate(table)
41
+
42
+
43
+ def webify(color):
44
+ if color.startswith('calc') or color.startswith('var'):
45
+ return color
46
+ else:
47
+ return '#' + color
48
+
49
+
50
+ def _get_ttype_class(ttype):
51
+ fname = STANDARD_TYPES.get(ttype)
52
+ if fname:
53
+ return fname
54
+ aname = ''
55
+ while fname is None:
56
+ aname = '-' + ttype[-1] + aname
57
+ ttype = ttype.parent
58
+ fname = STANDARD_TYPES.get(ttype)
59
+ return fname + aname
60
+
61
+
62
+ CSSFILE_TEMPLATE = '''\
63
+ /*
64
+ generated by Pygments <https://pygments.org/>
65
+ Copyright 2006-2023 by the Pygments team.
66
+ Licensed under the BSD license, see LICENSE for details.
67
+ */
68
+ %(styledefs)s
69
+ '''
70
+
71
+ DOC_HEADER = '''\
72
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
73
+ "http://www.w3.org/TR/html4/strict.dtd">
74
+ <!--
75
+ generated by Pygments <https://pygments.org/>
76
+ Copyright 2006-2023 by the Pygments team.
77
+ Licensed under the BSD license, see LICENSE for details.
78
+ -->
79
+ <html>
80
+ <head>
81
+ <title>%(title)s</title>
82
+ <meta http-equiv="content-type" content="text/html; charset=%(encoding)s">
83
+ <style type="text/css">
84
+ ''' + CSSFILE_TEMPLATE + '''
85
+ </style>
86
+ </head>
87
+ <body>
88
+ <h2>%(title)s</h2>
89
+
90
+ '''
91
+
92
+ DOC_HEADER_EXTERNALCSS = '''\
93
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
94
+ "http://www.w3.org/TR/html4/strict.dtd">
95
+
96
+ <html>
97
+ <head>
98
+ <title>%(title)s</title>
99
+ <meta http-equiv="content-type" content="text/html; charset=%(encoding)s">
100
+ <link rel="stylesheet" href="%(cssfile)s" type="text/css">
101
+ </head>
102
+ <body>
103
+ <h2>%(title)s</h2>
104
+
105
+ '''
106
+
107
+ DOC_FOOTER = '''\
108
+ </body>
109
+ </html>
110
+ '''
111
+
112
+
113
+ class HtmlFormatter(Formatter):
114
+ r"""
115
+ Format tokens as HTML 4 ``<span>`` tags. By default, the content is enclosed
116
+ in a ``<pre>`` tag, itself wrapped in a ``<div>`` tag (but see the `nowrap` option).
117
+ The ``<div>``'s CSS class can be set by the `cssclass` option.
118
+
119
+ If the `linenos` option is set to ``"table"``, the ``<pre>`` is
120
+ additionally wrapped inside a ``<table>`` which has one row and two
121
+ cells: one containing the line numbers and one containing the code.
122
+ Example:
123
+
124
+ .. sourcecode:: html
125
+
126
+ <div class="highlight" >
127
+ <table><tr>
128
+ <td class="linenos" title="click to toggle"
129
+ onclick="with (this.firstChild.style)
130
+ { display = (display == '') ? 'none' : '' }">
131
+ <pre>1
132
+ 2</pre>
133
+ </td>
134
+ <td class="code">
135
+ <pre><span class="Ke">def </span><span class="NaFu">foo</span>(bar):
136
+ <span class="Ke">pass</span>
137
+ </pre>
138
+ </td>
139
+ </tr></table></div>
140
+
141
+ (whitespace added to improve clarity).
142
+
143
+ A list of lines can be specified using the `hl_lines` option to make these
144
+ lines highlighted (as of Pygments 0.11).
145
+
146
+ With the `full` option, a complete HTML 4 document is output, including
147
+ the style definitions inside a ``<style>`` tag, or in a separate file if
148
+ the `cssfile` option is given.
149
+
150
+ When `tagsfile` is set to the path of a ctags index file, it is used to
151
+ generate hyperlinks from names to their definition. You must enable
152
+ `lineanchors` and run ctags with the `-n` option for this to work. The
153
+ `python-ctags` module from PyPI must be installed to use this feature;
154
+ otherwise a `RuntimeError` will be raised.
155
+
156
+ The `get_style_defs(arg='')` method of a `HtmlFormatter` returns a string
157
+ containing CSS rules for the CSS classes used by the formatter. The
158
+ argument `arg` can be used to specify additional CSS selectors that
159
+ are prepended to the classes. A call `fmter.get_style_defs('td .code')`
160
+ would result in the following CSS classes:
161
+
162
+ .. sourcecode:: css
163
+
164
+ td .code .kw { font-weight: bold; color: #00FF00 }
165
+ td .code .cm { color: #999999 }
166
+ ...
167
+
168
+ If you have Pygments 0.6 or higher, you can also pass a list or tuple to the
169
+ `get_style_defs()` method to request multiple prefixes for the tokens:
170
+
171
+ .. sourcecode:: python
172
+
173
+ formatter.get_style_defs(['div.syntax pre', 'pre.syntax'])
174
+
175
+ The output would then look like this:
176
+
177
+ .. sourcecode:: css
178
+
179
+ div.syntax pre .kw,
180
+ pre.syntax .kw { font-weight: bold; color: #00FF00 }
181
+ div.syntax pre .cm,
182
+ pre.syntax .cm { color: #999999 }
183
+ ...
184
+
185
+ Additional options accepted:
186
+
187
+ `nowrap`
188
+ If set to ``True``, don't add a ``<pre>`` and a ``<div>`` tag
189
+ around the tokens. This disables most other options (default: ``False``).
190
+
191
+ `full`
192
+ Tells the formatter to output a "full" document, i.e. a complete
193
+ self-contained document (default: ``False``).
194
+
195
+ `title`
196
+ If `full` is true, the title that should be used to caption the
197
+ document (default: ``''``).
198
+
199
+ `style`
200
+ The style to use, can be a string or a Style subclass (default:
201
+ ``'default'``). This option has no effect if the `cssfile`
202
+ and `noclobber_cssfile` option are given and the file specified in
203
+ `cssfile` exists.
204
+
205
+ `noclasses`
206
+ If set to true, token ``<span>`` tags (as well as line number elements)
207
+ will not use CSS classes, but inline styles. This is not recommended
208
+ for larger pieces of code since it increases output size by quite a bit
209
+ (default: ``False``).
210
+
211
+ `classprefix`
212
+ Since the token types use relatively short class names, they may clash
213
+ with some of your own class names. In this case you can use the
214
+ `classprefix` option to give a string to prepend to all Pygments-generated
215
+ CSS class names for token types.
216
+ Note that this option also affects the output of `get_style_defs()`.
217
+
218
+ `cssclass`
219
+ CSS class for the wrapping ``<div>`` tag (default: ``'highlight'``).
220
+ If you set this option, the default selector for `get_style_defs()`
221
+ will be this class.
222
+
223
+ .. versionadded:: 0.9
224
+ If you select the ``'table'`` line numbers, the wrapping table will
225
+ have a CSS class of this string plus ``'table'``, the default is
226
+ accordingly ``'highlighttable'``.
227
+
228
+ `cssstyles`
229
+ Inline CSS styles for the wrapping ``<div>`` tag (default: ``''``).
230
+
231
+ `prestyles`
232
+ Inline CSS styles for the ``<pre>`` tag (default: ``''``).
233
+
234
+ .. versionadded:: 0.11
235
+
236
+ `cssfile`
237
+ If the `full` option is true and this option is given, it must be the
238
+ name of an external file. If the filename does not include an absolute
239
+ path, the file's path will be assumed to be relative to the main output
240
+ file's path, if the latter can be found. The stylesheet is then written
241
+ to this file instead of the HTML file.
242
+
243
+ .. versionadded:: 0.6
244
+
245
+ `noclobber_cssfile`
246
+ If `cssfile` is given and the specified file exists, the css file will
247
+ not be overwritten. This allows the use of the `full` option in
248
+ combination with a user specified css file. Default is ``False``.
249
+
250
+ .. versionadded:: 1.1
251
+
252
+ `linenos`
253
+ If set to ``'table'``, output line numbers as a table with two cells,
254
+ one containing the line numbers, the other the whole code. This is
255
+ copy-and-paste-friendly, but may cause alignment problems with some
256
+ browsers or fonts. If set to ``'inline'``, the line numbers will be
257
+ integrated in the ``<pre>`` tag that contains the code (that setting
258
+ is *new in Pygments 0.8*).
259
+
260
+ For compatibility with Pygments 0.7 and earlier, every true value
261
+ except ``'inline'`` means the same as ``'table'`` (in particular, that
262
+ means also ``True``).
263
+
264
+ The default value is ``False``, which means no line numbers at all.
265
+
266
+ **Note:** with the default ("table") line number mechanism, the line
267
+ numbers and code can have different line heights in Internet Explorer
268
+ unless you give the enclosing ``<pre>`` tags an explicit ``line-height``
269
+ CSS property (you get the default line spacing with ``line-height:
270
+ 125%``).
271
+
272
+ `hl_lines`
273
+ Specify a list of lines to be highlighted. The line numbers are always
274
+ relative to the input (i.e. the first line is line 1) and are
275
+ independent of `linenostart`.
276
+
277
+ .. versionadded:: 0.11
278
+
279
+ `linenostart`
280
+ The line number for the first line (default: ``1``).
281
+
282
+ `linenostep`
283
+ If set to a number n > 1, only every nth line number is printed.
284
+
285
+ `linenospecial`
286
+ If set to a number n > 0, every nth line number is given the CSS
287
+ class ``"special"`` (default: ``0``).
288
+
289
+ `nobackground`
290
+ If set to ``True``, the formatter won't output the background color
291
+ for the wrapping element (this automatically defaults to ``False``
292
+ when there is no wrapping element [eg: no argument for the
293
+ `get_syntax_defs` method given]) (default: ``False``).
294
+
295
+ .. versionadded:: 0.6
296
+
297
+ `lineseparator`
298
+ This string is output between lines of code. It defaults to ``"\n"``,
299
+ which is enough to break a line inside ``<pre>`` tags, but you can
300
+ e.g. set it to ``"<br>"`` to get HTML line breaks.
301
+
302
+ .. versionadded:: 0.7
303
+
304
+ `lineanchors`
305
+ If set to a nonempty string, e.g. ``foo``, the formatter will wrap each
306
+ output line in an anchor tag with an ``id`` (and `name`) of ``foo-linenumber``.
307
+ This allows easy linking to certain lines.
308
+
309
+ .. versionadded:: 0.9
310
+
311
+ `linespans`
312
+ If set to a nonempty string, e.g. ``foo``, the formatter will wrap each
313
+ output line in a span tag with an ``id`` of ``foo-linenumber``.
314
+ This allows easy access to lines via javascript.
315
+
316
+ .. versionadded:: 1.6
317
+
318
+ `anchorlinenos`
319
+ If set to `True`, will wrap line numbers in <a> tags. Used in
320
+ combination with `linenos` and `lineanchors`.
321
+
322
+ `tagsfile`
323
+ If set to the path of a ctags file, wrap names in anchor tags that
324
+ link to their definitions. `lineanchors` should be used, and the
325
+ tags file should specify line numbers (see the `-n` option to ctags).
326
+
327
+ .. versionadded:: 1.6
328
+
329
+ `tagurlformat`
330
+ A string formatting pattern used to generate links to ctags definitions.
331
+ Available variables are `%(path)s`, `%(fname)s` and `%(fext)s`.
332
+ Defaults to an empty string, resulting in just `#prefix-number` links.
333
+
334
+ .. versionadded:: 1.6
335
+
336
+ `filename`
337
+ A string used to generate a filename when rendering ``<pre>`` blocks,
338
+ for example if displaying source code. If `linenos` is set to
339
+ ``'table'`` then the filename will be rendered in an initial row
340
+ containing a single `<th>` which spans both columns.
341
+
342
+ .. versionadded:: 2.1
343
+
344
+ `wrapcode`
345
+ Wrap the code inside ``<pre>`` blocks using ``<code>``, as recommended
346
+ by the HTML5 specification.
347
+
348
+ .. versionadded:: 2.4
349
+
350
+ `debug_token_types`
351
+ Add ``title`` attributes to all token ``<span>`` tags that show the
352
+ name of the token.
353
+
354
+ .. versionadded:: 2.10
355
+
356
+
357
+ **Subclassing the HTML formatter**
358
+
359
+ .. versionadded:: 0.7
360
+
361
+ The HTML formatter is now built in a way that allows easy subclassing, thus
362
+ customizing the output HTML code. The `format()` method calls
363
+ `self._format_lines()` which returns a generator that yields tuples of ``(1,
364
+ line)``, where the ``1`` indicates that the ``line`` is a line of the
365
+ formatted source code.
366
+
367
+ If the `nowrap` option is set, the generator is the iterated over and the
368
+ resulting HTML is output.
369
+
370
+ Otherwise, `format()` calls `self.wrap()`, which wraps the generator with
371
+ other generators. These may add some HTML code to the one generated by
372
+ `_format_lines()`, either by modifying the lines generated by the latter,
373
+ then yielding them again with ``(1, line)``, and/or by yielding other HTML
374
+ code before or after the lines, with ``(0, html)``. The distinction between
375
+ source lines and other code makes it possible to wrap the generator multiple
376
+ times.
377
+
378
+ The default `wrap()` implementation adds a ``<div>`` and a ``<pre>`` tag.
379
+
380
+ A custom `HtmlFormatter` subclass could look like this:
381
+
382
+ .. sourcecode:: python
383
+
384
+ class CodeHtmlFormatter(HtmlFormatter):
385
+
386
+ def wrap(self, source, *, include_div):
387
+ return self._wrap_code(source)
388
+
389
+ def _wrap_code(self, source):
390
+ yield 0, '<code>'
391
+ for i, t in source:
392
+ if i == 1:
393
+ # it's a line of formatted code
394
+ t += '<br>'
395
+ yield i, t
396
+ yield 0, '</code>'
397
+
398
+ This results in wrapping the formatted lines with a ``<code>`` tag, where the
399
+ source lines are broken using ``<br>`` tags.
400
+
401
+ After calling `wrap()`, the `format()` method also adds the "line numbers"
402
+ and/or "full document" wrappers if the respective options are set. Then, all
403
+ HTML yielded by the wrapped generator is output.
404
+ """
405
+
406
+ name = 'HTML'
407
+ aliases = ['html']
408
+ filenames = ['*.html', '*.htm']
409
+
410
+ def __init__(self, **options):
411
+ Formatter.__init__(self, **options)
412
+ self.title = self._decodeifneeded(self.title)
413
+ self.nowrap = get_bool_opt(options, 'nowrap', False)
414
+ self.noclasses = get_bool_opt(options, 'noclasses', False)
415
+ self.classprefix = options.get('classprefix', '')
416
+ self.cssclass = self._decodeifneeded(options.get('cssclass', 'highlight'))
417
+ self.cssstyles = self._decodeifneeded(options.get('cssstyles', ''))
418
+ self.prestyles = self._decodeifneeded(options.get('prestyles', ''))
419
+ self.cssfile = self._decodeifneeded(options.get('cssfile', ''))
420
+ self.noclobber_cssfile = get_bool_opt(options, 'noclobber_cssfile', False)
421
+ self.tagsfile = self._decodeifneeded(options.get('tagsfile', ''))
422
+ self.tagurlformat = self._decodeifneeded(options.get('tagurlformat', ''))
423
+ self.filename = self._decodeifneeded(options.get('filename', ''))
424
+ self.wrapcode = get_bool_opt(options, 'wrapcode', False)
425
+ self.span_element_openers = {}
426
+ self.debug_token_types = get_bool_opt(options, 'debug_token_types', False)
427
+
428
+ if self.tagsfile:
429
+ if not ctags:
430
+ raise RuntimeError('The "ctags" package must to be installed '
431
+ 'to be able to use the "tagsfile" feature.')
432
+ self._ctags = ctags.CTags(self.tagsfile)
433
+
434
+ linenos = options.get('linenos', False)
435
+ if linenos == 'inline':
436
+ self.linenos = 2
437
+ elif linenos:
438
+ # compatibility with <= 0.7
439
+ self.linenos = 1
440
+ else:
441
+ self.linenos = 0
442
+ self.linenostart = abs(get_int_opt(options, 'linenostart', 1))
443
+ self.linenostep = abs(get_int_opt(options, 'linenostep', 1))
444
+ self.linenospecial = abs(get_int_opt(options, 'linenospecial', 0))
445
+ self.nobackground = get_bool_opt(options, 'nobackground', False)
446
+ self.lineseparator = options.get('lineseparator', '\n')
447
+ self.lineanchors = options.get('lineanchors', '')
448
+ self.linespans = options.get('linespans', '')
449
+ self.anchorlinenos = get_bool_opt(options, 'anchorlinenos', False)
450
+ self.hl_lines = set()
451
+ for lineno in get_list_opt(options, 'hl_lines', []):
452
+ try:
453
+ self.hl_lines.add(int(lineno))
454
+ except ValueError:
455
+ pass
456
+
457
+ self._create_stylesheet()
458
+
459
+ def _get_css_class(self, ttype):
460
+ """Return the css class of this token type prefixed with
461
+ the classprefix option."""
462
+ ttypeclass = _get_ttype_class(ttype)
463
+ if ttypeclass:
464
+ return self.classprefix + ttypeclass
465
+ return ''
466
+
467
+ def _get_css_classes(self, ttype):
468
+ """Return the CSS classes of this token type prefixed with the classprefix option."""
469
+ cls = self._get_css_class(ttype)
470
+ while ttype not in STANDARD_TYPES:
471
+ ttype = ttype.parent
472
+ cls = self._get_css_class(ttype) + ' ' + cls
473
+ return cls or ''
474
+
475
+ def _get_css_inline_styles(self, ttype):
476
+ """Return the inline CSS styles for this token type."""
477
+ cclass = self.ttype2class.get(ttype)
478
+ while cclass is None:
479
+ ttype = ttype.parent
480
+ cclass = self.ttype2class.get(ttype)
481
+ return cclass or ''
482
+
483
+ def _create_stylesheet(self):
484
+ t2c = self.ttype2class = {Token: ''}
485
+ c2s = self.class2style = {}
486
+ for ttype, ndef in self.style:
487
+ name = self._get_css_class(ttype)
488
+ style = ''
489
+ if ndef['color']:
490
+ style += 'color: %s; ' % webify(ndef['color'])
491
+ if ndef['bold']:
492
+ style += 'font-weight: bold; '
493
+ if ndef['italic']:
494
+ style += 'font-style: italic; '
495
+ if ndef['underline']:
496
+ style += 'text-decoration: underline; '
497
+ if ndef['bgcolor']:
498
+ style += 'background-color: %s; ' % webify(ndef['bgcolor'])
499
+ if ndef['border']:
500
+ style += 'border: 1px solid %s; ' % webify(ndef['border'])
501
+ if style:
502
+ t2c[ttype] = name
503
+ # save len(ttype) to enable ordering the styles by
504
+ # hierarchy (necessary for CSS cascading rules!)
505
+ c2s[name] = (style[:-2], ttype, len(ttype))
506
+
507
+ def get_style_defs(self, arg=None):
508
+ """
509
+ Return CSS style definitions for the classes produced by the current
510
+ highlighting style. ``arg`` can be a string or list of selectors to
511
+ insert before the token type classes.
512
+ """
513
+ style_lines = []
514
+
515
+ style_lines.extend(self.get_linenos_style_defs())
516
+ style_lines.extend(self.get_background_style_defs(arg))
517
+ style_lines.extend(self.get_token_style_defs(arg))
518
+
519
+ return '\n'.join(style_lines)
520
+
521
+ def get_token_style_defs(self, arg=None):
522
+ prefix = self.get_css_prefix(arg)
523
+
524
+ styles = [
525
+ (level, ttype, cls, style)
526
+ for cls, (style, ttype, level) in self.class2style.items()
527
+ if cls and style
528
+ ]
529
+ styles.sort()
530
+
531
+ lines = [
532
+ '%s { %s } /* %s */' % (prefix(cls), style, repr(ttype)[6:])
533
+ for (level, ttype, cls, style) in styles
534
+ ]
535
+
536
+ return lines
537
+
538
+ def get_background_style_defs(self, arg=None):
539
+ prefix = self.get_css_prefix(arg)
540
+ bg_color = self.style.background_color
541
+ hl_color = self.style.highlight_color
542
+
543
+ lines = []
544
+
545
+ if arg and not self.nobackground and bg_color is not None:
546
+ text_style = ''
547
+ if Text in self.ttype2class:
548
+ text_style = ' ' + self.class2style[self.ttype2class[Text]][0]
549
+ lines.insert(
550
+ 0, '%s{ background: %s;%s }' % (
551
+ prefix(''), bg_color, text_style
552
+ )
553
+ )
554
+ if hl_color is not None:
555
+ lines.insert(
556
+ 0, '%s { background-color: %s }' % (prefix('hll'), hl_color)
557
+ )
558
+
559
+ return lines
560
+
561
+ def get_linenos_style_defs(self):
562
+ lines = [
563
+ 'pre { %s }' % self._pre_style,
564
+ 'td.linenos .normal { %s }' % self._linenos_style,
565
+ 'span.linenos { %s }' % self._linenos_style,
566
+ 'td.linenos .special { %s }' % self._linenos_special_style,
567
+ 'span.linenos.special { %s }' % self._linenos_special_style,
568
+ ]
569
+
570
+ return lines
571
+
572
+ def get_css_prefix(self, arg):
573
+ if arg is None:
574
+ arg = ('cssclass' in self.options and '.'+self.cssclass or '')
575
+ if isinstance(arg, str):
576
+ args = [arg]
577
+ else:
578
+ args = list(arg)
579
+
580
+ def prefix(cls):
581
+ if cls:
582
+ cls = '.' + cls
583
+ tmp = []
584
+ for arg in args:
585
+ tmp.append((arg and arg + ' ' or '') + cls)
586
+ return ', '.join(tmp)
587
+
588
+ return prefix
589
+
590
+ @property
591
+ def _pre_style(self):
592
+ return 'line-height: 125%;'
593
+
594
+ @property
595
+ def _linenos_style(self):
596
+ return 'color: %s; background-color: %s; padding-left: 5px; padding-right: 5px;' % (
597
+ self.style.line_number_color,
598
+ self.style.line_number_background_color
599
+ )
600
+
601
+ @property
602
+ def _linenos_special_style(self):
603
+ return 'color: %s; background-color: %s; padding-left: 5px; padding-right: 5px;' % (
604
+ self.style.line_number_special_color,
605
+ self.style.line_number_special_background_color
606
+ )
607
+
608
+ def _decodeifneeded(self, value):
609
+ if isinstance(value, bytes):
610
+ if self.encoding:
611
+ return value.decode(self.encoding)
612
+ return value.decode()
613
+ return value
614
+
615
+ def _wrap_full(self, inner, outfile):
616
+ if self.cssfile:
617
+ if os.path.isabs(self.cssfile):
618
+ # it's an absolute filename
619
+ cssfilename = self.cssfile
620
+ else:
621
+ try:
622
+ filename = outfile.name
623
+ if not filename or filename[0] == '<':
624
+ # pseudo files, e.g. name == '<fdopen>'
625
+ raise AttributeError
626
+ cssfilename = os.path.join(os.path.dirname(filename),
627
+ self.cssfile)
628
+ except AttributeError:
629
+ print('Note: Cannot determine output file name, '
630
+ 'using current directory as base for the CSS file name',
631
+ file=sys.stderr)
632
+ cssfilename = self.cssfile
633
+ # write CSS file only if noclobber_cssfile isn't given as an option.
634
+ try:
635
+ if not os.path.exists(cssfilename) or not self.noclobber_cssfile:
636
+ with open(cssfilename, "w", encoding="utf-8") as cf:
637
+ cf.write(CSSFILE_TEMPLATE %
638
+ {'styledefs': self.get_style_defs('body')})
639
+ except OSError as err:
640
+ err.strerror = 'Error writing CSS file: ' + err.strerror
641
+ raise
642
+
643
+ yield 0, (DOC_HEADER_EXTERNALCSS %
644
+ dict(title=self.title,
645
+ cssfile=self.cssfile,
646
+ encoding=self.encoding))
647
+ else:
648
+ yield 0, (DOC_HEADER %
649
+ dict(title=self.title,
650
+ styledefs=self.get_style_defs('body'),
651
+ encoding=self.encoding))
652
+
653
+ yield from inner
654
+ yield 0, DOC_FOOTER
655
+
656
+ def _wrap_tablelinenos(self, inner):
657
+ dummyoutfile = StringIO()
658
+ lncount = 0
659
+ for t, line in inner:
660
+ if t:
661
+ lncount += 1
662
+ dummyoutfile.write(line)
663
+
664
+ fl = self.linenostart
665
+ mw = len(str(lncount + fl - 1))
666
+ sp = self.linenospecial
667
+ st = self.linenostep
668
+ anchor_name = self.lineanchors or self.linespans
669
+ aln = self.anchorlinenos
670
+ nocls = self.noclasses
671
+
672
+ lines = []
673
+
674
+ for i in range(fl, fl+lncount):
675
+ print_line = i % st == 0
676
+ special_line = sp and i % sp == 0
677
+
678
+ if print_line:
679
+ line = '%*d' % (mw, i)
680
+ if aln:
681
+ line = '<a href="#%s-%d">%s</a>' % (anchor_name, i, line)
682
+ else:
683
+ line = ' ' * mw
684
+
685
+ if nocls:
686
+ if special_line:
687
+ style = ' style="%s"' % self._linenos_special_style
688
+ else:
689
+ style = ' style="%s"' % self._linenos_style
690
+ else:
691
+ if special_line:
692
+ style = ' class="special"'
693
+ else:
694
+ style = ' class="normal"'
695
+
696
+ if style:
697
+ line = '<span%s>%s</span>' % (style, line)
698
+
699
+ lines.append(line)
700
+
701
+ ls = '\n'.join(lines)
702
+
703
+ # If a filename was specified, we can't put it into the code table as it
704
+ # would misalign the line numbers. Hence we emit a separate row for it.
705
+ filename_tr = ""
706
+ if self.filename:
707
+ filename_tr = (
708
+ '<tr><th colspan="2" class="filename">'
709
+ '<span class="filename">' + self.filename + '</span>'
710
+ '</th></tr>')
711
+
712
+ # in case you wonder about the seemingly redundant <div> here: since the
713
+ # content in the other cell also is wrapped in a div, some browsers in
714
+ # some configurations seem to mess up the formatting...
715
+ yield 0, (f'<table class="{self.cssclass}table">' + filename_tr +
716
+ '<tr><td class="linenos"><div class="linenodiv"><pre>' +
717
+ ls + '</pre></div></td><td class="code">')
718
+ yield 0, '<div>'
719
+ yield 0, dummyoutfile.getvalue()
720
+ yield 0, '</div>'
721
+ yield 0, '</td></tr></table>'
722
+
723
+
724
+ def _wrap_inlinelinenos(self, inner):
725
+ # need a list of lines since we need the width of a single number :(
726
+ inner_lines = list(inner)
727
+ sp = self.linenospecial
728
+ st = self.linenostep
729
+ num = self.linenostart
730
+ mw = len(str(len(inner_lines) + num - 1))
731
+ anchor_name = self.lineanchors or self.linespans
732
+ aln = self.anchorlinenos
733
+ nocls = self.noclasses
734
+
735
+ for _, inner_line in inner_lines:
736
+ print_line = num % st == 0
737
+ special_line = sp and num % sp == 0
738
+
739
+ if print_line:
740
+ line = '%*d' % (mw, num)
741
+ else:
742
+ line = ' ' * mw
743
+
744
+ if nocls:
745
+ if special_line:
746
+ style = ' style="%s"' % self._linenos_special_style
747
+ else:
748
+ style = ' style="%s"' % self._linenos_style
749
+ else:
750
+ if special_line:
751
+ style = ' class="linenos special"'
752
+ else:
753
+ style = ' class="linenos"'
754
+
755
+ if style:
756
+ linenos = '<span%s>%s</span>' % (style, line)
757
+ else:
758
+ linenos = line
759
+
760
+ if aln:
761
+ yield 1, ('<a href="#%s-%d">%s</a>' % (anchor_name, num, linenos) +
762
+ inner_line)
763
+ else:
764
+ yield 1, linenos + inner_line
765
+ num += 1
766
+
767
+ def _wrap_lineanchors(self, inner):
768
+ s = self.lineanchors
769
+ # subtract 1 since we have to increment i *before* yielding
770
+ i = self.linenostart - 1
771
+ for t, line in inner:
772
+ if t:
773
+ i += 1
774
+ href = "" if self.linenos else ' href="#%s-%d"' % (s, i)
775
+ yield 1, '<a id="%s-%d" name="%s-%d"%s></a>' % (s, i, s, i, href) + line
776
+ else:
777
+ yield 0, line
778
+
779
+ def _wrap_linespans(self, inner):
780
+ s = self.linespans
781
+ i = self.linenostart - 1
782
+ for t, line in inner:
783
+ if t:
784
+ i += 1
785
+ yield 1, '<span id="%s-%d">%s</span>' % (s, i, line)
786
+ else:
787
+ yield 0, line
788
+
789
+ def _wrap_div(self, inner):
790
+ style = []
791
+ if (self.noclasses and not self.nobackground and
792
+ self.style.background_color is not None):
793
+ style.append('background: %s' % (self.style.background_color,))
794
+ if self.cssstyles:
795
+ style.append(self.cssstyles)
796
+ style = '; '.join(style)
797
+
798
+ yield 0, ('<div' + (self.cssclass and ' class="%s"' % self.cssclass) +
799
+ (style and (' style="%s"' % style)) + '>')
800
+ yield from inner
801
+ yield 0, '</div>\n'
802
+
803
+ def _wrap_pre(self, inner):
804
+ style = []
805
+ if self.prestyles:
806
+ style.append(self.prestyles)
807
+ if self.noclasses:
808
+ style.append(self._pre_style)
809
+ style = '; '.join(style)
810
+
811
+ if self.filename and self.linenos != 1:
812
+ yield 0, ('<span class="filename">' + self.filename + '</span>')
813
+
814
+ # the empty span here is to keep leading empty lines from being
815
+ # ignored by HTML parsers
816
+ yield 0, ('<pre' + (style and ' style="%s"' % style) + '><span></span>')
817
+ yield from inner
818
+ yield 0, '</pre>'
819
+
820
+ def _wrap_code(self, inner):
821
+ yield 0, '<code>'
822
+ yield from inner
823
+ yield 0, '</code>'
824
+
825
+ @functools.lru_cache(maxsize=100)
826
+ def _translate_parts(self, value):
827
+ """HTML-escape a value and split it by newlines."""
828
+ return value.translate(_escape_html_table).split('\n')
829
+
830
+ def _format_lines(self, tokensource):
831
+ """
832
+ Just format the tokens, without any wrapping tags.
833
+ Yield individual lines.
834
+ """
835
+ nocls = self.noclasses
836
+ lsep = self.lineseparator
837
+ tagsfile = self.tagsfile
838
+
839
+ lspan = ''
840
+ line = []
841
+ for ttype, value in tokensource:
842
+ try:
843
+ cspan = self.span_element_openers[ttype]
844
+ except KeyError:
845
+ title = ' title="%s"' % '.'.join(ttype) if self.debug_token_types else ''
846
+ if nocls:
847
+ css_style = self._get_css_inline_styles(ttype)
848
+ if css_style:
849
+ css_style = self.class2style[css_style][0]
850
+ cspan = '<span style="%s"%s>' % (css_style, title)
851
+ else:
852
+ cspan = ''
853
+ else:
854
+ css_class = self._get_css_classes(ttype)
855
+ if css_class:
856
+ cspan = '<span class="%s"%s>' % (css_class, title)
857
+ else:
858
+ cspan = ''
859
+ self.span_element_openers[ttype] = cspan
860
+
861
+ parts = self._translate_parts(value)
862
+
863
+ if tagsfile and ttype in Token.Name:
864
+ filename, linenumber = self._lookup_ctag(value)
865
+ if linenumber:
866
+ base, filename = os.path.split(filename)
867
+ if base:
868
+ base += '/'
869
+ filename, extension = os.path.splitext(filename)
870
+ url = self.tagurlformat % {'path': base, 'fname': filename,
871
+ 'fext': extension}
872
+ parts[0] = "<a href=\"%s#%s-%d\">%s" % \
873
+ (url, self.lineanchors, linenumber, parts[0])
874
+ parts[-1] = parts[-1] + "</a>"
875
+
876
+ # for all but the last line
877
+ for part in parts[:-1]:
878
+ if line:
879
+ # Also check for part being non-empty, so we avoid creating
880
+ # empty <span> tags
881
+ if lspan != cspan and part:
882
+ line.extend(((lspan and '</span>'), cspan, part,
883
+ (cspan and '</span>'), lsep))
884
+ else: # both are the same, or the current part was empty
885
+ line.extend((part, (lspan and '</span>'), lsep))
886
+ yield 1, ''.join(line)
887
+ line = []
888
+ elif part:
889
+ yield 1, ''.join((cspan, part, (cspan and '</span>'), lsep))
890
+ else:
891
+ yield 1, lsep
892
+ # for the last line
893
+ if line and parts[-1]:
894
+ if lspan != cspan:
895
+ line.extend(((lspan and '</span>'), cspan, parts[-1]))
896
+ lspan = cspan
897
+ else:
898
+ line.append(parts[-1])
899
+ elif parts[-1]:
900
+ line = [cspan, parts[-1]]
901
+ lspan = cspan
902
+ # else we neither have to open a new span nor set lspan
903
+
904
+ if line:
905
+ line.extend(((lspan and '</span>'), lsep))
906
+ yield 1, ''.join(line)
907
+
908
+ def _lookup_ctag(self, token):
909
+ entry = ctags.TagEntry()
910
+ if self._ctags.find(entry, token.encode(), 0):
911
+ return entry['file'], entry['lineNumber']
912
+ else:
913
+ return None, None
914
+
915
+ def _highlight_lines(self, tokensource):
916
+ """
917
+ Highlighted the lines specified in the `hl_lines` option by
918
+ post-processing the token stream coming from `_format_lines`.
919
+ """
920
+ hls = self.hl_lines
921
+
922
+ for i, (t, value) in enumerate(tokensource):
923
+ if t != 1:
924
+ yield t, value
925
+ if i + 1 in hls: # i + 1 because Python indexes start at 0
926
+ if self.noclasses:
927
+ style = ''
928
+ if self.style.highlight_color is not None:
929
+ style = (' style="background-color: %s"' %
930
+ (self.style.highlight_color,))
931
+ yield 1, '<span%s>%s</span>' % (style, value)
932
+ else:
933
+ yield 1, '<span class="hll">%s</span>' % value
934
+ else:
935
+ yield 1, value
936
+
937
+ def wrap(self, source):
938
+ """
939
+ Wrap the ``source``, which is a generator yielding
940
+ individual lines, in custom generators. See docstring
941
+ for `format`. Can be overridden.
942
+ """
943
+
944
+ output = source
945
+ if self.wrapcode:
946
+ output = self._wrap_code(output)
947
+
948
+ output = self._wrap_pre(output)
949
+
950
+ return output
951
+
952
+ def format_unencoded(self, tokensource, outfile):
953
+ """
954
+ The formatting process uses several nested generators; which of
955
+ them are used is determined by the user's options.
956
+
957
+ Each generator should take at least one argument, ``inner``,
958
+ and wrap the pieces of text generated by this.
959
+
960
+ Always yield 2-tuples: (code, text). If "code" is 1, the text
961
+ is part of the original tokensource being highlighted, if it's
962
+ 0, the text is some piece of wrapping. This makes it possible to
963
+ use several different wrappers that process the original source
964
+ linewise, e.g. line number generators.
965
+ """
966
+ source = self._format_lines(tokensource)
967
+
968
+ # As a special case, we wrap line numbers before line highlighting
969
+ # so the line numbers get wrapped in the highlighting tag.
970
+ if not self.nowrap and self.linenos == 2:
971
+ source = self._wrap_inlinelinenos(source)
972
+
973
+ if self.hl_lines:
974
+ source = self._highlight_lines(source)
975
+
976
+ if not self.nowrap:
977
+ if self.lineanchors:
978
+ source = self._wrap_lineanchors(source)
979
+ if self.linespans:
980
+ source = self._wrap_linespans(source)
981
+ source = self.wrap(source)
982
+ if self.linenos == 1:
983
+ source = self._wrap_tablelinenos(source)
984
+ source = self._wrap_div(source)
985
+ if self.full:
986
+ source = self._wrap_full(source, outfile)
987
+
988
+ for t, piece in source:
989
+ outfile.write(piece)
.venv/lib/python3.11/site-packages/pip/_vendor/pygments/formatters/other.py ADDED
@@ -0,0 +1,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.formatters.other
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Other formatters: NullFormatter, RawTokenFormatter.
6
+
7
+ :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pip._vendor.pygments.formatter import Formatter
12
+ from pip._vendor.pygments.util import get_choice_opt
13
+ from pip._vendor.pygments.token import Token
14
+ from pip._vendor.pygments.console import colorize
15
+
16
+ __all__ = ['NullFormatter', 'RawTokenFormatter', 'TestcaseFormatter']
17
+
18
+
19
+ class NullFormatter(Formatter):
20
+ """
21
+ Output the text unchanged without any formatting.
22
+ """
23
+ name = 'Text only'
24
+ aliases = ['text', 'null']
25
+ filenames = ['*.txt']
26
+
27
+ def format(self, tokensource, outfile):
28
+ enc = self.encoding
29
+ for ttype, value in tokensource:
30
+ if enc:
31
+ outfile.write(value.encode(enc))
32
+ else:
33
+ outfile.write(value)
34
+
35
+
36
+ class RawTokenFormatter(Formatter):
37
+ r"""
38
+ Format tokens as a raw representation for storing token streams.
39
+
40
+ The format is ``tokentype<TAB>repr(tokenstring)\n``. The output can later
41
+ be converted to a token stream with the `RawTokenLexer`, described in the
42
+ :doc:`lexer list <lexers>`.
43
+
44
+ Only two options are accepted:
45
+
46
+ `compress`
47
+ If set to ``'gz'`` or ``'bz2'``, compress the output with the given
48
+ compression algorithm after encoding (default: ``''``).
49
+ `error_color`
50
+ If set to a color name, highlight error tokens using that color. If
51
+ set but with no value, defaults to ``'red'``.
52
+
53
+ .. versionadded:: 0.11
54
+
55
+ """
56
+ name = 'Raw tokens'
57
+ aliases = ['raw', 'tokens']
58
+ filenames = ['*.raw']
59
+
60
+ unicodeoutput = False
61
+
62
+ def __init__(self, **options):
63
+ Formatter.__init__(self, **options)
64
+ # We ignore self.encoding if it is set, since it gets set for lexer
65
+ # and formatter if given with -Oencoding on the command line.
66
+ # The RawTokenFormatter outputs only ASCII. Override here.
67
+ self.encoding = 'ascii' # let pygments.format() do the right thing
68
+ self.compress = get_choice_opt(options, 'compress',
69
+ ['', 'none', 'gz', 'bz2'], '')
70
+ self.error_color = options.get('error_color', None)
71
+ if self.error_color is True:
72
+ self.error_color = 'red'
73
+ if self.error_color is not None:
74
+ try:
75
+ colorize(self.error_color, '')
76
+ except KeyError:
77
+ raise ValueError("Invalid color %r specified" %
78
+ self.error_color)
79
+
80
+ def format(self, tokensource, outfile):
81
+ try:
82
+ outfile.write(b'')
83
+ except TypeError:
84
+ raise TypeError('The raw tokens formatter needs a binary '
85
+ 'output file')
86
+ if self.compress == 'gz':
87
+ import gzip
88
+ outfile = gzip.GzipFile('', 'wb', 9, outfile)
89
+
90
+ write = outfile.write
91
+ flush = outfile.close
92
+ elif self.compress == 'bz2':
93
+ import bz2
94
+ compressor = bz2.BZ2Compressor(9)
95
+
96
+ def write(text):
97
+ outfile.write(compressor.compress(text))
98
+
99
+ def flush():
100
+ outfile.write(compressor.flush())
101
+ outfile.flush()
102
+ else:
103
+ write = outfile.write
104
+ flush = outfile.flush
105
+
106
+ if self.error_color:
107
+ for ttype, value in tokensource:
108
+ line = b"%r\t%r\n" % (ttype, value)
109
+ if ttype is Token.Error:
110
+ write(colorize(self.error_color, line))
111
+ else:
112
+ write(line)
113
+ else:
114
+ for ttype, value in tokensource:
115
+ write(b"%r\t%r\n" % (ttype, value))
116
+ flush()
117
+
118
+
119
+ TESTCASE_BEFORE = '''\
120
+ def testNeedsName(lexer):
121
+ fragment = %r
122
+ tokens = [
123
+ '''
124
+ TESTCASE_AFTER = '''\
125
+ ]
126
+ assert list(lexer.get_tokens(fragment)) == tokens
127
+ '''
128
+
129
+
130
+ class TestcaseFormatter(Formatter):
131
+ """
132
+ Format tokens as appropriate for a new testcase.
133
+
134
+ .. versionadded:: 2.0
135
+ """
136
+ name = 'Testcase'
137
+ aliases = ['testcase']
138
+
139
+ def __init__(self, **options):
140
+ Formatter.__init__(self, **options)
141
+ if self.encoding is not None and self.encoding != 'utf-8':
142
+ raise ValueError("Only None and utf-8 are allowed encodings.")
143
+
144
+ def format(self, tokensource, outfile):
145
+ indentation = ' ' * 12
146
+ rawbuf = []
147
+ outbuf = []
148
+ for ttype, value in tokensource:
149
+ rawbuf.append(value)
150
+ outbuf.append('%s(%s, %r),\n' % (indentation, ttype, value))
151
+
152
+ before = TESTCASE_BEFORE % (''.join(rawbuf),)
153
+ during = ''.join(outbuf)
154
+ after = TESTCASE_AFTER
155
+ if self.encoding is None:
156
+ outfile.write(before + during + after)
157
+ else:
158
+ outfile.write(before.encode('utf-8'))
159
+ outfile.write(during.encode('utf-8'))
160
+ outfile.write(after.encode('utf-8'))
161
+ outfile.flush()