GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( 636838...8041ee )
by gyeong-won
06:25
created
classes/xml/XmlLangParser.class.php 3 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -62,7 +62,7 @@  discard block
 block discarded – undo
62 62
 
63 63
 	/**
64 64
 	 * compile a xml_file only when a corresponding php lang file does not exists or is outdated
65
-	 * @return string|bool Returns compiled php file.
65
+	 * @return false|string Returns compiled php file.
66 66
 	 */
67 67
 	function compile()
68 68
 	{
@@ -133,7 +133,7 @@  discard block
 block discarded – undo
133 133
 
134 134
 	/**
135 135
 	 * Writing cache file
136
-	 * @return void|bool
136
+	 * @return null|false
137 137
 	 */
138 138
 	function _writeFile()
139 139
 	{
Please login to merge, or discard this patch.
Braces   +6 added lines, -12 removed lines patch added patch discarded remove patch
@@ -73,14 +73,12 @@  discard block
 block discarded – undo
73 73
 		if(!file_exists($this->php_file))
74 74
 		{
75 75
 			$this->_compile();
76
-		}
77
-		else
76
+		} else
78 77
 		{
79 78
 			if(filemtime($this->xml_file) > filemtime($this->php_file))
80 79
 			{
81 80
 				$this->_compile();
82
-			}
83
-			else
81
+			} else
84 82
 			{
85 83
 				return $this->php_file;
86 84
 			}
@@ -168,8 +166,7 @@  discard block
 block discarded – undo
168 166
 				$this->code .= "	{$var} = array();\n";
169 167
 				$this->code .= "}\n";
170 168
 				$var .= '[\'%s\']';
171
-			}
172
-			else
169
+			} else
173 170
 			{
174 171
 				$this->code .= "if(!is_object({$var})){\n";
175 172
 				$this->code .= "	{$var} = new stdClass();\n";
@@ -186,8 +183,7 @@  discard block
 block discarded – undo
186 183
 			{
187 184
 				$this->_parseItem($item, $var);
188 185
 			}
189
-		}
190
-		else
186
+		} else
191 187
 		{
192 188
 			$code = $this->_parseValues($value, $var);
193 189
 			$this->code .= $code;
@@ -220,12 +216,10 @@  discard block
 block discarded – undo
220 216
 		if($value[$this->lang_type])
221 217
 		{
222 218
 			return $value[$this->lang_type];
223
-		}
224
-		else if($value['en'])
219
+		} else if($value['en'])
225 220
 		{
226 221
 			return $value['en'];
227
-		}
228
-		else if($value['ko'])
222
+		} else if($value['ko'])
229 223
 		{
230 224
 			return $value['ko'];
231 225
 		}
Please login to merge, or discard this patch.
Spacing   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -66,17 +66,17 @@  discard block
 block discarded – undo
66 66
 	 */
67 67
 	function compile()
68 68
 	{
69
-		if(!file_exists($this->xml_file))
69
+		if (!file_exists($this->xml_file))
70 70
 		{
71 71
 			return FALSE;
72 72
 		}
73
-		if(!file_exists($this->php_file))
73
+		if (!file_exists($this->php_file))
74 74
 		{
75 75
 			$this->_compile();
76 76
 		}
77 77
 		else
78 78
 		{
79
-			if(filemtime($this->xml_file) > filemtime($this->php_file))
79
+			if (filemtime($this->xml_file) > filemtime($this->php_file))
80 80
 			{
81 81
 				$this->_compile();
82 82
 			}
@@ -95,7 +95,7 @@  discard block
 block discarded – undo
95 95
 	 */
96 96
 	function getCompileContent()
97 97
 	{
98
-		if(!file_exists($this->xml_file))
98
+		if (!file_exists($this->xml_file))
99 99
 		{
100 100
 			return FALSE;
101 101
 		}
@@ -121,11 +121,11 @@  discard block
 block discarded – undo
121 121
 		$xml_obj = parent::parse($buff);
122 122
 
123 123
 		$item = $xml_obj->lang->item;
124
-		if(!is_array($item))
124
+		if (!is_array($item))
125 125
 		{
126 126
 			$item = array($item);
127 127
 		}
128
-		foreach($item as $i)
128
+		foreach ($item as $i)
129 129
 		{
130 130
 			$this->_parseItem($i, $var = '$lang->%s');
131 131
 		}
@@ -137,11 +137,11 @@  discard block
 block discarded – undo
137 137
 	 */
138 138
 	function _writeFile()
139 139
 	{
140
-		if(!$this->code)
140
+		if (!$this->code)
141 141
 		{
142 142
 			return;
143 143
 		}
144
-		FileHandler::writeFile($this->php_file, "<?php\n" . $this->code);
144
+		FileHandler::writeFile($this->php_file, "<?php\n".$this->code);
145 145
 		return false;
146 146
 	}
147 147
 
@@ -157,12 +157,12 @@  discard block
 block discarded – undo
157 157
 		$value = $item->value;
158 158
 		$var = sprintf($var, $name);
159 159
 
160
-		if($item->item)
160
+		if ($item->item)
161 161
 		{
162 162
 			$type = $item->attrs->type;
163 163
 			$mode = $item->attrs->mode;
164 164
 
165
-			if($type == 'array')
165
+			if ($type == 'array')
166 166
 			{
167 167
 				$this->code .= "if(!is_array({$var})){\n";
168 168
 				$this->code .= "	{$var} = array();\n";
@@ -178,11 +178,11 @@  discard block
 block discarded – undo
178 178
 			}
179 179
 
180 180
 			$items = $item->item;
181
-			if(!is_array($items))
181
+			if (!is_array($items))
182 182
 			{
183 183
 				$items = array($items);
184 184
 			}
185
-			foreach($items as $item)
185
+			foreach ($items as $item)
186 186
 			{
187 187
 				$this->_parseItem($item, $var);
188 188
 			}
@@ -202,41 +202,41 @@  discard block
 block discarded – undo
202 202
 	 */
203 203
 	function _parseValues($nodes, $var)
204 204
 	{
205
-		if(!is_array($nodes))
205
+		if (!is_array($nodes))
206 206
 		{
207 207
 			$nodes = array($nodes);
208 208
 		}
209 209
 
210 210
 		$value = array();
211
-		foreach($nodes as $node)
211
+		foreach ($nodes as $node)
212 212
 		{
213 213
 			$return = $this->_parseValue($node, $var);
214
-			if($return && is_array($return))
214
+			if ($return && is_array($return))
215 215
 			{
216 216
 				$value = array_merge($value, $return);
217 217
 			}
218 218
 		}
219 219
 
220
-		if($value[$this->lang_type])
220
+		if ($value[$this->lang_type])
221 221
 		{
222 222
 			return $value[$this->lang_type];
223 223
 		}
224
-		else if($value['en'])
224
+		else if ($value['en'])
225 225
 		{
226 226
 			return $value['en'];
227 227
 		}
228
-		else if($value['ko'])
228
+		else if ($value['ko'])
229 229
 		{
230 230
 			return $value['ko'];
231 231
 		}
232 232
 
233
-		foreach($this->lang_types as $lang_type)
233
+		foreach ($this->lang_types as $lang_type)
234 234
 		{
235
-			if($lang_type == 'en' || $lang_type == 'ko' || $lang_type == $this->lang_type)
235
+			if ($lang_type == 'en' || $lang_type == 'ko' || $lang_type == $this->lang_type)
236 236
 			{
237 237
 				continue;
238 238
 			}
239
-			if($value[$lang_type])
239
+			if ($value[$lang_type])
240 240
 			{
241 241
 				return $value[$lang_type];
242 242
 			}
@@ -255,12 +255,12 @@  discard block
 block discarded – undo
255 255
 	{
256 256
 		$lang_type = $node->attrs->xml_lang;
257 257
 		$value = $node->body;
258
-		if(!$value)
258
+		if (!$value)
259 259
 		{
260 260
 			return false;
261 261
 		}
262 262
 
263
-		$var .= '=\'' . str_replace("'", "\'", $value) . "';\n";
263
+		$var .= '=\''.str_replace("'", "\'", $value)."';\n";
264 264
 		return array($lang_type => $var);
265 265
 	}
266 266
 
Please login to merge, or discard this patch.
classes/xml/XmlParser.class.php 3 patches
Doc Comments   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -151,7 +151,7 @@  discard block
 block discarded – undo
151 151
 
152 152
 	/**
153 153
 	 * Start element handler.
154
-	 * @param resource $parse an instance of parser
154
+	 * @param resource $parser an instance of parser
155 155
 	 * @param string $node_name a name of node
156 156
 	 * @param array $attrs attributes to be set
157 157
 	 * @return array
@@ -168,7 +168,7 @@  discard block
 block discarded – undo
168 168
 	/**
169 169
 	 * Character data handler
170 170
 	 * Variable in the last element of this->output
171
-	 * @param resource $parse an instance of parser
171
+	 * @param resource $parser an instance of parser
172 172
 	 * @param string $body a data to be added
173 173
 	 * @return void
174 174
 	 */
@@ -180,7 +180,7 @@  discard block
 block discarded – undo
180 180
 
181 181
 	/**
182 182
 	 * End element handler
183
-	 * @param resource $parse an instance of parser
183
+	 * @param resource $parser an instance of parser
184 184
 	 * @param string $node_name name of xml node
185 185
 	 * @return void
186 186
 	 */
Please login to merge, or discard this patch.
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -69,7 +69,7 @@  discard block
 block discarded – undo
69 69
 	 */
70 70
 	function loadXmlFile($filename)
71 71
 	{
72
-		if(!file_exists($filename))
72
+		if (!file_exists($filename))
73 73
 		{
74 74
 			return;
75 75
 		}
@@ -89,7 +89,7 @@  discard block
 block discarded – undo
89 89
 	function parse($input = '', $arg1 = NULL, $arg2 = NULL)
90 90
 	{
91 91
 		// Save the compile starting time for debugging
92
-		if(__DEBUG__ == 3)
92
+		if (__DEBUG__ == 3)
93 93
 		{
94 94
 			$start = getMicroTime();
95 95
 		}
@@ -103,13 +103,13 @@  discard block
 block discarded – undo
103 103
 		preg_match_all("/xml:lang=\"([^\"].+)\"/i", $this->input, $matches);
104 104
 
105 105
 		// extracts the supported lanuage when xml:lang is used
106
-		if(count($matches[1]) && $supported_lang = array_unique($matches[1]))
106
+		if (count($matches[1]) && $supported_lang = array_unique($matches[1]))
107 107
 		{
108 108
 			$tmpLangList = array_flip($supported_lang);
109 109
 			// if lang of the first log-in user doesn't exist, apply en by default if exists. Otherwise apply the first lang.
110
-			if(!isset($tmpLangList[$this->lang]))
110
+			if (!isset($tmpLangList[$this->lang]))
111 111
 			{
112
-				if(isset($tmpLangList['en']))
112
+				if (isset($tmpLangList['en']))
113 113
 				{
114 114
 					$this->lang = 'en';
115 115
 				}
@@ -134,14 +134,14 @@  discard block
 block discarded – undo
134 134
 		xml_parse($this->oParser, $this->input);
135 135
 		xml_parser_free($this->oParser);
136 136
 
137
-		if(!count($this->output))
137
+		if (!count($this->output))
138 138
 		{
139 139
 			return;
140 140
 		}
141 141
 
142 142
 		$output = array_shift($this->output);
143 143
 		// Save compile starting time for debugging
144
-		if(__DEBUG__ == 3)
144
+		if (__DEBUG__ == 3)
145 145
 		{
146 146
 			$GLOBALS['__xmlparse_elapsed__'] += getMicroTime() - $start;
147 147
 		}
@@ -189,19 +189,19 @@  discard block
 block discarded – undo
189 189
 		$node_name = strtolower($node_name);
190 190
 		$cur_obj = array_pop($this->output);
191 191
 		$parent_obj = &$this->output[count($this->output) - 1];
192
-		if($this->lang && $cur_obj->attrs->{'xml:lang'} && $cur_obj->attrs->{'xml:lang'} != $this->lang)
192
+		if ($this->lang && $cur_obj->attrs->{'xml:lang'} && $cur_obj->attrs->{'xml:lang'} != $this->lang)
193 193
 		{
194 194
 			return;
195 195
 		}
196
-		if($this->lang && $parent_obj->{$node_name}->attrs->{'xml:lang'} && $parent_obj->{$node_name}->attrs->{'xml:lang'} != $this->lang)
196
+		if ($this->lang && $parent_obj->{$node_name}->attrs->{'xml:lang'} && $parent_obj->{$node_name}->attrs->{'xml:lang'} != $this->lang)
197 197
 		{
198 198
 			return;
199 199
 		}
200 200
 
201
-		if(isset($parent_obj->{$node_name}))
201
+		if (isset($parent_obj->{$node_name}))
202 202
 		{
203 203
 			$tmp_obj = $parent_obj->{$node_name};
204
-			if(is_array($tmp_obj))
204
+			if (is_array($tmp_obj))
205 205
 			{
206 206
 				$parent_obj->{$node_name}[] = $cur_obj;
207 207
 			}
@@ -212,7 +212,7 @@  discard block
 block discarded – undo
212 212
 		}
213 213
 		else
214 214
 		{
215
-			if(!is_object($parent_obj))
215
+			if (!is_object($parent_obj))
216 216
 			{
217 217
 				$parent_obj = (object) $parent_obj;
218 218
 			}
@@ -229,7 +229,7 @@  discard block
 block discarded – undo
229 229
 	function _arrToAttrsObj($arr)
230 230
 	{
231 231
 		$output = new Xml_Node_();
232
-		foreach($arr as $key => $val)
232
+		foreach ($arr as $key => $val)
233 233
 		{
234 234
 			$key = strtolower($key);
235 235
 			$output->{$key} = $val;
Please login to merge, or discard this patch.
Braces   +4 added lines, -8 removed lines patch added patch discarded remove patch
@@ -112,15 +112,13 @@  discard block
 block discarded – undo
112 112
 				if(isset($tmpLangList['en']))
113 113
 				{
114 114
 					$this->lang = 'en';
115
-				}
116
-				else
115
+				} else
117 116
 				{
118 117
 					$this->lang = array_shift($supported_lang);
119 118
 				}
120 119
 			}
121 120
 			// uncheck the language if no specific language is set.
122
-		}
123
-		else
121
+		} else
124 122
 		{
125 123
 			$this->lang = '';
126 124
 		}
@@ -204,13 +202,11 @@  discard block
 block discarded – undo
204 202
 			if(is_array($tmp_obj))
205 203
 			{
206 204
 				$parent_obj->{$node_name}[] = $cur_obj;
207
-			}
208
-			else
205
+			} else
209 206
 			{
210 207
 				$parent_obj->{$node_name} = array($tmp_obj, $cur_obj);
211 208
 			}
212
-		}
213
-		else
209
+		} else
214 210
 		{
215 211
 			if(!is_object($parent_obj))
216 212
 			{
Please login to merge, or discard this patch.
classes/xml/xmlquery/argument/Argument.class.php 3 patches
Doc Comments   +6 added lines patch added patch discarded remove patch
@@ -90,6 +90,9 @@  discard block
 block discarded – undo
90 90
 		$this->type = $value;
91 91
 	}
92 92
 
93
+	/**
94
+	 * @param string $operation
95
+	 */
93 96
 	function setColumnOperation($operation)
94 97
 	{
95 98
 		$this->column_operation = $operation;
@@ -282,6 +285,9 @@  discard block
 block discarded – undo
282 285
 		return $this->errorMessage;
283 286
 	}
284 287
 
288
+	/**
289
+	 * @param integer $default_value
290
+	 */
285 291
 	function ensureDefaultValue($default_value)
286 292
 	{
287 293
 		if($this->value === NULL || $this->value === '')
Please login to merge, or discard this patch.
Braces   +4 added lines, -8 removed lines patch added patch discarded remove patch
@@ -180,8 +180,7 @@  discard block
 block discarded – undo
180 180
 			if(!is_array($value))
181 181
 			{
182 182
 				$value = $this->_escapeStringValue($value);
183
-			}
184
-			else
183
+			} else
185 184
 			{
186 185
 				foreach($value as $key=>$val)
187 186
 				{
@@ -204,8 +203,7 @@  discard block
 block discarded – undo
204 203
 						$value[$key] = (int) $val;
205 204
 					}
206 205
 				}
207
-			}
208
-			else
206
+			} else
209 207
 			{
210 208
 				$value = (int) $value;
211 209
 			}
@@ -236,8 +234,7 @@  discard block
 block discarded – undo
236 234
 		{
237 235
 			// Valid byte sequence. Return unmodified.
238 236
 			return $captures[1];
239
-		}
240
-		else if(strlen($captures[2]))
237
+		} else if(strlen($captures[2]))
241 238
 		{
242 239
 			// Remove user defined area
243 240
 			if("\xF3\xB0\x80\x80" <= $captures[2])
@@ -246,8 +243,7 @@  discard block
 block discarded – undo
246 243
 			}
247 244
 
248 245
 			return $captures[2];
249
-		}
250
-		else
246
+		} else
251 247
 		{
252 248
 			return;
253 249
 		}
Please login to merge, or discard this patch.
Spacing   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -73,11 +73,11 @@  discard block
 block discarded – undo
73 73
 
74 74
 	function getType()
75 75
 	{
76
-		if(isset($this->type))
76
+		if (isset($this->type))
77 77
 		{
78 78
 			return $this->type;
79 79
 		}
80
-		if(is_string($this->value))
80
+		if (is_string($this->value))
81 81
 		{
82 82
 			return 'column_name';
83 83
 		}
@@ -102,7 +102,7 @@  discard block
 block discarded – undo
102 102
 
103 103
 	function getValue()
104 104
 	{
105
-		if(!isset($this->_value))
105
+		if (!isset($this->_value))
106 106
 		{
107 107
 			$value = $this->getEscapedValue();
108 108
 			$this->_value = $this->toString($value);
@@ -127,7 +127,7 @@  discard block
 block discarded – undo
127 127
 
128 128
 	function getUnescapedValue()
129 129
 	{
130
-		if($this->value === 'null')
130
+		if ($this->value === 'null')
131 131
 		{
132 132
 			return null;
133 133
 		}
@@ -141,17 +141,17 @@  discard block
 block discarded – undo
141 141
 	 */
142 142
 	function toString($value)
143 143
 	{
144
-		if(is_array($value))
144
+		if (is_array($value))
145 145
 		{
146
-			if(count($value) === 0)
146
+			if (count($value) === 0)
147 147
 			{
148 148
 				return '';
149 149
 			}
150
-			if(count($value) === 1 && $value[0] === '')
150
+			if (count($value) === 1 && $value[0] === '')
151 151
 			{
152 152
 				return '';
153 153
 			}
154
-			return '(' . implode(',', $value) . ')';
154
+			return '('.implode(',', $value).')';
155 155
 		}
156 156
 		return $value;
157 157
 	}
@@ -164,42 +164,42 @@  discard block
 block discarded – undo
164 164
 	function escapeValue($value)
165 165
 	{
166 166
 		$column_type = $this->getType();
167
-		if($column_type == 'column_name')
167
+		if ($column_type == 'column_name')
168 168
 		{
169 169
 			$dbParser = DB::getParser();
170 170
 			return $dbParser->parseExpression($value);
171 171
 		}
172
-		if(!isset($value))
172
+		if (!isset($value))
173 173
 		{
174 174
 			return null;
175 175
 		}
176 176
 
177 177
 		$columnTypeList = array('date' => 1, 'varchar' => 1, 'char' => 1, 'text' => 1, 'bigtext' => 1);
178
-		if(isset($columnTypeList[$column_type]))
178
+		if (isset($columnTypeList[$column_type]))
179 179
 		{
180
-			if(!is_array($value))
180
+			if (!is_array($value))
181 181
 			{
182 182
 				$value = $this->_escapeStringValue($value);
183 183
 			}
184 184
 			else
185 185
 			{
186
-				foreach($value as $key=>$val)
186
+				foreach ($value as $key=>$val)
187 187
 				{
188 188
 					$value[$key] = $this->_escapeStringValue($val);
189 189
 				}
190 190
 			}
191 191
 		}
192
-		if($this->uses_default_value)
192
+		if ($this->uses_default_value)
193 193
 		{
194 194
 			return $value;
195 195
 		}
196
-		if($column_type == 'number')
196
+		if ($column_type == 'number')
197 197
 		{
198
-			if(is_array($value))
198
+			if (is_array($value))
199 199
 			{
200
-				foreach($value AS $key => $val)
200
+				foreach ($value AS $key => $val)
201 201
 				{
202
-					if(isset($val) && $val !== '')
202
+					if (isset($val) && $val !== '')
203 203
 					{
204 204
 						$value[$key] = (int) $val;
205 205
 					}
@@ -227,20 +227,20 @@  discard block
 block discarded – undo
227 227
 		$value = preg_replace_callback($regex, array($this, 'utf8Replacer'), $value);
228 228
 		$db = DB::getInstance();
229 229
 		$value = $db->addQuotes($value);
230
-		return '\'' . $value . '\'';
230
+		return '\''.$value.'\'';
231 231
 	}
232 232
 
233 233
 	function utf8Replacer($captures)
234 234
 	{
235
-		if(strlen($captures[1]))
235
+		if (strlen($captures[1]))
236 236
 		{
237 237
 			// Valid byte sequence. Return unmodified.
238 238
 			return $captures[1];
239 239
 		}
240
-		else if(strlen($captures[2]))
240
+		else if (strlen($captures[2]))
241 241
 		{
242 242
 			// Remove user defined area
243
-			if("\xF3\xB0\x80\x80" <= $captures[2])
243
+			if ("\xF3\xB0\x80\x80" <= $captures[2])
244 244
 			{
245 245
 				return;
246 246
 			}
@@ -262,15 +262,15 @@  discard block
 block discarded – undo
262 262
 	{
263 263
 		$type = $this->getType();
264 264
 		$value = $this->getUnescapedValue();
265
-		if($type == 'column_name')
265
+		if ($type == 'column_name')
266 266
 		{
267 267
 			return TRUE;
268 268
 		}
269
-		if($type == 'number' && is_null($value))
269
+		if ($type == 'number' && is_null($value))
270 270
 		{
271 271
 			return FALSE;
272 272
 		}
273
-		if($type == 'number' && !is_numeric($value) && $this->uses_default_value)
273
+		if ($type == 'number' && !is_numeric($value) && $this->uses_default_value)
274 274
 		{
275 275
 			return TRUE;
276 276
 		}
@@ -284,7 +284,7 @@  discard block
 block discarded – undo
284 284
 
285 285
 	function ensureDefaultValue($default_value)
286 286
 	{
287
-		if($this->value === NULL || $this->value === '')
287
+		if ($this->value === NULL || $this->value === '')
288 288
 		{
289 289
 			$this->value = $default_value;
290 290
 			$this->uses_default_value = TRUE;
@@ -298,23 +298,23 @@  discard block
 block discarded – undo
298 298
 	 */
299 299
 	function checkFilter($filter_type)
300 300
 	{
301
-		if(isset($this->value) && $this->value != '')
301
+		if (isset($this->value) && $this->value != '')
302 302
 		{
303 303
 			global $lang;
304 304
 			$val = $this->value;
305 305
 			$key = $this->name;
306
-			switch($filter_type)
306
+			switch ($filter_type)
307 307
 			{
308 308
 				case 'email' :
309 309
 				case 'email_address' :
310
-					if(!preg_match('/^[\w-]+((?:\.|\+|\~)[\w-]+)*@[\w-]+(\.[\w-]+)+$/is', $val))
310
+					if (!preg_match('/^[\w-]+((?:\.|\+|\~)[\w-]+)*@[\w-]+(\.[\w-]+)+$/is', $val))
311 311
 					{
312 312
 						$this->isValid = FALSE;
313 313
 						$this->errorMessage = new BaseObject(-1, sprintf($lang->filter->invalid_email, $lang->{$key} ? $lang->{$key} : $key));
314 314
 					}
315 315
 					break;
316 316
 				case 'homepage' :
317
-					if(!preg_match('/^(http|https)+(:\/\/)+[0-9a-z_-]+\.[^ ]+$/is', $val))
317
+					if (!preg_match('/^(http|https)+(:\/\/)+[0-9a-z_-]+\.[^ ]+$/is', $val))
318 318
 					{
319 319
 						$this->isValid = FALSE;
320 320
 						$this->errorMessage = new BaseObject(-1, sprintf($lang->filter->invalid_homepage, $lang->{$key} ? $lang->{$key} : $key));
@@ -322,7 +322,7 @@  discard block
 block discarded – undo
322 322
 					break;
323 323
 				case 'userid' :
324 324
 				case 'user_id' :
325
-					if(!preg_match('/^[a-zA-Z]+([_0-9a-zA-Z]+)*$/is', $val))
325
+					if (!preg_match('/^[a-zA-Z]+([_0-9a-zA-Z]+)*$/is', $val))
326 326
 					{
327 327
 						$this->isValid = FALSE;
328 328
 						$this->errorMessage = new BaseObject(-1, sprintf($lang->filter->invalid_userid, $lang->{$key} ? $lang->{$key} : $key));
@@ -330,25 +330,25 @@  discard block
 block discarded – undo
330 330
 					break;
331 331
 				case 'number' :
332 332
 				case 'numbers' :
333
-					if(is_array($val))
333
+					if (is_array($val))
334 334
 					{
335 335
 						$val = join(',', $val);
336 336
 					}
337
-					if(!preg_match('/^(-?)[0-9]+(,\-?[0-9]+)*$/is', $val))
337
+					if (!preg_match('/^(-?)[0-9]+(,\-?[0-9]+)*$/is', $val))
338 338
 					{
339 339
 						$this->isValid = FALSE;
340 340
 						$this->errorMessage = new BaseObject(-1, sprintf($lang->filter->invalid_number, $lang->{$key} ? $lang->{$key} : $key));
341 341
 					}
342 342
 					break;
343 343
 				case 'alpha' :
344
-					if(!preg_match('/^[a-z]+$/is', $val))
344
+					if (!preg_match('/^[a-z]+$/is', $val))
345 345
 					{
346 346
 						$this->isValid = FALSE;
347 347
 						$this->errorMessage = new BaseObject(-1, sprintf($lang->filter->invalid_alpha, $lang->{$key} ? $lang->{$key} : $key));
348 348
 					}
349 349
 					break;
350 350
 				case 'alpha_number' :
351
-					if(!preg_match('/^[0-9a-z]+$/is', $val))
351
+					if (!preg_match('/^[0-9a-z]+$/is', $val))
352 352
 					{
353 353
 						$this->isValid = FALSE;
354 354
 						$this->errorMessage = new BaseObject(-1, sprintf($lang->filter->invalid_alpha_number, $lang->{$key} ? $lang->{$key} : $key));
@@ -360,7 +360,7 @@  discard block
 block discarded – undo
360 360
 
361 361
 	function checkMaxLength($length)
362 362
 	{
363
-		if($this->value && (strlen($this->value) > $length))
363
+		if ($this->value && (strlen($this->value) > $length))
364 364
 		{
365 365
 			global $lang;
366 366
 			$this->isValid = FALSE;
@@ -371,7 +371,7 @@  discard block
 block discarded – undo
371 371
 
372 372
 	function checkMinLength($length)
373 373
 	{
374
-		if($this->value && (strlen($this->value) < $length))
374
+		if ($this->value && (strlen($this->value) < $length))
375 375
 		{
376 376
 			global $lang;
377 377
 			$this->isValid = FALSE;
@@ -382,7 +382,7 @@  discard block
 block discarded – undo
382 382
 
383 383
 	function checkNotNull()
384 384
 	{
385
-		if(!isset($this->value))
385
+		if (!isset($this->value))
386 386
 		{
387 387
 			global $lang;
388 388
 			$this->isValid = FALSE;
Please login to merge, or discard this patch.
classes/xml/XmlQueryParser.class.php 2 patches
Doc Comments   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -79,9 +79,9 @@
 block discarded – undo
79 79
 	/**
80 80
 	 * Override for parent "parse" method
81 81
 	 *
82
-	 * @param null $query_id
83
-	 * @param null $xml_file
84
-	 * @param null $cache_file
82
+	 * @param string $query_id
83
+	 * @param string $xml_file
84
+	 * @param string $cache_file
85 85
 	 *
86 86
 	 * @return void
87 87
 	 */
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -4,7 +4,7 @@  discard block
 block discarded – undo
4 4
 /**
5 5
  * File containing the XE 1.5 XmlQueryParserClass
6 6
  */
7
-if(!defined('__XE_LOADED_XML_CLASS__'))
7
+if (!defined('__XE_LOADED_XML_CLASS__'))
8 8
 {
9 9
 	define('__XE_LOADED_XML_CLASS__', 1);
10 10
 }
@@ -37,7 +37,7 @@  discard block
 block discarded – undo
37 37
 	function &getInstance()
38 38
 	{
39 39
 		static $theInstance = NULL;
40
-		if(!isset($theInstance))
40
+		if (!isset($theInstance))
41 41
 		{
42 42
 			$theInstance = new XmlQueryParser();
43 43
 		}
@@ -64,7 +64,7 @@  discard block
 block discarded – undo
64 64
 
65 65
 		// insert, update, delete, select action
66 66
 		$action = strtolower($xml_obj->query->attrs->action);
67
-		if(!$action)
67
+		if (!$action)
68 68
 		{
69 69
 			return;
70 70
 		}
@@ -101,7 +101,7 @@  discard block
 block discarded – undo
101 101
 	{
102 102
 		$buff = FileHandler::readFile($xml_file);
103 103
 		$xml_obj = parent::parse($buff);
104
-		if(!$xml_obj)
104
+		if (!$xml_obj)
105 105
 		{
106 106
 			return;
107 107
 		}
Please login to merge, or discard this patch.
libs/FirePHPCore/fb.php 3 patches
Doc Comments   +1 added lines, -3 removed lines patch added patch discarded remove patch
@@ -50,7 +50,6 @@  discard block
 block discarded – undo
50 50
  * "Server" request tab.
51 51
  * 
52 52
  * @see http://www.firephp.org/Wiki/Reference/Fb
53
- * @param mixed $Object
54 53
  * @return true
55 54
  * @throws Exception
56 55
  */
@@ -130,7 +129,6 @@  discard block
 block discarded – undo
130 129
    * Log object to firebug
131 130
    * 
132 131
    * @see http://www.firephp.org/Wiki/Reference/Fb
133
-   * @param mixed $Object
134 132
    * @return true
135 133
    * @throws Exception
136 134
    */
@@ -150,7 +148,7 @@  discard block
 block discarded – undo
150 148
    *
151 149
    * @param string $Name
152 150
    * @param array $Options OPTIONAL Instructions on how to log the group
153
-   * @return true
151
+   * @return boolean
154 152
    */
155 153
   public static function group($Name, $Options=null) {
156 154
     $instance = FirePHP::getInstance(true);
Please login to merge, or discard this patch.
Indentation   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -73,8 +73,8 @@  discard block
 block discarded – undo
73 73
    * @return void
74 74
    */
75 75
   public static function setEnabled($Enabled) {
76
-    $instance = FirePHP::getInstance(true);
77
-    $instance->setEnabled($Enabled);
76
+	$instance = FirePHP::getInstance(true);
77
+	$instance->setEnabled($Enabled);
78 78
   }
79 79
   
80 80
   /**
@@ -84,8 +84,8 @@  discard block
 block discarded – undo
84 84
    * @return boolean TRUE if enabled
85 85
    */
86 86
   public static function getEnabled() {
87
-    $instance = FirePHP::getInstance(true);
88
-    return $instance->getEnabled();
87
+	$instance = FirePHP::getInstance(true);
88
+	return $instance->getEnabled();
89 89
   }  
90 90
   
91 91
   /**
@@ -99,8 +99,8 @@  discard block
 block discarded – undo
99 99
    * @return void
100 100
    */
101 101
   public static function setObjectFilter($Class, $Filter) {
102
-    $instance = FirePHP::getInstance(true);
103
-    $instance->setObjectFilter($Class, $Filter);
102
+	$instance = FirePHP::getInstance(true);
103
+	$instance->setObjectFilter($Class, $Filter);
104 104
   }
105 105
   
106 106
   /**
@@ -111,8 +111,8 @@  discard block
 block discarded – undo
111 111
    * @return void
112 112
    */
113 113
   public static function setOptions($Options) {
114
-    $instance = FirePHP::getInstance(true);
115
-    $instance->setOptions($Options);
114
+	$instance = FirePHP::getInstance(true);
115
+	$instance->setOptions($Options);
116 116
   }
117 117
 
118 118
   /**
@@ -122,8 +122,8 @@  discard block
 block discarded – undo
122 122
    * @return array The options
123 123
    */
124 124
   public static function getOptions() {
125
-    $instance = FirePHP::getInstance(true);
126
-    return $instance->getOptions();
125
+	$instance = FirePHP::getInstance(true);
126
+	return $instance->getOptions();
127 127
   }
128 128
 
129 129
   /**
@@ -136,9 +136,9 @@  discard block
 block discarded – undo
136 136
    */
137 137
   public static function send()
138 138
   {
139
-    $instance = FirePHP::getInstance(true);
140
-    $args = func_get_args();
141
-    return call_user_func_array(array($instance,'fb'),$args);
139
+	$instance = FirePHP::getInstance(true);
140
+	$args = func_get_args();
141
+	return call_user_func_array(array($instance,'fb'),$args);
142 142
   }
143 143
 
144 144
   /**
@@ -153,8 +153,8 @@  discard block
 block discarded – undo
153 153
    * @return true
154 154
    */
155 155
   public static function group($Name, $Options=null) {
156
-    $instance = FirePHP::getInstance(true);
157
-    return $instance->group($Name, $Options);
156
+	$instance = FirePHP::getInstance(true);
157
+	return $instance->group($Name, $Options);
158 158
   }
159 159
 
160 160
   /**
@@ -164,7 +164,7 @@  discard block
 block discarded – undo
164 164
    * @throws Exception
165 165
    */
166 166
   public static function groupEnd() {
167
-    return self::send(null, null, FirePHP::GROUP_END);
167
+	return self::send(null, null, FirePHP::GROUP_END);
168 168
   }
169 169
 
170 170
   /**
@@ -177,7 +177,7 @@  discard block
 block discarded – undo
177 177
    * @throws Exception
178 178
    */
179 179
   public static function log($Object, $Label=null) {
180
-    return self::send($Object, $Label, FirePHP::LOG);
180
+	return self::send($Object, $Label, FirePHP::LOG);
181 181
   } 
182 182
 
183 183
   /**
@@ -190,7 +190,7 @@  discard block
 block discarded – undo
190 190
    * @throws Exception
191 191
    */
192 192
   public static function info($Object, $Label=null) {
193
-    return self::send($Object, $Label, FirePHP::INFO);
193
+	return self::send($Object, $Label, FirePHP::INFO);
194 194
   } 
195 195
 
196 196
   /**
@@ -203,7 +203,7 @@  discard block
 block discarded – undo
203 203
    * @throws Exception
204 204
    */
205 205
   public static function warn($Object, $Label=null) {
206
-    return self::send($Object, $Label, FirePHP::WARN);
206
+	return self::send($Object, $Label, FirePHP::WARN);
207 207
   } 
208 208
 
209 209
   /**
@@ -216,7 +216,7 @@  discard block
 block discarded – undo
216 216
    * @throws Exception
217 217
    */
218 218
   public static function error($Object, $Label=null) {
219
-    return self::send($Object, $Label, FirePHP::ERROR);
219
+	return self::send($Object, $Label, FirePHP::ERROR);
220 220
   } 
221 221
 
222 222
   /**
@@ -229,7 +229,7 @@  discard block
 block discarded – undo
229 229
    * @throws Exception
230 230
    */
231 231
   public static function dump($Key, $Variable) {
232
-    return self::send($Variable, $Key, FirePHP::DUMP);
232
+	return self::send($Variable, $Key, FirePHP::DUMP);
233 233
   } 
234 234
 
235 235
   /**
@@ -241,7 +241,7 @@  discard block
 block discarded – undo
241 241
    * @throws Exception
242 242
    */
243 243
   public static function trace($Label) {
244
-    return self::send($Label, FirePHP::TRACE);
244
+	return self::send($Label, FirePHP::TRACE);
245 245
   } 
246 246
 
247 247
   /**
@@ -254,7 +254,7 @@  discard block
 block discarded – undo
254 254
    * @throws Exception
255 255
    */
256 256
   public static function table($Label, $Table) {
257
-    return self::send($Table, $Label, FirePHP::TABLE);
257
+	return self::send($Table, $Label, FirePHP::TABLE);
258 258
   } 
259 259
 
260 260
 }
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -59,7 +59,7 @@  discard block
 block discarded – undo
59 59
   $instance = FirePHP::getInstance(true);
60 60
   
61 61
   $args = func_get_args();
62
-  return call_user_func_array(array($instance,'fb'),$args);
62
+  return call_user_func_array(array($instance, 'fb'), $args);
63 63
 }
64 64
 
65 65
 
@@ -138,7 +138,7 @@  discard block
 block discarded – undo
138 138
   {
139 139
     $instance = FirePHP::getInstance(true);
140 140
     $args = func_get_args();
141
-    return call_user_func_array(array($instance,'fb'),$args);
141
+    return call_user_func_array(array($instance, 'fb'), $args);
142 142
   }
143 143
 
144 144
   /**
@@ -152,7 +152,7 @@  discard block
 block discarded – undo
152 152
    * @param array $Options OPTIONAL Instructions on how to log the group
153 153
    * @return true
154 154
    */
155
-  public static function group($Name, $Options=null) {
155
+  public static function group($Name, $Options = null) {
156 156
     $instance = FirePHP::getInstance(true);
157 157
     return $instance->group($Name, $Options);
158 158
   }
@@ -176,7 +176,7 @@  discard block
 block discarded – undo
176 176
    * @return true
177 177
    * @throws Exception
178 178
    */
179
-  public static function log($Object, $Label=null) {
179
+  public static function log($Object, $Label = null) {
180 180
     return self::send($Object, $Label, FirePHP::LOG);
181 181
   } 
182 182
 
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
    * @return true
190 190
    * @throws Exception
191 191
    */
192
-  public static function info($Object, $Label=null) {
192
+  public static function info($Object, $Label = null) {
193 193
     return self::send($Object, $Label, FirePHP::INFO);
194 194
   } 
195 195
 
@@ -202,7 +202,7 @@  discard block
 block discarded – undo
202 202
    * @return true
203 203
    * @throws Exception
204 204
    */
205
-  public static function warn($Object, $Label=null) {
205
+  public static function warn($Object, $Label = null) {
206 206
     return self::send($Object, $Label, FirePHP::WARN);
207 207
   } 
208 208
 
@@ -215,7 +215,7 @@  discard block
 block discarded – undo
215 215
    * @return true
216 216
    * @throws Exception
217 217
    */
218
-  public static function error($Object, $Label=null) {
218
+  public static function error($Object, $Label = null) {
219 219
     return self::send($Object, $Label, FirePHP::ERROR);
220 220
   } 
221 221
 
Please login to merge, or discard this patch.
libs/ftp.class.php 4 patches
Doc Comments   +25 added lines patch added patch discarded remove patch
@@ -177,6 +177,9 @@  discard block
 block discarded – undo
177 177
             return $response;
178 178
         }
179 179
 
180
+        /**
181
+         * @param string $pathname
182
+         */
180 183
         function ftp_delete($pathname)
181 184
         {
182 185
             $this->ftp_putcmd("DELE", $pathname);
@@ -187,6 +190,9 @@  discard block
 block discarded – undo
187 190
             return $response;
188 191
         }
189 192
 
193
+        /**
194
+         * @param string $pathname
195
+         */
190 196
         function ftp_rmdir($pathname)
191 197
         {
192 198
             $this->ftp_putcmd("RMD", $pathname);
@@ -197,6 +203,9 @@  discard block
 block discarded – undo
197 203
             return $response;
198 204
         }
199 205
 
206
+        /**
207
+         * @param string $pathname
208
+         */
200 209
         function ftp_mkdir($pathname)
201 210
         {
202 211
             $this->ftp_putcmd("MKD", $pathname);
@@ -358,6 +367,10 @@  discard block
 block discarded – undo
358 367
             return $response;
359 368
         }
360 369
 
370
+        /**
371
+         * @param string $remotefile
372
+         * @param string $localfile
373
+         */
361 374
         function ftp_put($remotefile, $localfile, $mode = 1)
362 375
         {
363 376
             
@@ -408,6 +421,9 @@  discard block
 block discarded – undo
408 421
             return $response;
409 422
         }
410 423
 
424
+        /**
425
+         * @param string $command
426
+         */
411 427
         function ftp_site($command)
412 428
         {
413 429
             $this->ftp_putcmd("SITE", $command);
@@ -431,6 +447,9 @@  discard block
 block discarded – undo
431 447
 
432 448
         /* Private Functions */
433 449
 
450
+        /**
451
+         * @param integer $mode
452
+         */
434 453
         function ftp_type($mode)
435 454
         {
436 455
             if ($mode) {
@@ -468,6 +487,9 @@  discard block
 block discarded – undo
468 487
             return $ip_port;
469 488
         }
470 489
 
490
+        /**
491
+         * @param string $cmd
492
+         */
471 493
         function ftp_putcmd($cmd, $arg = "")
472 494
         {
473 495
             if ($arg != "") {
@@ -536,6 +558,9 @@  discard block
 block discarded – undo
536 558
             return fclose($sock);
537 559
         }
538 560
 
561
+        /**
562
+         * @param string $ip_port
563
+         */
539 564
         function ftp_open_data_connection($ip_port)
540 565
         {
541 566
             if (!preg_match("@[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+@", $ip_port)) {
Please login to merge, or discard this patch.
Indentation   +479 added lines, -479 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php
2
-    /*********************************************************************
2
+	/*********************************************************************
3 3
      *
4 4
      *    PHP FTP Client Class By TOMO ( [email protected] )
5 5
 	 *    Modified By NAVER ( [email protected] )
@@ -18,7 +18,7 @@  discard block
 block discarded – undo
18 18
      *
19 19
      ********************************************************************/
20 20
 
21
-    /*********************************************************************
21
+	/*********************************************************************
22 22
      * List of available functions
23 23
      * ftp_connect($server, $port = 21)
24 24
      * ftp_login($user, $pass)
@@ -41,448 +41,448 @@  discard block
 block discarded – undo
41 41
      * ftp_quit()
42 42
      *********************************************************************/
43 43
 
44
-    class ftp
45
-    {
46
-        /* Public variables */
47
-        var $debug;
48
-        var $umask;
49
-        var $timeout;
50
-
51
-        /* Private variables */
52
-        var $ftp_sock;
53
-        var $ftp_resp;
54
-
55
-        /* Constractor */
56
-        function ftp()
57
-        {
58
-            $this->debug = false;
59
-            $this->umask = 0022;
60
-            $this->timeout = 30;
61
-
62
-            if (!defined("FTP_BINARY")) {
63
-                define("FTP_BINARY", 1);
64
-            }
65
-            if (!defined("FTP_ASCII")) {
66
-                define("FTP_ASCII", 0);
67
-            }
68
-
69
-            $this->ftp_resp = "";
70
-        }
71
-
72
-        /* Public functions */
73
-        function ftp_connect($server, $port = 21)
74
-        {
75
-            $this->ftp_debug("Trying to ".$server.":".$port." ...\n");
76
-            $this->ftp_sock = @fsockopen($server, $port, $errno, $errstr, $this->timeout);
77
-
78
-            if (!$this->ftp_sock || !$this->ftp_ok()) {
79
-                $this->ftp_debug("Error : Cannot connect to remote host \"".$server.":".$port."\"\n");
80
-                $this->ftp_debug("Error : fsockopen() ".$errstr." (".$errno.")\n");
81
-                return FALSE;
82
-            }
44
+	class ftp
45
+	{
46
+		/* Public variables */
47
+		var $debug;
48
+		var $umask;
49
+		var $timeout;
50
+
51
+		/* Private variables */
52
+		var $ftp_sock;
53
+		var $ftp_resp;
54
+
55
+		/* Constractor */
56
+		function ftp()
57
+		{
58
+			$this->debug = false;
59
+			$this->umask = 0022;
60
+			$this->timeout = 30;
61
+
62
+			if (!defined("FTP_BINARY")) {
63
+				define("FTP_BINARY", 1);
64
+			}
65
+			if (!defined("FTP_ASCII")) {
66
+				define("FTP_ASCII", 0);
67
+			}
68
+
69
+			$this->ftp_resp = "";
70
+		}
71
+
72
+		/* Public functions */
73
+		function ftp_connect($server, $port = 21)
74
+		{
75
+			$this->ftp_debug("Trying to ".$server.":".$port." ...\n");
76
+			$this->ftp_sock = @fsockopen($server, $port, $errno, $errstr, $this->timeout);
77
+
78
+			if (!$this->ftp_sock || !$this->ftp_ok()) {
79
+				$this->ftp_debug("Error : Cannot connect to remote host \"".$server.":".$port."\"\n");
80
+				$this->ftp_debug("Error : fsockopen() ".$errstr." (".$errno.")\n");
81
+				return FALSE;
82
+			}
83 83
 
84 84
 			if(substr($this->ftp_resp, 0, 3) !== '220')
85 85
 			{
86 86
 				return FALSE;
87 87
 			}
88 88
 
89
-            $this->ftp_debug("Connected to remote host \"".$server.":".$port."\"\n");
90
-
91
-            return TRUE;
92
-        }
93
-
94
-        function ftp_login($user, $pass)
95
-        {
96
-            $this->ftp_putcmd("USER", $user);
97
-            if (!$this->ftp_ok()) {
98
-                $this->ftp_debug("Error : USER command failed\n");
99
-                return FALSE;
100
-            }
101
-
102
-            $this->ftp_putcmd("PASS", $pass);
103
-            if (!$this->ftp_ok()) {
104
-                $this->ftp_debug("Error : PASS command failed\n");
105
-                return FALSE;
106
-            }
107
-            $this->ftp_debug("Authentication succeeded\n");
108
-
109
-            return TRUE;
110
-        }
111
-
112
-        function ftp_pwd()
113
-        {
114
-            $this->ftp_putcmd("PWD");
115
-            if (!$this->ftp_ok()) {
116
-                $this->ftp_debug("Error : PWD command failed\n");
117
-                return FALSE;
118
-            }
119
-
120
-            return preg_replace("@^[0-9]{3} \"(.+)\" .+\r\n@", "\\1", $this->ftp_resp);
121
-        }
122
-
123
-        function ftp_size($pathname)
124
-        {
125
-            $this->ftp_putcmd("SIZE", $pathname);
126
-            if (!$this->ftp_ok()) {
127
-                $this->ftp_debug("Error : SIZE command failed\n");
128
-                return -1;
129
-            }
130
-
131
-            return preg_replace("@^[0-9]{3} ([0-9]+)\r\n@", "\\1", $this->ftp_resp);
132
-        }
133
-
134
-        function ftp_mdtm($pathname)
135
-        {
136
-            $this->ftp_putcmd("MDTM", $pathname);
137
-            if (!$this->ftp_ok()) {
138
-                $this->ftp_debug("Error : MDTM command failed\n");
139
-                return -1;
140
-            }
141
-            $mdtm = preg_replace("@^[0-9]{3} ([0-9]+)\r\n@", "\\1", $this->ftp_resp);
142
-            $date = sscanf($mdtm, "%4d%2d%2d%2d%2d%2d");
143
-            $timestamp = mktime($date[3], $date[4], $date[5], $date[1], $date[2], $date[0]);
144
-
145
-            return $timestamp;
146
-        }
147
-
148
-        function ftp_systype()
149
-        {
150
-            $this->ftp_putcmd("SYST");
151
-            if (!$this->ftp_ok()) {
152
-                $this->ftp_debug("Error : SYST command failed\n");
153
-                return FALSE;
154
-            }
155
-            $DATA = explode(" ", $this->ftp_resp);
156
-
157
-            return $DATA[1];
158
-        }
159
-
160
-        function ftp_cdup()
161
-        {
162
-            $this->ftp_putcmd("CDUP");
163
-            $response = $this->ftp_ok();
164
-            if (!$response) {
165
-                $this->ftp_debug("Error : CDUP command failed\n");
166
-            }
167
-            return $response;
168
-        }
169
-
170
-        function ftp_chdir($pathname)
171
-        {
172
-            $this->ftp_putcmd("CWD", $pathname);
173
-            $response = $this->ftp_ok();
174
-            if (!$response) {
175
-                $this->ftp_debug("Error : CWD command failed\n");
176
-            }
177
-            return $response;
178
-        }
179
-
180
-        function ftp_delete($pathname)
181
-        {
182
-            $this->ftp_putcmd("DELE", $pathname);
183
-            $response = $this->ftp_ok();
184
-            if (!$response) {
185
-                $this->ftp_debug("Error : DELE command failed\n");
186
-            }
187
-            return $response;
188
-        }
189
-
190
-        function ftp_rmdir($pathname)
191
-        {
192
-            $this->ftp_putcmd("RMD", $pathname);
193
-            $response = $this->ftp_ok();
194
-            if (!$response) {
195
-                $this->ftp_debug("Error : RMD command failed\n");
196
-            }
197
-            return $response;
198
-        }
199
-
200
-        function ftp_mkdir($pathname)
201
-        {
202
-            $this->ftp_putcmd("MKD", $pathname);
203
-            $response = $this->ftp_ok();
204
-            if (!$response) {
205
-                $this->ftp_debug("Error : MKD command failed\n");
206
-            }
207
-            return $response;
208
-        }
209
-
210
-        function ftp_file_exists($pathname)
211
-        {
212
-            if (!($remote_list = $this->ftp_nlist("-a"))) {
213
-                $this->ftp_debug("Error : Cannot get remote file list\n");
214
-                return -1;
215
-            }
89
+			$this->ftp_debug("Connected to remote host \"".$server.":".$port."\"\n");
90
+
91
+			return TRUE;
92
+		}
93
+
94
+		function ftp_login($user, $pass)
95
+		{
96
+			$this->ftp_putcmd("USER", $user);
97
+			if (!$this->ftp_ok()) {
98
+				$this->ftp_debug("Error : USER command failed\n");
99
+				return FALSE;
100
+			}
101
+
102
+			$this->ftp_putcmd("PASS", $pass);
103
+			if (!$this->ftp_ok()) {
104
+				$this->ftp_debug("Error : PASS command failed\n");
105
+				return FALSE;
106
+			}
107
+			$this->ftp_debug("Authentication succeeded\n");
108
+
109
+			return TRUE;
110
+		}
111
+
112
+		function ftp_pwd()
113
+		{
114
+			$this->ftp_putcmd("PWD");
115
+			if (!$this->ftp_ok()) {
116
+				$this->ftp_debug("Error : PWD command failed\n");
117
+				return FALSE;
118
+			}
119
+
120
+			return preg_replace("@^[0-9]{3} \"(.+)\" .+\r\n@", "\\1", $this->ftp_resp);
121
+		}
122
+
123
+		function ftp_size($pathname)
124
+		{
125
+			$this->ftp_putcmd("SIZE", $pathname);
126
+			if (!$this->ftp_ok()) {
127
+				$this->ftp_debug("Error : SIZE command failed\n");
128
+				return -1;
129
+			}
130
+
131
+			return preg_replace("@^[0-9]{3} ([0-9]+)\r\n@", "\\1", $this->ftp_resp);
132
+		}
133
+
134
+		function ftp_mdtm($pathname)
135
+		{
136
+			$this->ftp_putcmd("MDTM", $pathname);
137
+			if (!$this->ftp_ok()) {
138
+				$this->ftp_debug("Error : MDTM command failed\n");
139
+				return -1;
140
+			}
141
+			$mdtm = preg_replace("@^[0-9]{3} ([0-9]+)\r\n@", "\\1", $this->ftp_resp);
142
+			$date = sscanf($mdtm, "%4d%2d%2d%2d%2d%2d");
143
+			$timestamp = mktime($date[3], $date[4], $date[5], $date[1], $date[2], $date[0]);
144
+
145
+			return $timestamp;
146
+		}
147
+
148
+		function ftp_systype()
149
+		{
150
+			$this->ftp_putcmd("SYST");
151
+			if (!$this->ftp_ok()) {
152
+				$this->ftp_debug("Error : SYST command failed\n");
153
+				return FALSE;
154
+			}
155
+			$DATA = explode(" ", $this->ftp_resp);
156
+
157
+			return $DATA[1];
158
+		}
159
+
160
+		function ftp_cdup()
161
+		{
162
+			$this->ftp_putcmd("CDUP");
163
+			$response = $this->ftp_ok();
164
+			if (!$response) {
165
+				$this->ftp_debug("Error : CDUP command failed\n");
166
+			}
167
+			return $response;
168
+		}
169
+
170
+		function ftp_chdir($pathname)
171
+		{
172
+			$this->ftp_putcmd("CWD", $pathname);
173
+			$response = $this->ftp_ok();
174
+			if (!$response) {
175
+				$this->ftp_debug("Error : CWD command failed\n");
176
+			}
177
+			return $response;
178
+		}
179
+
180
+		function ftp_delete($pathname)
181
+		{
182
+			$this->ftp_putcmd("DELE", $pathname);
183
+			$response = $this->ftp_ok();
184
+			if (!$response) {
185
+				$this->ftp_debug("Error : DELE command failed\n");
186
+			}
187
+			return $response;
188
+		}
189
+
190
+		function ftp_rmdir($pathname)
191
+		{
192
+			$this->ftp_putcmd("RMD", $pathname);
193
+			$response = $this->ftp_ok();
194
+			if (!$response) {
195
+				$this->ftp_debug("Error : RMD command failed\n");
196
+			}
197
+			return $response;
198
+		}
199
+
200
+		function ftp_mkdir($pathname)
201
+		{
202
+			$this->ftp_putcmd("MKD", $pathname);
203
+			$response = $this->ftp_ok();
204
+			if (!$response) {
205
+				$this->ftp_debug("Error : MKD command failed\n");
206
+			}
207
+			return $response;
208
+		}
209
+
210
+		function ftp_file_exists($pathname)
211
+		{
212
+			if (!($remote_list = $this->ftp_nlist("-a"))) {
213
+				$this->ftp_debug("Error : Cannot get remote file list\n");
214
+				return -1;
215
+			}
216 216
             
217
-            reset($remote_list);
218
-            while (list(,$value) = each($remote_list)) {
219
-                if ($value == $pathname) {
220
-                    $this->ftp_debug("Remote file ".$pathname." exists\n");
221
-                    return 1;
222
-                }
223
-            }
224
-            $this->ftp_debug("Remote file ".$pathname." does not exist\n");
225
-
226
-            return 0;
227
-        }
228
-
229
-        function ftp_rename($from, $to)
230
-        {
231
-            $this->ftp_putcmd("RNFR", $from);
232
-            if (!$this->ftp_ok()) {
233
-                $this->ftp_debug("Error : RNFR command failed\n");
234
-                return FALSE;
235
-            }
236
-            $this->ftp_putcmd("RNTO", $to);
237
-
238
-            $response = $this->ftp_ok();
239
-            if (!$response) {
240
-                $this->ftp_debug("Error : RNTO command failed\n");
241
-            }
242
-            return $response;
243
-        }
244
-
245
-        function ftp_nlist($arg = "", $pathname = "")
246
-        {
247
-            if (!($string = $this->ftp_pasv())) {
248
-                return FALSE;
249
-            }
250
-
251
-            if ($arg == "") {
252
-                $nlst = "NLST";
253
-            } else {
254
-                $nlst = "NLST ".$arg;
255
-            }
256
-            $this->ftp_putcmd($nlst, $pathname);
257
-
258
-            $sock_data = $this->ftp_open_data_connection($string);
259
-            if (!$sock_data || !$this->ftp_ok()) {
260
-                $this->ftp_debug("Error : Cannot connect to remote host\n");
261
-                $this->ftp_debug("Error : NLST command failed\n");
262
-                return FALSE;
263
-            }
264
-            $this->ftp_debug("Connected to remote host\n");
217
+			reset($remote_list);
218
+			while (list(,$value) = each($remote_list)) {
219
+				if ($value == $pathname) {
220
+					$this->ftp_debug("Remote file ".$pathname." exists\n");
221
+					return 1;
222
+				}
223
+			}
224
+			$this->ftp_debug("Remote file ".$pathname." does not exist\n");
225
+
226
+			return 0;
227
+		}
228
+
229
+		function ftp_rename($from, $to)
230
+		{
231
+			$this->ftp_putcmd("RNFR", $from);
232
+			if (!$this->ftp_ok()) {
233
+				$this->ftp_debug("Error : RNFR command failed\n");
234
+				return FALSE;
235
+			}
236
+			$this->ftp_putcmd("RNTO", $to);
237
+
238
+			$response = $this->ftp_ok();
239
+			if (!$response) {
240
+				$this->ftp_debug("Error : RNTO command failed\n");
241
+			}
242
+			return $response;
243
+		}
244
+
245
+		function ftp_nlist($arg = "", $pathname = "")
246
+		{
247
+			if (!($string = $this->ftp_pasv())) {
248
+				return FALSE;
249
+			}
250
+
251
+			if ($arg == "") {
252
+				$nlst = "NLST";
253
+			} else {
254
+				$nlst = "NLST ".$arg;
255
+			}
256
+			$this->ftp_putcmd($nlst, $pathname);
257
+
258
+			$sock_data = $this->ftp_open_data_connection($string);
259
+			if (!$sock_data || !$this->ftp_ok()) {
260
+				$this->ftp_debug("Error : Cannot connect to remote host\n");
261
+				$this->ftp_debug("Error : NLST command failed\n");
262
+				return FALSE;
263
+			}
264
+			$this->ftp_debug("Connected to remote host\n");
265 265
 
266 266
 			$list = array();
267
-            while (!feof($sock_data)) {
268
-                $list[] = preg_replace("@[\r\n]@", "", fgets($sock_data, 512));
269
-            }
270
-            $this->ftp_close_data_connection($sock_data);
271
-            $this->ftp_debug(implode("\n", $list));
272
-
273
-            if (!$this->ftp_ok()) {
274
-                $this->ftp_debug("Error : NLST command failed\n");
275
-                return FALSE;
276
-            }
277
-
278
-            return $list;
279
-        }
280
-
281
-        function ftp_rawlist($pathname = "")
282
-        {
283
-            if (!($string = $this->ftp_pasv())) {
284
-                return FALSE;
285
-            }
286
-
287
-            $this->ftp_putcmd("LIST", $pathname);
288
-
289
-            $sock_data = $this->ftp_open_data_connection($string);
290
-            if (!$sock_data || !$this->ftp_ok()) {
291
-                $this->ftp_debug("Error : Cannot connect to remote host\n");
292
-                $this->ftp_debug("Error : LIST command failed\n");
293
-                return FALSE;
294
-            }
295
-
296
-            $this->ftp_debug("Connected to remote host\n");
297
-
298
-            while (!feof($sock_data)) {
299
-                $list[] = preg_replace("@[\r\n]@", "", fgets($sock_data, 512));
300
-            }
301
-            $this->ftp_debug(implode("\n", $list));
302
-            $this->ftp_close_data_connection($sock_data);
303
-
304
-            if (!$this->ftp_ok()) {
305
-                $this->ftp_debug("Error : LIST command failed\n");
306
-                return FALSE;
307
-            }
308
-
309
-            return $list;
310
-        }
311
-
312
-        function ftp_get($localfile, $remotefile, $mode = 1)
313
-        {
314
-            umask($this->umask);
315
-
316
-            if (@file_exists($localfile)) {
317
-                $this->ftp_debug("Warning : local file will be overwritten\n");
318
-            }
319
-
320
-            $fp = @fopen($localfile, "w");
321
-            if (!$fp) {
322
-                $this->ftp_debug("Error : Cannot create \"".$localfile."\"");
323
-                $this->ftp_debug("Error : GET command failed\n");
324
-                return FALSE;
325
-            }
326
-
327
-            if (!$this->ftp_type($mode)) {
328
-                $this->ftp_debug("Error : GET command failed\n");
329
-                return FALSE;
330
-            }
331
-
332
-            if (!($string = $this->ftp_pasv())) {
333
-                $this->ftp_debug("Error : GET command failed\n");
334
-                return FALSE;
335
-            }
336
-
337
-            $this->ftp_putcmd("RETR", $remotefile);
338
-
339
-            $sock_data = $this->ftp_open_data_connection($string);
340
-            if (!$sock_data || !$this->ftp_ok()) {
341
-                $this->ftp_debug("Error : Cannot connect to remote host\n");
342
-                $this->ftp_debug("Error : GET command failed\n");
343
-                return FALSE;
344
-            }
345
-            $this->ftp_debug("Connected to remote host\n");
346
-            $this->ftp_debug("Retrieving remote file \"".$remotefile."\" to local file \"".$localfile."\"\n");
347
-            while (!feof($sock_data)) {
348
-                fputs($fp, fread($sock_data, 4096));
349
-            }
350
-            fclose($fp);
351
-
352
-            $this->ftp_close_data_connection($sock_data);
353
-
354
-            $response = $this->ftp_ok();
355
-            if (!$response) {
356
-                $this->ftp_debug("Error : GET command failed\n");
357
-            }
358
-            return $response;
359
-        }
360
-
361
-        function ftp_put($remotefile, $localfile, $mode = 1)
362
-        {
267
+			while (!feof($sock_data)) {
268
+				$list[] = preg_replace("@[\r\n]@", "", fgets($sock_data, 512));
269
+			}
270
+			$this->ftp_close_data_connection($sock_data);
271
+			$this->ftp_debug(implode("\n", $list));
272
+
273
+			if (!$this->ftp_ok()) {
274
+				$this->ftp_debug("Error : NLST command failed\n");
275
+				return FALSE;
276
+			}
277
+
278
+			return $list;
279
+		}
280
+
281
+		function ftp_rawlist($pathname = "")
282
+		{
283
+			if (!($string = $this->ftp_pasv())) {
284
+				return FALSE;
285
+			}
286
+
287
+			$this->ftp_putcmd("LIST", $pathname);
288
+
289
+			$sock_data = $this->ftp_open_data_connection($string);
290
+			if (!$sock_data || !$this->ftp_ok()) {
291
+				$this->ftp_debug("Error : Cannot connect to remote host\n");
292
+				$this->ftp_debug("Error : LIST command failed\n");
293
+				return FALSE;
294
+			}
295
+
296
+			$this->ftp_debug("Connected to remote host\n");
297
+
298
+			while (!feof($sock_data)) {
299
+				$list[] = preg_replace("@[\r\n]@", "", fgets($sock_data, 512));
300
+			}
301
+			$this->ftp_debug(implode("\n", $list));
302
+			$this->ftp_close_data_connection($sock_data);
303
+
304
+			if (!$this->ftp_ok()) {
305
+				$this->ftp_debug("Error : LIST command failed\n");
306
+				return FALSE;
307
+			}
308
+
309
+			return $list;
310
+		}
311
+
312
+		function ftp_get($localfile, $remotefile, $mode = 1)
313
+		{
314
+			umask($this->umask);
315
+
316
+			if (@file_exists($localfile)) {
317
+				$this->ftp_debug("Warning : local file will be overwritten\n");
318
+			}
319
+
320
+			$fp = @fopen($localfile, "w");
321
+			if (!$fp) {
322
+				$this->ftp_debug("Error : Cannot create \"".$localfile."\"");
323
+				$this->ftp_debug("Error : GET command failed\n");
324
+				return FALSE;
325
+			}
326
+
327
+			if (!$this->ftp_type($mode)) {
328
+				$this->ftp_debug("Error : GET command failed\n");
329
+				return FALSE;
330
+			}
331
+
332
+			if (!($string = $this->ftp_pasv())) {
333
+				$this->ftp_debug("Error : GET command failed\n");
334
+				return FALSE;
335
+			}
336
+
337
+			$this->ftp_putcmd("RETR", $remotefile);
338
+
339
+			$sock_data = $this->ftp_open_data_connection($string);
340
+			if (!$sock_data || !$this->ftp_ok()) {
341
+				$this->ftp_debug("Error : Cannot connect to remote host\n");
342
+				$this->ftp_debug("Error : GET command failed\n");
343
+				return FALSE;
344
+			}
345
+			$this->ftp_debug("Connected to remote host\n");
346
+			$this->ftp_debug("Retrieving remote file \"".$remotefile."\" to local file \"".$localfile."\"\n");
347
+			while (!feof($sock_data)) {
348
+				fputs($fp, fread($sock_data, 4096));
349
+			}
350
+			fclose($fp);
351
+
352
+			$this->ftp_close_data_connection($sock_data);
353
+
354
+			$response = $this->ftp_ok();
355
+			if (!$response) {
356
+				$this->ftp_debug("Error : GET command failed\n");
357
+			}
358
+			return $response;
359
+		}
360
+
361
+		function ftp_put($remotefile, $localfile, $mode = 1)
362
+		{
363 363
             
364
-            if (!@file_exists($localfile)) {
365
-                $this->ftp_debug("Error : No such file or directory \"".$localfile."\"\n");
366
-                $this->ftp_debug("Error : PUT command failed\n");
367
-                return FALSE;
368
-            }
369
-
370
-            $fp = @fopen($localfile, "r");
371
-            if (!$fp) {
372
-                $this->ftp_debug("Error : Cannot read file \"".$localfile."\"\n");
373
-                $this->ftp_debug("Error : PUT command failed\n");
374
-                return FALSE;
375
-            }
376
-
377
-            if (!$this->ftp_type($mode)) {
378
-                $this->ftp_debug("Error : PUT command failed\n");
379
-                return FALSE;
380
-            }
381
-
382
-            if (!($string = $this->ftp_pasv())) {
383
-                $this->ftp_debug("Error : PUT command failed\n");
384
-                return FALSE;
385
-            }
386
-
387
-            $this->ftp_putcmd("STOR", $remotefile);
388
-
389
-            $sock_data = $this->ftp_open_data_connection($string);
390
-            if (!$sock_data || !$this->ftp_ok()) {
391
-                $this->ftp_debug("Error : Cannot connect to remote host\n");
392
-                $this->ftp_debug("Error : PUT command failed\n");
393
-                return FALSE;
394
-            }
395
-            $this->ftp_debug("Connected to remote host\n");
396
-            $this->ftp_debug("Storing local file \"".$localfile."\" to remote file \"".$remotefile."\"\n");
397
-            while (!feof($fp)) {
398
-                fputs($sock_data, fread($fp, 4096));
399
-            }
400
-            fclose($fp);
401
-
402
-            $this->ftp_close_data_connection($sock_data);
403
-
404
-            $response = $this->ftp_ok();
405
-            if (!$response) {
406
-                $this->ftp_debug("Error : PUT command failed\n");
407
-            }
408
-            return $response;
409
-        }
410
-
411
-        function ftp_site($command)
412
-        {
413
-            $this->ftp_putcmd("SITE", $command);
414
-            $response = $this->ftp_ok();
415
-            if (!$response) {
416
-                $this->ftp_debug("Error : SITE command failed\n");
417
-            }
418
-            return $response;
419
-        }
420
-
421
-        function ftp_quit()
422
-        {
423
-            $this->ftp_putcmd("QUIT");
424
-            if (!$this->ftp_ok() || !fclose($this->ftp_sock)) {
425
-                $this->ftp_debug("Error : QUIT command failed\n");
426
-                return FALSE;
427
-            }
428
-            $this->ftp_debug("Disconnected from remote host\n");
429
-            return TRUE;
430
-        }
431
-
432
-        /* Private Functions */
433
-
434
-        function ftp_type($mode)
435
-        {
436
-            if ($mode) {
437
-                $type = "I"; //Binary mode
438
-            } else {
439
-                $type = "A"; //ASCII mode
440
-            }
441
-            $this->ftp_putcmd("TYPE", $type);
442
-            $response = $this->ftp_ok();
443
-            if (!$response) {
444
-                $this->ftp_debug("Error : TYPE command failed\n");
445
-            }
446
-            return $response;
447
-        }
448
-
449
-        function ftp_port($ip_port)
450
-        {
451
-            $this->ftp_putcmd("PORT", $ip_port);
452
-            $response = $this->ftp_ok();
453
-            if (!$response) {
454
-                $this->ftp_debug("Error : PORT command failed\n");
455
-            }
456
-            return $response;
457
-        }
458
-
459
-        function ftp_pasv()
460
-        {
461
-            $this->ftp_putcmd("PASV");
462
-            if (!$this->ftp_ok()) {
463
-                $this->ftp_debug("Error : PASV command failed\n");
464
-                return FALSE;
465
-            }
466
-
467
-            $ip_port = preg_replace("@^.+ \\(?([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+)\\)?.*\r\n$@", "\\1", $this->ftp_resp);
468
-            return $ip_port;
469
-        }
470
-
471
-        function ftp_putcmd($cmd, $arg = "")
472
-        {
473
-            if ($arg != "") {
474
-                $cmd = $cmd." ".$arg;
475
-            }
476
-
477
-            fputs($this->ftp_sock, $cmd."\r\n");
478
-            $this->ftp_debug("> ".$cmd."\n");
479
-
480
-            return TRUE;
481
-        }
482
-
483
-        function ftp_ok()
484
-        {
485
-            $this->ftp_resp = "";
364
+			if (!@file_exists($localfile)) {
365
+				$this->ftp_debug("Error : No such file or directory \"".$localfile."\"\n");
366
+				$this->ftp_debug("Error : PUT command failed\n");
367
+				return FALSE;
368
+			}
369
+
370
+			$fp = @fopen($localfile, "r");
371
+			if (!$fp) {
372
+				$this->ftp_debug("Error : Cannot read file \"".$localfile."\"\n");
373
+				$this->ftp_debug("Error : PUT command failed\n");
374
+				return FALSE;
375
+			}
376
+
377
+			if (!$this->ftp_type($mode)) {
378
+				$this->ftp_debug("Error : PUT command failed\n");
379
+				return FALSE;
380
+			}
381
+
382
+			if (!($string = $this->ftp_pasv())) {
383
+				$this->ftp_debug("Error : PUT command failed\n");
384
+				return FALSE;
385
+			}
386
+
387
+			$this->ftp_putcmd("STOR", $remotefile);
388
+
389
+			$sock_data = $this->ftp_open_data_connection($string);
390
+			if (!$sock_data || !$this->ftp_ok()) {
391
+				$this->ftp_debug("Error : Cannot connect to remote host\n");
392
+				$this->ftp_debug("Error : PUT command failed\n");
393
+				return FALSE;
394
+			}
395
+			$this->ftp_debug("Connected to remote host\n");
396
+			$this->ftp_debug("Storing local file \"".$localfile."\" to remote file \"".$remotefile."\"\n");
397
+			while (!feof($fp)) {
398
+				fputs($sock_data, fread($fp, 4096));
399
+			}
400
+			fclose($fp);
401
+
402
+			$this->ftp_close_data_connection($sock_data);
403
+
404
+			$response = $this->ftp_ok();
405
+			if (!$response) {
406
+				$this->ftp_debug("Error : PUT command failed\n");
407
+			}
408
+			return $response;
409
+		}
410
+
411
+		function ftp_site($command)
412
+		{
413
+			$this->ftp_putcmd("SITE", $command);
414
+			$response = $this->ftp_ok();
415
+			if (!$response) {
416
+				$this->ftp_debug("Error : SITE command failed\n");
417
+			}
418
+			return $response;
419
+		}
420
+
421
+		function ftp_quit()
422
+		{
423
+			$this->ftp_putcmd("QUIT");
424
+			if (!$this->ftp_ok() || !fclose($this->ftp_sock)) {
425
+				$this->ftp_debug("Error : QUIT command failed\n");
426
+				return FALSE;
427
+			}
428
+			$this->ftp_debug("Disconnected from remote host\n");
429
+			return TRUE;
430
+		}
431
+
432
+		/* Private Functions */
433
+
434
+		function ftp_type($mode)
435
+		{
436
+			if ($mode) {
437
+				$type = "I"; //Binary mode
438
+			} else {
439
+				$type = "A"; //ASCII mode
440
+			}
441
+			$this->ftp_putcmd("TYPE", $type);
442
+			$response = $this->ftp_ok();
443
+			if (!$response) {
444
+				$this->ftp_debug("Error : TYPE command failed\n");
445
+			}
446
+			return $response;
447
+		}
448
+
449
+		function ftp_port($ip_port)
450
+		{
451
+			$this->ftp_putcmd("PORT", $ip_port);
452
+			$response = $this->ftp_ok();
453
+			if (!$response) {
454
+				$this->ftp_debug("Error : PORT command failed\n");
455
+			}
456
+			return $response;
457
+		}
458
+
459
+		function ftp_pasv()
460
+		{
461
+			$this->ftp_putcmd("PASV");
462
+			if (!$this->ftp_ok()) {
463
+				$this->ftp_debug("Error : PASV command failed\n");
464
+				return FALSE;
465
+			}
466
+
467
+			$ip_port = preg_replace("@^.+ \\(?([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+)\\)?.*\r\n$@", "\\1", $this->ftp_resp);
468
+			return $ip_port;
469
+		}
470
+
471
+		function ftp_putcmd($cmd, $arg = "")
472
+		{
473
+			if ($arg != "") {
474
+				$cmd = $cmd." ".$arg;
475
+			}
476
+
477
+			fputs($this->ftp_sock, $cmd."\r\n");
478
+			$this->ftp_debug("> ".$cmd."\n");
479
+
480
+			return TRUE;
481
+		}
482
+
483
+		function ftp_ok()
484
+		{
485
+			$this->ftp_resp = "";
486 486
 
487 487
 			// 한줄을 읽는다.
488 488
 			$line = '';
@@ -521,49 +521,49 @@  discard block
 block discarded – undo
521 521
 				}while($line);
522 522
 			}
523 523
 
524
-            $this->ftp_debug(str_replace("\r\n", "\n", $this->ftp_resp));
525
-
526
-            if (!preg_match("@^[123]@", $this->ftp_resp)) {
527
-                return FALSE;
528
-            }
529
-
530
-            return TRUE;
531
-        }
532
-
533
-        function ftp_close_data_connection($sock)
534
-        {
535
-            $this->ftp_debug("Disconnected from remote host\n");
536
-            return fclose($sock);
537
-        }
538
-
539
-        function ftp_open_data_connection($ip_port)
540
-        {
541
-            if (!preg_match("@[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+@", $ip_port)) {
542
-                $this->ftp_debug("Error : Illegal ip-port format(".$ip_port.")\n");
543
-                return FALSE;
544
-            }
545
-
546
-            $DATA = explode(",", $ip_port);
547
-            $ipaddr = $DATA[0].".".$DATA[1].".".$DATA[2].".".$DATA[3];
548
-            $port   = $DATA[4]*256 + $DATA[5];
549
-            $this->ftp_debug("Trying to ".$ipaddr.":".$port." ...\n");
550
-            $data_connection = @fsockopen($ipaddr, $port, $errno, $errstr);
551
-            if (!$data_connection) {
552
-                $this->ftp_debug("Error : Cannot open data connection to ".$ipaddr.":".$port."\n");
553
-                $this->ftp_debug("Error : ".$errstr." (".$errno.")\n");
554
-                return FALSE;
555
-            }
556
-
557
-            return $data_connection;
558
-        }
559
-
560
-        function ftp_debug($message = "")
561
-        {
562
-            if ($this->debug) {
563
-                echo $message;
564
-            }
565
-
566
-            return TRUE;
567
-        }
568
-    }
524
+			$this->ftp_debug(str_replace("\r\n", "\n", $this->ftp_resp));
525
+
526
+			if (!preg_match("@^[123]@", $this->ftp_resp)) {
527
+				return FALSE;
528
+			}
529
+
530
+			return TRUE;
531
+		}
532
+
533
+		function ftp_close_data_connection($sock)
534
+		{
535
+			$this->ftp_debug("Disconnected from remote host\n");
536
+			return fclose($sock);
537
+		}
538
+
539
+		function ftp_open_data_connection($ip_port)
540
+		{
541
+			if (!preg_match("@[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+@", $ip_port)) {
542
+				$this->ftp_debug("Error : Illegal ip-port format(".$ip_port.")\n");
543
+				return FALSE;
544
+			}
545
+
546
+			$DATA = explode(",", $ip_port);
547
+			$ipaddr = $DATA[0].".".$DATA[1].".".$DATA[2].".".$DATA[3];
548
+			$port   = $DATA[4]*256 + $DATA[5];
549
+			$this->ftp_debug("Trying to ".$ipaddr.":".$port." ...\n");
550
+			$data_connection = @fsockopen($ipaddr, $port, $errno, $errstr);
551
+			if (!$data_connection) {
552
+				$this->ftp_debug("Error : Cannot open data connection to ".$ipaddr.":".$port."\n");
553
+				$this->ftp_debug("Error : ".$errstr." (".$errno.")\n");
554
+				return FALSE;
555
+			}
556
+
557
+			return $data_connection;
558
+		}
559
+
560
+		function ftp_debug($message = "")
561
+		{
562
+			if ($this->debug) {
563
+				echo $message;
564
+			}
565
+
566
+			return TRUE;
567
+		}
568
+	}
569 569
 ?>
Please login to merge, or discard this patch.
Braces   +9 added lines, -3 removed lines patch added patch discarded remove patch
@@ -489,7 +489,9 @@  discard block
 block discarded – undo
489 489
 			while(($char = fgetc($this->ftp_sock)) !== FALSE)
490 490
 			{
491 491
 				$line .= $char;
492
-				if($char === "\n") break;
492
+				if($char === "\n") {
493
+					break;
494
+				}
493 495
 			}
494 496
 				
495 497
 			// 세자리 응답 코드가 나와야 한다.
@@ -512,12 +514,16 @@  discard block
 block discarded – undo
512 514
 					while(($char = fgetc($this->ftp_sock)) !== FALSE)
513 515
 					{
514 516
 						$line .= $char;
515
-						if($char === "\n") break;
517
+						if($char === "\n") {
518
+							break;
519
+						}
516 520
 					}
517 521
 					$this->ftp_resp .= $line;
518 522
 
519 523
 					// 응답 코드와 같은 코드가 나오고 공백이 있으면 끝
520
-					if($code . ' ' === substr($line, 0, 4)) break;
524
+					if($code . ' ' === substr($line, 0, 4)) {
525
+						break;
526
+					}
521 527
 				}while($line);
522 528
 			}
523 529
 
Please login to merge, or discard this patch.
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -81,7 +81,7 @@  discard block
 block discarded – undo
81 81
                 return FALSE;
82 82
             }
83 83
 
84
-			if(substr($this->ftp_resp, 0, 3) !== '220')
84
+			if (substr($this->ftp_resp, 0, 3) !== '220')
85 85
 			{
86 86
 				return FALSE;
87 87
 			}
@@ -486,14 +486,14 @@  discard block
 block discarded – undo
486 486
 
487 487
 			// 한줄을 읽는다.
488 488
 			$line = '';
489
-			while(($char = fgetc($this->ftp_sock)) !== FALSE)
489
+			while (($char = fgetc($this->ftp_sock)) !== FALSE)
490 490
 			{
491 491
 				$line .= $char;
492
-				if($char === "\n") break;
492
+				if ($char === "\n") break;
493 493
 			}
494 494
 				
495 495
 			// 세자리 응답 코드가 나와야 한다.
496
-			if(!preg_match('@^[0-9]{3}@', $line))
496
+			if (!preg_match('@^[0-9]{3}@', $line))
497 497
 			{
498 498
 				return FALSE;
499 499
 			}
@@ -501,7 +501,7 @@  discard block
 block discarded – undo
501 501
 			$this->ftp_resp = $line;
502 502
 
503 503
 			// 4번째 문자가 -이면 여러줄인 응답이다.
504
-			if($line[3] === '-')
504
+			if ($line[3] === '-')
505 505
 			{
506 506
 				$code = substr($line, 0, 3);
507 507
 
@@ -509,16 +509,16 @@  discard block
 block discarded – undo
509 509
 				do
510 510
 				{
511 511
 					$line = '';
512
-					while(($char = fgetc($this->ftp_sock)) !== FALSE)
512
+					while (($char = fgetc($this->ftp_sock)) !== FALSE)
513 513
 					{
514 514
 						$line .= $char;
515
-						if($char === "\n") break;
515
+						if ($char === "\n") break;
516 516
 					}
517 517
 					$this->ftp_resp .= $line;
518 518
 
519 519
 					// 응답 코드와 같은 코드가 나오고 공백이 있으면 끝
520
-					if($code . ' ' === substr($line, 0, 4)) break;
521
-				}while($line);
520
+					if ($code.' ' === substr($line, 0, 4)) break;
521
+				} while ($line);
522 522
 			}
523 523
 
524 524
             $this->ftp_debug(str_replace("\r\n", "\n", $this->ftp_resp));
@@ -545,7 +545,7 @@  discard block
 block discarded – undo
545 545
 
546 546
             $DATA = explode(",", $ip_port);
547 547
             $ipaddr = $DATA[0].".".$DATA[1].".".$DATA[2].".".$DATA[3];
548
-            $port   = $DATA[4]*256 + $DATA[5];
548
+            $port   = $DATA[4] * 256 + $DATA[5];
549 549
             $this->ftp_debug("Trying to ".$ipaddr.":".$port." ...\n");
550 550
             $data_connection = @fsockopen($ipaddr, $port, $errno, $errstr);
551 551
             if (!$data_connection) {
Please login to merge, or discard this patch.
libs/idna_convert/idna_convert.class.php 3 patches
Doc Comments   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -88,7 +88,7 @@  discard block
 block discarded – undo
88 88
      * the constructor
89 89
      *
90 90
      * @param array $options
91
-     * @return boolean
91
+     * @return boolean|null
92 92
      * @since 0.5.2
93 93
      */
94 94
     public function __construct($options = false)
@@ -393,7 +393,7 @@  discard block
 block discarded – undo
393 393
     /**
394 394
      * Use this method to get the last error ocurred
395 395
      * @param    void
396
-     * @return   string   The last error, that occured
396
+     * @return   boolean   The last error, that occured
397 397
      */
398 398
     public function get_last_error()
399 399
     {
@@ -403,7 +403,7 @@  discard block
 block discarded – undo
403 403
     /**
404 404
      * The actual decoding algorithm
405 405
      * @param string
406
-     * @return mixed
406
+     * @return false|string
407 407
      */
408 408
     protected function _decode($encoded)
409 409
     {
@@ -464,7 +464,7 @@  discard block
 block discarded – undo
464 464
     /**
465 465
      * The actual encoding algorithm
466 466
      * @param  string
467
-     * @return mixed
467
+     * @return false|string
468 468
      */
469 469
     protected function _encode($decoded)
470 470
     {
@@ -699,7 +699,7 @@  discard block
 block discarded – undo
699 699
      * Decomposes a Hangul syllable
700 700
      * (see http://www.unicode.org/unicode/reports/tr15/#Hangul
701 701
      * @param    integer  32bit UCS4 code point
702
-     * @return   array    Either Hangul Syllable decomposed or original 32bit value as one value array
702
+     * @return   integer[]    Either Hangul Syllable decomposed or original 32bit value as one value array
703 703
      */
704 704
     protected function _hangul_decompose($char)
705 705
     {
Please login to merge, or discard this patch.
Indentation   +3367 added lines, -3367 removed lines patch added patch discarded remove patch
@@ -51,3411 +51,3411 @@
 block discarded – undo
51 51
  */
52 52
 class idna_convert {
53 53
 
54
-    private $version = '0.9.0';
55
-    protected $sub_version = 'main';
54
+	private $version = '0.9.0';
55
+	protected $sub_version = 'main';
56 56
 
57
-    // NP See below
58
-    // Internal settings, do not mess with them
59
-    protected $_punycode_prefix = 'xn--';
60
-    protected $_invalid_ucs = 0x80000000;
61
-    protected $_max_ucs = 0x10FFFF;
62
-    protected $_base = 36;
63
-    protected $_tmin = 1;
64
-    protected $_tmax = 26;
65
-    protected $_skew = 38;
66
-    protected $_damp = 700;
67
-    protected $_initial_bias = 72;
68
-    protected $_initial_n = 0x80;
69
-    protected $_sbase = 0xAC00;
70
-    protected $_lbase = 0x1100;
71
-    protected $_vbase = 0x1161;
72
-    protected $_tbase = 0x11A7;
73
-    protected $_lcount = 19;
74
-    protected $_vcount = 21;
75
-    protected $_tcount = 28;
76
-    protected $_ncount = 588;   // _vcount * _tcount
77
-    protected $_scount = 11172; // _lcount * _tcount * _vcount
78
-    protected $_error = false;
79
-    protected static $_mb_string_overload = null;
80
-    // See {@link set_paramter()} for details of how to change the following
81
-    // settings from within your script / application
82
-    protected $_api_encoding = 'utf8';   // Default input charset is UTF-8
83
-    protected $_allow_overlong = false;  // Overlong UTF-8 encodings are forbidden
84
-    protected $_strict_mode = false;     // Behave strict or not
85
-    protected $_idn_version = 2003;      // Can be either 2003 (old, default) or 2008
57
+	// NP See below
58
+	// Internal settings, do not mess with them
59
+	protected $_punycode_prefix = 'xn--';
60
+	protected $_invalid_ucs = 0x80000000;
61
+	protected $_max_ucs = 0x10FFFF;
62
+	protected $_base = 36;
63
+	protected $_tmin = 1;
64
+	protected $_tmax = 26;
65
+	protected $_skew = 38;
66
+	protected $_damp = 700;
67
+	protected $_initial_bias = 72;
68
+	protected $_initial_n = 0x80;
69
+	protected $_sbase = 0xAC00;
70
+	protected $_lbase = 0x1100;
71
+	protected $_vbase = 0x1161;
72
+	protected $_tbase = 0x11A7;
73
+	protected $_lcount = 19;
74
+	protected $_vcount = 21;
75
+	protected $_tcount = 28;
76
+	protected $_ncount = 588;   // _vcount * _tcount
77
+	protected $_scount = 11172; // _lcount * _tcount * _vcount
78
+	protected $_error = false;
79
+	protected static $_mb_string_overload = null;
80
+	// See {@link set_paramter()} for details of how to change the following
81
+	// settings from within your script / application
82
+	protected $_api_encoding = 'utf8';   // Default input charset is UTF-8
83
+	protected $_allow_overlong = false;  // Overlong UTF-8 encodings are forbidden
84
+	protected $_strict_mode = false;     // Behave strict or not
85
+	protected $_idn_version = 2003;      // Can be either 2003 (old, default) or 2008
86 86
 
87
-    /**
88
-     * the constructor
89
-     *
90
-     * @param array $options
91
-     * @return boolean
92
-     * @since 0.5.2
93
-     */
94
-    public function __construct($options = false)
95
-    {
96
-        $this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount;
97
-        // If parameters are given, pass these to the respective method
98
-        if (is_array($options)) {
99
-            $this->set_parameter($options);
100
-        }
87
+	/**
88
+	 * the constructor
89
+	 *
90
+	 * @param array $options
91
+	 * @return boolean
92
+	 * @since 0.5.2
93
+	 */
94
+	public function __construct($options = false)
95
+	{
96
+		$this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount;
97
+		// If parameters are given, pass these to the respective method
98
+		if (is_array($options)) {
99
+			$this->set_parameter($options);
100
+		}
101 101
 
102
-        // populate mbstring overloading cache if not set
103
-        if (self::$_mb_string_overload === null) {
104
-            self::$_mb_string_overload = (extension_loaded('mbstring') && (ini_get('mbstring.func_overload') & 0x02) === 0x02);
105
-        }
106
-    }
102
+		// populate mbstring overloading cache if not set
103
+		if (self::$_mb_string_overload === null) {
104
+			self::$_mb_string_overload = (extension_loaded('mbstring') && (ini_get('mbstring.func_overload') & 0x02) === 0x02);
105
+		}
106
+	}
107 107
 
108
-    public function get_version()
109
-    {
110
-        return $this->version.'-'.$this->sub_version;
111
-    }
108
+	public function get_version()
109
+	{
110
+		return $this->version.'-'.$this->sub_version;
111
+	}
112 112
 
113
-    /**
114
-     * Sets a new option value. Available options and values:
115
-     * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8,
116
-     *         'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8]
117
-     * [overlong - Unicode does not allow unnecessarily long encodings of chars,
118
-     *             to allow this, set this parameter to true, else to false;
119
-     *             default is false.]
120
-     * [strict - true: strict mode, good for registration purposes - Causes errors
121
-     *           on failures; false: loose mode, ideal for "wildlife" applications
122
-     *           by silently ignoring errors and returning the original input instead
123
-     *
124
-     * @param    mixed     Parameter to set (string: single parameter; array of Parameter => Value pairs)
125
-     * @param    string    Value to use (if parameter 1 is a string)
126
-     * @return   boolean   true on success, false otherwise
127
-     */
128
-    public function set_parameter($option, $value = false)
129
-    {
130
-        if (!is_array($option)) {
131
-            $option = array($option => $value);
132
-        }
133
-        foreach ($option as $k => $v) {
134
-            switch ($k) {
135
-                case 'encoding':
136
-                    switch ($v) {
137
-                        case 'utf8':
138
-                        case 'ucs4_string':
139
-                        case 'ucs4_array':
140
-                            $this->_api_encoding = $v;
141
-                            break;
142
-                        default:
143
-                            $this->_error('Set Parameter: Unknown parameter ' . $v . ' for option ' . $k);
144
-                            return false;
145
-                    }
146
-                    break;
147
-                case 'overlong':
148
-                    $this->_allow_overlong = ($v) ? true : false;
149
-                    break;
150
-                case 'strict':
151
-                    $this->_strict_mode = ($v) ? true : false;
152
-                    break;
153
-                case 'idn_version':
154
-                    if (in_array($v, array('2003', '2008'))) {
155
-                        $this->_idn_version = $v;
156
-                    } else {
157
-                        $this->_error('Set Parameter: Unknown parameter ' . $v . ' for option ' . $k);
158
-                    }
159
-                    break;
160
-                case 'encode_german_sz': // Deprecated
161
-                    if (!$v) {
162
-                        self::$NP['replacemaps'][0xDF] = array(0x73, 0x73);
163
-                    } else {
164
-                        unset(self::$NP['replacemaps'][0xDF]);
165
-                    }
166
-                    break;
167
-                default:
168
-                    $this->_error('Set Parameter: Unknown option ' . $k);
169
-                    return false;
170
-            }
171
-        }
172
-        return true;
173
-    }
113
+	/**
114
+	 * Sets a new option value. Available options and values:
115
+	 * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8,
116
+	 *         'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8]
117
+	 * [overlong - Unicode does not allow unnecessarily long encodings of chars,
118
+	 *             to allow this, set this parameter to true, else to false;
119
+	 *             default is false.]
120
+	 * [strict - true: strict mode, good for registration purposes - Causes errors
121
+	 *           on failures; false: loose mode, ideal for "wildlife" applications
122
+	 *           by silently ignoring errors and returning the original input instead
123
+	 *
124
+	 * @param    mixed     Parameter to set (string: single parameter; array of Parameter => Value pairs)
125
+	 * @param    string    Value to use (if parameter 1 is a string)
126
+	 * @return   boolean   true on success, false otherwise
127
+	 */
128
+	public function set_parameter($option, $value = false)
129
+	{
130
+		if (!is_array($option)) {
131
+			$option = array($option => $value);
132
+		}
133
+		foreach ($option as $k => $v) {
134
+			switch ($k) {
135
+				case 'encoding':
136
+					switch ($v) {
137
+						case 'utf8':
138
+						case 'ucs4_string':
139
+						case 'ucs4_array':
140
+							$this->_api_encoding = $v;
141
+							break;
142
+						default:
143
+							$this->_error('Set Parameter: Unknown parameter ' . $v . ' for option ' . $k);
144
+							return false;
145
+					}
146
+					break;
147
+				case 'overlong':
148
+					$this->_allow_overlong = ($v) ? true : false;
149
+					break;
150
+				case 'strict':
151
+					$this->_strict_mode = ($v) ? true : false;
152
+					break;
153
+				case 'idn_version':
154
+					if (in_array($v, array('2003', '2008'))) {
155
+						$this->_idn_version = $v;
156
+					} else {
157
+						$this->_error('Set Parameter: Unknown parameter ' . $v . ' for option ' . $k);
158
+					}
159
+					break;
160
+				case 'encode_german_sz': // Deprecated
161
+					if (!$v) {
162
+						self::$NP['replacemaps'][0xDF] = array(0x73, 0x73);
163
+					} else {
164
+						unset(self::$NP['replacemaps'][0xDF]);
165
+					}
166
+					break;
167
+				default:
168
+					$this->_error('Set Parameter: Unknown option ' . $k);
169
+					return false;
170
+			}
171
+		}
172
+		return true;
173
+	}
174 174
 
175
-    /**
176
-     * Decode a given ACE domain name
177
-     * @param    string   Domain name (ACE string)
178
-     * [@param    string   Desired output encoding, see {@link set_parameter}]
179
-     * @return   string   Decoded Domain name (UTF-8 or UCS-4)
180
-     */
181
-    public function decode($input, $one_time_encoding = false)
182
-    {
183
-        // Optionally set
184
-        if ($one_time_encoding) {
185
-            switch ($one_time_encoding) {
186
-                case 'utf8':
187
-                case 'ucs4_string':
188
-                case 'ucs4_array':
189
-                    break;
190
-                default:
191
-                    $this->_error('Unknown encoding ' . $one_time_encoding);
192
-                    return false;
193
-            }
194
-        }
195
-        // Make sure to drop any newline characters around
196
-        $input = trim($input);
175
+	/**
176
+	 * Decode a given ACE domain name
177
+	 * @param    string   Domain name (ACE string)
178
+	 * [@param    string   Desired output encoding, see {@link set_parameter}]
179
+	 * @return   string   Decoded Domain name (UTF-8 or UCS-4)
180
+	 */
181
+	public function decode($input, $one_time_encoding = false)
182
+	{
183
+		// Optionally set
184
+		if ($one_time_encoding) {
185
+			switch ($one_time_encoding) {
186
+				case 'utf8':
187
+				case 'ucs4_string':
188
+				case 'ucs4_array':
189
+					break;
190
+				default:
191
+					$this->_error('Unknown encoding ' . $one_time_encoding);
192
+					return false;
193
+			}
194
+		}
195
+		// Make sure to drop any newline characters around
196
+		$input = trim($input);
197 197
 
198
-        // Negotiate input and try to determine, whether it is a plain string,
199
-        // an email address or something like a complete URL
200
-        if (strpos($input, '@')) { // Maybe it is an email address
201
-            // No no in strict mode
202
-            if ($this->_strict_mode) {
203
-                $this->_error('Only simple domain name parts can be handled in strict mode');
204
-                return false;
205
-            }
206
-            list ($email_pref, $input) = explode('@', $input, 2);
207
-            $arr = explode('.', $input);
208
-            foreach ($arr as $k => $v) {
209
-                if (preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $v)) {
210
-                    $conv = $this->_decode($v);
211
-                    if ($conv) {
212
-                        $arr[$k] = $conv;
213
-                    }
214
-                }
215
-            }
216
-            $input = join('.', $arr);
217
-            $arr = explode('.', $email_pref);
218
-            foreach ($arr as $k => $v) {
219
-                if (preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $v)) {
220
-                    $conv = $this->_decode($v);
221
-                    if ($conv) {
222
-                        $arr[$k] = $conv;
223
-                    }
224
-                }
225
-            }
226
-            $email_pref = join('.', $arr);
227
-            $return = $email_pref . '@' . $input;
228
-        } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters)
229
-            // No no in strict mode
230
-            if ($this->_strict_mode) {
231
-                $this->_error('Only simple domain name parts can be handled in strict mode');
232
-                return false;
233
-            }
234
-            $parsed = parse_url($input);
235
-            if (isset($parsed['host'])) {
236
-                $arr = explode('.', $parsed['host']);
237
-                foreach ($arr as $k => $v) {
238
-                    $conv = $this->_decode($v);
239
-                    if ($conv) {
240
-                        $arr[$k] = $conv;
241
-                    }
242
-                }
243
-                $parsed['host'] = join('.', $arr);
244
-                $return = (empty($parsed['scheme']) ? '' : $parsed['scheme'] . (strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')).
245
-                        (empty($parsed['user']) ? '' : $parsed['user'] . (empty($parsed['pass']) ? '' : ':' . $parsed['pass']) . '@').
246
-                        $parsed['host'].
247
-                        (empty($parsed['port']) ? '' : ':' . $parsed['port']).
248
-                        (empty($parsed['path']) ? '' : $parsed['path']).
249
-                        (empty($parsed['query']) ? '' : '?' . $parsed['query']).
250
-                        (empty($parsed['fragment']) ? '' : '#' . $parsed['fragment']);
251
-            } else { // parse_url seems to have failed, try without it
252
-                $arr = explode('.', $input);
253
-                foreach ($arr as $k => $v) {
254
-                    $conv = $this->_decode($v);
255
-                    $arr[$k] = ($conv) ? $conv : $v;
256
-                }
257
-                $return = join('.', $arr);
258
-            }
259
-        } else { // Otherwise we consider it being a pure domain name string
260
-            $return = $this->_decode($input);
261
-            if (!$return) {
262
-                $return = $input;
263
-            }
264
-        }
265
-        // The output is UTF-8 by default, other output formats need conversion here
266
-        // If one time encoding is given, use this, else the objects property
267
-        switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
268
-            case 'utf8':        return $return; // break;
269
-            case 'ucs4_string': return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return));  // break;
270
-            case 'ucs4_array':  return $this->_utf8_to_ucs4($return); // break;
271
-            default:            $this->_error('Unsupported output format'); return false;
272
-        }
273
-    }
198
+		// Negotiate input and try to determine, whether it is a plain string,
199
+		// an email address or something like a complete URL
200
+		if (strpos($input, '@')) { // Maybe it is an email address
201
+			// No no in strict mode
202
+			if ($this->_strict_mode) {
203
+				$this->_error('Only simple domain name parts can be handled in strict mode');
204
+				return false;
205
+			}
206
+			list ($email_pref, $input) = explode('@', $input, 2);
207
+			$arr = explode('.', $input);
208
+			foreach ($arr as $k => $v) {
209
+				if (preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $v)) {
210
+					$conv = $this->_decode($v);
211
+					if ($conv) {
212
+						$arr[$k] = $conv;
213
+					}
214
+				}
215
+			}
216
+			$input = join('.', $arr);
217
+			$arr = explode('.', $email_pref);
218
+			foreach ($arr as $k => $v) {
219
+				if (preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $v)) {
220
+					$conv = $this->_decode($v);
221
+					if ($conv) {
222
+						$arr[$k] = $conv;
223
+					}
224
+				}
225
+			}
226
+			$email_pref = join('.', $arr);
227
+			$return = $email_pref . '@' . $input;
228
+		} elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters)
229
+			// No no in strict mode
230
+			if ($this->_strict_mode) {
231
+				$this->_error('Only simple domain name parts can be handled in strict mode');
232
+				return false;
233
+			}
234
+			$parsed = parse_url($input);
235
+			if (isset($parsed['host'])) {
236
+				$arr = explode('.', $parsed['host']);
237
+				foreach ($arr as $k => $v) {
238
+					$conv = $this->_decode($v);
239
+					if ($conv) {
240
+						$arr[$k] = $conv;
241
+					}
242
+				}
243
+				$parsed['host'] = join('.', $arr);
244
+				$return = (empty($parsed['scheme']) ? '' : $parsed['scheme'] . (strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')).
245
+						(empty($parsed['user']) ? '' : $parsed['user'] . (empty($parsed['pass']) ? '' : ':' . $parsed['pass']) . '@').
246
+						$parsed['host'].
247
+						(empty($parsed['port']) ? '' : ':' . $parsed['port']).
248
+						(empty($parsed['path']) ? '' : $parsed['path']).
249
+						(empty($parsed['query']) ? '' : '?' . $parsed['query']).
250
+						(empty($parsed['fragment']) ? '' : '#' . $parsed['fragment']);
251
+			} else { // parse_url seems to have failed, try without it
252
+				$arr = explode('.', $input);
253
+				foreach ($arr as $k => $v) {
254
+					$conv = $this->_decode($v);
255
+					$arr[$k] = ($conv) ? $conv : $v;
256
+				}
257
+				$return = join('.', $arr);
258
+			}
259
+		} else { // Otherwise we consider it being a pure domain name string
260
+			$return = $this->_decode($input);
261
+			if (!$return) {
262
+				$return = $input;
263
+			}
264
+		}
265
+		// The output is UTF-8 by default, other output formats need conversion here
266
+		// If one time encoding is given, use this, else the objects property
267
+		switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
268
+			case 'utf8':        return $return; // break;
269
+			case 'ucs4_string': return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return));  // break;
270
+			case 'ucs4_array':  return $this->_utf8_to_ucs4($return); // break;
271
+			default:            $this->_error('Unsupported output format'); return false;
272
+		}
273
+	}
274 274
 
275
-    /**
276
-     * Encode a given UTF-8 domain name
277
-     * @param    string   Domain name (UTF-8 or UCS-4)
278
-     * [@param    string   Desired input encoding, see {@link set_parameter}]
279
-     * @return   string   Encoded Domain name (ACE string)
280
-     */
281
-    public function encode($decoded, $one_time_encoding = false)
282
-    {
283
-        // Forcing conversion of input to UCS4 array
284
-        // If one time encoding is given, use this, else the objects property
285
-        switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) {
286
-            case 'utf8':
287
-                $decoded = $this->_utf8_to_ucs4($decoded);
288
-                break;
289
-            case 'ucs4_string':
290
-                $decoded = $this->_ucs4_string_to_ucs4($decoded);
291
-            case 'ucs4_array':
292
-                break;
293
-            default:
294
-                $this->_error('Unsupported input format: ' . ($one_time_encoding ? $one_time_encoding : $this->_api_encoding));
295
-                return false;
296
-        }
275
+	/**
276
+	 * Encode a given UTF-8 domain name
277
+	 * @param    string   Domain name (UTF-8 or UCS-4)
278
+	 * [@param    string   Desired input encoding, see {@link set_parameter}]
279
+	 * @return   string   Encoded Domain name (ACE string)
280
+	 */
281
+	public function encode($decoded, $one_time_encoding = false)
282
+	{
283
+		// Forcing conversion of input to UCS4 array
284
+		// If one time encoding is given, use this, else the objects property
285
+		switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) {
286
+			case 'utf8':
287
+				$decoded = $this->_utf8_to_ucs4($decoded);
288
+				break;
289
+			case 'ucs4_string':
290
+				$decoded = $this->_ucs4_string_to_ucs4($decoded);
291
+			case 'ucs4_array':
292
+				break;
293
+			default:
294
+				$this->_error('Unsupported input format: ' . ($one_time_encoding ? $one_time_encoding : $this->_api_encoding));
295
+				return false;
296
+		}
297 297
 
298
-        // No input, no output, what else did you expect?
299
-        if (empty($decoded)) {
300
-            return '';
301
-        }
298
+		// No input, no output, what else did you expect?
299
+		if (empty($decoded)) {
300
+			return '';
301
+		}
302 302
 
303
-        // Anchors for iteration
304
-        $last_begin = 0;
305
-        // Output string
306
-        $output = '';
307
-        foreach ($decoded as $k => $v) {
308
-            // Make sure to use just the plain dot
309
-            switch ($v) {
310
-                case 0x3002:
311
-                case 0xFF0E:
312
-                case 0xFF61:
313
-                    $decoded[$k] = 0x2E;
314
-                    // Right, no break here, the above are converted to dots anyway
315
-                // Stumbling across an anchoring character
316
-                case 0x2E:
317
-                case 0x2F:
318
-                case 0x3A:
319
-                case 0x3F:
320
-                case 0x40:
321
-                    // Neither email addresses nor URLs allowed in strict mode
322
-                    if ($this->_strict_mode) {
323
-                        $this->_error('Neither email addresses nor URLs are allowed in strict mode.');
324
-                        return false;
325
-                    } else {
326
-                        // Skip first char
327
-                        if ($k) {
328
-                            $encoded = '';
329
-                            $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k) - $last_begin)));
330
-                            if ($encoded) {
331
-                                $output .= $encoded;
332
-                            } else {
333
-                                $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k) - $last_begin)));
334
-                            }
335
-                            $output .= chr($decoded[$k]);
336
-                        }
337
-                        $last_begin = $k + 1;
338
-                    }
339
-            }
340
-        }
341
-        // Catch the rest of the string
342
-        if ($last_begin) {
343
-            $inp_len = sizeof($decoded);
344
-            $encoded = '';
345
-            $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len) - $last_begin)));
346
-            if ($encoded) {
347
-                $output .= $encoded;
348
-            } else {
349
-                $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len) - $last_begin)));
350
-            }
351
-            return $output;
352
-        } else {
353
-            if (false !== ($output = $this->_encode($decoded))) {
354
-                return $output;
355
-            } else {
356
-                return $this->_ucs4_to_utf8($decoded);
357
-            }
358
-        }
359
-    }
303
+		// Anchors for iteration
304
+		$last_begin = 0;
305
+		// Output string
306
+		$output = '';
307
+		foreach ($decoded as $k => $v) {
308
+			// Make sure to use just the plain dot
309
+			switch ($v) {
310
+				case 0x3002:
311
+				case 0xFF0E:
312
+				case 0xFF61:
313
+					$decoded[$k] = 0x2E;
314
+					// Right, no break here, the above are converted to dots anyway
315
+				// Stumbling across an anchoring character
316
+				case 0x2E:
317
+				case 0x2F:
318
+				case 0x3A:
319
+				case 0x3F:
320
+				case 0x40:
321
+					// Neither email addresses nor URLs allowed in strict mode
322
+					if ($this->_strict_mode) {
323
+						$this->_error('Neither email addresses nor URLs are allowed in strict mode.');
324
+						return false;
325
+					} else {
326
+						// Skip first char
327
+						if ($k) {
328
+							$encoded = '';
329
+							$encoded = $this->_encode(array_slice($decoded, $last_begin, (($k) - $last_begin)));
330
+							if ($encoded) {
331
+								$output .= $encoded;
332
+							} else {
333
+								$output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k) - $last_begin)));
334
+							}
335
+							$output .= chr($decoded[$k]);
336
+						}
337
+						$last_begin = $k + 1;
338
+					}
339
+			}
340
+		}
341
+		// Catch the rest of the string
342
+		if ($last_begin) {
343
+			$inp_len = sizeof($decoded);
344
+			$encoded = '';
345
+			$encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len) - $last_begin)));
346
+			if ($encoded) {
347
+				$output .= $encoded;
348
+			} else {
349
+				$output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len) - $last_begin)));
350
+			}
351
+			return $output;
352
+		} else {
353
+			if (false !== ($output = $this->_encode($decoded))) {
354
+				return $output;
355
+			} else {
356
+				return $this->_ucs4_to_utf8($decoded);
357
+			}
358
+		}
359
+	}
360 360
 
361
-    /**
362
-     * Removes a weakness of encode(), which cannot properly handle URIs but instead encodes their
363
-     * path or query components, too.
364
-     * @param string  $uri  Expects the URI as a UTF-8 (or ASCII) string
365
-     * @return  string  The URI encoded to Punycode, everything but the host component is left alone
366
-     * @since 0.6.4
367
-     */
368
-    public function encode_uri($uri)
369
-    {
370
-        $parsed = parse_url($uri);
371
-        if (!isset($parsed['host'])) {
372
-            $this->_error('The given string does not look like a URI');
373
-            return false;
374
-        }
375
-        $arr = explode('.', $parsed['host']);
376
-        foreach ($arr as $k => $v) {
377
-            $conv = $this->encode($v, 'utf8');
378
-            if ($conv) {
379
-                $arr[$k] = $conv;
380
-            }
381
-        }
382
-        $parsed['host'] = join('.', $arr);
383
-        $return = (empty($parsed['scheme']) ? '' : $parsed['scheme'] . (strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')).
384
-                (empty($parsed['user']) ? '' : $parsed['user'] . (empty($parsed['pass']) ? '' : ':' . $parsed['pass']) . '@').
385
-                $parsed['host'].
386
-                (empty($parsed['port']) ? '' : ':' . $parsed['port']).
387
-                (empty($parsed['path']) ? '' : $parsed['path']).
388
-                (empty($parsed['query']) ? '' : '?' . $parsed['query']).
389
-                (empty($parsed['fragment']) ? '' : '#' . $parsed['fragment']);
390
-        return $return;
391
-    }
361
+	/**
362
+	 * Removes a weakness of encode(), which cannot properly handle URIs but instead encodes their
363
+	 * path or query components, too.
364
+	 * @param string  $uri  Expects the URI as a UTF-8 (or ASCII) string
365
+	 * @return  string  The URI encoded to Punycode, everything but the host component is left alone
366
+	 * @since 0.6.4
367
+	 */
368
+	public function encode_uri($uri)
369
+	{
370
+		$parsed = parse_url($uri);
371
+		if (!isset($parsed['host'])) {
372
+			$this->_error('The given string does not look like a URI');
373
+			return false;
374
+		}
375
+		$arr = explode('.', $parsed['host']);
376
+		foreach ($arr as $k => $v) {
377
+			$conv = $this->encode($v, 'utf8');
378
+			if ($conv) {
379
+				$arr[$k] = $conv;
380
+			}
381
+		}
382
+		$parsed['host'] = join('.', $arr);
383
+		$return = (empty($parsed['scheme']) ? '' : $parsed['scheme'] . (strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')).
384
+				(empty($parsed['user']) ? '' : $parsed['user'] . (empty($parsed['pass']) ? '' : ':' . $parsed['pass']) . '@').
385
+				$parsed['host'].
386
+				(empty($parsed['port']) ? '' : ':' . $parsed['port']).
387
+				(empty($parsed['path']) ? '' : $parsed['path']).
388
+				(empty($parsed['query']) ? '' : '?' . $parsed['query']).
389
+				(empty($parsed['fragment']) ? '' : '#' . $parsed['fragment']);
390
+		return $return;
391
+	}
392 392
 
393
-    /**
394
-     * Use this method to get the last error ocurred
395
-     * @param    void
396
-     * @return   string   The last error, that occured
397
-     */
398
-    public function get_last_error()
399
-    {
400
-        return $this->_error;
401
-    }
393
+	/**
394
+	 * Use this method to get the last error ocurred
395
+	 * @param    void
396
+	 * @return   string   The last error, that occured
397
+	 */
398
+	public function get_last_error()
399
+	{
400
+		return $this->_error;
401
+	}
402 402
 
403
-    /**
404
-     * The actual decoding algorithm
405
-     * @param string
406
-     * @return mixed
407
-     */
408
-    protected function _decode($encoded)
409
-    {
410
-        $decoded = array();
411
-        // find the Punycode prefix
412
-        if (!preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $encoded)) {
413
-            $this->_error('This is not a punycode string');
414
-            return false;
415
-        }
416
-        $encode_test = preg_replace('!^' . preg_quote($this->_punycode_prefix, '!') . '!', '', $encoded);
417
-        // If nothing left after removing the prefix, it is hopeless
418
-        if (!$encode_test) {
419
-            $this->_error('The given encoded string was empty');
420
-            return false;
421
-        }
422
-        // Find last occurence of the delimiter
423
-        $delim_pos = strrpos($encoded, '-');
424
-        if ($delim_pos > self::byteLength($this->_punycode_prefix)) {
425
-            for ($k = self::byteLength($this->_punycode_prefix); $k < $delim_pos; ++$k) {
426
-                $decoded[] = ord($encoded{$k});
427
-            }
428
-        }
429
-        $deco_len = count($decoded);
430
-        $enco_len = self::byteLength($encoded);
403
+	/**
404
+	 * The actual decoding algorithm
405
+	 * @param string
406
+	 * @return mixed
407
+	 */
408
+	protected function _decode($encoded)
409
+	{
410
+		$decoded = array();
411
+		// find the Punycode prefix
412
+		if (!preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $encoded)) {
413
+			$this->_error('This is not a punycode string');
414
+			return false;
415
+		}
416
+		$encode_test = preg_replace('!^' . preg_quote($this->_punycode_prefix, '!') . '!', '', $encoded);
417
+		// If nothing left after removing the prefix, it is hopeless
418
+		if (!$encode_test) {
419
+			$this->_error('The given encoded string was empty');
420
+			return false;
421
+		}
422
+		// Find last occurence of the delimiter
423
+		$delim_pos = strrpos($encoded, '-');
424
+		if ($delim_pos > self::byteLength($this->_punycode_prefix)) {
425
+			for ($k = self::byteLength($this->_punycode_prefix); $k < $delim_pos; ++$k) {
426
+				$decoded[] = ord($encoded{$k});
427
+			}
428
+		}
429
+		$deco_len = count($decoded);
430
+		$enco_len = self::byteLength($encoded);
431 431
 
432
-        // Wandering through the strings; init
433
-        $is_first = true;
434
-        $bias = $this->_initial_bias;
435
-        $idx = 0;
436
-        $char = $this->_initial_n;
432
+		// Wandering through the strings; init
433
+		$is_first = true;
434
+		$bias = $this->_initial_bias;
435
+		$idx = 0;
436
+		$char = $this->_initial_n;
437 437
 
438
-        for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) {
439
-            for ($old_idx = $idx, $w = 1, $k = $this->_base; 1; $k += $this->_base) {
440
-                $digit = $this->_decode_digit($encoded{$enco_idx++});
441
-                $idx += $digit * $w;
442
-                $t = ($k <= $bias) ? $this->_tmin :
443
-                        (($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias));
444
-                if ($digit < $t) {
445
-                    break;
446
-                }
447
-                $w = (int) ($w * ($this->_base - $t));
448
-            }
449
-            $bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first);
450
-            $is_first = false;
451
-            $char += (int) ($idx / ($deco_len + 1));
452
-            $idx %= ($deco_len + 1);
453
-            if ($deco_len > 0) {
454
-                // Make room for the decoded char
455
-                for ($i = $deco_len; $i > $idx; $i--) {
456
-                    $decoded[$i] = $decoded[($i - 1)];
457
-                }
458
-            }
459
-            $decoded[$idx++] = $char;
460
-        }
461
-        return $this->_ucs4_to_utf8($decoded);
462
-    }
438
+		for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) {
439
+			for ($old_idx = $idx, $w = 1, $k = $this->_base; 1; $k += $this->_base) {
440
+				$digit = $this->_decode_digit($encoded{$enco_idx++});
441
+				$idx += $digit * $w;
442
+				$t = ($k <= $bias) ? $this->_tmin :
443
+						(($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias));
444
+				if ($digit < $t) {
445
+					break;
446
+				}
447
+				$w = (int) ($w * ($this->_base - $t));
448
+			}
449
+			$bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first);
450
+			$is_first = false;
451
+			$char += (int) ($idx / ($deco_len + 1));
452
+			$idx %= ($deco_len + 1);
453
+			if ($deco_len > 0) {
454
+				// Make room for the decoded char
455
+				for ($i = $deco_len; $i > $idx; $i--) {
456
+					$decoded[$i] = $decoded[($i - 1)];
457
+				}
458
+			}
459
+			$decoded[$idx++] = $char;
460
+		}
461
+		return $this->_ucs4_to_utf8($decoded);
462
+	}
463 463
 
464
-    /**
465
-     * The actual encoding algorithm
466
-     * @param  string
467
-     * @return mixed
468
-     */
469
-    protected function _encode($decoded)
470
-    {
471
-        // We cannot encode a domain name containing the Punycode prefix
472
-        $extract = self::byteLength($this->_punycode_prefix);
473
-        $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix);
474
-        $check_deco = array_slice($decoded, 0, $extract);
464
+	/**
465
+	 * The actual encoding algorithm
466
+	 * @param  string
467
+	 * @return mixed
468
+	 */
469
+	protected function _encode($decoded)
470
+	{
471
+		// We cannot encode a domain name containing the Punycode prefix
472
+		$extract = self::byteLength($this->_punycode_prefix);
473
+		$check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix);
474
+		$check_deco = array_slice($decoded, 0, $extract);
475 475
 
476
-        if ($check_pref == $check_deco) {
477
-            $this->_error('This is already a punycode string');
478
-            return false;
479
-        }
480
-        // We will not try to encode strings consisting of basic code points only
481
-        $encodable = false;
482
-        foreach ($decoded as $k => $v) {
483
-            if ($v > 0x7a) {
484
-                $encodable = true;
485
-                break;
486
-            }
487
-        }
488
-        if (!$encodable) {
489
-            $this->_error('The given string does not contain encodable chars');
490
-            return false;
491
-        }
492
-        // Do NAMEPREP
493
-        $decoded = $this->_nameprep($decoded);
494
-        if (!$decoded || !is_array($decoded)) {
495
-            return false; // NAMEPREP failed
496
-        }
497
-        $deco_len = count($decoded);
498
-        if (!$deco_len) {
499
-            return false; // Empty array
500
-        }
501
-        $codecount = 0; // How many chars have been consumed
502
-        $encoded = '';
503
-        // Copy all basic code points to output
504
-        for ($i = 0; $i < $deco_len; ++$i) {
505
-            $test = $decoded[$i];
506
-            // Will match [-0-9a-zA-Z]
507
-            if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B) || (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) {
508
-                $encoded .= chr($decoded[$i]);
509
-                $codecount++;
510
-            }
511
-        }
512
-        if ($codecount == $deco_len) {
513
-            return $encoded; // All codepoints were basic ones
514
-        }
515
-        // Start with the prefix; copy it to output
516
-        $encoded = $this->_punycode_prefix . $encoded;
517
-        // If we have basic code points in output, add an hyphen to the end
518
-        if ($codecount) {
519
-            $encoded .= '-';
520
-        }
521
-        // Now find and encode all non-basic code points
522
-        $is_first = true;
523
-        $cur_code = $this->_initial_n;
524
-        $bias = $this->_initial_bias;
525
-        $delta = 0;
526
-        while ($codecount < $deco_len) {
527
-            // Find the smallest code point >= the current code point and
528
-            // remember the last ouccrence of it in the input
529
-            for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) {
530
-                if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) {
531
-                    $next_code = $decoded[$i];
532
-                }
533
-            }
534
-            $delta += ($next_code - $cur_code) * ($codecount + 1);
535
-            $cur_code = $next_code;
476
+		if ($check_pref == $check_deco) {
477
+			$this->_error('This is already a punycode string');
478
+			return false;
479
+		}
480
+		// We will not try to encode strings consisting of basic code points only
481
+		$encodable = false;
482
+		foreach ($decoded as $k => $v) {
483
+			if ($v > 0x7a) {
484
+				$encodable = true;
485
+				break;
486
+			}
487
+		}
488
+		if (!$encodable) {
489
+			$this->_error('The given string does not contain encodable chars');
490
+			return false;
491
+		}
492
+		// Do NAMEPREP
493
+		$decoded = $this->_nameprep($decoded);
494
+		if (!$decoded || !is_array($decoded)) {
495
+			return false; // NAMEPREP failed
496
+		}
497
+		$deco_len = count($decoded);
498
+		if (!$deco_len) {
499
+			return false; // Empty array
500
+		}
501
+		$codecount = 0; // How many chars have been consumed
502
+		$encoded = '';
503
+		// Copy all basic code points to output
504
+		for ($i = 0; $i < $deco_len; ++$i) {
505
+			$test = $decoded[$i];
506
+			// Will match [-0-9a-zA-Z]
507
+			if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B) || (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) {
508
+				$encoded .= chr($decoded[$i]);
509
+				$codecount++;
510
+			}
511
+		}
512
+		if ($codecount == $deco_len) {
513
+			return $encoded; // All codepoints were basic ones
514
+		}
515
+		// Start with the prefix; copy it to output
516
+		$encoded = $this->_punycode_prefix . $encoded;
517
+		// If we have basic code points in output, add an hyphen to the end
518
+		if ($codecount) {
519
+			$encoded .= '-';
520
+		}
521
+		// Now find and encode all non-basic code points
522
+		$is_first = true;
523
+		$cur_code = $this->_initial_n;
524
+		$bias = $this->_initial_bias;
525
+		$delta = 0;
526
+		while ($codecount < $deco_len) {
527
+			// Find the smallest code point >= the current code point and
528
+			// remember the last ouccrence of it in the input
529
+			for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) {
530
+				if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) {
531
+					$next_code = $decoded[$i];
532
+				}
533
+			}
534
+			$delta += ($next_code - $cur_code) * ($codecount + 1);
535
+			$cur_code = $next_code;
536 536
 
537
-            // Scan input again and encode all characters whose code point is $cur_code
538
-            for ($i = 0; $i < $deco_len; $i++) {
539
-                if ($decoded[$i] < $cur_code) {
540
-                    $delta++;
541
-                } elseif ($decoded[$i] == $cur_code) {
542
-                    for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) {
543
-                        $t = ($k <= $bias) ? $this->_tmin :
544
-                                (($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias);
545
-                        if ($q < $t) {
546
-                            break;
547
-                        }
548
-                        $encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval()
549
-                        $q = (int) (($q - $t) / ($this->_base - $t));
550
-                    }
551
-                    $encoded .= $this->_encode_digit($q);
552
-                    $bias = $this->_adapt($delta, $codecount + 1, $is_first);
553
-                    $codecount++;
554
-                    $delta = 0;
555
-                    $is_first = false;
556
-                }
557
-            }
558
-            $delta++;
559
-            $cur_code++;
560
-        }
561
-        return $encoded;
562
-    }
537
+			// Scan input again and encode all characters whose code point is $cur_code
538
+			for ($i = 0; $i < $deco_len; $i++) {
539
+				if ($decoded[$i] < $cur_code) {
540
+					$delta++;
541
+				} elseif ($decoded[$i] == $cur_code) {
542
+					for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) {
543
+						$t = ($k <= $bias) ? $this->_tmin :
544
+								(($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias);
545
+						if ($q < $t) {
546
+							break;
547
+						}
548
+						$encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval()
549
+						$q = (int) (($q - $t) / ($this->_base - $t));
550
+					}
551
+					$encoded .= $this->_encode_digit($q);
552
+					$bias = $this->_adapt($delta, $codecount + 1, $is_first);
553
+					$codecount++;
554
+					$delta = 0;
555
+					$is_first = false;
556
+				}
557
+			}
558
+			$delta++;
559
+			$cur_code++;
560
+		}
561
+		return $encoded;
562
+	}
563 563
 
564
-    /**
565
-     * Adapt the bias according to the current code point and position
566
-     * @param int $delta
567
-     * @param int $npoints
568
-     * @param int $is_first
569
-     * @return int
570
-     */
571
-    protected function _adapt($delta, $npoints, $is_first)
572
-    {
573
-        $delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2));
574
-        $delta += intval($delta / $npoints);
575
-        for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) {
576
-            $delta = intval($delta / ($this->_base - $this->_tmin));
577
-        }
578
-        return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew));
579
-    }
564
+	/**
565
+	 * Adapt the bias according to the current code point and position
566
+	 * @param int $delta
567
+	 * @param int $npoints
568
+	 * @param int $is_first
569
+	 * @return int
570
+	 */
571
+	protected function _adapt($delta, $npoints, $is_first)
572
+	{
573
+		$delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2));
574
+		$delta += intval($delta / $npoints);
575
+		for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) {
576
+			$delta = intval($delta / ($this->_base - $this->_tmin));
577
+		}
578
+		return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew));
579
+	}
580 580
 
581
-    /**
582
-     * Encoding a certain digit
583
-     * @param    int $d
584
-     * @return string
585
-     */
586
-    protected function _encode_digit($d)
587
-    {
588
-        return chr($d + 22 + 75 * ($d < 26));
589
-    }
581
+	/**
582
+	 * Encoding a certain digit
583
+	 * @param    int $d
584
+	 * @return string
585
+	 */
586
+	protected function _encode_digit($d)
587
+	{
588
+		return chr($d + 22 + 75 * ($d < 26));
589
+	}
590 590
 
591
-    /**
592
-     * Decode a certain digit
593
-     * @param    int $cp
594
-     * @return int
595
-     */
596
-    protected function _decode_digit($cp)
597
-    {
598
-        $cp = ord($cp);
599
-        return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base));
600
-    }
591
+	/**
592
+	 * Decode a certain digit
593
+	 * @param    int $cp
594
+	 * @return int
595
+	 */
596
+	protected function _decode_digit($cp)
597
+	{
598
+		$cp = ord($cp);
599
+		return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base));
600
+	}
601 601
 
602
-    /**
603
-     * Internal error handling method
604
-     * @param  string $error
605
-     */
606
-    protected function _error($error = '')
607
-    {
608
-        $this->_error = $error;
609
-    }
602
+	/**
603
+	 * Internal error handling method
604
+	 * @param  string $error
605
+	 */
606
+	protected function _error($error = '')
607
+	{
608
+		$this->_error = $error;
609
+	}
610 610
 
611
-    /**
612
-     * Do Nameprep according to RFC3491 and RFC3454
613
-     * @param    array    Unicode Characters
614
-     * @return   string   Unicode Characters, Nameprep'd
615
-     */
616
-    protected function _nameprep($input)
617
-    {
618
-        $output = array();
619
-        //
620
-        // Mapping
621
-        // Walking through the input array, performing the required steps on each of
622
-        // the input chars and putting the result into the output array
623
-        // While mapping required chars we apply the cannonical ordering
624
-        foreach ($input as $v) {
625
-            // Map to nothing == skip that code point
626
-            if (in_array($v, self::$NP['map_nothing'])) {
627
-                continue;
628
-            }
629
-            // Try to find prohibited input
630
-            if (in_array($v, self::$NP['prohibit']) || in_array($v, self::$NP['general_prohibited'])) {
631
-                $this->_error('NAMEPREP: Prohibited input U+' . sprintf('%08X', $v));
632
-                return false;
633
-            }
634
-            foreach (self::$NP['prohibit_ranges'] as $range) {
635
-                if ($range[0] <= $v && $v <= $range[1]) {
636
-                    $this->_error('NAMEPREP: Prohibited input U+' . sprintf('%08X', $v));
637
-                    return false;
638
-                }
639
-            }
611
+	/**
612
+	 * Do Nameprep according to RFC3491 and RFC3454
613
+	 * @param    array    Unicode Characters
614
+	 * @return   string   Unicode Characters, Nameprep'd
615
+	 */
616
+	protected function _nameprep($input)
617
+	{
618
+		$output = array();
619
+		//
620
+		// Mapping
621
+		// Walking through the input array, performing the required steps on each of
622
+		// the input chars and putting the result into the output array
623
+		// While mapping required chars we apply the cannonical ordering
624
+		foreach ($input as $v) {
625
+			// Map to nothing == skip that code point
626
+			if (in_array($v, self::$NP['map_nothing'])) {
627
+				continue;
628
+			}
629
+			// Try to find prohibited input
630
+			if (in_array($v, self::$NP['prohibit']) || in_array($v, self::$NP['general_prohibited'])) {
631
+				$this->_error('NAMEPREP: Prohibited input U+' . sprintf('%08X', $v));
632
+				return false;
633
+			}
634
+			foreach (self::$NP['prohibit_ranges'] as $range) {
635
+				if ($range[0] <= $v && $v <= $range[1]) {
636
+					$this->_error('NAMEPREP: Prohibited input U+' . sprintf('%08X', $v));
637
+					return false;
638
+				}
639
+			}
640 640
 
641
-            if (0xAC00 <= $v && $v <= 0xD7AF) {
642
-                // Hangul syllable decomposition
643
-                foreach ($this->_hangul_decompose($v) as $out) {
644
-                    $output[] = (int) $out;
645
-                }
646
-            } elseif (($this->_idn_version == '2003') && isset(self::$NP['replacemaps_2003'][$v])) {
647
-                foreach ($this->_apply_cannonical_ordering(self::$NP['replacemaps_2003'][$v]) as $out) {
648
-                    $output[] = (int) $out;
649
-                }
650
-            } elseif (($this->_idn_version == '2008') && isset(self::$NP['replacemaps'][$v])) {
651
-                foreach ($this->_apply_cannonical_ordering(self::$NP['replacemaps'][$v]) as $out) {
652
-                    $output[] = (int) $out;
653
-                }
654
-            } else {
655
-                $output[] = (int) $v;
656
-            }
657
-        }
658
-        // Before applying any Combining, try to rearrange any Hangul syllables
659
-        $output = $this->_hangul_compose($output);
660
-        //
661
-        // Combine code points
662
-        //
663
-        $last_class = 0;
664
-        $last_starter = 0;
665
-        $out_len = count($output);
666
-        for ($i = 0; $i < $out_len; ++$i) {
667
-            $class = $this->_get_combining_class($output[$i]);
668
-            if ((!$last_class || $last_class > $class) && $class) {
669
-                // Try to match
670
-                $seq_len = $i - $last_starter;
671
-                $out = $this->_combine(array_slice($output, $last_starter, $seq_len));
672
-                // On match: Replace the last starter with the composed character and remove
673
-                // the now redundant non-starter(s)
674
-                if ($out) {
675
-                    $output[$last_starter] = $out;
676
-                    if (count($out) != $seq_len) {
677
-                        for ($j = $i + 1; $j < $out_len; ++$j) {
678
-                            $output[$j - 1] = $output[$j];
679
-                        }
680
-                        unset($output[$out_len]);
681
-                    }
682
-                    // Rewind the for loop by one, since there can be more possible compositions
683
-                    $i--;
684
-                    $out_len--;
685
-                    $last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i - 1]);
686
-                    continue;
687
-                }
688
-            }
689
-            // The current class is 0
690
-            if (!$class) {
691
-                $last_starter = $i;
692
-            }
693
-            $last_class = $class;
694
-        }
695
-        return $output;
696
-    }
641
+			if (0xAC00 <= $v && $v <= 0xD7AF) {
642
+				// Hangul syllable decomposition
643
+				foreach ($this->_hangul_decompose($v) as $out) {
644
+					$output[] = (int) $out;
645
+				}
646
+			} elseif (($this->_idn_version == '2003') && isset(self::$NP['replacemaps_2003'][$v])) {
647
+				foreach ($this->_apply_cannonical_ordering(self::$NP['replacemaps_2003'][$v]) as $out) {
648
+					$output[] = (int) $out;
649
+				}
650
+			} elseif (($this->_idn_version == '2008') && isset(self::$NP['replacemaps'][$v])) {
651
+				foreach ($this->_apply_cannonical_ordering(self::$NP['replacemaps'][$v]) as $out) {
652
+					$output[] = (int) $out;
653
+				}
654
+			} else {
655
+				$output[] = (int) $v;
656
+			}
657
+		}
658
+		// Before applying any Combining, try to rearrange any Hangul syllables
659
+		$output = $this->_hangul_compose($output);
660
+		//
661
+		// Combine code points
662
+		//
663
+		$last_class = 0;
664
+		$last_starter = 0;
665
+		$out_len = count($output);
666
+		for ($i = 0; $i < $out_len; ++$i) {
667
+			$class = $this->_get_combining_class($output[$i]);
668
+			if ((!$last_class || $last_class > $class) && $class) {
669
+				// Try to match
670
+				$seq_len = $i - $last_starter;
671
+				$out = $this->_combine(array_slice($output, $last_starter, $seq_len));
672
+				// On match: Replace the last starter with the composed character and remove
673
+				// the now redundant non-starter(s)
674
+				if ($out) {
675
+					$output[$last_starter] = $out;
676
+					if (count($out) != $seq_len) {
677
+						for ($j = $i + 1; $j < $out_len; ++$j) {
678
+							$output[$j - 1] = $output[$j];
679
+						}
680
+						unset($output[$out_len]);
681
+					}
682
+					// Rewind the for loop by one, since there can be more possible compositions
683
+					$i--;
684
+					$out_len--;
685
+					$last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i - 1]);
686
+					continue;
687
+				}
688
+			}
689
+			// The current class is 0
690
+			if (!$class) {
691
+				$last_starter = $i;
692
+			}
693
+			$last_class = $class;
694
+		}
695
+		return $output;
696
+	}
697 697
 
698
-    /**
699
-     * Decomposes a Hangul syllable
700
-     * (see http://www.unicode.org/unicode/reports/tr15/#Hangul
701
-     * @param    integer  32bit UCS4 code point
702
-     * @return   array    Either Hangul Syllable decomposed or original 32bit value as one value array
703
-     */
704
-    protected function _hangul_decompose($char)
705
-    {
706
-        $sindex = (int) $char - $this->_sbase;
707
-        if ($sindex < 0 || $sindex >= $this->_scount) {
708
-            return array($char);
709
-        }
710
-        $result = array();
711
-        $result[] = (int) $this->_lbase + $sindex / $this->_ncount;
712
-        $result[] = (int) $this->_vbase + ($sindex % $this->_ncount) / $this->_tcount;
713
-        $T = intval($this->_tbase + $sindex % $this->_tcount);
714
-        if ($T != $this->_tbase) {
715
-            $result[] = $T;
716
-        }
717
-        return $result;
718
-    }
698
+	/**
699
+	 * Decomposes a Hangul syllable
700
+	 * (see http://www.unicode.org/unicode/reports/tr15/#Hangul
701
+	 * @param    integer  32bit UCS4 code point
702
+	 * @return   array    Either Hangul Syllable decomposed or original 32bit value as one value array
703
+	 */
704
+	protected function _hangul_decompose($char)
705
+	{
706
+		$sindex = (int) $char - $this->_sbase;
707
+		if ($sindex < 0 || $sindex >= $this->_scount) {
708
+			return array($char);
709
+		}
710
+		$result = array();
711
+		$result[] = (int) $this->_lbase + $sindex / $this->_ncount;
712
+		$result[] = (int) $this->_vbase + ($sindex % $this->_ncount) / $this->_tcount;
713
+		$T = intval($this->_tbase + $sindex % $this->_tcount);
714
+		if ($T != $this->_tbase) {
715
+			$result[] = $T;
716
+		}
717
+		return $result;
718
+	}
719 719
 
720
-    /**
721
-     * Ccomposes a Hangul syllable
722
-     * (see http://www.unicode.org/unicode/reports/tr15/#Hangul
723
-     * @param    array    Decomposed UCS4 sequence
724
-     * @return   array    UCS4 sequence with syllables composed
725
-     */
726
-    protected function _hangul_compose($input)
727
-    {
728
-        $inp_len = count($input);
729
-        if (!$inp_len) {
730
-            return array();
731
-        }
732
-        $result = array();
733
-        $last = (int) $input[0];
734
-        $result[] = $last; // copy first char from input to output
720
+	/**
721
+	 * Ccomposes a Hangul syllable
722
+	 * (see http://www.unicode.org/unicode/reports/tr15/#Hangul
723
+	 * @param    array    Decomposed UCS4 sequence
724
+	 * @return   array    UCS4 sequence with syllables composed
725
+	 */
726
+	protected function _hangul_compose($input)
727
+	{
728
+		$inp_len = count($input);
729
+		if (!$inp_len) {
730
+			return array();
731
+		}
732
+		$result = array();
733
+		$last = (int) $input[0];
734
+		$result[] = $last; // copy first char from input to output
735 735
 
736
-        for ($i = 1; $i < $inp_len; ++$i) {
737
-            $char = (int) $input[$i];
738
-            $sindex = $last - $this->_sbase;
739
-            $lindex = $last - $this->_lbase;
740
-            $vindex = $char - $this->_vbase;
741
-            $tindex = $char - $this->_tbase;
742
-            // Find out, whether two current characters are LV and T
743
-            if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0) && 0 <= $tindex && $tindex <= $this->_tcount) {
744
-                // create syllable of form LVT
745
-                $last += $tindex;
746
-                $result[(count($result) - 1)] = $last; // reset last
747
-                continue; // discard char
748
-            }
749
-            // Find out, whether two current characters form L and V
750
-            if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) {
751
-                // create syllable of form LV
752
-                $last = (int) $this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount;
753
-                $result[(count($result) - 1)] = $last; // reset last
754
-                continue; // discard char
755
-            }
756
-            // if neither case was true, just add the character
757
-            $last = $char;
758
-            $result[] = $char;
759
-        }
760
-        return $result;
761
-    }
736
+		for ($i = 1; $i < $inp_len; ++$i) {
737
+			$char = (int) $input[$i];
738
+			$sindex = $last - $this->_sbase;
739
+			$lindex = $last - $this->_lbase;
740
+			$vindex = $char - $this->_vbase;
741
+			$tindex = $char - $this->_tbase;
742
+			// Find out, whether two current characters are LV and T
743
+			if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0) && 0 <= $tindex && $tindex <= $this->_tcount) {
744
+				// create syllable of form LVT
745
+				$last += $tindex;
746
+				$result[(count($result) - 1)] = $last; // reset last
747
+				continue; // discard char
748
+			}
749
+			// Find out, whether two current characters form L and V
750
+			if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) {
751
+				// create syllable of form LV
752
+				$last = (int) $this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount;
753
+				$result[(count($result) - 1)] = $last; // reset last
754
+				continue; // discard char
755
+			}
756
+			// if neither case was true, just add the character
757
+			$last = $char;
758
+			$result[] = $char;
759
+		}
760
+		return $result;
761
+	}
762 762
 
763
-    /**
764
-     * Returns the combining class of a certain wide char
765
-     * @param    integer    Wide char to check (32bit integer)
766
-     * @return   integer    Combining class if found, else 0
767
-     */
768
-    protected function _get_combining_class($char)
769
-    {
770
-        return isset(self::$NP['norm_combcls'][$char]) ? self::$NP['norm_combcls'][$char] : 0;
771
-    }
763
+	/**
764
+	 * Returns the combining class of a certain wide char
765
+	 * @param    integer    Wide char to check (32bit integer)
766
+	 * @return   integer    Combining class if found, else 0
767
+	 */
768
+	protected function _get_combining_class($char)
769
+	{
770
+		return isset(self::$NP['norm_combcls'][$char]) ? self::$NP['norm_combcls'][$char] : 0;
771
+	}
772 772
 
773
-    /**
774
-     * Applies the cannonical ordering of a decomposed UCS4 sequence
775
-     * @param    array      Decomposed UCS4 sequence
776
-     * @return   array      Ordered USC4 sequence
777
-     */
778
-    protected function _apply_cannonical_ordering($input)
779
-    {
780
-        $swap = true;
781
-        $size = count($input);
782
-        while ($swap) {
783
-            $swap = false;
784
-            $last = $this->_get_combining_class(intval($input[0]));
785
-            for ($i = 0; $i < $size - 1; ++$i) {
786
-                $next = $this->_get_combining_class(intval($input[$i + 1]));
787
-                if ($next != 0 && $last > $next) {
788
-                    // Move item leftward until it fits
789
-                    for ($j = $i + 1; $j > 0; --$j) {
790
-                        if ($this->_get_combining_class(intval($input[$j - 1])) <= $next) {
791
-                            break;
792
-                        }
793
-                        $t = intval($input[$j]);
794
-                        $input[$j] = intval($input[$j - 1]);
795
-                        $input[$j - 1] = $t;
796
-                        $swap = true;
797
-                    }
798
-                    // Reentering the loop looking at the old character again
799
-                    $next = $last;
800
-                }
801
-                $last = $next;
802
-            }
803
-        }
804
-        return $input;
805
-    }
773
+	/**
774
+	 * Applies the cannonical ordering of a decomposed UCS4 sequence
775
+	 * @param    array      Decomposed UCS4 sequence
776
+	 * @return   array      Ordered USC4 sequence
777
+	 */
778
+	protected function _apply_cannonical_ordering($input)
779
+	{
780
+		$swap = true;
781
+		$size = count($input);
782
+		while ($swap) {
783
+			$swap = false;
784
+			$last = $this->_get_combining_class(intval($input[0]));
785
+			for ($i = 0; $i < $size - 1; ++$i) {
786
+				$next = $this->_get_combining_class(intval($input[$i + 1]));
787
+				if ($next != 0 && $last > $next) {
788
+					// Move item leftward until it fits
789
+					for ($j = $i + 1; $j > 0; --$j) {
790
+						if ($this->_get_combining_class(intval($input[$j - 1])) <= $next) {
791
+							break;
792
+						}
793
+						$t = intval($input[$j]);
794
+						$input[$j] = intval($input[$j - 1]);
795
+						$input[$j - 1] = $t;
796
+						$swap = true;
797
+					}
798
+					// Reentering the loop looking at the old character again
799
+					$next = $last;
800
+				}
801
+				$last = $next;
802
+			}
803
+		}
804
+		return $input;
805
+	}
806 806
 
807
-    /**
808
-     * Do composition of a sequence of starter and non-starter
809
-     * @param    array      UCS4 Decomposed sequence
810
-     * @return   array      Ordered USC4 sequence
811
-     */
812
-    protected function _combine($input)
813
-    {
814
-        $inp_len = count($input);
815
-        if (0 == $inp_len) {
816
-            return false;
817
-        }
818
-        foreach (self::$NP['replacemaps'] as $np_src => $np_target) {
819
-            if ($np_target[0] != $input[0]) {
820
-                continue;
821
-            }
822
-            if (count($np_target) != $inp_len) {
823
-                continue;
824
-            }
825
-            $hit = false;
826
-            foreach ($input as $k2 => $v2) {
827
-                if ($v2 == $np_target[$k2]) {
828
-                    $hit = true;
829
-                } else {
830
-                    $hit = false;
831
-                    break;
832
-                }
833
-            }
834
-            if ($hit) {
835
-                return $np_src;
836
-            }
837
-        }
838
-        return false;
839
-    }
807
+	/**
808
+	 * Do composition of a sequence of starter and non-starter
809
+	 * @param    array      UCS4 Decomposed sequence
810
+	 * @return   array      Ordered USC4 sequence
811
+	 */
812
+	protected function _combine($input)
813
+	{
814
+		$inp_len = count($input);
815
+		if (0 == $inp_len) {
816
+			return false;
817
+		}
818
+		foreach (self::$NP['replacemaps'] as $np_src => $np_target) {
819
+			if ($np_target[0] != $input[0]) {
820
+				continue;
821
+			}
822
+			if (count($np_target) != $inp_len) {
823
+				continue;
824
+			}
825
+			$hit = false;
826
+			foreach ($input as $k2 => $v2) {
827
+				if ($v2 == $np_target[$k2]) {
828
+					$hit = true;
829
+				} else {
830
+					$hit = false;
831
+					break;
832
+				}
833
+			}
834
+			if ($hit) {
835
+				return $np_src;
836
+			}
837
+		}
838
+		return false;
839
+	}
840 840
 
841
-    /**
842
-     * This converts an UTF-8 encoded string to its UCS-4 representation
843
-     * By talking about UCS-4 "strings" we mean arrays of 32bit integers representing
844
-     * each of the "chars". This is due to PHP not being able to handle strings with
845
-     * bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too.
846
-     * The following UTF-8 encodings are supported:
847
-     * bytes bits  representation
848
-     * 1        7  0xxxxxxx
849
-     * 2       11  110xxxxx 10xxxxxx
850
-     * 3       16  1110xxxx 10xxxxxx 10xxxxxx
851
-     * 4       21  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
852
-     * 5       26  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
853
-     * 6       31  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
854
-     * Each x represents a bit that can be used to store character data.
855
-     * The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000
856
-     * @param string $input
857
-     * @return string
858
-     */
859
-    protected function _utf8_to_ucs4($input)
860
-    {
861
-        $output = array();
862
-        $out_len = 0;
863
-        $inp_len = self::byteLength($input);
864
-        $mode = 'next';
865
-        $test = 'none';
866
-        for ($k = 0; $k < $inp_len; ++$k) {
867
-            $v = ord($input{$k}); // Extract byte from input string
868
-            if ($v < 128) { // We found an ASCII char - put into stirng as is
869
-                $output[$out_len] = $v;
870
-                ++$out_len;
871
-                if ('add' == $mode) {
872
-                    $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte ' . $k);
873
-                    return false;
874
-                }
875
-                continue;
876
-            }
877
-            if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char
878
-                $start_byte = $v;
879
-                $mode = 'add';
880
-                $test = 'range';
881
-                if ($v >> 5 == 6) { // &110xxxxx 10xxxxx
882
-                    $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left
883
-                    $v = ($v - 192) << 6;
884
-                } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx
885
-                    $next_byte = 1;
886
-                    $v = ($v - 224) << 12;
887
-                } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
888
-                    $next_byte = 2;
889
-                    $v = ($v - 240) << 18;
890
-                } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
891
-                    $next_byte = 3;
892
-                    $v = ($v - 248) << 24;
893
-                } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
894
-                    $next_byte = 4;
895
-                    $v = ($v - 252) << 30;
896
-                } else {
897
-                    $this->_error('This might be UTF-8, but I don\'t understand it at byte ' . $k);
898
-                    return false;
899
-                }
900
-                if ('add' == $mode) {
901
-                    $output[$out_len] = (int) $v;
902
-                    ++$out_len;
903
-                    continue;
904
-                }
905
-            }
906
-            if ('add' == $mode) {
907
-                if (!$this->_allow_overlong && $test == 'range') {
908
-                    $test = 'none';
909
-                    if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) {
910
-                        $this->_error('Bogus UTF-8 character detected (out of legal range) at byte ' . $k);
911
-                        return false;
912
-                    }
913
-                }
914
-                if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx
915
-                    $v = ($v - 128) << ($next_byte * 6);
916
-                    $output[($out_len - 1)] += $v;
917
-                    --$next_byte;
918
-                } else {
919
-                    $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte ' . $k);
920
-                    return false;
921
-                }
922
-                if ($next_byte < 0) {
923
-                    $mode = 'next';
924
-                }
925
-            }
926
-        } // for
927
-        return $output;
928
-    }
841
+	/**
842
+	 * This converts an UTF-8 encoded string to its UCS-4 representation
843
+	 * By talking about UCS-4 "strings" we mean arrays of 32bit integers representing
844
+	 * each of the "chars". This is due to PHP not being able to handle strings with
845
+	 * bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too.
846
+	 * The following UTF-8 encodings are supported:
847
+	 * bytes bits  representation
848
+	 * 1        7  0xxxxxxx
849
+	 * 2       11  110xxxxx 10xxxxxx
850
+	 * 3       16  1110xxxx 10xxxxxx 10xxxxxx
851
+	 * 4       21  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
852
+	 * 5       26  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
853
+	 * 6       31  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
854
+	 * Each x represents a bit that can be used to store character data.
855
+	 * The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000
856
+	 * @param string $input
857
+	 * @return string
858
+	 */
859
+	protected function _utf8_to_ucs4($input)
860
+	{
861
+		$output = array();
862
+		$out_len = 0;
863
+		$inp_len = self::byteLength($input);
864
+		$mode = 'next';
865
+		$test = 'none';
866
+		for ($k = 0; $k < $inp_len; ++$k) {
867
+			$v = ord($input{$k}); // Extract byte from input string
868
+			if ($v < 128) { // We found an ASCII char - put into stirng as is
869
+				$output[$out_len] = $v;
870
+				++$out_len;
871
+				if ('add' == $mode) {
872
+					$this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte ' . $k);
873
+					return false;
874
+				}
875
+				continue;
876
+			}
877
+			if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char
878
+				$start_byte = $v;
879
+				$mode = 'add';
880
+				$test = 'range';
881
+				if ($v >> 5 == 6) { // &110xxxxx 10xxxxx
882
+					$next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left
883
+					$v = ($v - 192) << 6;
884
+				} elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx
885
+					$next_byte = 1;
886
+					$v = ($v - 224) << 12;
887
+				} elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
888
+					$next_byte = 2;
889
+					$v = ($v - 240) << 18;
890
+				} elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
891
+					$next_byte = 3;
892
+					$v = ($v - 248) << 24;
893
+				} elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
894
+					$next_byte = 4;
895
+					$v = ($v - 252) << 30;
896
+				} else {
897
+					$this->_error('This might be UTF-8, but I don\'t understand it at byte ' . $k);
898
+					return false;
899
+				}
900
+				if ('add' == $mode) {
901
+					$output[$out_len] = (int) $v;
902
+					++$out_len;
903
+					continue;
904
+				}
905
+			}
906
+			if ('add' == $mode) {
907
+				if (!$this->_allow_overlong && $test == 'range') {
908
+					$test = 'none';
909
+					if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) {
910
+						$this->_error('Bogus UTF-8 character detected (out of legal range) at byte ' . $k);
911
+						return false;
912
+					}
913
+				}
914
+				if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx
915
+					$v = ($v - 128) << ($next_byte * 6);
916
+					$output[($out_len - 1)] += $v;
917
+					--$next_byte;
918
+				} else {
919
+					$this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte ' . $k);
920
+					return false;
921
+				}
922
+				if ($next_byte < 0) {
923
+					$mode = 'next';
924
+				}
925
+			}
926
+		} // for
927
+		return $output;
928
+	}
929 929
 
930
-    /**
931
-     * Convert UCS-4 string into UTF-8 string
932
-     * See _utf8_to_ucs4() for details
933
-     * @param string  $input
934
-     * @return string
935
-     */
936
-    protected function _ucs4_to_utf8($input)
937
-    {
938
-        $output = '';
939
-        foreach ($input as $k => $v) {
940
-            if ($v < 128) { // 7bit are transferred literally
941
-                $output .= chr($v);
942
-            } elseif ($v < (1 << 11)) { // 2 bytes
943
-                $output .= chr(192 + ($v >> 6)) . chr(128 + ($v & 63));
944
-            } elseif ($v < (1 << 16)) { // 3 bytes
945
-                $output .= chr(224 + ($v >> 12)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
946
-            } elseif ($v < (1 << 21)) { // 4 bytes
947
-                $output .= chr(240 + ($v >> 18)) . chr(128 + (($v >> 12) & 63)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
948
-            } else {
949
-                $this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte ' . $k);
950
-                return false;
951
-            }
952
-        }
953
-        return $output;
954
-    }
930
+	/**
931
+	 * Convert UCS-4 string into UTF-8 string
932
+	 * See _utf8_to_ucs4() for details
933
+	 * @param string  $input
934
+	 * @return string
935
+	 */
936
+	protected function _ucs4_to_utf8($input)
937
+	{
938
+		$output = '';
939
+		foreach ($input as $k => $v) {
940
+			if ($v < 128) { // 7bit are transferred literally
941
+				$output .= chr($v);
942
+			} elseif ($v < (1 << 11)) { // 2 bytes
943
+				$output .= chr(192 + ($v >> 6)) . chr(128 + ($v & 63));
944
+			} elseif ($v < (1 << 16)) { // 3 bytes
945
+				$output .= chr(224 + ($v >> 12)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
946
+			} elseif ($v < (1 << 21)) { // 4 bytes
947
+				$output .= chr(240 + ($v >> 18)) . chr(128 + (($v >> 12) & 63)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
948
+			} else {
949
+				$this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte ' . $k);
950
+				return false;
951
+			}
952
+		}
953
+		return $output;
954
+	}
955 955
 
956
-    /**
957
-     * Convert UCS-4 array into UCS-4 string
958
-     *
959
-     * @param array $input
960
-     * @return string
961
-     */
962
-    protected function _ucs4_to_ucs4_string($input)
963
-    {
964
-        $output = '';
965
-        // Take array values and split output to 4 bytes per value
966
-        // The bit mask is 255, which reads &11111111
967
-        foreach ($input as $v) {
968
-            $output .= chr(($v >> 24) & 255) . chr(($v >> 16) & 255) . chr(($v >> 8) & 255) . chr($v & 255);
969
-        }
970
-        return $output;
971
-    }
956
+	/**
957
+	 * Convert UCS-4 array into UCS-4 string
958
+	 *
959
+	 * @param array $input
960
+	 * @return string
961
+	 */
962
+	protected function _ucs4_to_ucs4_string($input)
963
+	{
964
+		$output = '';
965
+		// Take array values and split output to 4 bytes per value
966
+		// The bit mask is 255, which reads &11111111
967
+		foreach ($input as $v) {
968
+			$output .= chr(($v >> 24) & 255) . chr(($v >> 16) & 255) . chr(($v >> 8) & 255) . chr($v & 255);
969
+		}
970
+		return $output;
971
+	}
972 972
 
973
-    /**
974
-     * Convert UCS-4 strin into UCS-4 garray
975
-     *
976
-     * @param  string $input
977
-     * @return array
978
-     */
979
-    protected function _ucs4_string_to_ucs4($input)
980
-    {
981
-        $output = array();
982
-        $inp_len = self::byteLength($input);
983
-        // Input length must be dividable by 4
984
-        if ($inp_len % 4) {
985
-            $this->_error('Input UCS4 string is broken');
986
-            return false;
987
-        }
988
-        // Empty input - return empty output
989
-        if (!$inp_len) {
990
-            return $output;
991
-        }
992
-        for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) {
993
-            // Increment output position every 4 input bytes
994
-            if (!($i % 4)) {
995
-                $out_len++;
996
-                $output[$out_len] = 0;
997
-            }
998
-            $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) );
999
-        }
1000
-        return $output;
1001
-    }
973
+	/**
974
+	 * Convert UCS-4 strin into UCS-4 garray
975
+	 *
976
+	 * @param  string $input
977
+	 * @return array
978
+	 */
979
+	protected function _ucs4_string_to_ucs4($input)
980
+	{
981
+		$output = array();
982
+		$inp_len = self::byteLength($input);
983
+		// Input length must be dividable by 4
984
+		if ($inp_len % 4) {
985
+			$this->_error('Input UCS4 string is broken');
986
+			return false;
987
+		}
988
+		// Empty input - return empty output
989
+		if (!$inp_len) {
990
+			return $output;
991
+		}
992
+		for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) {
993
+			// Increment output position every 4 input bytes
994
+			if (!($i % 4)) {
995
+				$out_len++;
996
+				$output[$out_len] = 0;
997
+			}
998
+			$output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) );
999
+		}
1000
+		return $output;
1001
+	}
1002 1002
 
1003
-    /**
1004
-     * Gets the length of a string in bytes even if mbstring function
1005
-     * overloading is turned on
1006
-     *
1007
-     * @param string $string the string for which to get the length.
1008
-     * @return integer the length of the string in bytes.
1009
-     */
1010
-    protected static function byteLength($string)
1011
-    {
1012
-        if (self::$_mb_string_overload) {
1013
-            return mb_strlen($string, '8bit');
1014
-        }
1015
-        return strlen((binary) $string);
1016
-    }
1003
+	/**
1004
+	 * Gets the length of a string in bytes even if mbstring function
1005
+	 * overloading is turned on
1006
+	 *
1007
+	 * @param string $string the string for which to get the length.
1008
+	 * @return integer the length of the string in bytes.
1009
+	 */
1010
+	protected static function byteLength($string)
1011
+	{
1012
+		if (self::$_mb_string_overload) {
1013
+			return mb_strlen($string, '8bit');
1014
+		}
1015
+		return strlen((binary) $string);
1016
+	}
1017 1017
 
1018
-    /**
1019
-     * Attempts to return a concrete IDNA instance.
1020
-     *
1021
-     * @param array $params Set of paramaters
1022
-     * @return idna_convert
1023
-     * @access public
1024
-     */
1025
-    public function getInstance($params = array())
1026
-    {
1027
-        return new idna_convert($params);
1028
-    }
1018
+	/**
1019
+	 * Attempts to return a concrete IDNA instance.
1020
+	 *
1021
+	 * @param array $params Set of paramaters
1022
+	 * @return idna_convert
1023
+	 * @access public
1024
+	 */
1025
+	public function getInstance($params = array())
1026
+	{
1027
+		return new idna_convert($params);
1028
+	}
1029 1029
 
1030
-    /**
1031
-     * Attempts to return a concrete IDNA instance for either php4 or php5,
1032
-     * only creating a new instance if no IDNA instance with the same
1033
-     * parameters currently exists.
1034
-     *
1035
-     * @param array $params Set of paramaters
1036
-     *
1037
-     * @return object idna_convert
1038
-     * @access public
1039
-     */
1040
-    public function singleton($params = array())
1041
-    {
1042
-        static $instances = array();
1030
+	/**
1031
+	 * Attempts to return a concrete IDNA instance for either php4 or php5,
1032
+	 * only creating a new instance if no IDNA instance with the same
1033
+	 * parameters currently exists.
1034
+	 *
1035
+	 * @param array $params Set of paramaters
1036
+	 *
1037
+	 * @return object idna_convert
1038
+	 * @access public
1039
+	 */
1040
+	public function singleton($params = array())
1041
+	{
1042
+		static $instances = array();
1043 1043
 
1044
-        $signature = serialize($params);
1045
-        if (!isset($instances[$signature])) {
1046
-            $instances[$signature] = idna_convert::getInstance($params);
1047
-        }
1048
-        return $instances[$signature];
1049
-    }
1044
+		$signature = serialize($params);
1045
+		if (!isset($instances[$signature])) {
1046
+			$instances[$signature] = idna_convert::getInstance($params);
1047
+		}
1048
+		return $instances[$signature];
1049
+	}
1050 1050
 
1051
-    /**
1052
-     * Holds all relevant mapping tables
1053
-     * See RFC3454 for details
1054
-     *
1055
-     * @private array
1056
-     * @since 0.5.2
1057
-     */
1058
-    protected static $NP = array(
1059
-            'map_nothing' => array(0xAD, 0x34F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B, 0x200C,
1060
-                    0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, 0xFE05, 0xFE06, 0xFE07,
1061
-                    0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E, 0xFE0F, 0xFEFF
1062
-            ),
1063
-            'general_prohibited' => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
1064
-                    20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
1065
-                    43, 44, 47, 59, 60, 61, 62, 63, 64, 91, 92, 93, 94, 95, 96, 123, 124, 125, 126, 127, 0x3002
1066
-            ),
1067
-            'prohibit' => array(0xA0, 0x340, 0x341, 0x6DD, 0x70F, 0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003,
1068
-                    0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x200B, 0x200C, 0x200D, 0x200E, 0x200F,
1069
-                    0x2028, 0x2029, 0x202A, 0x202B, 0x202C, 0x202D, 0x202E, 0x202F, 0x205F, 0x206A, 0x206B, 0x206C,
1070
-                    0x206D, 0x206E, 0x206F, 0x3000, 0x33C2, 0xFEFF, 0xFFF9, 0xFFFA, 0xFFFB, 0xFFFC, 0xFFFD, 0xFFFE, 0xFFFF,
1071
-                    0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, 0x6FFFE,
1072
-                    0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, 0xBFFFF,
1073
-                    0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xE0001, 0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF
1074
-            ),
1075
-            'prohibit_ranges' => array(array(0x80, 0x9F), array(0x2060, 0x206F), array(0x1D173, 0x1D17A),
1076
-                    array(0xE000, 0xF8FF), array(0xF0000, 0xFFFFD), array(0x100000, 0x10FFFD),
1077
-                    array(0xFDD0, 0xFDEF), array(0xD800, 0xDFFF), array(0x2FF0, 0x2FFB), array(0xE0020, 0xE007F)
1078
-            ),
1079
-            'replacemaps_2003' => array(0x41 => array(0x61), 0x42 => array(0x62), 0x43 => array(0x63),
1080
-                    0x44 => array(0x64), 0x45 => array(0x65), 0x46 => array(0x66), 0x47 => array(0x67),
1081
-                    0x48 => array(0x68), 0x49 => array(0x69), 0x4A => array(0x6A), 0x4B => array(0x6B),
1082
-                    0x4C => array(0x6C), 0x4D => array(0x6D), 0x4E => array(0x6E), 0x4F => array(0x6F),
1083
-                    0x50 => array(0x70), 0x51 => array(0x71), 0x52 => array(0x72), 0x53 => array(0x73),
1084
-                    0x54 => array(0x74), 0x55 => array(0x75), 0x56 => array(0x76), 0x57 => array(0x77),
1085
-                    0x58 => array(0x78), 0x59 => array(0x79), 0x5A => array(0x7A), 0xB5 => array(0x3BC),
1086
-                    0xC0 => array(0xE0), 0xC1 => array(0xE1), 0xC2 => array(0xE2), 0xC3 => array(0xE3),
1087
-                    0xC4 => array(0xE4), 0xC5 => array(0xE5), 0xC6 => array(0xE6), 0xC7 => array(0xE7),
1088
-                    0xC8 => array(0xE8), 0xC9 => array(0xE9), 0xCA => array(0xEA), 0xCB => array(0xEB),
1089
-                    0xCC => array(0xEC), 0xCD => array(0xED), 0xCE => array(0xEE), 0xCF => array(0xEF),
1090
-                    0xD0 => array(0xF0), 0xD1 => array(0xF1), 0xD2 => array(0xF2), 0xD3 => array(0xF3),
1091
-                    0xD4 => array(0xF4), 0xD5 => array(0xF5), 0xD6 => array(0xF6), 0xD8 => array(0xF8),
1092
-                    0xD9 => array(0xF9), 0xDA => array(0xFA), 0xDB => array(0xFB), 0xDC => array(0xFC),
1093
-                    0xDD => array(0xFD), 0xDE => array(0xFE), 0xDF => array(0x73, 0x73),
1094
-                    0x100 => array(0x101), 0x102 => array(0x103), 0x104 => array(0x105),
1095
-                    0x106 => array(0x107), 0x108 => array(0x109), 0x10A => array(0x10B),
1096
-                    0x10C => array(0x10D), 0x10E => array(0x10F), 0x110 => array(0x111),
1097
-                    0x112 => array(0x113), 0x114 => array(0x115), 0x116 => array(0x117),
1098
-                    0x118 => array(0x119), 0x11A => array(0x11B), 0x11C => array(0x11D),
1099
-                    0x11E => array(0x11F), 0x120 => array(0x121), 0x122 => array(0x123),
1100
-                    0x124 => array(0x125), 0x126 => array(0x127), 0x128 => array(0x129),
1101
-                    0x12A => array(0x12B), 0x12C => array(0x12D), 0x12E => array(0x12F),
1102
-                    0x130 => array(0x69, 0x307), 0x132 => array(0x133), 0x134 => array(0x135),
1103
-                    0x136 => array(0x137), 0x139 => array(0x13A), 0x13B => array(0x13C),
1104
-                    0x13D => array(0x13E), 0x13F => array(0x140), 0x141 => array(0x142),
1105
-                    0x143 => array(0x144), 0x145 => array(0x146), 0x147 => array(0x148),
1106
-                    0x149 => array(0x2BC, 0x6E), 0x14A => array(0x14B), 0x14C => array(0x14D),
1107
-                    0x14E => array(0x14F), 0x150 => array(0x151), 0x152 => array(0x153),
1108
-                    0x154 => array(0x155), 0x156 => array(0x157), 0x158 => array(0x159),
1109
-                    0x15A => array(0x15B), 0x15C => array(0x15D), 0x15E => array(0x15F),
1110
-                    0x160 => array(0x161), 0x162 => array(0x163), 0x164 => array(0x165),
1111
-                    0x166 => array(0x167), 0x168 => array(0x169), 0x16A => array(0x16B),
1112
-                    0x16C => array(0x16D), 0x16E => array(0x16F), 0x170 => array(0x171),
1113
-                    0x172 => array(0x173), 0x174 => array(0x175), 0x176 => array(0x177),
1114
-                    0x178 => array(0xFF), 0x179 => array(0x17A), 0x17B => array(0x17C),
1115
-                    0x17D => array(0x17E), 0x17F => array(0x73), 0x181 => array(0x253),
1116
-                    0x182 => array(0x183), 0x184 => array(0x185), 0x186 => array(0x254),
1117
-                    0x187 => array(0x188), 0x189 => array(0x256), 0x18A => array(0x257),
1118
-                    0x18B => array(0x18C), 0x18E => array(0x1DD), 0x18F => array(0x259),
1119
-                    0x190 => array(0x25B), 0x191 => array(0x192), 0x193 => array(0x260),
1120
-                    0x194 => array(0x263), 0x196 => array(0x269), 0x197 => array(0x268),
1121
-                    0x198 => array(0x199), 0x19C => array(0x26F), 0x19D => array(0x272),
1122
-                    0x19F => array(0x275), 0x1A0 => array(0x1A1), 0x1A2 => array(0x1A3),
1123
-                    0x1A4 => array(0x1A5), 0x1A6 => array(0x280), 0x1A7 => array(0x1A8),
1124
-                    0x1A9 => array(0x283), 0x1AC => array(0x1AD), 0x1AE => array(0x288),
1125
-                    0x1AF => array(0x1B0), 0x1B1 => array(0x28A), 0x1B2 => array(0x28B),
1126
-                    0x1B3 => array(0x1B4), 0x1B5 => array(0x1B6), 0x1B7 => array(0x292),
1127
-                    0x1B8 => array(0x1B9), 0x1BC => array(0x1BD), 0x1C4 => array(0x1C6),
1128
-                    0x1C5 => array(0x1C6), 0x1C7 => array(0x1C9), 0x1C8 => array(0x1C9),
1129
-                    0x1CA => array(0x1CC), 0x1CB => array(0x1CC), 0x1CD => array(0x1CE),
1130
-                    0x1CF => array(0x1D0), 0x1D1 => array(0x1D2), 0x1D3 => array(0x1D4),
1131
-                    0x1D5 => array(0x1D6), 0x1D7 => array(0x1D8), 0x1D9 => array(0x1DA),
1132
-                    0x1DB => array(0x1DC), 0x1DE => array(0x1DF), 0x1E0 => array(0x1E1),
1133
-                    0x1E2 => array(0x1E3), 0x1E4 => array(0x1E5), 0x1E6 => array(0x1E7),
1134
-                    0x1E8 => array(0x1E9), 0x1EA => array(0x1EB), 0x1EC => array(0x1ED),
1135
-                    0x1EE => array(0x1EF), 0x1F0 => array(0x6A, 0x30C), 0x1F1 => array(0x1F3),
1136
-                    0x1F2 => array(0x1F3), 0x1F4 => array(0x1F5), 0x1F6 => array(0x195),
1137
-                    0x1F7 => array(0x1BF), 0x1F8 => array(0x1F9), 0x1FA => array(0x1FB),
1138
-                    0x1FC => array(0x1FD), 0x1FE => array(0x1FF), 0x200 => array(0x201),
1139
-                    0x202 => array(0x203), 0x204 => array(0x205), 0x206 => array(0x207),
1140
-                    0x208 => array(0x209), 0x20A => array(0x20B), 0x20C => array(0x20D),
1141
-                    0x20E => array(0x20F), 0x210 => array(0x211), 0x212 => array(0x213),
1142
-                    0x214 => array(0x215), 0x216 => array(0x217), 0x218 => array(0x219),
1143
-                    0x21A => array(0x21B), 0x21C => array(0x21D), 0x21E => array(0x21F),
1144
-                    0x220 => array(0x19E), 0x222 => array(0x223), 0x224 => array(0x225),
1145
-                    0x226 => array(0x227), 0x228 => array(0x229), 0x22A => array(0x22B),
1146
-                    0x22C => array(0x22D), 0x22E => array(0x22F), 0x230 => array(0x231),
1147
-                    0x232 => array(0x233), 0x345 => array(0x3B9), 0x37A => array(0x20, 0x3B9),
1148
-                    0x386 => array(0x3AC), 0x388 => array(0x3AD), 0x389 => array(0x3AE),
1149
-                    0x38A => array(0x3AF), 0x38C => array(0x3CC), 0x38E => array(0x3CD),
1150
-                    0x38F => array(0x3CE), 0x390 => array(0x3B9, 0x308, 0x301),
1151
-                    0x391 => array(0x3B1), 0x392 => array(0x3B2), 0x393 => array(0x3B3),
1152
-                    0x394 => array(0x3B4), 0x395 => array(0x3B5), 0x396 => array(0x3B6),
1153
-                    0x397 => array(0x3B7), 0x398 => array(0x3B8), 0x399 => array(0x3B9),
1154
-                    0x39A => array(0x3BA), 0x39B => array(0x3BB), 0x39C => array(0x3BC),
1155
-                    0x39D => array(0x3BD), 0x39E => array(0x3BE), 0x39F => array(0x3BF),
1156
-                    0x3A0 => array(0x3C0), 0x3A1 => array(0x3C1), 0x3A3 => array(0x3C3),
1157
-                    0x3A4 => array(0x3C4), 0x3A5 => array(0x3C5), 0x3A6 => array(0x3C6),
1158
-                    0x3A7 => array(0x3C7), 0x3A8 => array(0x3C8), 0x3A9 => array(0x3C9),
1159
-                    0x3AA => array(0x3CA), 0x3AB => array(0x3CB), 0x3B0 => array(0x3C5, 0x308, 0x301),
1160
-                    0x3C2 => array(0x3C3), 0x3D0 => array(0x3B2), 0x3D1 => array(0x3B8),
1161
-                    0x3D2 => array(0x3C5), 0x3D3 => array(0x3CD), 0x3D4 => array(0x3CB),
1162
-                    0x3D5 => array(0x3C6), 0x3D6 => array(0x3C0), 0x3D8 => array(0x3D9),
1163
-                    0x3DA => array(0x3DB), 0x3DC => array(0x3DD), 0x3DE => array(0x3DF),
1164
-                    0x3E0 => array(0x3E1), 0x3E2 => array(0x3E3), 0x3E4 => array(0x3E5),
1165
-                    0x3E6 => array(0x3E7), 0x3E8 => array(0x3E9), 0x3EA => array(0x3EB),
1166
-                    0x3EC => array(0x3ED), 0x3EE => array(0x3EF), 0x3F0 => array(0x3BA),
1167
-                    0x3F1 => array(0x3C1), 0x3F2 => array(0x3C3), 0x3F4 => array(0x3B8),
1168
-                    0x3F5 => array(0x3B5), 0x400 => array(0x450), 0x401 => array(0x451),
1169
-                    0x402 => array(0x452), 0x403 => array(0x453), 0x404 => array(0x454),
1170
-                    0x405 => array(0x455), 0x406 => array(0x456), 0x407 => array(0x457),
1171
-                    0x408 => array(0x458), 0x409 => array(0x459), 0x40A => array(0x45A),
1172
-                    0x40B => array(0x45B), 0x40C => array(0x45C), 0x40D => array(0x45D),
1173
-                    0x40E => array(0x45E), 0x40F => array(0x45F), 0x410 => array(0x430),
1174
-                    0x411 => array(0x431), 0x412 => array(0x432), 0x413 => array(0x433),
1175
-                    0x414 => array(0x434), 0x415 => array(0x435), 0x416 => array(0x436),
1176
-                    0x417 => array(0x437), 0x418 => array(0x438), 0x419 => array(0x439),
1177
-                    0x41A => array(0x43A), 0x41B => array(0x43B), 0x41C => array(0x43C),
1178
-                    0x41D => array(0x43D), 0x41E => array(0x43E), 0x41F => array(0x43F),
1179
-                    0x420 => array(0x440), 0x421 => array(0x441), 0x422 => array(0x442),
1180
-                    0x423 => array(0x443), 0x424 => array(0x444), 0x425 => array(0x445),
1181
-                    0x426 => array(0x446), 0x427 => array(0x447), 0x428 => array(0x448),
1182
-                    0x429 => array(0x449), 0x42A => array(0x44A), 0x42B => array(0x44B),
1183
-                    0x42C => array(0x44C), 0x42D => array(0x44D), 0x42E => array(0x44E),
1184
-                    0x42F => array(0x44F), 0x460 => array(0x461), 0x462 => array(0x463),
1185
-                    0x464 => array(0x465), 0x466 => array(0x467), 0x468 => array(0x469),
1186
-                    0x46A => array(0x46B), 0x46C => array(0x46D), 0x46E => array(0x46F),
1187
-                    0x470 => array(0x471), 0x472 => array(0x473), 0x474 => array(0x475),
1188
-                    0x476 => array(0x477), 0x478 => array(0x479), 0x47A => array(0x47B),
1189
-                    0x47C => array(0x47D), 0x47E => array(0x47F), 0x480 => array(0x481),
1190
-                    0x48A => array(0x48B), 0x48C => array(0x48D), 0x48E => array(0x48F),
1191
-                    0x490 => array(0x491), 0x492 => array(0x493), 0x494 => array(0x495),
1192
-                    0x496 => array(0x497), 0x498 => array(0x499), 0x49A => array(0x49B),
1193
-                    0x49C => array(0x49D), 0x49E => array(0x49F), 0x4A0 => array(0x4A1),
1194
-                    0x4A2 => array(0x4A3), 0x4A4 => array(0x4A5), 0x4A6 => array(0x4A7),
1195
-                    0x4A8 => array(0x4A9), 0x4AA => array(0x4AB), 0x4AC => array(0x4AD),
1196
-                    0x4AE => array(0x4AF), 0x4B0 => array(0x4B1), 0x4B2 => array(0x4B3),
1197
-                    0x4B4 => array(0x4B5), 0x4B6 => array(0x4B7), 0x4B8 => array(0x4B9),
1198
-                    0x4BA => array(0x4BB), 0x4BC => array(0x4BD), 0x4BE => array(0x4BF),
1199
-                    0x4C1 => array(0x4C2), 0x4C3 => array(0x4C4), 0x4C5 => array(0x4C6),
1200
-                    0x4C7 => array(0x4C8), 0x4C9 => array(0x4CA), 0x4CB => array(0x4CC),
1201
-                    0x4CD => array(0x4CE), 0x4D0 => array(0x4D1), 0x4D2 => array(0x4D3),
1202
-                    0x4D4 => array(0x4D5), 0x4D6 => array(0x4D7), 0x4D8 => array(0x4D9),
1203
-                    0x4DA => array(0x4DB), 0x4DC => array(0x4DD), 0x4DE => array(0x4DF),
1204
-                    0x4E0 => array(0x4E1), 0x4E2 => array(0x4E3), 0x4E4 => array(0x4E5),
1205
-                    0x4E6 => array(0x4E7), 0x4E8 => array(0x4E9), 0x4EA => array(0x4EB),
1206
-                    0x4EC => array(0x4ED), 0x4EE => array(0x4EF), 0x4F0 => array(0x4F1),
1207
-                    0x4F2 => array(0x4F3), 0x4F4 => array(0x4F5), 0x4F8 => array(0x4F9),
1208
-                    0x500 => array(0x501), 0x502 => array(0x503), 0x504 => array(0x505),
1209
-                    0x506 => array(0x507), 0x508 => array(0x509), 0x50A => array(0x50B),
1210
-                    0x50C => array(0x50D), 0x50E => array(0x50F), 0x531 => array(0x561),
1211
-                    0x532 => array(0x562), 0x533 => array(0x563), 0x534 => array(0x564),
1212
-                    0x535 => array(0x565), 0x536 => array(0x566), 0x537 => array(0x567),
1213
-                    0x538 => array(0x568), 0x539 => array(0x569), 0x53A => array(0x56A),
1214
-                    0x53B => array(0x56B), 0x53C => array(0x56C), 0x53D => array(0x56D),
1215
-                    0x53E => array(0x56E), 0x53F => array(0x56F), 0x540 => array(0x570),
1216
-                    0x541 => array(0x571), 0x542 => array(0x572), 0x543 => array(0x573),
1217
-                    0x544 => array(0x574), 0x545 => array(0x575), 0x546 => array(0x576),
1218
-                    0x547 => array(0x577), 0x548 => array(0x578), 0x549 => array(0x579),
1219
-                    0x54A => array(0x57A), 0x54B => array(0x57B), 0x54C => array(0x57C),
1220
-                    0x54D => array(0x57D), 0x54E => array(0x57E), 0x54F => array(0x57F),
1221
-                    0x550 => array(0x580), 0x551 => array(0x581), 0x552 => array(0x582),
1222
-                    0x553 => array(0x583), 0x554 => array(0x584), 0x555 => array(0x585),
1223
-                    0x556 => array(0x586), 0x587 => array(0x565, 0x582), 0xE33 => array(0xE4D, 0xE32),
1224
-                    0x1E00 => array(0x1E01), 0x1E02 => array(0x1E03), 0x1E04 => array(0x1E05),
1225
-                    0x1E06 => array(0x1E07), 0x1E08 => array(0x1E09), 0x1E0A => array(0x1E0B),
1226
-                    0x1E0C => array(0x1E0D), 0x1E0E => array(0x1E0F), 0x1E10 => array(0x1E11),
1227
-                    0x1E12 => array(0x1E13), 0x1E14 => array(0x1E15), 0x1E16 => array(0x1E17),
1228
-                    0x1E18 => array(0x1E19), 0x1E1A => array(0x1E1B), 0x1E1C => array(0x1E1D),
1229
-                    0x1E1E => array(0x1E1F), 0x1E20 => array(0x1E21), 0x1E22 => array(0x1E23),
1230
-                    0x1E24 => array(0x1E25), 0x1E26 => array(0x1E27), 0x1E28 => array(0x1E29),
1231
-                    0x1E2A => array(0x1E2B), 0x1E2C => array(0x1E2D), 0x1E2E => array(0x1E2F),
1232
-                    0x1E30 => array(0x1E31), 0x1E32 => array(0x1E33), 0x1E34 => array(0x1E35),
1233
-                    0x1E36 => array(0x1E37), 0x1E38 => array(0x1E39), 0x1E3A => array(0x1E3B),
1234
-                    0x1E3C => array(0x1E3D), 0x1E3E => array(0x1E3F), 0x1E40 => array(0x1E41),
1235
-                    0x1E42 => array(0x1E43), 0x1E44 => array(0x1E45), 0x1E46 => array(0x1E47),
1236
-                    0x1E48 => array(0x1E49), 0x1E4A => array(0x1E4B), 0x1E4C => array(0x1E4D),
1237
-                    0x1E4E => array(0x1E4F), 0x1E50 => array(0x1E51), 0x1E52 => array(0x1E53),
1238
-                    0x1E54 => array(0x1E55), 0x1E56 => array(0x1E57), 0x1E58 => array(0x1E59),
1239
-                    0x1E5A => array(0x1E5B), 0x1E5C => array(0x1E5D), 0x1E5E => array(0x1E5F),
1240
-                    0x1E60 => array(0x1E61), 0x1E62 => array(0x1E63), 0x1E64 => array(0x1E65),
1241
-                    0x1E66 => array(0x1E67), 0x1E68 => array(0x1E69), 0x1E6A => array(0x1E6B),
1242
-                    0x1E6C => array(0x1E6D), 0x1E6E => array(0x1E6F), 0x1E70 => array(0x1E71),
1243
-                    0x1E72 => array(0x1E73), 0x1E74 => array(0x1E75), 0x1E76 => array(0x1E77),
1244
-                    0x1E78 => array(0x1E79), 0x1E7A => array(0x1E7B), 0x1E7C => array(0x1E7D),
1245
-                    0x1E7E => array(0x1E7F), 0x1E80 => array(0x1E81), 0x1E82 => array(0x1E83),
1246
-                    0x1E84 => array(0x1E85), 0x1E86 => array(0x1E87), 0x1E88 => array(0x1E89),
1247
-                    0x1E8A => array(0x1E8B), 0x1E8C => array(0x1E8D), 0x1E8E => array(0x1E8F),
1248
-                    0x1E90 => array(0x1E91), 0x1E92 => array(0x1E93), 0x1E94 => array(0x1E95),
1249
-                    0x1E96 => array(0x68, 0x331), 0x1E97 => array(0x74, 0x308), 0x1E98 => array(0x77, 0x30A),
1250
-                    0x1E99 => array(0x79, 0x30A), 0x1E9A => array(0x61, 0x2BE), 0x1E9B => array(0x1E61),
1251
-                    0x1EA0 => array(0x1EA1), 0x1EA2 => array(0x1EA3), 0x1EA4 => array(0x1EA5),
1252
-                    0x1EA6 => array(0x1EA7), 0x1EA8 => array(0x1EA9), 0x1EAA => array(0x1EAB),
1253
-                    0x1EAC => array(0x1EAD), 0x1EAE => array(0x1EAF), 0x1EB0 => array(0x1EB1),
1254
-                    0x1EB2 => array(0x1EB3), 0x1EB4 => array(0x1EB5), 0x1EB6 => array(0x1EB7),
1255
-                    0x1EB8 => array(0x1EB9), 0x1EBA => array(0x1EBB), 0x1EBC => array(0x1EBD),
1256
-                    0x1EBE => array(0x1EBF), 0x1EC0 => array(0x1EC1), 0x1EC2 => array(0x1EC3),
1257
-                    0x1EC4 => array(0x1EC5), 0x1EC6 => array(0x1EC7), 0x1EC8 => array(0x1EC9),
1258
-                    0x1ECA => array(0x1ECB), 0x1ECC => array(0x1ECD), 0x1ECE => array(0x1ECF),
1259
-                    0x1ED0 => array(0x1ED1), 0x1ED2 => array(0x1ED3), 0x1ED4 => array(0x1ED5),
1260
-                    0x1ED6 => array(0x1ED7), 0x1ED8 => array(0x1ED9), 0x1EDA => array(0x1EDB),
1261
-                    0x1EDC => array(0x1EDD), 0x1EDE => array(0x1EDF), 0x1EE0 => array(0x1EE1),
1262
-                    0x1EE2 => array(0x1EE3), 0x1EE4 => array(0x1EE5), 0x1EE6 => array(0x1EE7),
1263
-                    0x1EE8 => array(0x1EE9), 0x1EEA => array(0x1EEB), 0x1EEC => array(0x1EED),
1264
-                    0x1EEE => array(0x1EEF), 0x1EF0 => array(0x1EF1), 0x1EF2 => array(0x1EF3),
1265
-                    0x1EF4 => array(0x1EF5), 0x1EF6 => array(0x1EF7), 0x1EF8 => array(0x1EF9),
1266
-                    0x1F08 => array(0x1F00), 0x1F09 => array(0x1F01), 0x1F0A => array(0x1F02),
1267
-                    0x1F0B => array(0x1F03), 0x1F0C => array(0x1F04), 0x1F0D => array(0x1F05),
1268
-                    0x1F0E => array(0x1F06), 0x1F0F => array(0x1F07), 0x1F18 => array(0x1F10),
1269
-                    0x1F19 => array(0x1F11), 0x1F1A => array(0x1F12), 0x1F1B => array(0x1F13),
1270
-                    0x1F1C => array(0x1F14), 0x1F1D => array(0x1F15), 0x1F28 => array(0x1F20),
1271
-                    0x1F29 => array(0x1F21), 0x1F2A => array(0x1F22), 0x1F2B => array(0x1F23),
1272
-                    0x1F2C => array(0x1F24), 0x1F2D => array(0x1F25), 0x1F2E => array(0x1F26),
1273
-                    0x1F2F => array(0x1F27), 0x1F38 => array(0x1F30), 0x1F39 => array(0x1F31),
1274
-                    0x1F3A => array(0x1F32), 0x1F3B => array(0x1F33), 0x1F3C => array(0x1F34),
1275
-                    0x1F3D => array(0x1F35), 0x1F3E => array(0x1F36), 0x1F3F => array(0x1F37),
1276
-                    0x1F48 => array(0x1F40), 0x1F49 => array(0x1F41), 0x1F4A => array(0x1F42),
1277
-                    0x1F4B => array(0x1F43), 0x1F4C => array(0x1F44), 0x1F4D => array(0x1F45),
1278
-                    0x1F50 => array(0x3C5, 0x313), 0x1F52 => array(0x3C5, 0x313, 0x300),
1279
-                    0x1F54 => array(0x3C5, 0x313, 0x301), 0x1F56 => array(0x3C5, 0x313, 0x342),
1280
-                    0x1F59 => array(0x1F51), 0x1F5B => array(0x1F53), 0x1F5D => array(0x1F55),
1281
-                    0x1F5F => array(0x1F57), 0x1F68 => array(0x1F60), 0x1F69 => array(0x1F61),
1282
-                    0x1F6A => array(0x1F62), 0x1F6B => array(0x1F63), 0x1F6C => array(0x1F64),
1283
-                    0x1F6D => array(0x1F65), 0x1F6E => array(0x1F66), 0x1F6F => array(0x1F67),
1284
-                    0x1F80 => array(0x1F00, 0x3B9), 0x1F81 => array(0x1F01, 0x3B9),
1285
-                    0x1F82 => array(0x1F02, 0x3B9), 0x1F83 => array(0x1F03, 0x3B9),
1286
-                    0x1F84 => array(0x1F04, 0x3B9), 0x1F85 => array(0x1F05, 0x3B9),
1287
-                    0x1F86 => array(0x1F06, 0x3B9), 0x1F87 => array(0x1F07, 0x3B9),
1288
-                    0x1F88 => array(0x1F00, 0x3B9), 0x1F89 => array(0x1F01, 0x3B9),
1289
-                    0x1F8A => array(0x1F02, 0x3B9), 0x1F8B => array(0x1F03, 0x3B9),
1290
-                    0x1F8C => array(0x1F04, 0x3B9), 0x1F8D => array(0x1F05, 0x3B9),
1291
-                    0x1F8E => array(0x1F06, 0x3B9), 0x1F8F => array(0x1F07, 0x3B9),
1292
-                    0x1F90 => array(0x1F20, 0x3B9), 0x1F91 => array(0x1F21, 0x3B9),
1293
-                    0x1F92 => array(0x1F22, 0x3B9), 0x1F93 => array(0x1F23, 0x3B9),
1294
-                    0x1F94 => array(0x1F24, 0x3B9), 0x1F95 => array(0x1F25, 0x3B9),
1295
-                    0x1F96 => array(0x1F26, 0x3B9), 0x1F97 => array(0x1F27, 0x3B9),
1296
-                    0x1F98 => array(0x1F20, 0x3B9), 0x1F99 => array(0x1F21, 0x3B9),
1297
-                    0x1F9A => array(0x1F22, 0x3B9), 0x1F9B => array(0x1F23, 0x3B9),
1298
-                    0x1F9C => array(0x1F24, 0x3B9), 0x1F9D => array(0x1F25, 0x3B9),
1299
-                    0x1F9E => array(0x1F26, 0x3B9), 0x1F9F => array(0x1F27, 0x3B9),
1300
-                    0x1FA0 => array(0x1F60, 0x3B9), 0x1FA1 => array(0x1F61, 0x3B9),
1301
-                    0x1FA2 => array(0x1F62, 0x3B9), 0x1FA3 => array(0x1F63, 0x3B9),
1302
-                    0x1FA4 => array(0x1F64, 0x3B9), 0x1FA5 => array(0x1F65, 0x3B9),
1303
-                    0x1FA6 => array(0x1F66, 0x3B9), 0x1FA7 => array(0x1F67, 0x3B9),
1304
-                    0x1FA8 => array(0x1F60, 0x3B9), 0x1FA9 => array(0x1F61, 0x3B9),
1305
-                    0x1FAA => array(0x1F62, 0x3B9), 0x1FAB => array(0x1F63, 0x3B9),
1306
-                    0x1FAC => array(0x1F64, 0x3B9), 0x1FAD => array(0x1F65, 0x3B9),
1307
-                    0x1FAE => array(0x1F66, 0x3B9), 0x1FAF => array(0x1F67, 0x3B9),
1308
-                    0x1FB2 => array(0x1F70, 0x3B9), 0x1FB3 => array(0x3B1, 0x3B9),
1309
-                    0x1FB4 => array(0x3AC, 0x3B9), 0x1FB6 => array(0x3B1, 0x342),
1310
-                    0x1FB7 => array(0x3B1, 0x342, 0x3B9), 0x1FB8 => array(0x1FB0),
1311
-                    0x1FB9 => array(0x1FB1), 0x1FBA => array(0x1F70), 0x1FBB => array(0x1F71),
1312
-                    0x1FBC => array(0x3B1, 0x3B9), 0x1FBE => array(0x3B9),
1313
-                    0x1FC2 => array(0x1F74, 0x3B9), 0x1FC3 => array(0x3B7, 0x3B9),
1314
-                    0x1FC4 => array(0x3AE, 0x3B9), 0x1FC6 => array(0x3B7, 0x342),
1315
-                    0x1FC7 => array(0x3B7, 0x342, 0x3B9), 0x1FC8 => array(0x1F72),
1316
-                    0x1FC9 => array(0x1F73), 0x1FCA => array(0x1F74), 0x1FCB => array(0x1F75),
1317
-                    0x1FCC => array(0x3B7, 0x3B9), 0x1FD2 => array(0x3B9, 0x308, 0x300),
1318
-                    0x1FD3 => array(0x3B9, 0x308, 0x301), 0x1FD6 => array(0x3B9, 0x342),
1319
-                    0x1FD7 => array(0x3B9, 0x308, 0x342), 0x1FD8 => array(0x1FD0),
1320
-                    0x1FD9 => array(0x1FD1), 0x1FDA => array(0x1F76),
1321
-                    0x1FDB => array(0x1F77), 0x1FE2 => array(0x3C5, 0x308, 0x300),
1322
-                    0x1FE3 => array(0x3C5, 0x308, 0x301), 0x1FE4 => array(0x3C1, 0x313),
1323
-                    0x1FE6 => array(0x3C5, 0x342), 0x1FE7 => array(0x3C5, 0x308, 0x342),
1324
-                    0x1FE8 => array(0x1FE0), 0x1FE9 => array(0x1FE1),
1325
-                    0x1FEA => array(0x1F7A), 0x1FEB => array(0x1F7B),
1326
-                    0x1FEC => array(0x1FE5), 0x1FF2 => array(0x1F7C, 0x3B9),
1327
-                    0x1FF3 => array(0x3C9, 0x3B9), 0x1FF4 => array(0x3CE, 0x3B9),
1328
-                    0x1FF6 => array(0x3C9, 0x342), 0x1FF7 => array(0x3C9, 0x342, 0x3B9),
1329
-                    0x1FF8 => array(0x1F78), 0x1FF9 => array(0x1F79), 0x1FFA => array(0x1F7C),
1330
-                    0x1FFB => array(0x1F7D), 0x1FFC => array(0x3C9, 0x3B9),
1331
-                    0x20A8 => array(0x72, 0x73), 0x2102 => array(0x63), 0x2103 => array(0xB0, 0x63),
1332
-                    0x2107 => array(0x25B), 0x2109 => array(0xB0, 0x66), 0x210B => array(0x68),
1333
-                    0x210C => array(0x68), 0x210D => array(0x68), 0x2110 => array(0x69),
1334
-                    0x2111 => array(0x69), 0x2112 => array(0x6C), 0x2115 => array(0x6E),
1335
-                    0x2116 => array(0x6E, 0x6F), 0x2119 => array(0x70), 0x211A => array(0x71),
1336
-                    0x211B => array(0x72), 0x211C => array(0x72), 0x211D => array(0x72),
1337
-                    0x2120 => array(0x73, 0x6D), 0x2121 => array(0x74, 0x65, 0x6C),
1338
-                    0x2122 => array(0x74, 0x6D), 0x2124 => array(0x7A), 0x2126 => array(0x3C9),
1339
-                    0x2128 => array(0x7A), 0x212A => array(0x6B), 0x212B => array(0xE5),
1340
-                    0x212C => array(0x62), 0x212D => array(0x63), 0x2130 => array(0x65),
1341
-                    0x2131 => array(0x66), 0x2133 => array(0x6D), 0x213E => array(0x3B3),
1342
-                    0x213F => array(0x3C0), 0x2145 => array(0x64), 0x2160 => array(0x2170),
1343
-                    0x2161 => array(0x2171), 0x2162 => array(0x2172), 0x2163 => array(0x2173),
1344
-                    0x2164 => array(0x2174), 0x2165 => array(0x2175), 0x2166 => array(0x2176),
1345
-                    0x2167 => array(0x2177), 0x2168 => array(0x2178), 0x2169 => array(0x2179),
1346
-                    0x216A => array(0x217A), 0x216B => array(0x217B), 0x216C => array(0x217C),
1347
-                    0x216D => array(0x217D), 0x216E => array(0x217E), 0x216F => array(0x217F),
1348
-                    0x24B6 => array(0x24D0), 0x24B7 => array(0x24D1), 0x24B8 => array(0x24D2),
1349
-                    0x24B9 => array(0x24D3), 0x24BA => array(0x24D4), 0x24BB => array(0x24D5),
1350
-                    0x24BC => array(0x24D6), 0x24BD => array(0x24D7), 0x24BE => array(0x24D8),
1351
-                    0x24BF => array(0x24D9), 0x24C0 => array(0x24DA), 0x24C1 => array(0x24DB),
1352
-                    0x24C2 => array(0x24DC), 0x24C3 => array(0x24DD), 0x24C4 => array(0x24DE),
1353
-                    0x24C5 => array(0x24DF), 0x24C6 => array(0x24E0), 0x24C7 => array(0x24E1),
1354
-                    0x24C8 => array(0x24E2), 0x24C9 => array(0x24E3), 0x24CA => array(0x24E4),
1355
-                    0x24CB => array(0x24E5), 0x24CC => array(0x24E6), 0x24CD => array(0x24E7),
1356
-                    0x24CE => array(0x24E8), 0x24CF => array(0x24E9), 0x3371 => array(0x68, 0x70, 0x61),
1357
-                    0x3373 => array(0x61, 0x75), 0x3375 => array(0x6F, 0x76),
1358
-                    0x3380 => array(0x70, 0x61), 0x3381 => array(0x6E, 0x61),
1359
-                    0x3382 => array(0x3BC, 0x61), 0x3383 => array(0x6D, 0x61),
1360
-                    0x3384 => array(0x6B, 0x61), 0x3385 => array(0x6B, 0x62),
1361
-                    0x3386 => array(0x6D, 0x62), 0x3387 => array(0x67, 0x62),
1362
-                    0x338A => array(0x70, 0x66), 0x338B => array(0x6E, 0x66),
1363
-                    0x338C => array(0x3BC, 0x66), 0x3390 => array(0x68, 0x7A),
1364
-                    0x3391 => array(0x6B, 0x68, 0x7A), 0x3392 => array(0x6D, 0x68, 0x7A),
1365
-                    0x3393 => array(0x67, 0x68, 0x7A), 0x3394 => array(0x74, 0x68, 0x7A),
1366
-                    0x33A9 => array(0x70, 0x61), 0x33AA => array(0x6B, 0x70, 0x61),
1367
-                    0x33AB => array(0x6D, 0x70, 0x61), 0x33AC => array(0x67, 0x70, 0x61),
1368
-                    0x33B4 => array(0x70, 0x76), 0x33B5 => array(0x6E, 0x76),
1369
-                    0x33B6 => array(0x3BC, 0x76), 0x33B7 => array(0x6D, 0x76),
1370
-                    0x33B8 => array(0x6B, 0x76), 0x33B9 => array(0x6D, 0x76),
1371
-                    0x33BA => array(0x70, 0x77), 0x33BB => array(0x6E, 0x77),
1372
-                    0x33BC => array(0x3BC, 0x77), 0x33BD => array(0x6D, 0x77),
1373
-                    0x33BE => array(0x6B, 0x77), 0x33BF => array(0x6D, 0x77),
1374
-                    0x33C0 => array(0x6B, 0x3C9), 0x33C1 => array(0x6D, 0x3C9), /*
1051
+	/**
1052
+	 * Holds all relevant mapping tables
1053
+	 * See RFC3454 for details
1054
+	 *
1055
+	 * @private array
1056
+	 * @since 0.5.2
1057
+	 */
1058
+	protected static $NP = array(
1059
+			'map_nothing' => array(0xAD, 0x34F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B, 0x200C,
1060
+					0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, 0xFE05, 0xFE06, 0xFE07,
1061
+					0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E, 0xFE0F, 0xFEFF
1062
+			),
1063
+			'general_prohibited' => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
1064
+					20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
1065
+					43, 44, 47, 59, 60, 61, 62, 63, 64, 91, 92, 93, 94, 95, 96, 123, 124, 125, 126, 127, 0x3002
1066
+			),
1067
+			'prohibit' => array(0xA0, 0x340, 0x341, 0x6DD, 0x70F, 0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003,
1068
+					0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x200B, 0x200C, 0x200D, 0x200E, 0x200F,
1069
+					0x2028, 0x2029, 0x202A, 0x202B, 0x202C, 0x202D, 0x202E, 0x202F, 0x205F, 0x206A, 0x206B, 0x206C,
1070
+					0x206D, 0x206E, 0x206F, 0x3000, 0x33C2, 0xFEFF, 0xFFF9, 0xFFFA, 0xFFFB, 0xFFFC, 0xFFFD, 0xFFFE, 0xFFFF,
1071
+					0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, 0x6FFFE,
1072
+					0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, 0xBFFFF,
1073
+					0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xE0001, 0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF
1074
+			),
1075
+			'prohibit_ranges' => array(array(0x80, 0x9F), array(0x2060, 0x206F), array(0x1D173, 0x1D17A),
1076
+					array(0xE000, 0xF8FF), array(0xF0000, 0xFFFFD), array(0x100000, 0x10FFFD),
1077
+					array(0xFDD0, 0xFDEF), array(0xD800, 0xDFFF), array(0x2FF0, 0x2FFB), array(0xE0020, 0xE007F)
1078
+			),
1079
+			'replacemaps_2003' => array(0x41 => array(0x61), 0x42 => array(0x62), 0x43 => array(0x63),
1080
+					0x44 => array(0x64), 0x45 => array(0x65), 0x46 => array(0x66), 0x47 => array(0x67),
1081
+					0x48 => array(0x68), 0x49 => array(0x69), 0x4A => array(0x6A), 0x4B => array(0x6B),
1082
+					0x4C => array(0x6C), 0x4D => array(0x6D), 0x4E => array(0x6E), 0x4F => array(0x6F),
1083
+					0x50 => array(0x70), 0x51 => array(0x71), 0x52 => array(0x72), 0x53 => array(0x73),
1084
+					0x54 => array(0x74), 0x55 => array(0x75), 0x56 => array(0x76), 0x57 => array(0x77),
1085
+					0x58 => array(0x78), 0x59 => array(0x79), 0x5A => array(0x7A), 0xB5 => array(0x3BC),
1086
+					0xC0 => array(0xE0), 0xC1 => array(0xE1), 0xC2 => array(0xE2), 0xC3 => array(0xE3),
1087
+					0xC4 => array(0xE4), 0xC5 => array(0xE5), 0xC6 => array(0xE6), 0xC7 => array(0xE7),
1088
+					0xC8 => array(0xE8), 0xC9 => array(0xE9), 0xCA => array(0xEA), 0xCB => array(0xEB),
1089
+					0xCC => array(0xEC), 0xCD => array(0xED), 0xCE => array(0xEE), 0xCF => array(0xEF),
1090
+					0xD0 => array(0xF0), 0xD1 => array(0xF1), 0xD2 => array(0xF2), 0xD3 => array(0xF3),
1091
+					0xD4 => array(0xF4), 0xD5 => array(0xF5), 0xD6 => array(0xF6), 0xD8 => array(0xF8),
1092
+					0xD9 => array(0xF9), 0xDA => array(0xFA), 0xDB => array(0xFB), 0xDC => array(0xFC),
1093
+					0xDD => array(0xFD), 0xDE => array(0xFE), 0xDF => array(0x73, 0x73),
1094
+					0x100 => array(0x101), 0x102 => array(0x103), 0x104 => array(0x105),
1095
+					0x106 => array(0x107), 0x108 => array(0x109), 0x10A => array(0x10B),
1096
+					0x10C => array(0x10D), 0x10E => array(0x10F), 0x110 => array(0x111),
1097
+					0x112 => array(0x113), 0x114 => array(0x115), 0x116 => array(0x117),
1098
+					0x118 => array(0x119), 0x11A => array(0x11B), 0x11C => array(0x11D),
1099
+					0x11E => array(0x11F), 0x120 => array(0x121), 0x122 => array(0x123),
1100
+					0x124 => array(0x125), 0x126 => array(0x127), 0x128 => array(0x129),
1101
+					0x12A => array(0x12B), 0x12C => array(0x12D), 0x12E => array(0x12F),
1102
+					0x130 => array(0x69, 0x307), 0x132 => array(0x133), 0x134 => array(0x135),
1103
+					0x136 => array(0x137), 0x139 => array(0x13A), 0x13B => array(0x13C),
1104
+					0x13D => array(0x13E), 0x13F => array(0x140), 0x141 => array(0x142),
1105
+					0x143 => array(0x144), 0x145 => array(0x146), 0x147 => array(0x148),
1106
+					0x149 => array(0x2BC, 0x6E), 0x14A => array(0x14B), 0x14C => array(0x14D),
1107
+					0x14E => array(0x14F), 0x150 => array(0x151), 0x152 => array(0x153),
1108
+					0x154 => array(0x155), 0x156 => array(0x157), 0x158 => array(0x159),
1109
+					0x15A => array(0x15B), 0x15C => array(0x15D), 0x15E => array(0x15F),
1110
+					0x160 => array(0x161), 0x162 => array(0x163), 0x164 => array(0x165),
1111
+					0x166 => array(0x167), 0x168 => array(0x169), 0x16A => array(0x16B),
1112
+					0x16C => array(0x16D), 0x16E => array(0x16F), 0x170 => array(0x171),
1113
+					0x172 => array(0x173), 0x174 => array(0x175), 0x176 => array(0x177),
1114
+					0x178 => array(0xFF), 0x179 => array(0x17A), 0x17B => array(0x17C),
1115
+					0x17D => array(0x17E), 0x17F => array(0x73), 0x181 => array(0x253),
1116
+					0x182 => array(0x183), 0x184 => array(0x185), 0x186 => array(0x254),
1117
+					0x187 => array(0x188), 0x189 => array(0x256), 0x18A => array(0x257),
1118
+					0x18B => array(0x18C), 0x18E => array(0x1DD), 0x18F => array(0x259),
1119
+					0x190 => array(0x25B), 0x191 => array(0x192), 0x193 => array(0x260),
1120
+					0x194 => array(0x263), 0x196 => array(0x269), 0x197 => array(0x268),
1121
+					0x198 => array(0x199), 0x19C => array(0x26F), 0x19D => array(0x272),
1122
+					0x19F => array(0x275), 0x1A0 => array(0x1A1), 0x1A2 => array(0x1A3),
1123
+					0x1A4 => array(0x1A5), 0x1A6 => array(0x280), 0x1A7 => array(0x1A8),
1124
+					0x1A9 => array(0x283), 0x1AC => array(0x1AD), 0x1AE => array(0x288),
1125
+					0x1AF => array(0x1B0), 0x1B1 => array(0x28A), 0x1B2 => array(0x28B),
1126
+					0x1B3 => array(0x1B4), 0x1B5 => array(0x1B6), 0x1B7 => array(0x292),
1127
+					0x1B8 => array(0x1B9), 0x1BC => array(0x1BD), 0x1C4 => array(0x1C6),
1128
+					0x1C5 => array(0x1C6), 0x1C7 => array(0x1C9), 0x1C8 => array(0x1C9),
1129
+					0x1CA => array(0x1CC), 0x1CB => array(0x1CC), 0x1CD => array(0x1CE),
1130
+					0x1CF => array(0x1D0), 0x1D1 => array(0x1D2), 0x1D3 => array(0x1D4),
1131
+					0x1D5 => array(0x1D6), 0x1D7 => array(0x1D8), 0x1D9 => array(0x1DA),
1132
+					0x1DB => array(0x1DC), 0x1DE => array(0x1DF), 0x1E0 => array(0x1E1),
1133
+					0x1E2 => array(0x1E3), 0x1E4 => array(0x1E5), 0x1E6 => array(0x1E7),
1134
+					0x1E8 => array(0x1E9), 0x1EA => array(0x1EB), 0x1EC => array(0x1ED),
1135
+					0x1EE => array(0x1EF), 0x1F0 => array(0x6A, 0x30C), 0x1F1 => array(0x1F3),
1136
+					0x1F2 => array(0x1F3), 0x1F4 => array(0x1F5), 0x1F6 => array(0x195),
1137
+					0x1F7 => array(0x1BF), 0x1F8 => array(0x1F9), 0x1FA => array(0x1FB),
1138
+					0x1FC => array(0x1FD), 0x1FE => array(0x1FF), 0x200 => array(0x201),
1139
+					0x202 => array(0x203), 0x204 => array(0x205), 0x206 => array(0x207),
1140
+					0x208 => array(0x209), 0x20A => array(0x20B), 0x20C => array(0x20D),
1141
+					0x20E => array(0x20F), 0x210 => array(0x211), 0x212 => array(0x213),
1142
+					0x214 => array(0x215), 0x216 => array(0x217), 0x218 => array(0x219),
1143
+					0x21A => array(0x21B), 0x21C => array(0x21D), 0x21E => array(0x21F),
1144
+					0x220 => array(0x19E), 0x222 => array(0x223), 0x224 => array(0x225),
1145
+					0x226 => array(0x227), 0x228 => array(0x229), 0x22A => array(0x22B),
1146
+					0x22C => array(0x22D), 0x22E => array(0x22F), 0x230 => array(0x231),
1147
+					0x232 => array(0x233), 0x345 => array(0x3B9), 0x37A => array(0x20, 0x3B9),
1148
+					0x386 => array(0x3AC), 0x388 => array(0x3AD), 0x389 => array(0x3AE),
1149
+					0x38A => array(0x3AF), 0x38C => array(0x3CC), 0x38E => array(0x3CD),
1150
+					0x38F => array(0x3CE), 0x390 => array(0x3B9, 0x308, 0x301),
1151
+					0x391 => array(0x3B1), 0x392 => array(0x3B2), 0x393 => array(0x3B3),
1152
+					0x394 => array(0x3B4), 0x395 => array(0x3B5), 0x396 => array(0x3B6),
1153
+					0x397 => array(0x3B7), 0x398 => array(0x3B8), 0x399 => array(0x3B9),
1154
+					0x39A => array(0x3BA), 0x39B => array(0x3BB), 0x39C => array(0x3BC),
1155
+					0x39D => array(0x3BD), 0x39E => array(0x3BE), 0x39F => array(0x3BF),
1156
+					0x3A0 => array(0x3C0), 0x3A1 => array(0x3C1), 0x3A3 => array(0x3C3),
1157
+					0x3A4 => array(0x3C4), 0x3A5 => array(0x3C5), 0x3A6 => array(0x3C6),
1158
+					0x3A7 => array(0x3C7), 0x3A8 => array(0x3C8), 0x3A9 => array(0x3C9),
1159
+					0x3AA => array(0x3CA), 0x3AB => array(0x3CB), 0x3B0 => array(0x3C5, 0x308, 0x301),
1160
+					0x3C2 => array(0x3C3), 0x3D0 => array(0x3B2), 0x3D1 => array(0x3B8),
1161
+					0x3D2 => array(0x3C5), 0x3D3 => array(0x3CD), 0x3D4 => array(0x3CB),
1162
+					0x3D5 => array(0x3C6), 0x3D6 => array(0x3C0), 0x3D8 => array(0x3D9),
1163
+					0x3DA => array(0x3DB), 0x3DC => array(0x3DD), 0x3DE => array(0x3DF),
1164
+					0x3E0 => array(0x3E1), 0x3E2 => array(0x3E3), 0x3E4 => array(0x3E5),
1165
+					0x3E6 => array(0x3E7), 0x3E8 => array(0x3E9), 0x3EA => array(0x3EB),
1166
+					0x3EC => array(0x3ED), 0x3EE => array(0x3EF), 0x3F0 => array(0x3BA),
1167
+					0x3F1 => array(0x3C1), 0x3F2 => array(0x3C3), 0x3F4 => array(0x3B8),
1168
+					0x3F5 => array(0x3B5), 0x400 => array(0x450), 0x401 => array(0x451),
1169
+					0x402 => array(0x452), 0x403 => array(0x453), 0x404 => array(0x454),
1170
+					0x405 => array(0x455), 0x406 => array(0x456), 0x407 => array(0x457),
1171
+					0x408 => array(0x458), 0x409 => array(0x459), 0x40A => array(0x45A),
1172
+					0x40B => array(0x45B), 0x40C => array(0x45C), 0x40D => array(0x45D),
1173
+					0x40E => array(0x45E), 0x40F => array(0x45F), 0x410 => array(0x430),
1174
+					0x411 => array(0x431), 0x412 => array(0x432), 0x413 => array(0x433),
1175
+					0x414 => array(0x434), 0x415 => array(0x435), 0x416 => array(0x436),
1176
+					0x417 => array(0x437), 0x418 => array(0x438), 0x419 => array(0x439),
1177
+					0x41A => array(0x43A), 0x41B => array(0x43B), 0x41C => array(0x43C),
1178
+					0x41D => array(0x43D), 0x41E => array(0x43E), 0x41F => array(0x43F),
1179
+					0x420 => array(0x440), 0x421 => array(0x441), 0x422 => array(0x442),
1180
+					0x423 => array(0x443), 0x424 => array(0x444), 0x425 => array(0x445),
1181
+					0x426 => array(0x446), 0x427 => array(0x447), 0x428 => array(0x448),
1182
+					0x429 => array(0x449), 0x42A => array(0x44A), 0x42B => array(0x44B),
1183
+					0x42C => array(0x44C), 0x42D => array(0x44D), 0x42E => array(0x44E),
1184
+					0x42F => array(0x44F), 0x460 => array(0x461), 0x462 => array(0x463),
1185
+					0x464 => array(0x465), 0x466 => array(0x467), 0x468 => array(0x469),
1186
+					0x46A => array(0x46B), 0x46C => array(0x46D), 0x46E => array(0x46F),
1187
+					0x470 => array(0x471), 0x472 => array(0x473), 0x474 => array(0x475),
1188
+					0x476 => array(0x477), 0x478 => array(0x479), 0x47A => array(0x47B),
1189
+					0x47C => array(0x47D), 0x47E => array(0x47F), 0x480 => array(0x481),
1190
+					0x48A => array(0x48B), 0x48C => array(0x48D), 0x48E => array(0x48F),
1191
+					0x490 => array(0x491), 0x492 => array(0x493), 0x494 => array(0x495),
1192
+					0x496 => array(0x497), 0x498 => array(0x499), 0x49A => array(0x49B),
1193
+					0x49C => array(0x49D), 0x49E => array(0x49F), 0x4A0 => array(0x4A1),
1194
+					0x4A2 => array(0x4A3), 0x4A4 => array(0x4A5), 0x4A6 => array(0x4A7),
1195
+					0x4A8 => array(0x4A9), 0x4AA => array(0x4AB), 0x4AC => array(0x4AD),
1196
+					0x4AE => array(0x4AF), 0x4B0 => array(0x4B1), 0x4B2 => array(0x4B3),
1197
+					0x4B4 => array(0x4B5), 0x4B6 => array(0x4B7), 0x4B8 => array(0x4B9),
1198
+					0x4BA => array(0x4BB), 0x4BC => array(0x4BD), 0x4BE => array(0x4BF),
1199
+					0x4C1 => array(0x4C2), 0x4C3 => array(0x4C4), 0x4C5 => array(0x4C6),
1200
+					0x4C7 => array(0x4C8), 0x4C9 => array(0x4CA), 0x4CB => array(0x4CC),
1201
+					0x4CD => array(0x4CE), 0x4D0 => array(0x4D1), 0x4D2 => array(0x4D3),
1202
+					0x4D4 => array(0x4D5), 0x4D6 => array(0x4D7), 0x4D8 => array(0x4D9),
1203
+					0x4DA => array(0x4DB), 0x4DC => array(0x4DD), 0x4DE => array(0x4DF),
1204
+					0x4E0 => array(0x4E1), 0x4E2 => array(0x4E3), 0x4E4 => array(0x4E5),
1205
+					0x4E6 => array(0x4E7), 0x4E8 => array(0x4E9), 0x4EA => array(0x4EB),
1206
+					0x4EC => array(0x4ED), 0x4EE => array(0x4EF), 0x4F0 => array(0x4F1),
1207
+					0x4F2 => array(0x4F3), 0x4F4 => array(0x4F5), 0x4F8 => array(0x4F9),
1208
+					0x500 => array(0x501), 0x502 => array(0x503), 0x504 => array(0x505),
1209
+					0x506 => array(0x507), 0x508 => array(0x509), 0x50A => array(0x50B),
1210
+					0x50C => array(0x50D), 0x50E => array(0x50F), 0x531 => array(0x561),
1211
+					0x532 => array(0x562), 0x533 => array(0x563), 0x534 => array(0x564),
1212
+					0x535 => array(0x565), 0x536 => array(0x566), 0x537 => array(0x567),
1213
+					0x538 => array(0x568), 0x539 => array(0x569), 0x53A => array(0x56A),
1214
+					0x53B => array(0x56B), 0x53C => array(0x56C), 0x53D => array(0x56D),
1215
+					0x53E => array(0x56E), 0x53F => array(0x56F), 0x540 => array(0x570),
1216
+					0x541 => array(0x571), 0x542 => array(0x572), 0x543 => array(0x573),
1217
+					0x544 => array(0x574), 0x545 => array(0x575), 0x546 => array(0x576),
1218
+					0x547 => array(0x577), 0x548 => array(0x578), 0x549 => array(0x579),
1219
+					0x54A => array(0x57A), 0x54B => array(0x57B), 0x54C => array(0x57C),
1220
+					0x54D => array(0x57D), 0x54E => array(0x57E), 0x54F => array(0x57F),
1221
+					0x550 => array(0x580), 0x551 => array(0x581), 0x552 => array(0x582),
1222
+					0x553 => array(0x583), 0x554 => array(0x584), 0x555 => array(0x585),
1223
+					0x556 => array(0x586), 0x587 => array(0x565, 0x582), 0xE33 => array(0xE4D, 0xE32),
1224
+					0x1E00 => array(0x1E01), 0x1E02 => array(0x1E03), 0x1E04 => array(0x1E05),
1225
+					0x1E06 => array(0x1E07), 0x1E08 => array(0x1E09), 0x1E0A => array(0x1E0B),
1226
+					0x1E0C => array(0x1E0D), 0x1E0E => array(0x1E0F), 0x1E10 => array(0x1E11),
1227
+					0x1E12 => array(0x1E13), 0x1E14 => array(0x1E15), 0x1E16 => array(0x1E17),
1228
+					0x1E18 => array(0x1E19), 0x1E1A => array(0x1E1B), 0x1E1C => array(0x1E1D),
1229
+					0x1E1E => array(0x1E1F), 0x1E20 => array(0x1E21), 0x1E22 => array(0x1E23),
1230
+					0x1E24 => array(0x1E25), 0x1E26 => array(0x1E27), 0x1E28 => array(0x1E29),
1231
+					0x1E2A => array(0x1E2B), 0x1E2C => array(0x1E2D), 0x1E2E => array(0x1E2F),
1232
+					0x1E30 => array(0x1E31), 0x1E32 => array(0x1E33), 0x1E34 => array(0x1E35),
1233
+					0x1E36 => array(0x1E37), 0x1E38 => array(0x1E39), 0x1E3A => array(0x1E3B),
1234
+					0x1E3C => array(0x1E3D), 0x1E3E => array(0x1E3F), 0x1E40 => array(0x1E41),
1235
+					0x1E42 => array(0x1E43), 0x1E44 => array(0x1E45), 0x1E46 => array(0x1E47),
1236
+					0x1E48 => array(0x1E49), 0x1E4A => array(0x1E4B), 0x1E4C => array(0x1E4D),
1237
+					0x1E4E => array(0x1E4F), 0x1E50 => array(0x1E51), 0x1E52 => array(0x1E53),
1238
+					0x1E54 => array(0x1E55), 0x1E56 => array(0x1E57), 0x1E58 => array(0x1E59),
1239
+					0x1E5A => array(0x1E5B), 0x1E5C => array(0x1E5D), 0x1E5E => array(0x1E5F),
1240
+					0x1E60 => array(0x1E61), 0x1E62 => array(0x1E63), 0x1E64 => array(0x1E65),
1241
+					0x1E66 => array(0x1E67), 0x1E68 => array(0x1E69), 0x1E6A => array(0x1E6B),
1242
+					0x1E6C => array(0x1E6D), 0x1E6E => array(0x1E6F), 0x1E70 => array(0x1E71),
1243
+					0x1E72 => array(0x1E73), 0x1E74 => array(0x1E75), 0x1E76 => array(0x1E77),
1244
+					0x1E78 => array(0x1E79), 0x1E7A => array(0x1E7B), 0x1E7C => array(0x1E7D),
1245
+					0x1E7E => array(0x1E7F), 0x1E80 => array(0x1E81), 0x1E82 => array(0x1E83),
1246
+					0x1E84 => array(0x1E85), 0x1E86 => array(0x1E87), 0x1E88 => array(0x1E89),
1247
+					0x1E8A => array(0x1E8B), 0x1E8C => array(0x1E8D), 0x1E8E => array(0x1E8F),
1248
+					0x1E90 => array(0x1E91), 0x1E92 => array(0x1E93), 0x1E94 => array(0x1E95),
1249
+					0x1E96 => array(0x68, 0x331), 0x1E97 => array(0x74, 0x308), 0x1E98 => array(0x77, 0x30A),
1250
+					0x1E99 => array(0x79, 0x30A), 0x1E9A => array(0x61, 0x2BE), 0x1E9B => array(0x1E61),
1251
+					0x1EA0 => array(0x1EA1), 0x1EA2 => array(0x1EA3), 0x1EA4 => array(0x1EA5),
1252
+					0x1EA6 => array(0x1EA7), 0x1EA8 => array(0x1EA9), 0x1EAA => array(0x1EAB),
1253
+					0x1EAC => array(0x1EAD), 0x1EAE => array(0x1EAF), 0x1EB0 => array(0x1EB1),
1254
+					0x1EB2 => array(0x1EB3), 0x1EB4 => array(0x1EB5), 0x1EB6 => array(0x1EB7),
1255
+					0x1EB8 => array(0x1EB9), 0x1EBA => array(0x1EBB), 0x1EBC => array(0x1EBD),
1256
+					0x1EBE => array(0x1EBF), 0x1EC0 => array(0x1EC1), 0x1EC2 => array(0x1EC3),
1257
+					0x1EC4 => array(0x1EC5), 0x1EC6 => array(0x1EC7), 0x1EC8 => array(0x1EC9),
1258
+					0x1ECA => array(0x1ECB), 0x1ECC => array(0x1ECD), 0x1ECE => array(0x1ECF),
1259
+					0x1ED0 => array(0x1ED1), 0x1ED2 => array(0x1ED3), 0x1ED4 => array(0x1ED5),
1260
+					0x1ED6 => array(0x1ED7), 0x1ED8 => array(0x1ED9), 0x1EDA => array(0x1EDB),
1261
+					0x1EDC => array(0x1EDD), 0x1EDE => array(0x1EDF), 0x1EE0 => array(0x1EE1),
1262
+					0x1EE2 => array(0x1EE3), 0x1EE4 => array(0x1EE5), 0x1EE6 => array(0x1EE7),
1263
+					0x1EE8 => array(0x1EE9), 0x1EEA => array(0x1EEB), 0x1EEC => array(0x1EED),
1264
+					0x1EEE => array(0x1EEF), 0x1EF0 => array(0x1EF1), 0x1EF2 => array(0x1EF3),
1265
+					0x1EF4 => array(0x1EF5), 0x1EF6 => array(0x1EF7), 0x1EF8 => array(0x1EF9),
1266
+					0x1F08 => array(0x1F00), 0x1F09 => array(0x1F01), 0x1F0A => array(0x1F02),
1267
+					0x1F0B => array(0x1F03), 0x1F0C => array(0x1F04), 0x1F0D => array(0x1F05),
1268
+					0x1F0E => array(0x1F06), 0x1F0F => array(0x1F07), 0x1F18 => array(0x1F10),
1269
+					0x1F19 => array(0x1F11), 0x1F1A => array(0x1F12), 0x1F1B => array(0x1F13),
1270
+					0x1F1C => array(0x1F14), 0x1F1D => array(0x1F15), 0x1F28 => array(0x1F20),
1271
+					0x1F29 => array(0x1F21), 0x1F2A => array(0x1F22), 0x1F2B => array(0x1F23),
1272
+					0x1F2C => array(0x1F24), 0x1F2D => array(0x1F25), 0x1F2E => array(0x1F26),
1273
+					0x1F2F => array(0x1F27), 0x1F38 => array(0x1F30), 0x1F39 => array(0x1F31),
1274
+					0x1F3A => array(0x1F32), 0x1F3B => array(0x1F33), 0x1F3C => array(0x1F34),
1275
+					0x1F3D => array(0x1F35), 0x1F3E => array(0x1F36), 0x1F3F => array(0x1F37),
1276
+					0x1F48 => array(0x1F40), 0x1F49 => array(0x1F41), 0x1F4A => array(0x1F42),
1277
+					0x1F4B => array(0x1F43), 0x1F4C => array(0x1F44), 0x1F4D => array(0x1F45),
1278
+					0x1F50 => array(0x3C5, 0x313), 0x1F52 => array(0x3C5, 0x313, 0x300),
1279
+					0x1F54 => array(0x3C5, 0x313, 0x301), 0x1F56 => array(0x3C5, 0x313, 0x342),
1280
+					0x1F59 => array(0x1F51), 0x1F5B => array(0x1F53), 0x1F5D => array(0x1F55),
1281
+					0x1F5F => array(0x1F57), 0x1F68 => array(0x1F60), 0x1F69 => array(0x1F61),
1282
+					0x1F6A => array(0x1F62), 0x1F6B => array(0x1F63), 0x1F6C => array(0x1F64),
1283
+					0x1F6D => array(0x1F65), 0x1F6E => array(0x1F66), 0x1F6F => array(0x1F67),
1284
+					0x1F80 => array(0x1F00, 0x3B9), 0x1F81 => array(0x1F01, 0x3B9),
1285
+					0x1F82 => array(0x1F02, 0x3B9), 0x1F83 => array(0x1F03, 0x3B9),
1286
+					0x1F84 => array(0x1F04, 0x3B9), 0x1F85 => array(0x1F05, 0x3B9),
1287
+					0x1F86 => array(0x1F06, 0x3B9), 0x1F87 => array(0x1F07, 0x3B9),
1288
+					0x1F88 => array(0x1F00, 0x3B9), 0x1F89 => array(0x1F01, 0x3B9),
1289
+					0x1F8A => array(0x1F02, 0x3B9), 0x1F8B => array(0x1F03, 0x3B9),
1290
+					0x1F8C => array(0x1F04, 0x3B9), 0x1F8D => array(0x1F05, 0x3B9),
1291
+					0x1F8E => array(0x1F06, 0x3B9), 0x1F8F => array(0x1F07, 0x3B9),
1292
+					0x1F90 => array(0x1F20, 0x3B9), 0x1F91 => array(0x1F21, 0x3B9),
1293
+					0x1F92 => array(0x1F22, 0x3B9), 0x1F93 => array(0x1F23, 0x3B9),
1294
+					0x1F94 => array(0x1F24, 0x3B9), 0x1F95 => array(0x1F25, 0x3B9),
1295
+					0x1F96 => array(0x1F26, 0x3B9), 0x1F97 => array(0x1F27, 0x3B9),
1296
+					0x1F98 => array(0x1F20, 0x3B9), 0x1F99 => array(0x1F21, 0x3B9),
1297
+					0x1F9A => array(0x1F22, 0x3B9), 0x1F9B => array(0x1F23, 0x3B9),
1298
+					0x1F9C => array(0x1F24, 0x3B9), 0x1F9D => array(0x1F25, 0x3B9),
1299
+					0x1F9E => array(0x1F26, 0x3B9), 0x1F9F => array(0x1F27, 0x3B9),
1300
+					0x1FA0 => array(0x1F60, 0x3B9), 0x1FA1 => array(0x1F61, 0x3B9),
1301
+					0x1FA2 => array(0x1F62, 0x3B9), 0x1FA3 => array(0x1F63, 0x3B9),
1302
+					0x1FA4 => array(0x1F64, 0x3B9), 0x1FA5 => array(0x1F65, 0x3B9),
1303
+					0x1FA6 => array(0x1F66, 0x3B9), 0x1FA7 => array(0x1F67, 0x3B9),
1304
+					0x1FA8 => array(0x1F60, 0x3B9), 0x1FA9 => array(0x1F61, 0x3B9),
1305
+					0x1FAA => array(0x1F62, 0x3B9), 0x1FAB => array(0x1F63, 0x3B9),
1306
+					0x1FAC => array(0x1F64, 0x3B9), 0x1FAD => array(0x1F65, 0x3B9),
1307
+					0x1FAE => array(0x1F66, 0x3B9), 0x1FAF => array(0x1F67, 0x3B9),
1308
+					0x1FB2 => array(0x1F70, 0x3B9), 0x1FB3 => array(0x3B1, 0x3B9),
1309
+					0x1FB4 => array(0x3AC, 0x3B9), 0x1FB6 => array(0x3B1, 0x342),
1310
+					0x1FB7 => array(0x3B1, 0x342, 0x3B9), 0x1FB8 => array(0x1FB0),
1311
+					0x1FB9 => array(0x1FB1), 0x1FBA => array(0x1F70), 0x1FBB => array(0x1F71),
1312
+					0x1FBC => array(0x3B1, 0x3B9), 0x1FBE => array(0x3B9),
1313
+					0x1FC2 => array(0x1F74, 0x3B9), 0x1FC3 => array(0x3B7, 0x3B9),
1314
+					0x1FC4 => array(0x3AE, 0x3B9), 0x1FC6 => array(0x3B7, 0x342),
1315
+					0x1FC7 => array(0x3B7, 0x342, 0x3B9), 0x1FC8 => array(0x1F72),
1316
+					0x1FC9 => array(0x1F73), 0x1FCA => array(0x1F74), 0x1FCB => array(0x1F75),
1317
+					0x1FCC => array(0x3B7, 0x3B9), 0x1FD2 => array(0x3B9, 0x308, 0x300),
1318
+					0x1FD3 => array(0x3B9, 0x308, 0x301), 0x1FD6 => array(0x3B9, 0x342),
1319
+					0x1FD7 => array(0x3B9, 0x308, 0x342), 0x1FD8 => array(0x1FD0),
1320
+					0x1FD9 => array(0x1FD1), 0x1FDA => array(0x1F76),
1321
+					0x1FDB => array(0x1F77), 0x1FE2 => array(0x3C5, 0x308, 0x300),
1322
+					0x1FE3 => array(0x3C5, 0x308, 0x301), 0x1FE4 => array(0x3C1, 0x313),
1323
+					0x1FE6 => array(0x3C5, 0x342), 0x1FE7 => array(0x3C5, 0x308, 0x342),
1324
+					0x1FE8 => array(0x1FE0), 0x1FE9 => array(0x1FE1),
1325
+					0x1FEA => array(0x1F7A), 0x1FEB => array(0x1F7B),
1326
+					0x1FEC => array(0x1FE5), 0x1FF2 => array(0x1F7C, 0x3B9),
1327
+					0x1FF3 => array(0x3C9, 0x3B9), 0x1FF4 => array(0x3CE, 0x3B9),
1328
+					0x1FF6 => array(0x3C9, 0x342), 0x1FF7 => array(0x3C9, 0x342, 0x3B9),
1329
+					0x1FF8 => array(0x1F78), 0x1FF9 => array(0x1F79), 0x1FFA => array(0x1F7C),
1330
+					0x1FFB => array(0x1F7D), 0x1FFC => array(0x3C9, 0x3B9),
1331
+					0x20A8 => array(0x72, 0x73), 0x2102 => array(0x63), 0x2103 => array(0xB0, 0x63),
1332
+					0x2107 => array(0x25B), 0x2109 => array(0xB0, 0x66), 0x210B => array(0x68),
1333
+					0x210C => array(0x68), 0x210D => array(0x68), 0x2110 => array(0x69),
1334
+					0x2111 => array(0x69), 0x2112 => array(0x6C), 0x2115 => array(0x6E),
1335
+					0x2116 => array(0x6E, 0x6F), 0x2119 => array(0x70), 0x211A => array(0x71),
1336
+					0x211B => array(0x72), 0x211C => array(0x72), 0x211D => array(0x72),
1337
+					0x2120 => array(0x73, 0x6D), 0x2121 => array(0x74, 0x65, 0x6C),
1338
+					0x2122 => array(0x74, 0x6D), 0x2124 => array(0x7A), 0x2126 => array(0x3C9),
1339
+					0x2128 => array(0x7A), 0x212A => array(0x6B), 0x212B => array(0xE5),
1340
+					0x212C => array(0x62), 0x212D => array(0x63), 0x2130 => array(0x65),
1341
+					0x2131 => array(0x66), 0x2133 => array(0x6D), 0x213E => array(0x3B3),
1342
+					0x213F => array(0x3C0), 0x2145 => array(0x64), 0x2160 => array(0x2170),
1343
+					0x2161 => array(0x2171), 0x2162 => array(0x2172), 0x2163 => array(0x2173),
1344
+					0x2164 => array(0x2174), 0x2165 => array(0x2175), 0x2166 => array(0x2176),
1345
+					0x2167 => array(0x2177), 0x2168 => array(0x2178), 0x2169 => array(0x2179),
1346
+					0x216A => array(0x217A), 0x216B => array(0x217B), 0x216C => array(0x217C),
1347
+					0x216D => array(0x217D), 0x216E => array(0x217E), 0x216F => array(0x217F),
1348
+					0x24B6 => array(0x24D0), 0x24B7 => array(0x24D1), 0x24B8 => array(0x24D2),
1349
+					0x24B9 => array(0x24D3), 0x24BA => array(0x24D4), 0x24BB => array(0x24D5),
1350
+					0x24BC => array(0x24D6), 0x24BD => array(0x24D7), 0x24BE => array(0x24D8),
1351
+					0x24BF => array(0x24D9), 0x24C0 => array(0x24DA), 0x24C1 => array(0x24DB),
1352
+					0x24C2 => array(0x24DC), 0x24C3 => array(0x24DD), 0x24C4 => array(0x24DE),
1353
+					0x24C5 => array(0x24DF), 0x24C6 => array(0x24E0), 0x24C7 => array(0x24E1),
1354
+					0x24C8 => array(0x24E2), 0x24C9 => array(0x24E3), 0x24CA => array(0x24E4),
1355
+					0x24CB => array(0x24E5), 0x24CC => array(0x24E6), 0x24CD => array(0x24E7),
1356
+					0x24CE => array(0x24E8), 0x24CF => array(0x24E9), 0x3371 => array(0x68, 0x70, 0x61),
1357
+					0x3373 => array(0x61, 0x75), 0x3375 => array(0x6F, 0x76),
1358
+					0x3380 => array(0x70, 0x61), 0x3381 => array(0x6E, 0x61),
1359
+					0x3382 => array(0x3BC, 0x61), 0x3383 => array(0x6D, 0x61),
1360
+					0x3384 => array(0x6B, 0x61), 0x3385 => array(0x6B, 0x62),
1361
+					0x3386 => array(0x6D, 0x62), 0x3387 => array(0x67, 0x62),
1362
+					0x338A => array(0x70, 0x66), 0x338B => array(0x6E, 0x66),
1363
+					0x338C => array(0x3BC, 0x66), 0x3390 => array(0x68, 0x7A),
1364
+					0x3391 => array(0x6B, 0x68, 0x7A), 0x3392 => array(0x6D, 0x68, 0x7A),
1365
+					0x3393 => array(0x67, 0x68, 0x7A), 0x3394 => array(0x74, 0x68, 0x7A),
1366
+					0x33A9 => array(0x70, 0x61), 0x33AA => array(0x6B, 0x70, 0x61),
1367
+					0x33AB => array(0x6D, 0x70, 0x61), 0x33AC => array(0x67, 0x70, 0x61),
1368
+					0x33B4 => array(0x70, 0x76), 0x33B5 => array(0x6E, 0x76),
1369
+					0x33B6 => array(0x3BC, 0x76), 0x33B7 => array(0x6D, 0x76),
1370
+					0x33B8 => array(0x6B, 0x76), 0x33B9 => array(0x6D, 0x76),
1371
+					0x33BA => array(0x70, 0x77), 0x33BB => array(0x6E, 0x77),
1372
+					0x33BC => array(0x3BC, 0x77), 0x33BD => array(0x6D, 0x77),
1373
+					0x33BE => array(0x6B, 0x77), 0x33BF => array(0x6D, 0x77),
1374
+					0x33C0 => array(0x6B, 0x3C9), 0x33C1 => array(0x6D, 0x3C9), /*
1375 1375
                     0x33C2  => array(0x61, 0x2E, 0x6D, 0x2E), */
1376
-                    0x33C3 => array(0x62, 0x71), 0x33C6 => array(0x63, 0x2215, 0x6B, 0x67),
1377
-                    0x33C7 => array(0x63, 0x6F, 0x2E), 0x33C8 => array(0x64, 0x62),
1378
-                    0x33C9 => array(0x67, 0x79), 0x33CB => array(0x68, 0x70),
1379
-                    0x33CD => array(0x6B, 0x6B), 0x33CE => array(0x6B, 0x6D),
1380
-                    0x33D7 => array(0x70, 0x68), 0x33D9 => array(0x70, 0x70, 0x6D),
1381
-                    0x33DA => array(0x70, 0x72), 0x33DC => array(0x73, 0x76),
1382
-                    0x33DD => array(0x77, 0x62), 0xFB00 => array(0x66, 0x66),
1383
-                    0xFB01 => array(0x66, 0x69), 0xFB02 => array(0x66, 0x6C),
1384
-                    0xFB03 => array(0x66, 0x66, 0x69), 0xFB04 => array(0x66, 0x66, 0x6C),
1385
-                    0xFB05 => array(0x73, 0x74), 0xFB06 => array(0x73, 0x74),
1386
-                    0xFB13 => array(0x574, 0x576), 0xFB14 => array(0x574, 0x565),
1387
-                    0xFB15 => array(0x574, 0x56B), 0xFB16 => array(0x57E, 0x576),
1388
-                    0xFB17 => array(0x574, 0x56D), 0xFF21 => array(0xFF41),
1389
-                    0xFF22 => array(0xFF42), 0xFF23 => array(0xFF43), 0xFF24 => array(0xFF44),
1390
-                    0xFF25 => array(0xFF45), 0xFF26 => array(0xFF46), 0xFF27 => array(0xFF47),
1391
-                    0xFF28 => array(0xFF48), 0xFF29 => array(0xFF49), 0xFF2A => array(0xFF4A),
1392
-                    0xFF2B => array(0xFF4B), 0xFF2C => array(0xFF4C), 0xFF2D => array(0xFF4D),
1393
-                    0xFF2E => array(0xFF4E), 0xFF2F => array(0xFF4F), 0xFF30 => array(0xFF50),
1394
-                    0xFF31 => array(0xFF51), 0xFF32 => array(0xFF52), 0xFF33 => array(0xFF53),
1395
-                    0xFF34 => array(0xFF54), 0xFF35 => array(0xFF55), 0xFF36 => array(0xFF56),
1396
-                    0xFF37 => array(0xFF57), 0xFF38 => array(0xFF58), 0xFF39 => array(0xFF59),
1397
-                    0xFF3A => array(0xFF5A), 0x10400 => array(0x10428), 0x10401 => array(0x10429),
1398
-                    0x10402 => array(0x1042A), 0x10403 => array(0x1042B), 0x10404 => array(0x1042C),
1399
-                    0x10405 => array(0x1042D), 0x10406 => array(0x1042E), 0x10407 => array(0x1042F),
1400
-                    0x10408 => array(0x10430), 0x10409 => array(0x10431), 0x1040A => array(0x10432),
1401
-                    0x1040B => array(0x10433), 0x1040C => array(0x10434), 0x1040D => array(0x10435),
1402
-                    0x1040E => array(0x10436), 0x1040F => array(0x10437), 0x10410 => array(0x10438),
1403
-                    0x10411 => array(0x10439), 0x10412 => array(0x1043A), 0x10413 => array(0x1043B),
1404
-                    0x10414 => array(0x1043C), 0x10415 => array(0x1043D), 0x10416 => array(0x1043E),
1405
-                    0x10417 => array(0x1043F), 0x10418 => array(0x10440), 0x10419 => array(0x10441),
1406
-                    0x1041A => array(0x10442), 0x1041B => array(0x10443), 0x1041C => array(0x10444),
1407
-                    0x1041D => array(0x10445), 0x1041E => array(0x10446), 0x1041F => array(0x10447),
1408
-                    0x10420 => array(0x10448), 0x10421 => array(0x10449), 0x10422 => array(0x1044A),
1409
-                    0x10423 => array(0x1044B), 0x10424 => array(0x1044C), 0x10425 => array(0x1044D),
1410
-                    0x1D400 => array(0x61), 0x1D401 => array(0x62), 0x1D402 => array(0x63),
1411
-                    0x1D403 => array(0x64), 0x1D404 => array(0x65), 0x1D405 => array(0x66),
1412
-                    0x1D406 => array(0x67), 0x1D407 => array(0x68), 0x1D408 => array(0x69),
1413
-                    0x1D409 => array(0x6A), 0x1D40A => array(0x6B), 0x1D40B => array(0x6C),
1414
-                    0x1D40C => array(0x6D), 0x1D40D => array(0x6E), 0x1D40E => array(0x6F),
1415
-                    0x1D40F => array(0x70), 0x1D410 => array(0x71), 0x1D411 => array(0x72),
1416
-                    0x1D412 => array(0x73), 0x1D413 => array(0x74), 0x1D414 => array(0x75),
1417
-                    0x1D415 => array(0x76), 0x1D416 => array(0x77), 0x1D417 => array(0x78),
1418
-                    0x1D418 => array(0x79), 0x1D419 => array(0x7A), 0x1D434 => array(0x61),
1419
-                    0x1D435 => array(0x62), 0x1D436 => array(0x63), 0x1D437 => array(0x64),
1420
-                    0x1D438 => array(0x65), 0x1D439 => array(0x66), 0x1D43A => array(0x67),
1421
-                    0x1D43B => array(0x68), 0x1D43C => array(0x69), 0x1D43D => array(0x6A),
1422
-                    0x1D43E => array(0x6B), 0x1D43F => array(0x6C), 0x1D440 => array(0x6D),
1423
-                    0x1D441 => array(0x6E), 0x1D442 => array(0x6F), 0x1D443 => array(0x70),
1424
-                    0x1D444 => array(0x71), 0x1D445 => array(0x72), 0x1D446 => array(0x73),
1425
-                    0x1D447 => array(0x74), 0x1D448 => array(0x75), 0x1D449 => array(0x76),
1426
-                    0x1D44A => array(0x77), 0x1D44B => array(0x78), 0x1D44C => array(0x79),
1427
-                    0x1D44D => array(0x7A), 0x1D468 => array(0x61), 0x1D469 => array(0x62),
1428
-                    0x1D46A => array(0x63), 0x1D46B => array(0x64), 0x1D46C => array(0x65),
1429
-                    0x1D46D => array(0x66), 0x1D46E => array(0x67), 0x1D46F => array(0x68),
1430
-                    0x1D470 => array(0x69), 0x1D471 => array(0x6A), 0x1D472 => array(0x6B),
1431
-                    0x1D473 => array(0x6C), 0x1D474 => array(0x6D), 0x1D475 => array(0x6E),
1432
-                    0x1D476 => array(0x6F), 0x1D477 => array(0x70), 0x1D478 => array(0x71),
1433
-                    0x1D479 => array(0x72), 0x1D47A => array(0x73), 0x1D47B => array(0x74),
1434
-                    0x1D47C => array(0x75), 0x1D47D => array(0x76), 0x1D47E => array(0x77),
1435
-                    0x1D47F => array(0x78), 0x1D480 => array(0x79), 0x1D481 => array(0x7A),
1436
-                    0x1D49C => array(0x61), 0x1D49E => array(0x63), 0x1D49F => array(0x64),
1437
-                    0x1D4A2 => array(0x67), 0x1D4A5 => array(0x6A), 0x1D4A6 => array(0x6B),
1438
-                    0x1D4A9 => array(0x6E), 0x1D4AA => array(0x6F), 0x1D4AB => array(0x70),
1439
-                    0x1D4AC => array(0x71), 0x1D4AE => array(0x73), 0x1D4AF => array(0x74),
1440
-                    0x1D4B0 => array(0x75), 0x1D4B1 => array(0x76), 0x1D4B2 => array(0x77),
1441
-                    0x1D4B3 => array(0x78), 0x1D4B4 => array(0x79), 0x1D4B5 => array(0x7A),
1442
-                    0x1D4D0 => array(0x61), 0x1D4D1 => array(0x62), 0x1D4D2 => array(0x63),
1443
-                    0x1D4D3 => array(0x64), 0x1D4D4 => array(0x65), 0x1D4D5 => array(0x66),
1444
-                    0x1D4D6 => array(0x67), 0x1D4D7 => array(0x68), 0x1D4D8 => array(0x69),
1445
-                    0x1D4D9 => array(0x6A), 0x1D4DA => array(0x6B), 0x1D4DB => array(0x6C),
1446
-                    0x1D4DC => array(0x6D), 0x1D4DD => array(0x6E), 0x1D4DE => array(0x6F),
1447
-                    0x1D4DF => array(0x70), 0x1D4E0 => array(0x71), 0x1D4E1 => array(0x72),
1448
-                    0x1D4E2 => array(0x73), 0x1D4E3 => array(0x74), 0x1D4E4 => array(0x75),
1449
-                    0x1D4E5 => array(0x76), 0x1D4E6 => array(0x77), 0x1D4E7 => array(0x78),
1450
-                    0x1D4E8 => array(0x79), 0x1D4E9 => array(0x7A), 0x1D504 => array(0x61),
1451
-                    0x1D505 => array(0x62), 0x1D507 => array(0x64), 0x1D508 => array(0x65),
1452
-                    0x1D509 => array(0x66), 0x1D50A => array(0x67), 0x1D50D => array(0x6A),
1453
-                    0x1D50E => array(0x6B), 0x1D50F => array(0x6C), 0x1D510 => array(0x6D),
1454
-                    0x1D511 => array(0x6E), 0x1D512 => array(0x6F), 0x1D513 => array(0x70),
1455
-                    0x1D514 => array(0x71), 0x1D516 => array(0x73), 0x1D517 => array(0x74),
1456
-                    0x1D518 => array(0x75), 0x1D519 => array(0x76), 0x1D51A => array(0x77),
1457
-                    0x1D51B => array(0x78), 0x1D51C => array(0x79), 0x1D538 => array(0x61),
1458
-                    0x1D539 => array(0x62), 0x1D53B => array(0x64), 0x1D53C => array(0x65),
1459
-                    0x1D53D => array(0x66), 0x1D53E => array(0x67), 0x1D540 => array(0x69),
1460
-                    0x1D541 => array(0x6A), 0x1D542 => array(0x6B), 0x1D543 => array(0x6C),
1461
-                    0x1D544 => array(0x6D), 0x1D546 => array(0x6F), 0x1D54A => array(0x73),
1462
-                    0x1D54B => array(0x74), 0x1D54C => array(0x75), 0x1D54D => array(0x76),
1463
-                    0x1D54E => array(0x77), 0x1D54F => array(0x78), 0x1D550 => array(0x79),
1464
-                    0x1D56C => array(0x61), 0x1D56D => array(0x62), 0x1D56E => array(0x63),
1465
-                    0x1D56F => array(0x64), 0x1D570 => array(0x65), 0x1D571 => array(0x66),
1466
-                    0x1D572 => array(0x67), 0x1D573 => array(0x68), 0x1D574 => array(0x69),
1467
-                    0x1D575 => array(0x6A), 0x1D576 => array(0x6B), 0x1D577 => array(0x6C),
1468
-                    0x1D578 => array(0x6D), 0x1D579 => array(0x6E), 0x1D57A => array(0x6F),
1469
-                    0x1D57B => array(0x70), 0x1D57C => array(0x71), 0x1D57D => array(0x72),
1470
-                    0x1D57E => array(0x73), 0x1D57F => array(0x74), 0x1D580 => array(0x75),
1471
-                    0x1D581 => array(0x76), 0x1D582 => array(0x77), 0x1D583 => array(0x78),
1472
-                    0x1D584 => array(0x79), 0x1D585 => array(0x7A), 0x1D5A0 => array(0x61),
1473
-                    0x1D5A1 => array(0x62), 0x1D5A2 => array(0x63), 0x1D5A3 => array(0x64),
1474
-                    0x1D5A4 => array(0x65), 0x1D5A5 => array(0x66), 0x1D5A6 => array(0x67),
1475
-                    0x1D5A7 => array(0x68), 0x1D5A8 => array(0x69), 0x1D5A9 => array(0x6A),
1476
-                    0x1D5AA => array(0x6B), 0x1D5AB => array(0x6C), 0x1D5AC => array(0x6D),
1477
-                    0x1D5AD => array(0x6E), 0x1D5AE => array(0x6F), 0x1D5AF => array(0x70),
1478
-                    0x1D5B0 => array(0x71), 0x1D5B1 => array(0x72), 0x1D5B2 => array(0x73),
1479
-                    0x1D5B3 => array(0x74), 0x1D5B4 => array(0x75), 0x1D5B5 => array(0x76),
1480
-                    0x1D5B6 => array(0x77), 0x1D5B7 => array(0x78), 0x1D5B8 => array(0x79),
1481
-                    0x1D5B9 => array(0x7A), 0x1D5D4 => array(0x61), 0x1D5D5 => array(0x62),
1482
-                    0x1D5D6 => array(0x63), 0x1D5D7 => array(0x64), 0x1D5D8 => array(0x65),
1483
-                    0x1D5D9 => array(0x66), 0x1D5DA => array(0x67), 0x1D5DB => array(0x68),
1484
-                    0x1D5DC => array(0x69), 0x1D5DD => array(0x6A), 0x1D5DE => array(0x6B),
1485
-                    0x1D5DF => array(0x6C), 0x1D5E0 => array(0x6D), 0x1D5E1 => array(0x6E),
1486
-                    0x1D5E2 => array(0x6F), 0x1D5E3 => array(0x70), 0x1D5E4 => array(0x71),
1487
-                    0x1D5E5 => array(0x72), 0x1D5E6 => array(0x73), 0x1D5E7 => array(0x74),
1488
-                    0x1D5E8 => array(0x75), 0x1D5E9 => array(0x76), 0x1D5EA => array(0x77),
1489
-                    0x1D5EB => array(0x78), 0x1D5EC => array(0x79), 0x1D5ED => array(0x7A),
1490
-                    0x1D608 => array(0x61), 0x1D609 => array(0x62), 0x1D60A => array(0x63),
1491
-                    0x1D60B => array(0x64), 0x1D60C => array(0x65), 0x1D60D => array(0x66),
1492
-                    0x1D60E => array(0x67), 0x1D60F => array(0x68), 0x1D610 => array(0x69),
1493
-                    0x1D611 => array(0x6A), 0x1D612 => array(0x6B), 0x1D613 => array(0x6C),
1494
-                    0x1D614 => array(0x6D), 0x1D615 => array(0x6E), 0x1D616 => array(0x6F),
1495
-                    0x1D617 => array(0x70), 0x1D618 => array(0x71), 0x1D619 => array(0x72),
1496
-                    0x1D61A => array(0x73), 0x1D61B => array(0x74), 0x1D61C => array(0x75),
1497
-                    0x1D61D => array(0x76), 0x1D61E => array(0x77), 0x1D61F => array(0x78),
1498
-                    0x1D620 => array(0x79), 0x1D621 => array(0x7A), 0x1D63C => array(0x61),
1499
-                    0x1D63D => array(0x62), 0x1D63E => array(0x63), 0x1D63F => array(0x64),
1500
-                    0x1D640 => array(0x65), 0x1D641 => array(0x66), 0x1D642 => array(0x67),
1501
-                    0x1D643 => array(0x68), 0x1D644 => array(0x69), 0x1D645 => array(0x6A),
1502
-                    0x1D646 => array(0x6B), 0x1D647 => array(0x6C), 0x1D648 => array(0x6D),
1503
-                    0x1D649 => array(0x6E), 0x1D64A => array(0x6F), 0x1D64B => array(0x70),
1504
-                    0x1D64C => array(0x71), 0x1D64D => array(0x72), 0x1D64E => array(0x73),
1505
-                    0x1D64F => array(0x74), 0x1D650 => array(0x75), 0x1D651 => array(0x76),
1506
-                    0x1D652 => array(0x77), 0x1D653 => array(0x78), 0x1D654 => array(0x79),
1507
-                    0x1D655 => array(0x7A), 0x1D670 => array(0x61), 0x1D671 => array(0x62),
1508
-                    0x1D672 => array(0x63), 0x1D673 => array(0x64), 0x1D674 => array(0x65),
1509
-                    0x1D675 => array(0x66), 0x1D676 => array(0x67), 0x1D677 => array(0x68),
1510
-                    0x1D678 => array(0x69), 0x1D679 => array(0x6A), 0x1D67A => array(0x6B),
1511
-                    0x1D67B => array(0x6C), 0x1D67C => array(0x6D), 0x1D67D => array(0x6E),
1512
-                    0x1D67E => array(0x6F), 0x1D67F => array(0x70), 0x1D680 => array(0x71),
1513
-                    0x1D681 => array(0x72), 0x1D682 => array(0x73), 0x1D683 => array(0x74),
1514
-                    0x1D684 => array(0x75), 0x1D685 => array(0x76), 0x1D686 => array(0x77),
1515
-                    0x1D687 => array(0x78), 0x1D688 => array(0x79), 0x1D689 => array(0x7A),
1516
-                    0x1D6A8 => array(0x3B1), 0x1D6A9 => array(0x3B2), 0x1D6AA => array(0x3B3),
1517
-                    0x1D6AB => array(0x3B4), 0x1D6AC => array(0x3B5), 0x1D6AD => array(0x3B6),
1518
-                    0x1D6AE => array(0x3B7), 0x1D6AF => array(0x3B8), 0x1D6B0 => array(0x3B9),
1519
-                    0x1D6B1 => array(0x3BA), 0x1D6B2 => array(0x3BB), 0x1D6B3 => array(0x3BC),
1520
-                    0x1D6B4 => array(0x3BD), 0x1D6B5 => array(0x3BE), 0x1D6B6 => array(0x3BF),
1521
-                    0x1D6B7 => array(0x3C0), 0x1D6B8 => array(0x3C1), 0x1D6B9 => array(0x3B8),
1522
-                    0x1D6BA => array(0x3C3), 0x1D6BB => array(0x3C4), 0x1D6BC => array(0x3C5),
1523
-                    0x1D6BD => array(0x3C6), 0x1D6BE => array(0x3C7), 0x1D6BF => array(0x3C8),
1524
-                    0x1D6C0 => array(0x3C9), 0x1D6D3 => array(0x3C3), 0x1D6E2 => array(0x3B1),
1525
-                    0x1D6E3 => array(0x3B2), 0x1D6E4 => array(0x3B3), 0x1D6E5 => array(0x3B4),
1526
-                    0x1D6E6 => array(0x3B5), 0x1D6E7 => array(0x3B6), 0x1D6E8 => array(0x3B7),
1527
-                    0x1D6E9 => array(0x3B8), 0x1D6EA => array(0x3B9), 0x1D6EB => array(0x3BA),
1528
-                    0x1D6EC => array(0x3BB), 0x1D6ED => array(0x3BC), 0x1D6EE => array(0x3BD),
1529
-                    0x1D6EF => array(0x3BE), 0x1D6F0 => array(0x3BF), 0x1D6F1 => array(0x3C0),
1530
-                    0x1D6F2 => array(0x3C1), 0x1D6F3 => array(0x3B8), 0x1D6F4 => array(0x3C3),
1531
-                    0x1D6F5 => array(0x3C4), 0x1D6F6 => array(0x3C5), 0x1D6F7 => array(0x3C6),
1532
-                    0x1D6F8 => array(0x3C7), 0x1D6F9 => array(0x3C8), 0x1D6FA => array(0x3C9),
1533
-                    0x1D70D => array(0x3C3), 0x1D71C => array(0x3B1), 0x1D71D => array(0x3B2),
1534
-                    0x1D71E => array(0x3B3), 0x1D71F => array(0x3B4), 0x1D720 => array(0x3B5),
1535
-                    0x1D721 => array(0x3B6), 0x1D722 => array(0x3B7), 0x1D723 => array(0x3B8),
1536
-                    0x1D724 => array(0x3B9), 0x1D725 => array(0x3BA), 0x1D726 => array(0x3BB),
1537
-                    0x1D727 => array(0x3BC), 0x1D728 => array(0x3BD), 0x1D729 => array(0x3BE),
1538
-                    0x1D72A => array(0x3BF), 0x1D72B => array(0x3C0), 0x1D72C => array(0x3C1),
1539
-                    0x1D72D => array(0x3B8), 0x1D72E => array(0x3C3), 0x1D72F => array(0x3C4),
1540
-                    0x1D730 => array(0x3C5), 0x1D731 => array(0x3C6), 0x1D732 => array(0x3C7),
1541
-                    0x1D733 => array(0x3C8), 0x1D734 => array(0x3C9), 0x1D747 => array(0x3C3),
1542
-                    0x1D756 => array(0x3B1), 0x1D757 => array(0x3B2), 0x1D758 => array(0x3B3),
1543
-                    0x1D759 => array(0x3B4), 0x1D75A => array(0x3B5), 0x1D75B => array(0x3B6),
1544
-                    0x1D75C => array(0x3B7), 0x1D75D => array(0x3B8), 0x1D75E => array(0x3B9),
1545
-                    0x1D75F => array(0x3BA), 0x1D760 => array(0x3BB), 0x1D761 => array(0x3BC),
1546
-                    0x1D762 => array(0x3BD), 0x1D763 => array(0x3BE), 0x1D764 => array(0x3BF),
1547
-                    0x1D765 => array(0x3C0), 0x1D766 => array(0x3C1), 0x1D767 => array(0x3B8),
1548
-                    0x1D768 => array(0x3C3), 0x1D769 => array(0x3C4), 0x1D76A => array(0x3C5),
1549
-                    0x1D76B => array(0x3C6), 0x1D76C => array(0x3C7), 0x1D76D => array(0x3C8),
1550
-                    0x1D76E => array(0x3C9), 0x1D781 => array(0x3C3), 0x1D790 => array(0x3B1),
1551
-                    0x1D791 => array(0x3B2), 0x1D792 => array(0x3B3), 0x1D793 => array(0x3B4),
1552
-                    0x1D794 => array(0x3B5), 0x1D795 => array(0x3B6), 0x1D796 => array(0x3B7),
1553
-                    0x1D797 => array(0x3B8), 0x1D798 => array(0x3B9), 0x1D799 => array(0x3BA),
1554
-                    0x1D79A => array(0x3BB), 0x1D79B => array(0x3BC), 0x1D79C => array(0x3BD),
1555
-                    0x1D79D => array(0x3BE), 0x1D79E => array(0x3BF), 0x1D79F => array(0x3C0),
1556
-                    0x1D7A0 => array(0x3C1), 0x1D7A1 => array(0x3B8), 0x1D7A2 => array(0x3C3),
1557
-                    0x1D7A3 => array(0x3C4), 0x1D7A4 => array(0x3C5), 0x1D7A5 => array(0x3C6),
1558
-                    0x1D7A6 => array(0x3C7), 0x1D7A7 => array(0x3C8), 0x1D7A8 => array(0x3C9),
1559
-                    0x1D7BB => array(0x3C3), 0x3F9 => array(0x3C3), 0x1D2C => array(0x61),
1560
-                    0x1D2D => array(0xE6), 0x1D2E => array(0x62), 0x1D30 => array(0x64),
1561
-                    0x1D31 => array(0x65), 0x1D32 => array(0x1DD), 0x1D33 => array(0x67),
1562
-                    0x1D34 => array(0x68), 0x1D35 => array(0x69), 0x1D36 => array(0x6A),
1563
-                    0x1D37 => array(0x6B), 0x1D38 => array(0x6C), 0x1D39 => array(0x6D),
1564
-                    0x1D3A => array(0x6E), 0x1D3C => array(0x6F), 0x1D3D => array(0x223),
1565
-                    0x1D3E => array(0x70), 0x1D3F => array(0x72), 0x1D40 => array(0x74),
1566
-                    0x1D41 => array(0x75), 0x1D42 => array(0x77), 0x213B => array(0x66, 0x61, 0x78),
1567
-                    0x3250 => array(0x70, 0x74, 0x65), 0x32CC => array(0x68, 0x67),
1568
-                    0x32CE => array(0x65, 0x76), 0x32CF => array(0x6C, 0x74, 0x64),
1569
-                    0x337A => array(0x69, 0x75), 0x33DE => array(0x76, 0x2215, 0x6D),
1570
-                    0x33DF => array(0x61, 0x2215, 0x6D)
1571
-            ),
1572
-            'replacemaps' => array(0x41 => array(0x61), 0x42 => array(0x62), 0x43 => array(0x63),
1573
-                    0x44 => array(0x64), 0x45 => array(0x65), 0x46 => array(0x66),
1574
-                    0x47 => array(0x67), 0x48 => array(0x68), 0x49 => array(0x69),
1575
-                    0x4A => array(0x6A), 0x4B => array(0x6B), 0x4C => array(0x6C),
1576
-                    0x4D => array(0x6D), 0x4E => array(0x6E), 0x4F => array(0x6F),
1577
-                    0x50 => array(0x70), 0x51 => array(0x71), 0x52 => array(0x72),
1578
-                    0x53 => array(0x73), 0x54 => array(0x74), 0x55 => array(0x75),
1579
-                    0x56 => array(0x76), 0x57 => array(0x77), 0x58 => array(0x78),
1580
-                    0x59 => array(0x79), 0x5A => array(0x7A), 0xAA => array(0x61),
1581
-                    0xB2 => array(0x32), 0xB3 => array(0x33), 0xB5 => array(0x3BC),
1582
-                    0xB9 => array(0x31), 0xBA => array(0x6F), 0xBC => array(0x31, 0x2044, 0x34),
1583
-                    0xBD => array(0x31, 0x2044, 0x32), 0xBE => array(0x33, 0x2044, 0x34), 0xC0 => array(0xE0),
1584
-                    0xC1 => array(0xE1), 0xC2 => array(0xE2), 0xC3 => array(0xE3),
1585
-                    0xC4 => array(0xE4), 0xC5 => array(0xE5), 0xC6 => array(0xE6),
1586
-                    0xC7 => array(0xE7), 0xC8 => array(0xE8), 0xC9 => array(0xE9),
1587
-                    0xCA => array(0xEA), 0xCB => array(0xEB), 0xCC => array(0xEC),
1588
-                    0xCD => array(0xED), 0xCE => array(0xEE), 0xCF => array(0xEF),
1589
-                    0xD0 => array(0xF0), 0xD1 => array(0xF1), 0xD2 => array(0xF2),
1590
-                    0xD3 => array(0xF3), 0xD4 => array(0xF4), 0xD5 => array(0xF5),
1591
-                    0xD6 => array(0xF6), 0xD8 => array(0xF8), 0xD9 => array(0xF9),
1592
-                    0xDA => array(0xFA), 0xDB => array(0xFB), 0xDC => array(0xFC),
1593
-                    0xDD => array(0xFD), 0xDE => array(0xFE), 0x100 => array(0x101),
1594
-                    0x102 => array(0x103), 0x104 => array(0x105), 0x106 => array(0x107),
1595
-                    0x108 => array(0x109), 0x10A => array(0x10B), 0x10C => array(0x10D),
1596
-                    0x10E => array(0x10F), 0x110 => array(0x111), 0x112 => array(0x113),
1597
-                    0x114 => array(0x115), 0x116 => array(0x117), 0x118 => array(0x119),
1598
-                    0x11A => array(0x11B), 0x11C => array(0x11D), 0x11E => array(0x11F),
1599
-                    0x120 => array(0x121), 0x122 => array(0x123), 0x124 => array(0x125),
1600
-                    0x126 => array(0x127), 0x128 => array(0x129), 0x12A => array(0x12B),
1601
-                    0x12C => array(0x12D), 0x12E => array(0x12F), 0x130 => array(0x69, 0x307),
1602
-                    0x132 => array(0x69, 0x6A), 0x133 => array(0x69, 0x6A), 0x134 => array(0x135),
1603
-                    0x136 => array(0x137), 0x139 => array(0x13A), 0x13B => array(0x13C),
1604
-                    0x13D => array(0x13E), 0x13F => array(0x6C, 0xB7), 0x140 => array(0x6C, 0xB7),
1605
-                    0x141 => array(0x142), 0x143 => array(0x144), 0x145 => array(0x146),
1606
-                    0x147 => array(0x148), 0x149 => array(0x2BC, 0x6E), 0x14A => array(0x14B),
1607
-                    0x14C => array(0x14D), 0x14E => array(0x14F), 0x150 => array(0x151),
1608
-                    0x152 => array(0x153), 0x154 => array(0x155), 0x156 => array(0x157),
1609
-                    0x158 => array(0x159), 0x15A => array(0x15B), 0x15C => array(0x15D),
1610
-                    0x15E => array(0x15F), 0x160 => array(0x161), 0x162 => array(0x163),
1611
-                    0x164 => array(0x165), 0x166 => array(0x167), 0x168 => array(0x169),
1612
-                    0x16A => array(0x16B), 0x16C => array(0x16D), 0x16E => array(0x16F),
1613
-                    0x170 => array(0x171), 0x172 => array(0x173), 0x174 => array(0x175),
1614
-                    0x176 => array(0x177), 0x178 => array(0xFF), 0x179 => array(0x17A),
1615
-                    0x17B => array(0x17C), 0x17D => array(0x17E), 0x17F => array(0x73),
1616
-                    0x181 => array(0x253), 0x182 => array(0x183), 0x184 => array(0x185),
1617
-                    0x186 => array(0x254), 0x187 => array(0x188), 0x189 => array(0x256),
1618
-                    0x18A => array(0x257), 0x18B => array(0x18C), 0x18E => array(0x1DD),
1619
-                    0x18F => array(0x259), 0x190 => array(0x25B), 0x191 => array(0x192),
1620
-                    0x193 => array(0x260), 0x194 => array(0x263), 0x196 => array(0x269),
1621
-                    0x197 => array(0x268), 0x198 => array(0x199), 0x19C => array(0x26F),
1622
-                    0x19D => array(0x272), 0x19F => array(0x275), 0x1A0 => array(0x1A1),
1623
-                    0x1A2 => array(0x1A3), 0x1A4 => array(0x1A5), 0x1A6 => array(0x280),
1624
-                    0x1A7 => array(0x1A8), 0x1A9 => array(0x283), 0x1AC => array(0x1AD),
1625
-                    0x1AE => array(0x288), 0x1AF => array(0x1B0), 0x1B1 => array(0x28A),
1626
-                    0x1B2 => array(0x28B), 0x1B3 => array(0x1B4), 0x1B5 => array(0x1B6),
1627
-                    0x1B7 => array(0x292), 0x1B8 => array(0x1B9), 0x1BC => array(0x1BD),
1628
-                    0x1C4 => array(0x64, 0x17E), 0x1C5 => array(0x64, 0x17E), 0x1C6 => array(0x64, 0x17E),
1629
-                    0x1C7 => array(0x6C, 0x6A), 0x1C8 => array(0x6C, 0x6A), 0x1C9 => array(0x6C, 0x6A),
1630
-                    0x1CA => array(0x6E, 0x6A), 0x1CB => array(0x6E, 0x6A), 0x1CC => array(0x6E, 0x6A),
1631
-                    0x1CD => array(0x1CE), 0x1CF => array(0x1D0), 0x1D1 => array(0x1D2),
1632
-                    0x1D3 => array(0x1D4), 0x1D5 => array(0x1D6), 0x1D7 => array(0x1D8),
1633
-                    0x1D9 => array(0x1DA), 0x1DB => array(0x1DC), 0x1DE => array(0x1DF),
1634
-                    0x1E0 => array(0x1E1), 0x1E2 => array(0x1E3), 0x1E4 => array(0x1E5),
1635
-                    0x1E6 => array(0x1E7), 0x1E8 => array(0x1E9), 0x1EA => array(0x1EB),
1636
-                    0x1EC => array(0x1ED), 0x1EE => array(0x1EF), 0x1F1 => array(0x64, 0x7A),
1637
-                    0x1F2 => array(0x64, 0x7A), 0x1F3 => array(0x64, 0x7A), 0x1F4 => array(0x1F5),
1638
-                    0x1F6 => array(0x195), 0x1F7 => array(0x1BF), 0x1F8 => array(0x1F9),
1639
-                    0x1FA => array(0x1FB), 0x1FC => array(0x1FD), 0x1FE => array(0x1FF),
1640
-                    0x200 => array(0x201), 0x202 => array(0x203), 0x204 => array(0x205),
1641
-                    0x206 => array(0x207), 0x208 => array(0x209), 0x20A => array(0x20B),
1642
-                    0x20C => array(0x20D), 0x20E => array(0x20F), 0x210 => array(0x211),
1643
-                    0x212 => array(0x213), 0x214 => array(0x215), 0x216 => array(0x217),
1644
-                    0x218 => array(0x219), 0x21A => array(0x21B), 0x21C => array(0x21D),
1645
-                    0x21E => array(0x21F), 0x220 => array(0x19E), 0x222 => array(0x223),
1646
-                    0x224 => array(0x225), 0x226 => array(0x227), 0x228 => array(0x229),
1647
-                    0x22A => array(0x22B), 0x22C => array(0x22D), 0x22E => array(0x22F),
1648
-                    0x230 => array(0x231), 0x232 => array(0x233), 0x23A => array(0x2C65),
1649
-                    0x23B => array(0x23C), 0x23D => array(0x19A), 0x23E => array(0x2C66),
1650
-                    0x241 => array(0x242), 0x243 => array(0x180), 0x244 => array(0x289),
1651
-                    0x245 => array(0x28C), 0x246 => array(0x247), 0x248 => array(0x249),
1652
-                    0x24A => array(0x24B), 0x24C => array(0x24D), 0x24E => array(0x24F),
1653
-                    0x2B0 => array(0x68), 0x2B1 => array(0x266), 0x2B2 => array(0x6A),
1654
-                    0x2B3 => array(0x72), 0x2B4 => array(0x279), 0x2B5 => array(0x27B),
1655
-                    0x2B6 => array(0x281), 0x2B7 => array(0x77), 0x2B8 => array(0x79),
1656
-                    0x2E0 => array(0x263), 0x2E1 => array(0x6C), 0x2E2 => array(0x73),
1657
-                    0x2E3 => array(0x78), 0x2E4 => array(0x295), 0x340 => array(0x300),
1658
-                    0x341 => array(0x301), 0x343 => array(0x313), 0x344 => array(0x308, 0x301),
1659
-                    0x345 => array(0x3B9), 0x370 => array(0x371), 0x372 => array(0x373),
1660
-                    0x374 => array(0x2B9), 0x376 => array(0x377), 0x37F => array(0x3F3),
1661
-                    0x386 => array(0x3AC), 0x387 => array(0xB7), 0x388 => array(0x3AD),
1662
-                    0x389 => array(0x3AE), 0x38A => array(0x3AF), 0x38C => array(0x3CC),
1663
-                    0x38E => array(0x3CD), 0x38F => array(0x3CE), 0x391 => array(0x3B1),
1664
-                    0x392 => array(0x3B2), 0x393 => array(0x3B3), 0x394 => array(0x3B4),
1665
-                    0x395 => array(0x3B5), 0x396 => array(0x3B6), 0x397 => array(0x3B7),
1666
-                    0x398 => array(0x3B8), 0x399 => array(0x3B9), 0x39A => array(0x3BA),
1667
-                    0x39B => array(0x3BB), 0x39C => array(0x3BC), 0x39D => array(0x3BD),
1668
-                    0x39E => array(0x3BE), 0x39F => array(0x3BF), 0x3A0 => array(0x3C0),
1669
-                    0x3A1 => array(0x3C1), 0x3A3 => array(0x3C3), 0x3A4 => array(0x3C4),
1670
-                    0x3A5 => array(0x3C5), 0x3A6 => array(0x3C6), 0x3A7 => array(0x3C7),
1671
-                    0x3A8 => array(0x3C8), 0x3A9 => array(0x3C9), 0x3AA => array(0x3CA),
1672
-                    0x3AB => array(0x3CB), 0x3CF => array(0x3D7), 0x3D0 => array(0x3B2),
1673
-                    0x3D1 => array(0x3B8), 0x3D2 => array(0x3C5), 0x3D3 => array(0x3CD),
1674
-                    0x3D4 => array(0x3CB), 0x3D5 => array(0x3C6), 0x3D6 => array(0x3C0),
1675
-                    0x3D8 => array(0x3D9), 0x3DA => array(0x3DB), 0x3DC => array(0x3DD),
1676
-                    0x3DE => array(0x3DF), 0x3E0 => array(0x3E1), 0x3E2 => array(0x3E3),
1677
-                    0x3E4 => array(0x3E5), 0x3E6 => array(0x3E7), 0x3E8 => array(0x3E9),
1678
-                    0x3EA => array(0x3EB), 0x3EC => array(0x3ED), 0x3EE => array(0x3EF),
1679
-                    0x3F0 => array(0x3BA), 0x3F1 => array(0x3C1), 0x3F2 => array(0x3C3),
1680
-                    0x3F4 => array(0x3B8), 0x3F5 => array(0x3B5), 0x3F7 => array(0x3F8),
1681
-                    0x3F9 => array(0x3C3), 0x3FA => array(0x3FB), 0x3FD => array(0x37B),
1682
-                    0x3FE => array(0x37C), 0x3FF => array(0x37D), 0x400 => array(0x450),
1683
-                    0x401 => array(0x451), 0x402 => array(0x452), 0x403 => array(0x453),
1684
-                    0x404 => array(0x454), 0x405 => array(0x455), 0x406 => array(0x456),
1685
-                    0x407 => array(0x457), 0x408 => array(0x458), 0x409 => array(0x459),
1686
-                    0x40A => array(0x45A), 0x40B => array(0x45B), 0x40C => array(0x45C),
1687
-                    0x40D => array(0x45D), 0x40E => array(0x45E), 0x40F => array(0x45F),
1688
-                    0x410 => array(0x430), 0x411 => array(0x431), 0x412 => array(0x432),
1689
-                    0x413 => array(0x433), 0x414 => array(0x434), 0x415 => array(0x435),
1690
-                    0x416 => array(0x436), 0x417 => array(0x437), 0x418 => array(0x438),
1691
-                    0x419 => array(0x439), 0x41A => array(0x43A), 0x41B => array(0x43B),
1692
-                    0x41C => array(0x43C), 0x41D => array(0x43D), 0x41E => array(0x43E),
1693
-                    0x41F => array(0x43F), 0x420 => array(0x440), 0x421 => array(0x441),
1694
-                    0x422 => array(0x442), 0x423 => array(0x443), 0x424 => array(0x444),
1695
-                    0x425 => array(0x445), 0x426 => array(0x446), 0x427 => array(0x447),
1696
-                    0x428 => array(0x448), 0x429 => array(0x449), 0x42A => array(0x44A),
1697
-                    0x42B => array(0x44B), 0x42C => array(0x44C), 0x42D => array(0x44D),
1698
-                    0x42E => array(0x44E), 0x42F => array(0x44F), 0x460 => array(0x461),
1699
-                    0x462 => array(0x463), 0x464 => array(0x465), 0x466 => array(0x467),
1700
-                    0x468 => array(0x469), 0x46A => array(0x46B), 0x46C => array(0x46D),
1701
-                    0x46E => array(0x46F), 0x470 => array(0x471), 0x472 => array(0x473),
1702
-                    0x474 => array(0x475), 0x476 => array(0x477), 0x478 => array(0x479),
1703
-                    0x47A => array(0x47B), 0x47C => array(0x47D), 0x47E => array(0x47F),
1704
-                    0x480 => array(0x481), 0x48A => array(0x48B), 0x48C => array(0x48D),
1705
-                    0x48E => array(0x48F), 0x490 => array(0x491), 0x492 => array(0x493),
1706
-                    0x494 => array(0x495), 0x496 => array(0x497), 0x498 => array(0x499),
1707
-                    0x49A => array(0x49B), 0x49C => array(0x49D), 0x49E => array(0x49F),
1708
-                    0x4A0 => array(0x4A1), 0x4A2 => array(0x4A3), 0x4A4 => array(0x4A5),
1709
-                    0x4A6 => array(0x4A7), 0x4A8 => array(0x4A9), 0x4AA => array(0x4AB),
1710
-                    0x4AC => array(0x4AD), 0x4AE => array(0x4AF), 0x4B0 => array(0x4B1),
1711
-                    0x4B2 => array(0x4B3), 0x4B4 => array(0x4B5), 0x4B6 => array(0x4B7),
1712
-                    0x4B8 => array(0x4B9), 0x4BA => array(0x4BB), 0x4BC => array(0x4BD),
1713
-                    0x4BE => array(0x4BF), 0x4C1 => array(0x4C2), 0x4C3 => array(0x4C4),
1714
-                    0x4C5 => array(0x4C6), 0x4C7 => array(0x4C8), 0x4C9 => array(0x4CA),
1715
-                    0x4CB => array(0x4CC), 0x4CD => array(0x4CE), 0x4D0 => array(0x4D1),
1716
-                    0x4D2 => array(0x4D3), 0x4D4 => array(0x4D5), 0x4D6 => array(0x4D7),
1717
-                    0x4D8 => array(0x4D9), 0x4DA => array(0x4DB), 0x4DC => array(0x4DD),
1718
-                    0x4DE => array(0x4DF), 0x4E0 => array(0x4E1), 0x4E2 => array(0x4E3),
1719
-                    0x4E4 => array(0x4E5), 0x4E6 => array(0x4E7), 0x4E8 => array(0x4E9),
1720
-                    0x4EA => array(0x4EB), 0x4EC => array(0x4ED), 0x4EE => array(0x4EF),
1721
-                    0x4F0 => array(0x4F1), 0x4F2 => array(0x4F3), 0x4F4 => array(0x4F5),
1722
-                    0x4F6 => array(0x4F7), 0x4F8 => array(0x4F9), 0x4FA => array(0x4FB),
1723
-                    0x4FC => array(0x4FD), 0x4FE => array(0x4FF), 0x500 => array(0x501),
1724
-                    0x502 => array(0x503), 0x504 => array(0x505), 0x506 => array(0x507),
1725
-                    0x508 => array(0x509), 0x50A => array(0x50B), 0x50C => array(0x50D),
1726
-                    0x50E => array(0x50F), 0x510 => array(0x511), 0x512 => array(0x513),
1727
-                    0x514 => array(0x515), 0x516 => array(0x517), 0x518 => array(0x519),
1728
-                    0x51A => array(0x51B), 0x51C => array(0x51D), 0x51E => array(0x51F),
1729
-                    0x520 => array(0x521), 0x522 => array(0x523), 0x524 => array(0x525),
1730
-                    0x526 => array(0x527), 0x528 => array(0x529), 0x52A => array(0x52B),
1731
-                    0x52C => array(0x52D), 0x52E => array(0x52F), 0x531 => array(0x561),
1732
-                    0x532 => array(0x562), 0x533 => array(0x563), 0x534 => array(0x564),
1733
-                    0x535 => array(0x565), 0x536 => array(0x566), 0x537 => array(0x567),
1734
-                    0x538 => array(0x568), 0x539 => array(0x569), 0x53A => array(0x56A),
1735
-                    0x53B => array(0x56B), 0x53C => array(0x56C), 0x53D => array(0x56D),
1736
-                    0x53E => array(0x56E), 0x53F => array(0x56F), 0x540 => array(0x570),
1737
-                    0x541 => array(0x571), 0x542 => array(0x572), 0x543 => array(0x573),
1738
-                    0x544 => array(0x574), 0x545 => array(0x575), 0x546 => array(0x576),
1739
-                    0x547 => array(0x577), 0x548 => array(0x578), 0x549 => array(0x579),
1740
-                    0x54A => array(0x57A), 0x54B => array(0x57B), 0x54C => array(0x57C),
1741
-                    0x54D => array(0x57D), 0x54E => array(0x57E), 0x54F => array(0x57F),
1742
-                    0x550 => array(0x580), 0x551 => array(0x581), 0x552 => array(0x582),
1743
-                    0x553 => array(0x583), 0x554 => array(0x584), 0x555 => array(0x585),
1744
-                    0x556 => array(0x586), 0x587 => array(0x565, 0x582), 0x675 => array(0x627, 0x674),
1745
-                    0x676 => array(0x648, 0x674), 0x677 => array(0x6C7, 0x674), 0x678 => array(0x64A, 0x674),
1746
-                    0x958 => array(0x915, 0x93C), 0x959 => array(0x916, 0x93C), 0x95A => array(0x917, 0x93C),
1747
-                    0x95B => array(0x91C, 0x93C), 0x95C => array(0x921, 0x93C), 0x95D => array(0x922, 0x93C),
1748
-                    0x95E => array(0x92B, 0x93C), 0x95F => array(0x92F, 0x93C), 0x9DC => array(0x9A1, 0x9BC),
1749
-                    0x9DD => array(0x9A2, 0x9BC), 0x9DF => array(0x9AF, 0x9BC), 0xA33 => array(0xA32, 0xA3C),
1750
-                    0xA36 => array(0xA38, 0xA3C), 0xA59 => array(0xA16, 0xA3C), 0xA5A => array(0xA17, 0xA3C),
1751
-                    0xA5B => array(0xA1C, 0xA3C), 0xA5E => array(0xA2B, 0xA3C), 0xB5C => array(0xB21, 0xB3C),
1752
-                    0xB5D => array(0xB22, 0xB3C), 0xE33 => array(0xE4D, 0xE32), 0xEB3 => array(0xECD, 0xEB2),
1753
-                    0xEDC => array(0xEAB, 0xE99), 0xEDD => array(0xEAB, 0xEA1), 0xF0C => array(0xF0B),
1754
-                    0xF43 => array(0xF42, 0xFB7), 0xF4D => array(0xF4C, 0xFB7), 0xF52 => array(0xF51, 0xFB7),
1755
-                    0xF57 => array(0xF56, 0xFB7), 0xF5C => array(0xF5B, 0xFB7), 0xF69 => array(0xF40, 0xFB5),
1756
-                    0xF73 => array(0xF71, 0xF72), 0xF75 => array(0xF71, 0xF74), 0xF76 => array(0xFB2, 0xF80),
1757
-                    0xF77 => array(0xFB2, 0xF71, 0xF80), 0xF78 => array(0xFB3, 0xF80), 0xF79 => array(0xFB3, 0xF71, 0xF80),
1758
-                    0xF81 => array(0xF71, 0xF80), 0xF93 => array(0xF92, 0xFB7), 0xF9D => array(0xF9C, 0xFB7),
1759
-                    0xFA2 => array(0xFA1, 0xFB7), 0xFA7 => array(0xFA6, 0xFB7), 0xFAC => array(0xFAB, 0xFB7),
1760
-                    0xFB9 => array(0xF90, 0xFB5), 0x10C7 => array(0x2D27), 0x10CD => array(0x2D2D),
1761
-                    0x10FC => array(0x10DC), 0x1D2C => array(0x61), 0x1D2D => array(0xE6),
1762
-                    0x1D2E => array(0x62), 0x1D30 => array(0x64), 0x1D31 => array(0x65),
1763
-                    0x1D32 => array(0x1DD), 0x1D33 => array(0x67), 0x1D34 => array(0x68),
1764
-                    0x1D35 => array(0x69), 0x1D36 => array(0x6A), 0x1D37 => array(0x6B),
1765
-                    0x1D38 => array(0x6C), 0x1D39 => array(0x6D), 0x1D3A => array(0x6E),
1766
-                    0x1D3C => array(0x6F), 0x1D3D => array(0x223), 0x1D3E => array(0x70),
1767
-                    0x1D3F => array(0x72), 0x1D40 => array(0x74), 0x1D41 => array(0x75),
1768
-                    0x1D42 => array(0x77), 0x1D43 => array(0x61), 0x1D44 => array(0x250),
1769
-                    0x1D45 => array(0x251), 0x1D46 => array(0x1D02), 0x1D47 => array(0x62),
1770
-                    0x1D48 => array(0x64), 0x1D49 => array(0x65), 0x1D4A => array(0x259),
1771
-                    0x1D4B => array(0x25B), 0x1D4C => array(0x25C), 0x1D4D => array(0x67),
1772
-                    0x1D4F => array(0x6B), 0x1D50 => array(0x6D), 0x1D51 => array(0x14B),
1773
-                    0x1D52 => array(0x6F), 0x1D53 => array(0x254), 0x1D54 => array(0x1D16),
1774
-                    0x1D55 => array(0x1D17), 0x1D56 => array(0x70), 0x1D57 => array(0x74),
1775
-                    0x1D58 => array(0x75), 0x1D59 => array(0x1D1D), 0x1D5A => array(0x26F),
1776
-                    0x1D5B => array(0x76), 0x1D5C => array(0x1D25), 0x1D5D => array(0x3B2),
1777
-                    0x1D5E => array(0x3B3), 0x1D5F => array(0x3B4), 0x1D60 => array(0x3C6),
1778
-                    0x1D61 => array(0x3C7), 0x1D62 => array(0x69), 0x1D63 => array(0x72),
1779
-                    0x1D64 => array(0x75), 0x1D65 => array(0x76), 0x1D66 => array(0x3B2),
1780
-                    0x1D67 => array(0x3B3), 0x1D68 => array(0x3C1), 0x1D69 => array(0x3C6),
1781
-                    0x1D6A => array(0x3C7), 0x1D78 => array(0x43D), 0x1D9B => array(0x252),
1782
-                    0x1D9C => array(0x63), 0x1D9D => array(0x255), 0x1D9E => array(0xF0),
1783
-                    0x1D9F => array(0x25C), 0x1DA0 => array(0x66), 0x1DA1 => array(0x25F),
1784
-                    0x1DA2 => array(0x261), 0x1DA3 => array(0x265), 0x1DA4 => array(0x268),
1785
-                    0x1DA5 => array(0x269), 0x1DA6 => array(0x26A), 0x1DA7 => array(0x1D7B),
1786
-                    0x1DA8 => array(0x29D), 0x1DA9 => array(0x26D), 0x1DAA => array(0x1D85),
1787
-                    0x1DAB => array(0x29F), 0x1DAC => array(0x271), 0x1DAD => array(0x270),
1788
-                    0x1DAE => array(0x272), 0x1DAF => array(0x273), 0x1DB0 => array(0x274),
1789
-                    0x1DB1 => array(0x275), 0x1DB2 => array(0x278), 0x1DB3 => array(0x282),
1790
-                    0x1DB4 => array(0x283), 0x1DB5 => array(0x1AB), 0x1DB6 => array(0x289),
1791
-                    0x1DB7 => array(0x28A), 0x1DB8 => array(0x1D1C), 0x1DB9 => array(0x28B),
1792
-                    0x1DBA => array(0x28C), 0x1DBB => array(0x7A), 0x1DBC => array(0x290),
1793
-                    0x1DBD => array(0x291), 0x1DBE => array(0x292), 0x1DBF => array(0x3B8),
1794
-                    0x1E00 => array(0x1E01), 0x1E02 => array(0x1E03), 0x1E04 => array(0x1E05),
1795
-                    0x1E06 => array(0x1E07), 0x1E08 => array(0x1E09), 0x1E0A => array(0x1E0B),
1796
-                    0x1E0C => array(0x1E0D), 0x1E0E => array(0x1E0F), 0x1E10 => array(0x1E11),
1797
-                    0x1E12 => array(0x1E13), 0x1E14 => array(0x1E15), 0x1E16 => array(0x1E17),
1798
-                    0x1E18 => array(0x1E19), 0x1E1A => array(0x1E1B), 0x1E1C => array(0x1E1D),
1799
-                    0x1E1E => array(0x1E1F), 0x1E20 => array(0x1E21), 0x1E22 => array(0x1E23),
1800
-                    0x1E24 => array(0x1E25), 0x1E26 => array(0x1E27), 0x1E28 => array(0x1E29),
1801
-                    0x1E2A => array(0x1E2B), 0x1E2C => array(0x1E2D), 0x1E2E => array(0x1E2F),
1802
-                    0x1E30 => array(0x1E31), 0x1E32 => array(0x1E33), 0x1E34 => array(0x1E35),
1803
-                    0x1E36 => array(0x1E37), 0x1E38 => array(0x1E39), 0x1E3A => array(0x1E3B),
1804
-                    0x1E3C => array(0x1E3D), 0x1E3E => array(0x1E3F), 0x1E40 => array(0x1E41),
1805
-                    0x1E42 => array(0x1E43), 0x1E44 => array(0x1E45), 0x1E46 => array(0x1E47),
1806
-                    0x1E48 => array(0x1E49), 0x1E4A => array(0x1E4B), 0x1E4C => array(0x1E4D),
1807
-                    0x1E4E => array(0x1E4F), 0x1E50 => array(0x1E51), 0x1E52 => array(0x1E53),
1808
-                    0x1E54 => array(0x1E55), 0x1E56 => array(0x1E57), 0x1E58 => array(0x1E59),
1809
-                    0x1E5A => array(0x1E5B), 0x1E5C => array(0x1E5D), 0x1E5E => array(0x1E5F),
1810
-                    0x1E60 => array(0x1E61), 0x1E62 => array(0x1E63), 0x1E64 => array(0x1E65),
1811
-                    0x1E66 => array(0x1E67), 0x1E68 => array(0x1E69), 0x1E6A => array(0x1E6B),
1812
-                    0x1E6C => array(0x1E6D), 0x1E6E => array(0x1E6F), 0x1E70 => array(0x1E71),
1813
-                    0x1E72 => array(0x1E73), 0x1E74 => array(0x1E75), 0x1E76 => array(0x1E77),
1814
-                    0x1E78 => array(0x1E79), 0x1E7A => array(0x1E7B), 0x1E7C => array(0x1E7D),
1815
-                    0x1E7E => array(0x1E7F), 0x1E80 => array(0x1E81), 0x1E82 => array(0x1E83),
1816
-                    0x1E84 => array(0x1E85), 0x1E86 => array(0x1E87), 0x1E88 => array(0x1E89),
1817
-                    0x1E8A => array(0x1E8B), 0x1E8C => array(0x1E8D), 0x1E8E => array(0x1E8F),
1818
-                    0x1E90 => array(0x1E91), 0x1E92 => array(0x1E93), 0x1E94 => array(0x1E95),
1819
-                    0x1E9A => array(0x61, 0x2BE), 0x1E9B => array(0x1E61), 0x1E9E => array(0x73, 0x73),
1820
-                    0x1EA0 => array(0x1EA1), 0x1EA2 => array(0x1EA3), 0x1EA4 => array(0x1EA5),
1821
-                    0x1EA6 => array(0x1EA7), 0x1EA8 => array(0x1EA9), 0x1EAA => array(0x1EAB),
1822
-                    0x1EAC => array(0x1EAD), 0x1EAE => array(0x1EAF), 0x1EB0 => array(0x1EB1),
1823
-                    0x1EB2 => array(0x1EB3), 0x1EB4 => array(0x1EB5), 0x1EB6 => array(0x1EB7),
1824
-                    0x1EB8 => array(0x1EB9), 0x1EBA => array(0x1EBB), 0x1EBC => array(0x1EBD),
1825
-                    0x1EBE => array(0x1EBF), 0x1EC0 => array(0x1EC1), 0x1EC2 => array(0x1EC3),
1826
-                    0x1EC4 => array(0x1EC5), 0x1EC6 => array(0x1EC7), 0x1EC8 => array(0x1EC9),
1827
-                    0x1ECA => array(0x1ECB), 0x1ECC => array(0x1ECD), 0x1ECE => array(0x1ECF),
1828
-                    0x1ED0 => array(0x1ED1), 0x1ED2 => array(0x1ED3), 0x1ED4 => array(0x1ED5),
1829
-                    0x1ED6 => array(0x1ED7), 0x1ED8 => array(0x1ED9), 0x1EDA => array(0x1EDB),
1830
-                    0x1EDC => array(0x1EDD), 0x1EDE => array(0x1EDF), 0x1EE0 => array(0x1EE1),
1831
-                    0x1EE2 => array(0x1EE3), 0x1EE4 => array(0x1EE5), 0x1EE6 => array(0x1EE7),
1832
-                    0x1EE8 => array(0x1EE9), 0x1EEA => array(0x1EEB), 0x1EEC => array(0x1EED),
1833
-                    0x1EEE => array(0x1EEF), 0x1EF0 => array(0x1EF1), 0x1EF2 => array(0x1EF3),
1834
-                    0x1EF4 => array(0x1EF5), 0x1EF6 => array(0x1EF7), 0x1EF8 => array(0x1EF9),
1835
-                    0x1EFA => array(0x1EFB), 0x1EFC => array(0x1EFD), 0x1EFE => array(0x1EFF),
1836
-                    0x1F08 => array(0x1F00), 0x1F09 => array(0x1F01), 0x1F0A => array(0x1F02),
1837
-                    0x1F0B => array(0x1F03), 0x1F0C => array(0x1F04), 0x1F0D => array(0x1F05),
1838
-                    0x1F0E => array(0x1F06), 0x1F0F => array(0x1F07), 0x1F18 => array(0x1F10),
1839
-                    0x1F19 => array(0x1F11), 0x1F1A => array(0x1F12), 0x1F1B => array(0x1F13),
1840
-                    0x1F1C => array(0x1F14), 0x1F1D => array(0x1F15), 0x1F28 => array(0x1F20),
1841
-                    0x1F29 => array(0x1F21), 0x1F2A => array(0x1F22), 0x1F2B => array(0x1F23),
1842
-                    0x1F2C => array(0x1F24), 0x1F2D => array(0x1F25), 0x1F2E => array(0x1F26),
1843
-                    0x1F2F => array(0x1F27), 0x1F38 => array(0x1F30), 0x1F39 => array(0x1F31),
1844
-                    0x1F3A => array(0x1F32), 0x1F3B => array(0x1F33), 0x1F3C => array(0x1F34),
1845
-                    0x1F3D => array(0x1F35), 0x1F3E => array(0x1F36), 0x1F3F => array(0x1F37),
1846
-                    0x1F48 => array(0x1F40), 0x1F49 => array(0x1F41), 0x1F4A => array(0x1F42),
1847
-                    0x1F4B => array(0x1F43), 0x1F4C => array(0x1F44), 0x1F4D => array(0x1F45),
1848
-                    0x1F59 => array(0x1F51), 0x1F5B => array(0x1F53), 0x1F5D => array(0x1F55),
1849
-                    0x1F5F => array(0x1F57), 0x1F68 => array(0x1F60), 0x1F69 => array(0x1F61),
1850
-                    0x1F6A => array(0x1F62), 0x1F6B => array(0x1F63), 0x1F6C => array(0x1F64),
1851
-                    0x1F6D => array(0x1F65), 0x1F6E => array(0x1F66), 0x1F6F => array(0x1F67),
1852
-                    0x1F71 => array(0x3AC), 0x1F73 => array(0x3AD), 0x1F75 => array(0x3AE),
1853
-                    0x1F77 => array(0x3AF), 0x1F79 => array(0x3CC), 0x1F7B => array(0x3CD),
1854
-                    0x1F7D => array(0x3CE), 0x1F80 => array(0x1F00, 0x3B9), 0x1F81 => array(0x1F01, 0x3B9),
1855
-                    0x1F82 => array(0x1F02, 0x3B9), 0x1F83 => array(0x1F03, 0x3B9), 0x1F84 => array(0x1F04, 0x3B9),
1856
-                    0x1F85 => array(0x1F05, 0x3B9), 0x1F86 => array(0x1F06, 0x3B9), 0x1F87 => array(0x1F07, 0x3B9),
1857
-                    0x1F88 => array(0x1F00, 0x3B9), 0x1F89 => array(0x1F01, 0x3B9), 0x1F8A => array(0x1F02, 0x3B9),
1858
-                    0x1F8B => array(0x1F03, 0x3B9), 0x1F8C => array(0x1F04, 0x3B9), 0x1F8D => array(0x1F05, 0x3B9),
1859
-                    0x1F8E => array(0x1F06, 0x3B9), 0x1F8F => array(0x1F07, 0x3B9), 0x1F90 => array(0x1F20, 0x3B9),
1860
-                    0x1F91 => array(0x1F21, 0x3B9), 0x1F92 => array(0x1F22, 0x3B9), 0x1F93 => array(0x1F23, 0x3B9),
1861
-                    0x1F94 => array(0x1F24, 0x3B9), 0x1F95 => array(0x1F25, 0x3B9), 0x1F96 => array(0x1F26, 0x3B9),
1862
-                    0x1F97 => array(0x1F27, 0x3B9), 0x1F98 => array(0x1F20, 0x3B9), 0x1F99 => array(0x1F21, 0x3B9),
1863
-                    0x1F9A => array(0x1F22, 0x3B9), 0x1F9B => array(0x1F23, 0x3B9), 0x1F9C => array(0x1F24, 0x3B9),
1864
-                    0x1F9D => array(0x1F25, 0x3B9), 0x1F9E => array(0x1F26, 0x3B9), 0x1F9F => array(0x1F27, 0x3B9),
1865
-                    0x1FA0 => array(0x1F60, 0x3B9), 0x1FA1 => array(0x1F61, 0x3B9), 0x1FA2 => array(0x1F62, 0x3B9),
1866
-                    0x1FA3 => array(0x1F63, 0x3B9), 0x1FA4 => array(0x1F64, 0x3B9), 0x1FA5 => array(0x1F65, 0x3B9),
1867
-                    0x1FA6 => array(0x1F66, 0x3B9), 0x1FA7 => array(0x1F67, 0x3B9), 0x1FA8 => array(0x1F60, 0x3B9),
1868
-                    0x1FA9 => array(0x1F61, 0x3B9), 0x1FAA => array(0x1F62, 0x3B9), 0x1FAB => array(0x1F63, 0x3B9),
1869
-                    0x1FAC => array(0x1F64, 0x3B9), 0x1FAD => array(0x1F65, 0x3B9), 0x1FAE => array(0x1F66, 0x3B9),
1870
-                    0x1FAF => array(0x1F67, 0x3B9), 0x1FB2 => array(0x1F70, 0x3B9), 0x1FB3 => array(0x3B1, 0x3B9),
1871
-                    0x1FB4 => array(0x3AC, 0x3B9), 0x1FB7 => array(0x1FB6, 0x3B9), 0x1FB8 => array(0x1FB0),
1872
-                    0x1FB9 => array(0x1FB1), 0x1FBA => array(0x1F70), 0x1FBB => array(0x3AC),
1873
-                    0x1FBC => array(0x3B1, 0x3B9), 0x1FBE => array(0x3B9), 0x1FC2 => array(0x1F74, 0x3B9),
1874
-                    0x1FC3 => array(0x3B7, 0x3B9), 0x1FC4 => array(0x3AE, 0x3B9), 0x1FC7 => array(0x1FC6, 0x3B9),
1875
-                    0x1FC8 => array(0x1F72), 0x1FC9 => array(0x3AD), 0x1FCA => array(0x1F74),
1876
-                    0x1FCB => array(0x3AE), 0x1FCC => array(0x3B7, 0x3B9), 0x1FD3 => array(0x390),
1877
-                    0x1FD8 => array(0x1FD0), 0x1FD9 => array(0x1FD1), 0x1FDA => array(0x1F76),
1878
-                    0x1FDB => array(0x3AF), 0x1FE3 => array(0x3B0), 0x1FE8 => array(0x1FE0),
1879
-                    0x1FE9 => array(0x1FE1), 0x1FEA => array(0x1F7A), 0x1FEB => array(0x3CD),
1880
-                    0x1FEC => array(0x1FE5), 0x1FF2 => array(0x1F7C, 0x3B9), 0x1FF3 => array(0x3C9, 0x3B9),
1881
-                    0x1FF4 => array(0x3CE, 0x3B9), 0x1FF7 => array(0x1FF6, 0x3B9), 0x1FF8 => array(0x1F78),
1882
-                    0x1FF9 => array(0x3CC), 0x1FFA => array(0x1F7C), 0x1FFB => array(0x3CE),
1883
-                    0x1FFC => array(0x3C9, 0x3B9), 0x2011 => array(0x2010), 0x2033 => array(0x2032, 0x2032),
1884
-                    0x2034 => array(0x2032, 0x2032, 0x2032), 0x2036 => array(0x2035, 0x2035), 0x2037 => array(0x2035, 0x2035, 0x2035),
1885
-                    0x2057 => array(0x2032, 0x2032, 0x2032, 0x2032), 0x2070 => array(0x30), 0x2071 => array(0x69),
1886
-                    0x2074 => array(0x34), 0x2075 => array(0x35), 0x2076 => array(0x36),
1887
-                    0x2077 => array(0x37), 0x2078 => array(0x38), 0x2079 => array(0x39),
1888
-                    0x207B => array(0x2212), 0x207F => array(0x6E), 0x2080 => array(0x30),
1889
-                    0x2081 => array(0x31), 0x2082 => array(0x32), 0x2083 => array(0x33),
1890
-                    0x2084 => array(0x34), 0x2085 => array(0x35), 0x2086 => array(0x36),
1891
-                    0x2087 => array(0x37), 0x2088 => array(0x38), 0x2089 => array(0x39),
1892
-                    0x208B => array(0x2212), 0x2090 => array(0x61), 0x2091 => array(0x65),
1893
-                    0x2092 => array(0x6F), 0x2093 => array(0x78), 0x2094 => array(0x259),
1894
-                    0x2095 => array(0x68), 0x2096 => array(0x6B), 0x2097 => array(0x6C),
1895
-                    0x2098 => array(0x6D), 0x2099 => array(0x6E), 0x209A => array(0x70),
1896
-                    0x209B => array(0x73), 0x209C => array(0x74), 0x20A8 => array(0x72, 0x73),
1897
-                    0x2102 => array(0x63), 0x2103 => array(0xB0, 0x63), 0x2107 => array(0x25B),
1898
-                    0x2109 => array(0xB0, 0x66), 0x210A => array(0x67), 0x210B => array(0x68),
1899
-                    0x210C => array(0x68), 0x210D => array(0x68), 0x210E => array(0x68),
1900
-                    0x210F => array(0x127), 0x2110 => array(0x69), 0x2111 => array(0x69),
1901
-                    0x2112 => array(0x6C), 0x2113 => array(0x6C), 0x2115 => array(0x6E),
1902
-                    0x2116 => array(0x6E, 0x6F), 0x2119 => array(0x70), 0x211A => array(0x71),
1903
-                    0x211B => array(0x72), 0x211C => array(0x72), 0x211D => array(0x72),
1904
-                    0x2120 => array(0x73, 0x6D), 0x2121 => array(0x74, 0x65, 0x6C), 0x2122 => array(0x74, 0x6D),
1905
-                    0x2124 => array(0x7A), 0x2126 => array(0x3C9), 0x2128 => array(0x7A),
1906
-                    0x212A => array(0x6B), 0x212B => array(0xE5), 0x212C => array(0x62),
1907
-                    0x212D => array(0x63), 0x212F => array(0x65), 0x2130 => array(0x65),
1908
-                    0x2131 => array(0x66), 0x2133 => array(0x6D), 0x2134 => array(0x6F),
1909
-                    0x2135 => array(0x5D0), 0x2136 => array(0x5D1), 0x2137 => array(0x5D2),
1910
-                    0x2138 => array(0x5D3), 0x2139 => array(0x69), 0x213B => array(0x66, 0x61, 0x78),
1911
-                    0x213C => array(0x3C0), 0x213D => array(0x3B3), 0x213E => array(0x3B3),
1912
-                    0x213F => array(0x3C0), 0x2140 => array(0x2211), 0x2145 => array(0x64),
1913
-                    0x2146 => array(0x64), 0x2147 => array(0x65), 0x2148 => array(0x69),
1914
-                    0x2149 => array(0x6A), 0x2150 => array(0x31, 0x2044, 0x37), 0x2151 => array(0x31, 0x2044, 0x39),
1915
-                    0x2152 => array(0x31, 0x2044, 0x31, 0x30), 0x2153 => array(0x31, 0x2044, 0x33), 0x2154 => array(0x32, 0x2044, 0x33),
1916
-                    0x2155 => array(0x31, 0x2044, 0x35), 0x2156 => array(0x32, 0x2044, 0x35), 0x2157 => array(0x33, 0x2044, 0x35),
1917
-                    0x2158 => array(0x34, 0x2044, 0x35), 0x2159 => array(0x31, 0x2044, 0x36), 0x215A => array(0x35, 0x2044, 0x36),
1918
-                    0x215B => array(0x31, 0x2044, 0x38), 0x215C => array(0x33, 0x2044, 0x38), 0x215D => array(0x35, 0x2044, 0x38),
1919
-                    0x215E => array(0x37, 0x2044, 0x38), 0x215F => array(0x31, 0x2044), 0x2160 => array(0x69),
1920
-                    0x2161 => array(0x69, 0x69), 0x2162 => array(0x69, 0x69, 0x69), 0x2163 => array(0x69, 0x76),
1921
-                    0x2164 => array(0x76), 0x2165 => array(0x76, 0x69), 0x2166 => array(0x76, 0x69, 0x69),
1922
-                    0x2167 => array(0x76, 0x69, 0x69, 0x69), 0x2168 => array(0x69, 0x78), 0x2169 => array(0x78),
1923
-                    0x216A => array(0x78, 0x69), 0x216B => array(0x78, 0x69, 0x69), 0x216C => array(0x6C),
1924
-                    0x216D => array(0x63), 0x216E => array(0x64), 0x216F => array(0x6D),
1925
-                    0x2170 => array(0x69), 0x2171 => array(0x69, 0x69), 0x2172 => array(0x69, 0x69, 0x69),
1926
-                    0x2173 => array(0x69, 0x76), 0x2174 => array(0x76), 0x2175 => array(0x76, 0x69),
1927
-                    0x2176 => array(0x76, 0x69, 0x69), 0x2177 => array(0x76, 0x69, 0x69, 0x69), 0x2178 => array(0x69, 0x78),
1928
-                    0x2179 => array(0x78), 0x217A => array(0x78, 0x69), 0x217B => array(0x78, 0x69, 0x69),
1929
-                    0x217C => array(0x6C), 0x217D => array(0x63), 0x217E => array(0x64),
1930
-                    0x217F => array(0x6D), 0x2189 => array(0x30, 0x2044, 0x33), 0x222C => array(0x222B, 0x222B),
1931
-                    0x222D => array(0x222B, 0x222B, 0x222B), 0x222F => array(0x222E, 0x222E), 0x2230 => array(0x222E, 0x222E, 0x222E),
1932
-                    0x2329 => array(0x3008), 0x232A => array(0x3009), 0x2460 => array(0x31),
1933
-                    0x2461 => array(0x32), 0x2462 => array(0x33), 0x2463 => array(0x34),
1934
-                    0x2464 => array(0x35), 0x2465 => array(0x36), 0x2466 => array(0x37),
1935
-                    0x2467 => array(0x38), 0x2468 => array(0x39), 0x2469 => array(0x31, 0x30),
1936
-                    0x246A => array(0x31, 0x31), 0x246B => array(0x31, 0x32), 0x246C => array(0x31, 0x33),
1937
-                    0x246D => array(0x31, 0x34), 0x246E => array(0x31, 0x35), 0x246F => array(0x31, 0x36),
1938
-                    0x2470 => array(0x31, 0x37), 0x2471 => array(0x31, 0x38), 0x2472 => array(0x31, 0x39),
1939
-                    0x2473 => array(0x32, 0x30), 0x24B6 => array(0x61), 0x24B7 => array(0x62),
1940
-                    0x24B8 => array(0x63), 0x24B9 => array(0x64), 0x24BA => array(0x65),
1941
-                    0x24BB => array(0x66), 0x24BC => array(0x67), 0x24BD => array(0x68),
1942
-                    0x24BE => array(0x69), 0x24BF => array(0x6A), 0x24C0 => array(0x6B),
1943
-                    0x24C1 => array(0x6C), 0x24C2 => array(0x6D), 0x24C3 => array(0x6E),
1944
-                    0x24C4 => array(0x6F), 0x24C5 => array(0x70), 0x24C6 => array(0x71),
1945
-                    0x24C7 => array(0x72), 0x24C8 => array(0x73), 0x24C9 => array(0x74),
1946
-                    0x24CA => array(0x75), 0x24CB => array(0x76), 0x24CC => array(0x77),
1947
-                    0x24CD => array(0x78), 0x24CE => array(0x79), 0x24CF => array(0x7A),
1948
-                    0x24D0 => array(0x61), 0x24D1 => array(0x62), 0x24D2 => array(0x63),
1949
-                    0x24D3 => array(0x64), 0x24D4 => array(0x65), 0x24D5 => array(0x66),
1950
-                    0x24D6 => array(0x67), 0x24D7 => array(0x68), 0x24D8 => array(0x69),
1951
-                    0x24D9 => array(0x6A), 0x24DA => array(0x6B), 0x24DB => array(0x6C),
1952
-                    0x24DC => array(0x6D), 0x24DD => array(0x6E), 0x24DE => array(0x6F),
1953
-                    0x24DF => array(0x70), 0x24E0 => array(0x71), 0x24E1 => array(0x72),
1954
-                    0x24E2 => array(0x73), 0x24E3 => array(0x74), 0x24E4 => array(0x75),
1955
-                    0x24E5 => array(0x76), 0x24E6 => array(0x77), 0x24E7 => array(0x78),
1956
-                    0x24E8 => array(0x79), 0x24E9 => array(0x7A), 0x24EA => array(0x30),
1957
-                    0x2A0C => array(0x222B, 0x222B, 0x222B, 0x222B), 0x2ADC => array(0x2ADD, 0x338), 0x2C00 => array(0x2C30),
1958
-                    0x2C01 => array(0x2C31), 0x2C02 => array(0x2C32), 0x2C03 => array(0x2C33),
1959
-                    0x2C04 => array(0x2C34), 0x2C05 => array(0x2C35), 0x2C06 => array(0x2C36),
1960
-                    0x2C07 => array(0x2C37), 0x2C08 => array(0x2C38), 0x2C09 => array(0x2C39),
1961
-                    0x2C0A => array(0x2C3A), 0x2C0B => array(0x2C3B), 0x2C0C => array(0x2C3C),
1962
-                    0x2C0D => array(0x2C3D), 0x2C0E => array(0x2C3E), 0x2C0F => array(0x2C3F),
1963
-                    0x2C10 => array(0x2C40), 0x2C11 => array(0x2C41), 0x2C12 => array(0x2C42),
1964
-                    0x2C13 => array(0x2C43), 0x2C14 => array(0x2C44), 0x2C15 => array(0x2C45),
1965
-                    0x2C16 => array(0x2C46), 0x2C17 => array(0x2C47), 0x2C18 => array(0x2C48),
1966
-                    0x2C19 => array(0x2C49), 0x2C1A => array(0x2C4A), 0x2C1B => array(0x2C4B),
1967
-                    0x2C1C => array(0x2C4C), 0x2C1D => array(0x2C4D), 0x2C1E => array(0x2C4E),
1968
-                    0x2C1F => array(0x2C4F), 0x2C20 => array(0x2C50), 0x2C21 => array(0x2C51),
1969
-                    0x2C22 => array(0x2C52), 0x2C23 => array(0x2C53), 0x2C24 => array(0x2C54),
1970
-                    0x2C25 => array(0x2C55), 0x2C26 => array(0x2C56), 0x2C27 => array(0x2C57),
1971
-                    0x2C28 => array(0x2C58), 0x2C29 => array(0x2C59), 0x2C2A => array(0x2C5A),
1972
-                    0x2C2B => array(0x2C5B), 0x2C2C => array(0x2C5C), 0x2C2D => array(0x2C5D),
1973
-                    0x2C2E => array(0x2C5E), 0x2C60 => array(0x2C61), 0x2C62 => array(0x26B),
1974
-                    0x2C63 => array(0x1D7D), 0x2C64 => array(0x27D), 0x2C67 => array(0x2C68),
1975
-                    0x2C69 => array(0x2C6A), 0x2C6B => array(0x2C6C), 0x2C6D => array(0x251),
1976
-                    0x2C6E => array(0x271), 0x2C6F => array(0x250), 0x2C70 => array(0x252),
1977
-                    0x2C72 => array(0x2C73), 0x2C75 => array(0x2C76), 0x2C7C => array(0x6A),
1978
-                    0x2C7D => array(0x76), 0x2C7E => array(0x23F), 0x2C7F => array(0x240),
1979
-                    0x2C80 => array(0x2C81), 0x2C82 => array(0x2C83), 0x2C84 => array(0x2C85),
1980
-                    0x2C86 => array(0x2C87), 0x2C88 => array(0x2C89), 0x2C8A => array(0x2C8B),
1981
-                    0x2C8C => array(0x2C8D), 0x2C8E => array(0x2C8F), 0x2C90 => array(0x2C91),
1982
-                    0x2C92 => array(0x2C93), 0x2C94 => array(0x2C95), 0x2C96 => array(0x2C97),
1983
-                    0x2C98 => array(0x2C99), 0x2C9A => array(0x2C9B), 0x2C9C => array(0x2C9D),
1984
-                    0x2C9E => array(0x2C9F), 0x2CA0 => array(0x2CA1), 0x2CA2 => array(0x2CA3),
1985
-                    0x2CA4 => array(0x2CA5), 0x2CA6 => array(0x2CA7), 0x2CA8 => array(0x2CA9),
1986
-                    0x2CAA => array(0x2CAB), 0x2CAC => array(0x2CAD), 0x2CAE => array(0x2CAF),
1987
-                    0x2CB0 => array(0x2CB1), 0x2CB2 => array(0x2CB3), 0x2CB4 => array(0x2CB5),
1988
-                    0x2CB6 => array(0x2CB7), 0x2CB8 => array(0x2CB9), 0x2CBA => array(0x2CBB),
1989
-                    0x2CBC => array(0x2CBD), 0x2CBE => array(0x2CBF), 0x2CC0 => array(0x2CC1),
1990
-                    0x2CC2 => array(0x2CC3), 0x2CC4 => array(0x2CC5), 0x2CC6 => array(0x2CC7),
1991
-                    0x2CC8 => array(0x2CC9), 0x2CCA => array(0x2CCB), 0x2CCC => array(0x2CCD),
1992
-                    0x2CCE => array(0x2CCF), 0x2CD0 => array(0x2CD1), 0x2CD2 => array(0x2CD3),
1993
-                    0x2CD4 => array(0x2CD5), 0x2CD6 => array(0x2CD7), 0x2CD8 => array(0x2CD9),
1994
-                    0x2CDA => array(0x2CDB), 0x2CDC => array(0x2CDD), 0x2CDE => array(0x2CDF),
1995
-                    0x2CE0 => array(0x2CE1), 0x2CE2 => array(0x2CE3), 0x2CEB => array(0x2CEC),
1996
-                    0x2CED => array(0x2CEE), 0x2CF2 => array(0x2CF3), 0x2D6F => array(0x2D61),
1997
-                    0x2E9F => array(0x6BCD), 0x2EF3 => array(0x9F9F), 0x2F00 => array(0x4E00),
1998
-                    0x2F01 => array(0x4E28), 0x2F02 => array(0x4E36), 0x2F03 => array(0x4E3F),
1999
-                    0x2F04 => array(0x4E59), 0x2F05 => array(0x4E85), 0x2F06 => array(0x4E8C),
2000
-                    0x2F07 => array(0x4EA0), 0x2F08 => array(0x4EBA), 0x2F09 => array(0x513F),
2001
-                    0x2F0A => array(0x5165), 0x2F0B => array(0x516B), 0x2F0C => array(0x5182),
2002
-                    0x2F0D => array(0x5196), 0x2F0E => array(0x51AB), 0x2F0F => array(0x51E0),
2003
-                    0x2F10 => array(0x51F5), 0x2F11 => array(0x5200), 0x2F12 => array(0x529B),
2004
-                    0x2F13 => array(0x52F9), 0x2F14 => array(0x5315), 0x2F15 => array(0x531A),
2005
-                    0x2F16 => array(0x5338), 0x2F17 => array(0x5341), 0x2F18 => array(0x535C),
2006
-                    0x2F19 => array(0x5369), 0x2F1A => array(0x5382), 0x2F1B => array(0x53B6),
2007
-                    0x2F1C => array(0x53C8), 0x2F1D => array(0x53E3), 0x2F1E => array(0x56D7),
2008
-                    0x2F1F => array(0x571F), 0x2F20 => array(0x58EB), 0x2F21 => array(0x5902),
2009
-                    0x2F22 => array(0x590A), 0x2F23 => array(0x5915), 0x2F24 => array(0x5927),
2010
-                    0x2F25 => array(0x5973), 0x2F26 => array(0x5B50), 0x2F27 => array(0x5B80),
2011
-                    0x2F28 => array(0x5BF8), 0x2F29 => array(0x5C0F), 0x2F2A => array(0x5C22),
2012
-                    0x2F2B => array(0x5C38), 0x2F2C => array(0x5C6E), 0x2F2D => array(0x5C71),
2013
-                    0x2F2E => array(0x5DDB), 0x2F2F => array(0x5DE5), 0x2F30 => array(0x5DF1),
2014
-                    0x2F31 => array(0x5DFE), 0x2F32 => array(0x5E72), 0x2F33 => array(0x5E7A),
2015
-                    0x2F34 => array(0x5E7F), 0x2F35 => array(0x5EF4), 0x2F36 => array(0x5EFE),
2016
-                    0x2F37 => array(0x5F0B), 0x2F38 => array(0x5F13), 0x2F39 => array(0x5F50),
2017
-                    0x2F3A => array(0x5F61), 0x2F3B => array(0x5F73), 0x2F3C => array(0x5FC3),
2018
-                    0x2F3D => array(0x6208), 0x2F3E => array(0x6236), 0x2F3F => array(0x624B),
2019
-                    0x2F40 => array(0x652F), 0x2F41 => array(0x6534), 0x2F42 => array(0x6587),
2020
-                    0x2F43 => array(0x6597), 0x2F44 => array(0x65A4), 0x2F45 => array(0x65B9),
2021
-                    0x2F46 => array(0x65E0), 0x2F47 => array(0x65E5), 0x2F48 => array(0x66F0),
2022
-                    0x2F49 => array(0x6708), 0x2F4A => array(0x6728), 0x2F4B => array(0x6B20),
2023
-                    0x2F4C => array(0x6B62), 0x2F4D => array(0x6B79), 0x2F4E => array(0x6BB3),
2024
-                    0x2F4F => array(0x6BCB), 0x2F50 => array(0x6BD4), 0x2F51 => array(0x6BDB),
2025
-                    0x2F52 => array(0x6C0F), 0x2F53 => array(0x6C14), 0x2F54 => array(0x6C34),
2026
-                    0x2F55 => array(0x706B), 0x2F56 => array(0x722A), 0x2F57 => array(0x7236),
2027
-                    0x2F58 => array(0x723B), 0x2F59 => array(0x723F), 0x2F5A => array(0x7247),
2028
-                    0x2F5B => array(0x7259), 0x2F5C => array(0x725B), 0x2F5D => array(0x72AC),
2029
-                    0x2F5E => array(0x7384), 0x2F5F => array(0x7389), 0x2F60 => array(0x74DC),
2030
-                    0x2F61 => array(0x74E6), 0x2F62 => array(0x7518), 0x2F63 => array(0x751F),
2031
-                    0x2F64 => array(0x7528), 0x2F65 => array(0x7530), 0x2F66 => array(0x758B),
2032
-                    0x2F67 => array(0x7592), 0x2F68 => array(0x7676), 0x2F69 => array(0x767D),
2033
-                    0x2F6A => array(0x76AE), 0x2F6B => array(0x76BF), 0x2F6C => array(0x76EE),
2034
-                    0x2F6D => array(0x77DB), 0x2F6E => array(0x77E2), 0x2F6F => array(0x77F3),
2035
-                    0x2F70 => array(0x793A), 0x2F71 => array(0x79B8), 0x2F72 => array(0x79BE),
2036
-                    0x2F73 => array(0x7A74), 0x2F74 => array(0x7ACB), 0x2F75 => array(0x7AF9),
2037
-                    0x2F76 => array(0x7C73), 0x2F77 => array(0x7CF8), 0x2F78 => array(0x7F36),
2038
-                    0x2F79 => array(0x7F51), 0x2F7A => array(0x7F8A), 0x2F7B => array(0x7FBD),
2039
-                    0x2F7C => array(0x8001), 0x2F7D => array(0x800C), 0x2F7E => array(0x8012),
2040
-                    0x2F7F => array(0x8033), 0x2F80 => array(0x807F), 0x2F81 => array(0x8089),
2041
-                    0x2F82 => array(0x81E3), 0x2F83 => array(0x81EA), 0x2F84 => array(0x81F3),
2042
-                    0x2F85 => array(0x81FC), 0x2F86 => array(0x820C), 0x2F87 => array(0x821B),
2043
-                    0x2F88 => array(0x821F), 0x2F89 => array(0x826E), 0x2F8A => array(0x8272),
2044
-                    0x2F8B => array(0x8278), 0x2F8C => array(0x864D), 0x2F8D => array(0x866B),
2045
-                    0x2F8E => array(0x8840), 0x2F8F => array(0x884C), 0x2F90 => array(0x8863),
2046
-                    0x2F91 => array(0x897E), 0x2F92 => array(0x898B), 0x2F93 => array(0x89D2),
2047
-                    0x2F94 => array(0x8A00), 0x2F95 => array(0x8C37), 0x2F96 => array(0x8C46),
2048
-                    0x2F97 => array(0x8C55), 0x2F98 => array(0x8C78), 0x2F99 => array(0x8C9D),
2049
-                    0x2F9A => array(0x8D64), 0x2F9B => array(0x8D70), 0x2F9C => array(0x8DB3),
2050
-                    0x2F9D => array(0x8EAB), 0x2F9E => array(0x8ECA), 0x2F9F => array(0x8F9B),
2051
-                    0x2FA0 => array(0x8FB0), 0x2FA1 => array(0x8FB5), 0x2FA2 => array(0x9091),
2052
-                    0x2FA3 => array(0x9149), 0x2FA4 => array(0x91C6), 0x2FA5 => array(0x91CC),
2053
-                    0x2FA6 => array(0x91D1), 0x2FA7 => array(0x9577), 0x2FA8 => array(0x9580),
2054
-                    0x2FA9 => array(0x961C), 0x2FAA => array(0x96B6), 0x2FAB => array(0x96B9),
2055
-                    0x2FAC => array(0x96E8), 0x2FAD => array(0x9751), 0x2FAE => array(0x975E),
2056
-                    0x2FAF => array(0x9762), 0x2FB0 => array(0x9769), 0x2FB1 => array(0x97CB),
2057
-                    0x2FB2 => array(0x97ED), 0x2FB3 => array(0x97F3), 0x2FB4 => array(0x9801),
2058
-                    0x2FB5 => array(0x98A8), 0x2FB6 => array(0x98DB), 0x2FB7 => array(0x98DF),
2059
-                    0x2FB8 => array(0x9996), 0x2FB9 => array(0x9999), 0x2FBA => array(0x99AC),
2060
-                    0x2FBB => array(0x9AA8), 0x2FBC => array(0x9AD8), 0x2FBD => array(0x9ADF),
2061
-                    0x2FBE => array(0x9B25), 0x2FBF => array(0x9B2F), 0x2FC0 => array(0x9B32),
2062
-                    0x2FC1 => array(0x9B3C), 0x2FC2 => array(0x9B5A), 0x2FC3 => array(0x9CE5),
2063
-                    0x2FC4 => array(0x9E75), 0x2FC5 => array(0x9E7F), 0x2FC6 => array(0x9EA5),
2064
-                    0x2FC7 => array(0x9EBB), 0x2FC8 => array(0x9EC3), 0x2FC9 => array(0x9ECD),
2065
-                    0x2FCA => array(0x9ED1), 0x2FCB => array(0x9EF9), 0x2FCC => array(0x9EFD),
2066
-                    0x2FCD => array(0x9F0E), 0x2FCE => array(0x9F13), 0x2FCF => array(0x9F20),
2067
-                    0x2FD0 => array(0x9F3B), 0x2FD1 => array(0x9F4A), 0x2FD2 => array(0x9F52),
2068
-                    0x2FD3 => array(0x9F8D), 0x2FD4 => array(0x9F9C), 0x2FD5 => array(0x9FA0),
2069
-                    0x3002 => array(0x2E), 0x3036 => array(0x3012), 0x3038 => array(0x5341),
2070
-                    0x3039 => array(0x5344), 0x303A => array(0x5345), 0x309F => array(0x3088, 0x308A),
2071
-                    0x30FF => array(0x30B3, 0x30C8), 0x3131 => array(0x1100), 0x3132 => array(0x1101),
2072
-                    0x3133 => array(0x11AA), 0x3134 => array(0x1102), 0x3135 => array(0x11AC),
2073
-                    0x3136 => array(0x11AD), 0x3137 => array(0x1103), 0x3138 => array(0x1104),
2074
-                    0x3139 => array(0x1105), 0x313A => array(0x11B0), 0x313B => array(0x11B1),
2075
-                    0x313C => array(0x11B2), 0x313D => array(0x11B3), 0x313E => array(0x11B4),
2076
-                    0x313F => array(0x11B5), 0x3140 => array(0x111A), 0x3141 => array(0x1106),
2077
-                    0x3142 => array(0x1107), 0x3143 => array(0x1108), 0x3144 => array(0x1121),
2078
-                    0x3145 => array(0x1109), 0x3146 => array(0x110A), 0x3147 => array(0x110B),
2079
-                    0x3148 => array(0x110C), 0x3149 => array(0x110D), 0x314A => array(0x110E),
2080
-                    0x314B => array(0x110F), 0x314C => array(0x1110), 0x314D => array(0x1111),
2081
-                    0x314E => array(0x1112), 0x314F => array(0x1161), 0x3150 => array(0x1162),
2082
-                    0x3151 => array(0x1163), 0x3152 => array(0x1164), 0x3153 => array(0x1165),
2083
-                    0x3154 => array(0x1166), 0x3155 => array(0x1167), 0x3156 => array(0x1168),
2084
-                    0x3157 => array(0x1169), 0x3158 => array(0x116A), 0x3159 => array(0x116B),
2085
-                    0x315A => array(0x116C), 0x315B => array(0x116D), 0x315C => array(0x116E),
2086
-                    0x315D => array(0x116F), 0x315E => array(0x1170), 0x315F => array(0x1171),
2087
-                    0x3160 => array(0x1172), 0x3161 => array(0x1173), 0x3162 => array(0x1174),
2088
-                    0x3163 => array(0x1175), 0x3165 => array(0x1114), 0x3166 => array(0x1115),
2089
-                    0x3167 => array(0x11C7), 0x3168 => array(0x11C8), 0x3169 => array(0x11CC),
2090
-                    0x316A => array(0x11CE), 0x316B => array(0x11D3), 0x316C => array(0x11D7),
2091
-                    0x316D => array(0x11D9), 0x316E => array(0x111C), 0x316F => array(0x11DD),
2092
-                    0x3170 => array(0x11DF), 0x3171 => array(0x111D), 0x3172 => array(0x111E),
2093
-                    0x3173 => array(0x1120), 0x3174 => array(0x1122), 0x3175 => array(0x1123),
2094
-                    0x3176 => array(0x1127), 0x3177 => array(0x1129), 0x3178 => array(0x112B),
2095
-                    0x3179 => array(0x112C), 0x317A => array(0x112D), 0x317B => array(0x112E),
2096
-                    0x317C => array(0x112F), 0x317D => array(0x1132), 0x317E => array(0x1136),
2097
-                    0x317F => array(0x1140), 0x3180 => array(0x1147), 0x3181 => array(0x114C),
2098
-                    0x3182 => array(0x11F1), 0x3183 => array(0x11F2), 0x3184 => array(0x1157),
2099
-                    0x3185 => array(0x1158), 0x3186 => array(0x1159), 0x3187 => array(0x1184),
2100
-                    0x3188 => array(0x1185), 0x3189 => array(0x1188), 0x318A => array(0x1191),
2101
-                    0x318B => array(0x1192), 0x318C => array(0x1194), 0x318D => array(0x119E),
2102
-                    0x318E => array(0x11A1), 0x3192 => array(0x4E00), 0x3193 => array(0x4E8C),
2103
-                    0x3194 => array(0x4E09), 0x3195 => array(0x56DB), 0x3196 => array(0x4E0A),
2104
-                    0x3197 => array(0x4E2D), 0x3198 => array(0x4E0B), 0x3199 => array(0x7532),
2105
-                    0x319A => array(0x4E59), 0x319B => array(0x4E19), 0x319C => array(0x4E01),
2106
-                    0x319D => array(0x5929), 0x319E => array(0x5730), 0x319F => array(0x4EBA),
2107
-                    0x3244 => array(0x554F), 0x3245 => array(0x5E7C), 0x3246 => array(0x6587),
2108
-                    0x3247 => array(0x7B8F), 0x3250 => array(0x70, 0x74, 0x65), 0x3251 => array(0x32, 0x31),
2109
-                    0x3252 => array(0x32, 0x32), 0x3253 => array(0x32, 0x33), 0x3254 => array(0x32, 0x34),
2110
-                    0x3255 => array(0x32, 0x35), 0x3256 => array(0x32, 0x36), 0x3257 => array(0x32, 0x37),
2111
-                    0x3258 => array(0x32, 0x38), 0x3259 => array(0x32, 0x39), 0x325A => array(0x33, 0x30),
2112
-                    0x325B => array(0x33, 0x31), 0x325C => array(0x33, 0x32), 0x325D => array(0x33, 0x33),
2113
-                    0x325E => array(0x33, 0x34), 0x325F => array(0x33, 0x35), 0x3260 => array(0x1100),
2114
-                    0x3261 => array(0x1102), 0x3262 => array(0x1103), 0x3263 => array(0x1105),
2115
-                    0x3264 => array(0x1106), 0x3265 => array(0x1107), 0x3266 => array(0x1109),
2116
-                    0x3267 => array(0x110B), 0x3268 => array(0x110C), 0x3269 => array(0x110E),
2117
-                    0x326A => array(0x110F), 0x326B => array(0x1110), 0x326C => array(0x1111),
2118
-                    0x326D => array(0x1112), 0x326E => array(0xAC00), 0x326F => array(0xB098),
2119
-                    0x3270 => array(0xB2E4), 0x3271 => array(0xB77C), 0x3272 => array(0xB9C8),
2120
-                    0x3273 => array(0xBC14), 0x3274 => array(0xC0AC), 0x3275 => array(0xC544),
2121
-                    0x3276 => array(0xC790), 0x3277 => array(0xCC28), 0x3278 => array(0xCE74),
2122
-                    0x3279 => array(0xD0C0), 0x327A => array(0xD30C), 0x327B => array(0xD558),
2123
-                    0x327C => array(0xCC38, 0xACE0), 0x327D => array(0xC8FC, 0xC758), 0x327E => array(0xC6B0),
2124
-                    0x3280 => array(0x4E00), 0x3281 => array(0x4E8C), 0x3282 => array(0x4E09),
2125
-                    0x3283 => array(0x56DB), 0x3284 => array(0x4E94), 0x3285 => array(0x516D),
2126
-                    0x3286 => array(0x4E03), 0x3287 => array(0x516B), 0x3288 => array(0x4E5D),
2127
-                    0x3289 => array(0x5341), 0x328A => array(0x6708), 0x328B => array(0x706B),
2128
-                    0x328C => array(0x6C34), 0x328D => array(0x6728), 0x328E => array(0x91D1),
2129
-                    0x328F => array(0x571F), 0x3290 => array(0x65E5), 0x3291 => array(0x682A),
2130
-                    0x3292 => array(0x6709), 0x3293 => array(0x793E), 0x3294 => array(0x540D),
2131
-                    0x3295 => array(0x7279), 0x3296 => array(0x8CA1), 0x3297 => array(0x795D),
2132
-                    0x3298 => array(0x52B4), 0x3299 => array(0x79D8), 0x329A => array(0x7537),
2133
-                    0x329B => array(0x5973), 0x329C => array(0x9069), 0x329D => array(0x512A),
2134
-                    0x329E => array(0x5370), 0x329F => array(0x6CE8), 0x32A0 => array(0x9805),
2135
-                    0x32A1 => array(0x4F11), 0x32A2 => array(0x5199), 0x32A3 => array(0x6B63),
2136
-                    0x32A4 => array(0x4E0A), 0x32A5 => array(0x4E2D), 0x32A6 => array(0x4E0B),
2137
-                    0x32A7 => array(0x5DE6), 0x32A8 => array(0x53F3), 0x32A9 => array(0x533B),
2138
-                    0x32AA => array(0x5B97), 0x32AB => array(0x5B66), 0x32AC => array(0x76E3),
2139
-                    0x32AD => array(0x4F01), 0x32AE => array(0x8CC7), 0x32AF => array(0x5354),
2140
-                    0x32B0 => array(0x591C), 0x32B1 => array(0x33, 0x36), 0x32B2 => array(0x33, 0x37),
2141
-                    0x32B3 => array(0x33, 0x38), 0x32B4 => array(0x33, 0x39), 0x32B5 => array(0x34, 0x30),
2142
-                    0x32B6 => array(0x34, 0x31), 0x32B7 => array(0x34, 0x32), 0x32B8 => array(0x34, 0x33),
2143
-                    0x32B9 => array(0x34, 0x34), 0x32BA => array(0x34, 0x35), 0x32BB => array(0x34, 0x36),
2144
-                    0x32BC => array(0x34, 0x37), 0x32BD => array(0x34, 0x38), 0x32BE => array(0x34, 0x39),
2145
-                    0x32BF => array(0x35, 0x30), 0x32C0 => array(0x31, 0x6708), 0x32C1 => array(0x32, 0x6708),
2146
-                    0x32C2 => array(0x33, 0x6708), 0x32C3 => array(0x34, 0x6708), 0x32C4 => array(0x35, 0x6708),
2147
-                    0x32C5 => array(0x36, 0x6708), 0x32C6 => array(0x37, 0x6708), 0x32C7 => array(0x38, 0x6708),
2148
-                    0x32C8 => array(0x39, 0x6708), 0x32C9 => array(0x31, 0x30, 0x6708), 0x32CA => array(0x31, 0x31, 0x6708),
2149
-                    0x32CB => array(0x31, 0x32, 0x6708), 0x32CC => array(0x68, 0x67), 0x32CD => array(0x65, 0x72, 0x67),
2150
-                    0x32CE => array(0x65, 0x76), 0x32CF => array(0x6C, 0x74, 0x64), 0x32D0 => array(0x30A2),
2151
-                    0x32D1 => array(0x30A4), 0x32D2 => array(0x30A6), 0x32D3 => array(0x30A8),
2152
-                    0x32D4 => array(0x30AA), 0x32D5 => array(0x30AB), 0x32D6 => array(0x30AD),
2153
-                    0x32D7 => array(0x30AF), 0x32D8 => array(0x30B1), 0x32D9 => array(0x30B3),
2154
-                    0x32DA => array(0x30B5), 0x32DB => array(0x30B7), 0x32DC => array(0x30B9),
2155
-                    0x32DD => array(0x30BB), 0x32DE => array(0x30BD), 0x32DF => array(0x30BF),
2156
-                    0x32E0 => array(0x30C1), 0x32E1 => array(0x30C4), 0x32E2 => array(0x30C6),
2157
-                    0x32E3 => array(0x30C8), 0x32E4 => array(0x30CA), 0x32E5 => array(0x30CB),
2158
-                    0x32E6 => array(0x30CC), 0x32E7 => array(0x30CD), 0x32E8 => array(0x30CE),
2159
-                    0x32E9 => array(0x30CF), 0x32EA => array(0x30D2), 0x32EB => array(0x30D5),
2160
-                    0x32EC => array(0x30D8), 0x32ED => array(0x30DB), 0x32EE => array(0x30DE),
2161
-                    0x32EF => array(0x30DF), 0x32F0 => array(0x30E0), 0x32F1 => array(0x30E1),
2162
-                    0x32F2 => array(0x30E2), 0x32F3 => array(0x30E4), 0x32F4 => array(0x30E6),
2163
-                    0x32F5 => array(0x30E8), 0x32F6 => array(0x30E9), 0x32F7 => array(0x30EA),
2164
-                    0x32F8 => array(0x30EB), 0x32F9 => array(0x30EC), 0x32FA => array(0x30ED),
2165
-                    0x32FB => array(0x30EF), 0x32FC => array(0x30F0), 0x32FD => array(0x30F1),
2166
-                    0x32FE => array(0x30F2), 0x3300 => array(0x30A2, 0x30D1, 0x30FC, 0x30C8), 0x3301 => array(0x30A2, 0x30EB, 0x30D5, 0x30A1),
2167
-                    0x3302 => array(0x30A2, 0x30F3, 0x30DA, 0x30A2), 0x3303 => array(0x30A2, 0x30FC, 0x30EB), 0x3304 => array(0x30A4, 0x30CB, 0x30F3, 0x30B0),
2168
-                    0x3305 => array(0x30A4, 0x30F3, 0x30C1), 0x3306 => array(0x30A6, 0x30A9, 0x30F3), 0x3307 => array(0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C9),
2169
-                    0x3308 => array(0x30A8, 0x30FC, 0x30AB, 0x30FC), 0x3309 => array(0x30AA, 0x30F3, 0x30B9), 0x330A => array(0x30AA, 0x30FC, 0x30E0),
2170
-                    0x330B => array(0x30AB, 0x30A4, 0x30EA), 0x330C => array(0x30AB, 0x30E9, 0x30C3, 0x30C8), 0x330D => array(0x30AB, 0x30ED, 0x30EA, 0x30FC),
2171
-                    0x330E => array(0x30AC, 0x30ED, 0x30F3), 0x330F => array(0x30AC, 0x30F3, 0x30DE), 0x3310 => array(0x30AE, 0x30AC),
2172
-                    0x3311 => array(0x30AE, 0x30CB, 0x30FC), 0x3312 => array(0x30AD, 0x30E5, 0x30EA, 0x30FC), 0x3313 => array(0x30AE, 0x30EB, 0x30C0, 0x30FC),
2173
-                    0x3314 => array(0x30AD, 0x30ED), 0x3315 => array(0x30AD, 0x30ED, 0x30B0, 0x30E9, 0x30E0), 0x3316 => array(0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB),
2174
-                    0x3317 => array(0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8), 0x3318 => array(0x30B0, 0x30E9, 0x30E0), 0x3319 => array(0x30B0, 0x30E9, 0x30E0, 0x30C8, 0x30F3),
2175
-                    0x331A => array(0x30AF, 0x30EB, 0x30BC, 0x30A4, 0x30ED), 0x331B => array(0x30AF, 0x30ED, 0x30FC, 0x30CD), 0x331C => array(0x30B1, 0x30FC, 0x30B9),
2176
-                    0x331D => array(0x30B3, 0x30EB, 0x30CA), 0x331E => array(0x30B3, 0x30FC, 0x30DD), 0x331F => array(0x30B5, 0x30A4, 0x30AF, 0x30EB),
2177
-                    0x3320 => array(0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0), 0x3321 => array(0x30B7, 0x30EA, 0x30F3, 0x30B0), 0x3322 => array(0x30BB, 0x30F3, 0x30C1),
2178
-                    0x3323 => array(0x30BB, 0x30F3, 0x30C8), 0x3324 => array(0x30C0, 0x30FC, 0x30B9), 0x3325 => array(0x30C7, 0x30B7),
2179
-                    0x3326 => array(0x30C9, 0x30EB), 0x3327 => array(0x30C8, 0x30F3), 0x3328 => array(0x30CA, 0x30CE),
2180
-                    0x3329 => array(0x30CE, 0x30C3, 0x30C8), 0x332A => array(0x30CF, 0x30A4, 0x30C4), 0x332B => array(0x30D1, 0x30FC, 0x30BB, 0x30F3, 0x30C8),
2181
-                    0x332C => array(0x30D1, 0x30FC, 0x30C4), 0x332D => array(0x30D0, 0x30FC, 0x30EC, 0x30EB), 0x332E => array(0x30D4, 0x30A2, 0x30B9, 0x30C8, 0x30EB),
2182
-                    0x332F => array(0x30D4, 0x30AF, 0x30EB), 0x3330 => array(0x30D4, 0x30B3), 0x3331 => array(0x30D3, 0x30EB),
2183
-                    0x3332 => array(0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C9), 0x3333 => array(0x30D5, 0x30A3, 0x30FC, 0x30C8), 0x3334 => array(0x30D6, 0x30C3, 0x30B7, 0x30A7, 0x30EB),
2184
-                    0x3335 => array(0x30D5, 0x30E9, 0x30F3), 0x3336 => array(0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB), 0x3337 => array(0x30DA, 0x30BD),
2185
-                    0x3338 => array(0x30DA, 0x30CB, 0x30D2), 0x3339 => array(0x30D8, 0x30EB, 0x30C4), 0x333A => array(0x30DA, 0x30F3, 0x30B9),
2186
-                    0x333B => array(0x30DA, 0x30FC, 0x30B8), 0x333C => array(0x30D9, 0x30FC, 0x30BF), 0x333D => array(0x30DD, 0x30A4, 0x30F3, 0x30C8),
2187
-                    0x333E => array(0x30DC, 0x30EB, 0x30C8), 0x333F => array(0x30DB, 0x30F3), 0x3340 => array(0x30DD, 0x30F3, 0x30C9),
2188
-                    0x3341 => array(0x30DB, 0x30FC, 0x30EB), 0x3342 => array(0x30DB, 0x30FC, 0x30F3), 0x3343 => array(0x30DE, 0x30A4, 0x30AF, 0x30ED),
2189
-                    0x3344 => array(0x30DE, 0x30A4, 0x30EB), 0x3345 => array(0x30DE, 0x30C3, 0x30CF), 0x3346 => array(0x30DE, 0x30EB, 0x30AF),
2190
-                    0x3347 => array(0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3), 0x3348 => array(0x30DF, 0x30AF, 0x30ED, 0x30F3), 0x3349 => array(0x30DF, 0x30EA),
2191
-                    0x334A => array(0x30DF, 0x30EA, 0x30D0, 0x30FC, 0x30EB), 0x334B => array(0x30E1, 0x30AC), 0x334C => array(0x30E1, 0x30AC, 0x30C8, 0x30F3),
2192
-                    0x334D => array(0x30E1, 0x30FC, 0x30C8, 0x30EB), 0x334E => array(0x30E4, 0x30FC, 0x30C9), 0x334F => array(0x30E4, 0x30FC, 0x30EB),
2193
-                    0x3350 => array(0x30E6, 0x30A2, 0x30F3), 0x3351 => array(0x30EA, 0x30C3, 0x30C8, 0x30EB), 0x3352 => array(0x30EA, 0x30E9),
2194
-                    0x3353 => array(0x30EB, 0x30D4, 0x30FC), 0x3354 => array(0x30EB, 0x30FC, 0x30D6, 0x30EB), 0x3355 => array(0x30EC, 0x30E0),
2195
-                    0x3356 => array(0x30EC, 0x30F3, 0x30C8, 0x30B2, 0x30F3), 0x3357 => array(0x30EF, 0x30C3, 0x30C8), 0x3358 => array(0x30, 0x70B9),
2196
-                    0x3359 => array(0x31, 0x70B9), 0x335A => array(0x32, 0x70B9), 0x335B => array(0x33, 0x70B9),
2197
-                    0x335C => array(0x34, 0x70B9), 0x335D => array(0x35, 0x70B9), 0x335E => array(0x36, 0x70B9),
2198
-                    0x335F => array(0x37, 0x70B9), 0x3360 => array(0x38, 0x70B9), 0x3361 => array(0x39, 0x70B9),
2199
-                    0x3362 => array(0x31, 0x30, 0x70B9), 0x3363 => array(0x31, 0x31, 0x70B9), 0x3364 => array(0x31, 0x32, 0x70B9),
2200
-                    0x3365 => array(0x31, 0x33, 0x70B9), 0x3366 => array(0x31, 0x34, 0x70B9), 0x3367 => array(0x31, 0x35, 0x70B9),
2201
-                    0x3368 => array(0x31, 0x36, 0x70B9), 0x3369 => array(0x31, 0x37, 0x70B9), 0x336A => array(0x31, 0x38, 0x70B9),
2202
-                    0x336B => array(0x31, 0x39, 0x70B9), 0x336C => array(0x32, 0x30, 0x70B9), 0x336D => array(0x32, 0x31, 0x70B9),
2203
-                    0x336E => array(0x32, 0x32, 0x70B9), 0x336F => array(0x32, 0x33, 0x70B9), 0x3370 => array(0x32, 0x34, 0x70B9),
2204
-                    0x3371 => array(0x68, 0x70, 0x61), 0x3372 => array(0x64, 0x61), 0x3373 => array(0x61, 0x75),
2205
-                    0x3374 => array(0x62, 0x61, 0x72), 0x3375 => array(0x6F, 0x76), 0x3376 => array(0x70, 0x63),
2206
-                    0x3377 => array(0x64, 0x6D), 0x3378 => array(0x64, 0x6D, 0x32), 0x3379 => array(0x64, 0x6D, 0x33),
2207
-                    0x337A => array(0x69, 0x75), 0x337B => array(0x5E73, 0x6210), 0x337C => array(0x662D, 0x548C),
2208
-                    0x337D => array(0x5927, 0x6B63), 0x337E => array(0x660E, 0x6CBB), 0x337F => array(0x682A, 0x5F0F, 0x4F1A, 0x793E),
2209
-                    0x3380 => array(0x70, 0x61), 0x3381 => array(0x6E, 0x61), 0x3382 => array(0x3BC, 0x61),
2210
-                    0x3383 => array(0x6D, 0x61), 0x3384 => array(0x6B, 0x61), 0x3385 => array(0x6B, 0x62),
2211
-                    0x3386 => array(0x6D, 0x62), 0x3387 => array(0x67, 0x62), 0x3388 => array(0x63, 0x61, 0x6C),
2212
-                    0x3389 => array(0x6B, 0x63, 0x61, 0x6C), 0x338A => array(0x70, 0x66), 0x338B => array(0x6E, 0x66),
2213
-                    0x338C => array(0x3BC, 0x66), 0x338D => array(0x3BC, 0x67), 0x338E => array(0x6D, 0x67),
2214
-                    0x338F => array(0x6B, 0x67), 0x3390 => array(0x68, 0x7A), 0x3391 => array(0x6B, 0x68, 0x7A),
2215
-                    0x3392 => array(0x6D, 0x68, 0x7A), 0x3393 => array(0x67, 0x68, 0x7A), 0x3394 => array(0x74, 0x68, 0x7A),
2216
-                    0x3395 => array(0x3BC, 0x6C), 0x3396 => array(0x6D, 0x6C), 0x3397 => array(0x64, 0x6C),
2217
-                    0x3398 => array(0x6B, 0x6C), 0x3399 => array(0x66, 0x6D), 0x339A => array(0x6E, 0x6D),
2218
-                    0x339B => array(0x3BC, 0x6D), 0x339C => array(0x6D, 0x6D), 0x339D => array(0x63, 0x6D),
2219
-                    0x339E => array(0x6B, 0x6D), 0x339F => array(0x6D, 0x6D, 0x32), 0x33A0 => array(0x63, 0x6D, 0x32),
2220
-                    0x33A1 => array(0x6D, 0x32), 0x33A2 => array(0x6B, 0x6D, 0x32), 0x33A3 => array(0x6D, 0x6D, 0x33),
2221
-                    0x33A4 => array(0x63, 0x6D, 0x33), 0x33A5 => array(0x6D, 0x33), 0x33A6 => array(0x6B, 0x6D, 0x33),
2222
-                    0x33A7 => array(0x6D, 0x2215, 0x73), 0x33A8 => array(0x6D, 0x2215, 0x73, 0x32), 0x33A9 => array(0x70, 0x61),
2223
-                    0x33AA => array(0x6B, 0x70, 0x61), 0x33AB => array(0x6D, 0x70, 0x61), 0x33AC => array(0x67, 0x70, 0x61),
2224
-                    0x33AD => array(0x72, 0x61, 0x64), 0x33AE => array(0x72, 0x61, 0x64, 0x2215, 0x73), 0x33AF => array(0x72, 0x61, 0x64, 0x2215, 0x73, 0x32),
2225
-                    0x33B0 => array(0x70, 0x73), 0x33B1 => array(0x6E, 0x73), 0x33B2 => array(0x3BC, 0x73),
2226
-                    0x33B3 => array(0x6D, 0x73), 0x33B4 => array(0x70, 0x76), 0x33B5 => array(0x6E, 0x76),
2227
-                    0x33B6 => array(0x3BC, 0x76), 0x33B7 => array(0x6D, 0x76), 0x33B8 => array(0x6B, 0x76),
2228
-                    0x33B9 => array(0x6D, 0x76), 0x33BA => array(0x70, 0x77), 0x33BB => array(0x6E, 0x77),
2229
-                    0x33BC => array(0x3BC, 0x77), 0x33BD => array(0x6D, 0x77), 0x33BE => array(0x6B, 0x77),
2230
-                    0x33BF => array(0x6D, 0x77), 0x33C0 => array(0x6B, 0x3C9), 0x33C1 => array(0x6D, 0x3C9),
2231
-                    0x33C3 => array(0x62, 0x71), 0x33C4 => array(0x63, 0x63), 0x33C5 => array(0x63, 0x64),
2232
-                    0x33C6 => array(0x63, 0x2215, 0x6B, 0x67), 0x33C8 => array(0x64, 0x62), 0x33C9 => array(0x67, 0x79),
2233
-                    0x33CA => array(0x68, 0x61), 0x33CB => array(0x68, 0x70), 0x33CC => array(0x69, 0x6E),
2234
-                    0x33CD => array(0x6B, 0x6B), 0x33CE => array(0x6B, 0x6D), 0x33CF => array(0x6B, 0x74),
2235
-                    0x33D0 => array(0x6C, 0x6D), 0x33D1 => array(0x6C, 0x6E), 0x33D2 => array(0x6C, 0x6F, 0x67),
2236
-                    0x33D3 => array(0x6C, 0x78), 0x33D4 => array(0x6D, 0x62), 0x33D5 => array(0x6D, 0x69, 0x6C),
2237
-                    0x33D6 => array(0x6D, 0x6F, 0x6C), 0x33D7 => array(0x70, 0x68), 0x33D9 => array(0x70, 0x70, 0x6D),
2238
-                    0x33DA => array(0x70, 0x72), 0x33DB => array(0x73, 0x72), 0x33DC => array(0x73, 0x76),
2239
-                    0x33DD => array(0x77, 0x62), 0x33DE => array(0x76, 0x2215, 0x6D), 0x33DF => array(0x61, 0x2215, 0x6D),
2240
-                    0x33E0 => array(0x31, 0x65E5), 0x33E1 => array(0x32, 0x65E5), 0x33E2 => array(0x33, 0x65E5),
2241
-                    0x33E3 => array(0x34, 0x65E5), 0x33E4 => array(0x35, 0x65E5), 0x33E5 => array(0x36, 0x65E5),
2242
-                    0x33E6 => array(0x37, 0x65E5), 0x33E7 => array(0x38, 0x65E5), 0x33E8 => array(0x39, 0x65E5),
2243
-                    0x33E9 => array(0x31, 0x30, 0x65E5), 0x33EA => array(0x31, 0x31, 0x65E5), 0x33EB => array(0x31, 0x32, 0x65E5),
2244
-                    0x33EC => array(0x31, 0x33, 0x65E5), 0x33ED => array(0x31, 0x34, 0x65E5), 0x33EE => array(0x31, 0x35, 0x65E5),
2245
-                    0x33EF => array(0x31, 0x36, 0x65E5), 0x33F0 => array(0x31, 0x37, 0x65E5), 0x33F1 => array(0x31, 0x38, 0x65E5),
2246
-                    0x33F2 => array(0x31, 0x39, 0x65E5), 0x33F3 => array(0x32, 0x30, 0x65E5), 0x33F4 => array(0x32, 0x31, 0x65E5),
2247
-                    0x33F5 => array(0x32, 0x32, 0x65E5), 0x33F6 => array(0x32, 0x33, 0x65E5), 0x33F7 => array(0x32, 0x34, 0x65E5),
2248
-                    0x33F8 => array(0x32, 0x35, 0x65E5), 0x33F9 => array(0x32, 0x36, 0x65E5), 0x33FA => array(0x32, 0x37, 0x65E5),
2249
-                    0x33FB => array(0x32, 0x38, 0x65E5), 0x33FC => array(0x32, 0x39, 0x65E5), 0x33FD => array(0x33, 0x30, 0x65E5),
2250
-                    0x33FE => array(0x33, 0x31, 0x65E5), 0x33FF => array(0x67, 0x61, 0x6C), 0xA640 => array(0xA641),
2251
-                    0xA642 => array(0xA643), 0xA644 => array(0xA645), 0xA646 => array(0xA647),
2252
-                    0xA648 => array(0xA649), 0xA64A => array(0xA64B), 0xA64C => array(0xA64D),
2253
-                    0xA64E => array(0xA64F), 0xA650 => array(0xA651), 0xA652 => array(0xA653),
2254
-                    0xA654 => array(0xA655), 0xA656 => array(0xA657), 0xA658 => array(0xA659),
2255
-                    0xA65A => array(0xA65B), 0xA65C => array(0xA65D), 0xA65E => array(0xA65F),
2256
-                    0xA660 => array(0xA661), 0xA662 => array(0xA663), 0xA664 => array(0xA665),
2257
-                    0xA666 => array(0xA667), 0xA668 => array(0xA669), 0xA66A => array(0xA66B),
2258
-                    0xA66C => array(0xA66D), 0xA680 => array(0xA681), 0xA682 => array(0xA683),
2259
-                    0xA684 => array(0xA685), 0xA686 => array(0xA687), 0xA688 => array(0xA689),
2260
-                    0xA68A => array(0xA68B), 0xA68C => array(0xA68D), 0xA68E => array(0xA68F),
2261
-                    0xA690 => array(0xA691), 0xA692 => array(0xA693), 0xA694 => array(0xA695),
2262
-                    0xA696 => array(0xA697), 0xA698 => array(0xA699), 0xA69A => array(0xA69B),
2263
-                    0xA69C => array(0x44A), 0xA69D => array(0x44C), 0xA722 => array(0xA723),
2264
-                    0xA724 => array(0xA725), 0xA726 => array(0xA727), 0xA728 => array(0xA729),
2265
-                    0xA72A => array(0xA72B), 0xA72C => array(0xA72D), 0xA72E => array(0xA72F),
2266
-                    0xA732 => array(0xA733), 0xA734 => array(0xA735), 0xA736 => array(0xA737),
2267
-                    0xA738 => array(0xA739), 0xA73A => array(0xA73B), 0xA73C => array(0xA73D),
2268
-                    0xA73E => array(0xA73F), 0xA740 => array(0xA741), 0xA742 => array(0xA743),
2269
-                    0xA744 => array(0xA745), 0xA746 => array(0xA747), 0xA748 => array(0xA749),
2270
-                    0xA74A => array(0xA74B), 0xA74C => array(0xA74D), 0xA74E => array(0xA74F),
2271
-                    0xA750 => array(0xA751), 0xA752 => array(0xA753), 0xA754 => array(0xA755),
2272
-                    0xA756 => array(0xA757), 0xA758 => array(0xA759), 0xA75A => array(0xA75B),
2273
-                    0xA75C => array(0xA75D), 0xA75E => array(0xA75F), 0xA760 => array(0xA761),
2274
-                    0xA762 => array(0xA763), 0xA764 => array(0xA765), 0xA766 => array(0xA767),
2275
-                    0xA768 => array(0xA769), 0xA76A => array(0xA76B), 0xA76C => array(0xA76D),
2276
-                    0xA76E => array(0xA76F), 0xA770 => array(0xA76F), 0xA779 => array(0xA77A),
2277
-                    0xA77B => array(0xA77C), 0xA77D => array(0x1D79), 0xA77E => array(0xA77F),
2278
-                    0xA780 => array(0xA781), 0xA782 => array(0xA783), 0xA784 => array(0xA785),
2279
-                    0xA786 => array(0xA787), 0xA78B => array(0xA78C), 0xA78D => array(0x265),
2280
-                    0xA790 => array(0xA791), 0xA792 => array(0xA793), 0xA796 => array(0xA797),
2281
-                    0xA798 => array(0xA799), 0xA79A => array(0xA79B), 0xA79C => array(0xA79D),
2282
-                    0xA79E => array(0xA79F), 0xA7A0 => array(0xA7A1), 0xA7A2 => array(0xA7A3),
2283
-                    0xA7A4 => array(0xA7A5), 0xA7A6 => array(0xA7A7), 0xA7A8 => array(0xA7A9),
2284
-                    0xA7AA => array(0x266), 0xA7AB => array(0x25C), 0xA7AC => array(0x261),
2285
-                    0xA7AD => array(0x26C), 0xA7B0 => array(0x29E), 0xA7B1 => array(0x287),
2286
-                    0xA7F8 => array(0x127), 0xA7F9 => array(0x153), 0xAB5C => array(0xA727),
2287
-                    0xAB5D => array(0xAB37), 0xAB5E => array(0x26B), 0xAB5F => array(0xAB52),
2288
-                    0xF900 => array(0x8C48), 0xF901 => array(0x66F4), 0xF902 => array(0x8ECA),
2289
-                    0xF903 => array(0x8CC8), 0xF904 => array(0x6ED1), 0xF905 => array(0x4E32),
2290
-                    0xF906 => array(0x53E5), 0xF907 => array(0x9F9C), 0xF908 => array(0x9F9C),
2291
-                    0xF909 => array(0x5951), 0xF90A => array(0x91D1), 0xF90B => array(0x5587),
2292
-                    0xF90C => array(0x5948), 0xF90D => array(0x61F6), 0xF90E => array(0x7669),
2293
-                    0xF90F => array(0x7F85), 0xF910 => array(0x863F), 0xF911 => array(0x87BA),
2294
-                    0xF912 => array(0x88F8), 0xF913 => array(0x908F), 0xF914 => array(0x6A02),
2295
-                    0xF915 => array(0x6D1B), 0xF916 => array(0x70D9), 0xF917 => array(0x73DE),
2296
-                    0xF918 => array(0x843D), 0xF919 => array(0x916A), 0xF91A => array(0x99F1),
2297
-                    0xF91B => array(0x4E82), 0xF91C => array(0x5375), 0xF91D => array(0x6B04),
2298
-                    0xF91E => array(0x721B), 0xF91F => array(0x862D), 0xF920 => array(0x9E1E),
2299
-                    0xF921 => array(0x5D50), 0xF922 => array(0x6FEB), 0xF923 => array(0x85CD),
2300
-                    0xF924 => array(0x8964), 0xF925 => array(0x62C9), 0xF926 => array(0x81D8),
2301
-                    0xF927 => array(0x881F), 0xF928 => array(0x5ECA), 0xF929 => array(0x6717),
2302
-                    0xF92A => array(0x6D6A), 0xF92B => array(0x72FC), 0xF92C => array(0x90CE),
2303
-                    0xF92D => array(0x4F86), 0xF92E => array(0x51B7), 0xF92F => array(0x52DE),
2304
-                    0xF930 => array(0x64C4), 0xF931 => array(0x6AD3), 0xF932 => array(0x7210),
2305
-                    0xF933 => array(0x76E7), 0xF934 => array(0x8001), 0xF935 => array(0x8606),
2306
-                    0xF936 => array(0x865C), 0xF937 => array(0x8DEF), 0xF938 => array(0x9732),
2307
-                    0xF939 => array(0x9B6F), 0xF93A => array(0x9DFA), 0xF93B => array(0x788C),
2308
-                    0xF93C => array(0x797F), 0xF93D => array(0x7DA0), 0xF93E => array(0x83C9),
2309
-                    0xF93F => array(0x9304), 0xF940 => array(0x9E7F), 0xF941 => array(0x8AD6),
2310
-                    0xF942 => array(0x58DF), 0xF943 => array(0x5F04), 0xF944 => array(0x7C60),
2311
-                    0xF945 => array(0x807E), 0xF946 => array(0x7262), 0xF947 => array(0x78CA),
2312
-                    0xF948 => array(0x8CC2), 0xF949 => array(0x96F7), 0xF94A => array(0x58D8),
2313
-                    0xF94B => array(0x5C62), 0xF94C => array(0x6A13), 0xF94D => array(0x6DDA),
2314
-                    0xF94E => array(0x6F0F), 0xF94F => array(0x7D2F), 0xF950 => array(0x7E37),
2315
-                    0xF951 => array(0x964B), 0xF952 => array(0x52D2), 0xF953 => array(0x808B),
2316
-                    0xF954 => array(0x51DC), 0xF955 => array(0x51CC), 0xF956 => array(0x7A1C),
2317
-                    0xF957 => array(0x7DBE), 0xF958 => array(0x83F1), 0xF959 => array(0x9675),
2318
-                    0xF95A => array(0x8B80), 0xF95B => array(0x62CF), 0xF95C => array(0x6A02),
2319
-                    0xF95D => array(0x8AFE), 0xF95E => array(0x4E39), 0xF95F => array(0x5BE7),
2320
-                    0xF960 => array(0x6012), 0xF961 => array(0x7387), 0xF962 => array(0x7570),
2321
-                    0xF963 => array(0x5317), 0xF964 => array(0x78FB), 0xF965 => array(0x4FBF),
2322
-                    0xF966 => array(0x5FA9), 0xF967 => array(0x4E0D), 0xF968 => array(0x6CCC),
2323
-                    0xF969 => array(0x6578), 0xF96A => array(0x7D22), 0xF96B => array(0x53C3),
2324
-                    0xF96C => array(0x585E), 0xF96D => array(0x7701), 0xF96E => array(0x8449),
2325
-                    0xF96F => array(0x8AAA), 0xF970 => array(0x6BBA), 0xF971 => array(0x8FB0),
2326
-                    0xF972 => array(0x6C88), 0xF973 => array(0x62FE), 0xF974 => array(0x82E5),
2327
-                    0xF975 => array(0x63A0), 0xF976 => array(0x7565), 0xF977 => array(0x4EAE),
2328
-                    0xF978 => array(0x5169), 0xF979 => array(0x51C9), 0xF97A => array(0x6881),
2329
-                    0xF97B => array(0x7CE7), 0xF97C => array(0x826F), 0xF97D => array(0x8AD2),
2330
-                    0xF97E => array(0x91CF), 0xF97F => array(0x52F5), 0xF980 => array(0x5442),
2331
-                    0xF981 => array(0x5973), 0xF982 => array(0x5EEC), 0xF983 => array(0x65C5),
2332
-                    0xF984 => array(0x6FFE), 0xF985 => array(0x792A), 0xF986 => array(0x95AD),
2333
-                    0xF987 => array(0x9A6A), 0xF988 => array(0x9E97), 0xF989 => array(0x9ECE),
2334
-                    0xF98A => array(0x529B), 0xF98B => array(0x66C6), 0xF98C => array(0x6B77),
2335
-                    0xF98D => array(0x8F62), 0xF98E => array(0x5E74), 0xF98F => array(0x6190),
2336
-                    0xF990 => array(0x6200), 0xF991 => array(0x649A), 0xF992 => array(0x6F23),
2337
-                    0xF993 => array(0x7149), 0xF994 => array(0x7489), 0xF995 => array(0x79CA),
2338
-                    0xF996 => array(0x7DF4), 0xF997 => array(0x806F), 0xF998 => array(0x8F26),
2339
-                    0xF999 => array(0x84EE), 0xF99A => array(0x9023), 0xF99B => array(0x934A),
2340
-                    0xF99C => array(0x5217), 0xF99D => array(0x52A3), 0xF99E => array(0x54BD),
2341
-                    0xF99F => array(0x70C8), 0xF9A0 => array(0x88C2), 0xF9A1 => array(0x8AAA),
2342
-                    0xF9A2 => array(0x5EC9), 0xF9A3 => array(0x5FF5), 0xF9A4 => array(0x637B),
2343
-                    0xF9A5 => array(0x6BAE), 0xF9A6 => array(0x7C3E), 0xF9A7 => array(0x7375),
2344
-                    0xF9A8 => array(0x4EE4), 0xF9A9 => array(0x56F9), 0xF9AA => array(0x5BE7),
2345
-                    0xF9AB => array(0x5DBA), 0xF9AC => array(0x601C), 0xF9AD => array(0x73B2),
2346
-                    0xF9AE => array(0x7469), 0xF9AF => array(0x7F9A), 0xF9B0 => array(0x8046),
2347
-                    0xF9B1 => array(0x9234), 0xF9B2 => array(0x96F6), 0xF9B3 => array(0x9748),
2348
-                    0xF9B4 => array(0x9818), 0xF9B5 => array(0x4F8B), 0xF9B6 => array(0x79AE),
2349
-                    0xF9B7 => array(0x91B4), 0xF9B8 => array(0x96B8), 0xF9B9 => array(0x60E1),
2350
-                    0xF9BA => array(0x4E86), 0xF9BB => array(0x50DA), 0xF9BC => array(0x5BEE),
2351
-                    0xF9BD => array(0x5C3F), 0xF9BE => array(0x6599), 0xF9BF => array(0x6A02),
2352
-                    0xF9C0 => array(0x71CE), 0xF9C1 => array(0x7642), 0xF9C2 => array(0x84FC),
2353
-                    0xF9C3 => array(0x907C), 0xF9C4 => array(0x9F8D), 0xF9C5 => array(0x6688),
2354
-                    0xF9C6 => array(0x962E), 0xF9C7 => array(0x5289), 0xF9C8 => array(0x677B),
2355
-                    0xF9C9 => array(0x67F3), 0xF9CA => array(0x6D41), 0xF9CB => array(0x6E9C),
2356
-                    0xF9CC => array(0x7409), 0xF9CD => array(0x7559), 0xF9CE => array(0x786B),
2357
-                    0xF9CF => array(0x7D10), 0xF9D0 => array(0x985E), 0xF9D1 => array(0x516D),
2358
-                    0xF9D2 => array(0x622E), 0xF9D3 => array(0x9678), 0xF9D4 => array(0x502B),
2359
-                    0xF9D5 => array(0x5D19), 0xF9D6 => array(0x6DEA), 0xF9D7 => array(0x8F2A),
2360
-                    0xF9D8 => array(0x5F8B), 0xF9D9 => array(0x6144), 0xF9DA => array(0x6817),
2361
-                    0xF9DB => array(0x7387), 0xF9DC => array(0x9686), 0xF9DD => array(0x5229),
2362
-                    0xF9DE => array(0x540F), 0xF9DF => array(0x5C65), 0xF9E0 => array(0x6613),
2363
-                    0xF9E1 => array(0x674E), 0xF9E2 => array(0x68A8), 0xF9E3 => array(0x6CE5),
2364
-                    0xF9E4 => array(0x7406), 0xF9E5 => array(0x75E2), 0xF9E6 => array(0x7F79),
2365
-                    0xF9E7 => array(0x88CF), 0xF9E8 => array(0x88E1), 0xF9E9 => array(0x91CC),
2366
-                    0xF9EA => array(0x96E2), 0xF9EB => array(0x533F), 0xF9EC => array(0x6EBA),
2367
-                    0xF9ED => array(0x541D), 0xF9EE => array(0x71D0), 0xF9EF => array(0x7498),
2368
-                    0xF9F0 => array(0x85FA), 0xF9F1 => array(0x96A3), 0xF9F2 => array(0x9C57),
2369
-                    0xF9F3 => array(0x9E9F), 0xF9F4 => array(0x6797), 0xF9F5 => array(0x6DCB),
2370
-                    0xF9F6 => array(0x81E8), 0xF9F7 => array(0x7ACB), 0xF9F8 => array(0x7B20),
2371
-                    0xF9F9 => array(0x7C92), 0xF9FA => array(0x72C0), 0xF9FB => array(0x7099),
2372
-                    0xF9FC => array(0x8B58), 0xF9FD => array(0x4EC0), 0xF9FE => array(0x8336),
2373
-                    0xF9FF => array(0x523A), 0xFA00 => array(0x5207), 0xFA01 => array(0x5EA6),
2374
-                    0xFA02 => array(0x62D3), 0xFA03 => array(0x7CD6), 0xFA04 => array(0x5B85),
2375
-                    0xFA05 => array(0x6D1E), 0xFA06 => array(0x66B4), 0xFA07 => array(0x8F3B),
2376
-                    0xFA08 => array(0x884C), 0xFA09 => array(0x964D), 0xFA0A => array(0x898B),
2377
-                    0xFA0B => array(0x5ED3), 0xFA0C => array(0x5140), 0xFA0D => array(0x55C0),
2378
-                    0xFA10 => array(0x585A), 0xFA12 => array(0x6674), 0xFA15 => array(0x51DE),
2379
-                    0xFA16 => array(0x732A), 0xFA17 => array(0x76CA), 0xFA18 => array(0x793C),
2380
-                    0xFA19 => array(0x795E), 0xFA1A => array(0x7965), 0xFA1B => array(0x798F),
2381
-                    0xFA1C => array(0x9756), 0xFA1D => array(0x7CBE), 0xFA1E => array(0x7FBD),
2382
-                    0xFA20 => array(0x8612), 0xFA22 => array(0x8AF8), 0xFA25 => array(0x9038),
2383
-                    0xFA26 => array(0x90FD), 0xFA2A => array(0x98EF), 0xFA2B => array(0x98FC),
2384
-                    0xFA2C => array(0x9928), 0xFA2D => array(0x9DB4), 0xFA2E => array(0x90DE),
2385
-                    0xFA2F => array(0x96B7), 0xFA30 => array(0x4FAE), 0xFA31 => array(0x50E7),
2386
-                    0xFA32 => array(0x514D), 0xFA33 => array(0x52C9), 0xFA34 => array(0x52E4),
2387
-                    0xFA35 => array(0x5351), 0xFA36 => array(0x559D), 0xFA37 => array(0x5606),
2388
-                    0xFA38 => array(0x5668), 0xFA39 => array(0x5840), 0xFA3A => array(0x58A8),
2389
-                    0xFA3B => array(0x5C64), 0xFA3C => array(0x5C6E), 0xFA3D => array(0x6094),
2390
-                    0xFA3E => array(0x6168), 0xFA3F => array(0x618E), 0xFA40 => array(0x61F2),
2391
-                    0xFA41 => array(0x654F), 0xFA42 => array(0x65E2), 0xFA43 => array(0x6691),
2392
-                    0xFA44 => array(0x6885), 0xFA45 => array(0x6D77), 0xFA46 => array(0x6E1A),
2393
-                    0xFA47 => array(0x6F22), 0xFA48 => array(0x716E), 0xFA49 => array(0x722B),
2394
-                    0xFA4A => array(0x7422), 0xFA4B => array(0x7891), 0xFA4C => array(0x793E),
2395
-                    0xFA4D => array(0x7949), 0xFA4E => array(0x7948), 0xFA4F => array(0x7950),
2396
-                    0xFA50 => array(0x7956), 0xFA51 => array(0x795D), 0xFA52 => array(0x798D),
2397
-                    0xFA53 => array(0x798E), 0xFA54 => array(0x7A40), 0xFA55 => array(0x7A81),
2398
-                    0xFA56 => array(0x7BC0), 0xFA57 => array(0x7DF4), 0xFA58 => array(0x7E09),
2399
-                    0xFA59 => array(0x7E41), 0xFA5A => array(0x7F72), 0xFA5B => array(0x8005),
2400
-                    0xFA5C => array(0x81ED), 0xFA5D => array(0x8279), 0xFA5E => array(0x8279),
2401
-                    0xFA5F => array(0x8457), 0xFA60 => array(0x8910), 0xFA61 => array(0x8996),
2402
-                    0xFA62 => array(0x8B01), 0xFA63 => array(0x8B39), 0xFA64 => array(0x8CD3),
2403
-                    0xFA65 => array(0x8D08), 0xFA66 => array(0x8FB6), 0xFA67 => array(0x9038),
2404
-                    0xFA68 => array(0x96E3), 0xFA69 => array(0x97FF), 0xFA6A => array(0x983B),
2405
-                    0xFA6B => array(0x6075), 0xFA6C => array(0x242EE), 0xFA6D => array(0x8218),
2406
-                    0xFA70 => array(0x4E26), 0xFA71 => array(0x51B5), 0xFA72 => array(0x5168),
2407
-                    0xFA73 => array(0x4F80), 0xFA74 => array(0x5145), 0xFA75 => array(0x5180),
2408
-                    0xFA76 => array(0x52C7), 0xFA77 => array(0x52FA), 0xFA78 => array(0x559D),
2409
-                    0xFA79 => array(0x5555), 0xFA7A => array(0x5599), 0xFA7B => array(0x55E2),
2410
-                    0xFA7C => array(0x585A), 0xFA7D => array(0x58B3), 0xFA7E => array(0x5944),
2411
-                    0xFA7F => array(0x5954), 0xFA80 => array(0x5A62), 0xFA81 => array(0x5B28),
2412
-                    0xFA82 => array(0x5ED2), 0xFA83 => array(0x5ED9), 0xFA84 => array(0x5F69),
2413
-                    0xFA85 => array(0x5FAD), 0xFA86 => array(0x60D8), 0xFA87 => array(0x614E),
2414
-                    0xFA88 => array(0x6108), 0xFA89 => array(0x618E), 0xFA8A => array(0x6160),
2415
-                    0xFA8B => array(0x61F2), 0xFA8C => array(0x6234), 0xFA8D => array(0x63C4),
2416
-                    0xFA8E => array(0x641C), 0xFA8F => array(0x6452), 0xFA90 => array(0x6556),
2417
-                    0xFA91 => array(0x6674), 0xFA92 => array(0x6717), 0xFA93 => array(0x671B),
2418
-                    0xFA94 => array(0x6756), 0xFA95 => array(0x6B79), 0xFA96 => array(0x6BBA),
2419
-                    0xFA97 => array(0x6D41), 0xFA98 => array(0x6EDB), 0xFA99 => array(0x6ECB),
2420
-                    0xFA9A => array(0x6F22), 0xFA9B => array(0x701E), 0xFA9C => array(0x716E),
2421
-                    0xFA9D => array(0x77A7), 0xFA9E => array(0x7235), 0xFA9F => array(0x72AF),
2422
-                    0xFAA0 => array(0x732A), 0xFAA1 => array(0x7471), 0xFAA2 => array(0x7506),
2423
-                    0xFAA3 => array(0x753B), 0xFAA4 => array(0x761D), 0xFAA5 => array(0x761F),
2424
-                    0xFAA6 => array(0x76CA), 0xFAA7 => array(0x76DB), 0xFAA8 => array(0x76F4),
2425
-                    0xFAA9 => array(0x774A), 0xFAAA => array(0x7740), 0xFAAB => array(0x78CC),
2426
-                    0xFAAC => array(0x7AB1), 0xFAAD => array(0x7BC0), 0xFAAE => array(0x7C7B),
2427
-                    0xFAAF => array(0x7D5B), 0xFAB0 => array(0x7DF4), 0xFAB1 => array(0x7F3E),
2428
-                    0xFAB2 => array(0x8005), 0xFAB3 => array(0x8352), 0xFAB4 => array(0x83EF),
2429
-                    0xFAB5 => array(0x8779), 0xFAB6 => array(0x8941), 0xFAB7 => array(0x8986),
2430
-                    0xFAB8 => array(0x8996), 0xFAB9 => array(0x8ABF), 0xFABA => array(0x8AF8),
2431
-                    0xFABB => array(0x8ACB), 0xFABC => array(0x8B01), 0xFABD => array(0x8AFE),
2432
-                    0xFABE => array(0x8AED), 0xFABF => array(0x8B39), 0xFAC0 => array(0x8B8A),
2433
-                    0xFAC1 => array(0x8D08), 0xFAC2 => array(0x8F38), 0xFAC3 => array(0x9072),
2434
-                    0xFAC4 => array(0x9199), 0xFAC5 => array(0x9276), 0xFAC6 => array(0x967C),
2435
-                    0xFAC7 => array(0x96E3), 0xFAC8 => array(0x9756), 0xFAC9 => array(0x97DB),
2436
-                    0xFACA => array(0x97FF), 0xFACB => array(0x980B), 0xFACC => array(0x983B),
2437
-                    0xFACD => array(0x9B12), 0xFACE => array(0x9F9C), 0xFACF => array(0x2284A),
2438
-                    0xFAD0 => array(0x22844), 0xFAD1 => array(0x233D5), 0xFAD2 => array(0x3B9D),
2439
-                    0xFAD3 => array(0x4018), 0xFAD4 => array(0x4039), 0xFAD5 => array(0x25249),
2440
-                    0xFAD6 => array(0x25CD0), 0xFAD7 => array(0x27ED3), 0xFAD8 => array(0x9F43),
2441
-                    0xFAD9 => array(0x9F8E), 0xFB00 => array(0x66, 0x66), 0xFB01 => array(0x66, 0x69),
2442
-                    0xFB02 => array(0x66, 0x6C), 0xFB03 => array(0x66, 0x66, 0x69), 0xFB04 => array(0x66, 0x66, 0x6C),
2443
-                    0xFB05 => array(0x73, 0x74), 0xFB06 => array(0x73, 0x74), 0xFB13 => array(0x574, 0x576),
2444
-                    0xFB14 => array(0x574, 0x565), 0xFB15 => array(0x574, 0x56B), 0xFB16 => array(0x57E, 0x576),
2445
-                    0xFB17 => array(0x574, 0x56D), 0xFB1D => array(0x5D9, 0x5B4), 0xFB1F => array(0x5F2, 0x5B7),
2446
-                    0xFB20 => array(0x5E2), 0xFB21 => array(0x5D0), 0xFB22 => array(0x5D3),
2447
-                    0xFB23 => array(0x5D4), 0xFB24 => array(0x5DB), 0xFB25 => array(0x5DC),
2448
-                    0xFB26 => array(0x5DD), 0xFB27 => array(0x5E8), 0xFB28 => array(0x5EA),
2449
-                    0xFB2A => array(0x5E9, 0x5C1), 0xFB2B => array(0x5E9, 0x5C2), 0xFB2C => array(0x5E9, 0x5BC, 0x5C1),
2450
-                    0xFB2D => array(0x5E9, 0x5BC, 0x5C2), 0xFB2E => array(0x5D0, 0x5B7), 0xFB2F => array(0x5D0, 0x5B8),
2451
-                    0xFB30 => array(0x5D0, 0x5BC), 0xFB31 => array(0x5D1, 0x5BC), 0xFB32 => array(0x5D2, 0x5BC),
2452
-                    0xFB33 => array(0x5D3, 0x5BC), 0xFB34 => array(0x5D4, 0x5BC), 0xFB35 => array(0x5D5, 0x5BC),
2453
-                    0xFB36 => array(0x5D6, 0x5BC), 0xFB38 => array(0x5D8, 0x5BC), 0xFB39 => array(0x5D9, 0x5BC),
2454
-                    0xFB3A => array(0x5DA, 0x5BC), 0xFB3B => array(0x5DB, 0x5BC), 0xFB3C => array(0x5DC, 0x5BC),
2455
-                    0xFB3E => array(0x5DE, 0x5BC), 0xFB40 => array(0x5E0, 0x5BC), 0xFB41 => array(0x5E1, 0x5BC),
2456
-                    0xFB43 => array(0x5E3, 0x5BC), 0xFB44 => array(0x5E4, 0x5BC), 0xFB46 => array(0x5E6, 0x5BC),
2457
-                    0xFB47 => array(0x5E7, 0x5BC), 0xFB48 => array(0x5E8, 0x5BC), 0xFB49 => array(0x5E9, 0x5BC),
2458
-                    0xFB4A => array(0x5EA, 0x5BC), 0xFB4B => array(0x5D5, 0x5B9), 0xFB4C => array(0x5D1, 0x5BF),
2459
-                    0xFB4D => array(0x5DB, 0x5BF), 0xFB4E => array(0x5E4, 0x5BF), 0xFB4F => array(0x5D0, 0x5DC),
2460
-                    0xFB50 => array(0x671), 0xFB51 => array(0x671), 0xFB52 => array(0x67B),
2461
-                    0xFB53 => array(0x67B), 0xFB54 => array(0x67B), 0xFB55 => array(0x67B),
2462
-                    0xFB56 => array(0x67E), 0xFB57 => array(0x67E), 0xFB58 => array(0x67E),
2463
-                    0xFB59 => array(0x67E), 0xFB5A => array(0x680), 0xFB5B => array(0x680),
2464
-                    0xFB5C => array(0x680), 0xFB5D => array(0x680), 0xFB5E => array(0x67A),
2465
-                    0xFB5F => array(0x67A), 0xFB60 => array(0x67A), 0xFB61 => array(0x67A),
2466
-                    0xFB62 => array(0x67F), 0xFB63 => array(0x67F), 0xFB64 => array(0x67F),
2467
-                    0xFB65 => array(0x67F), 0xFB66 => array(0x679), 0xFB67 => array(0x679),
2468
-                    0xFB68 => array(0x679), 0xFB69 => array(0x679), 0xFB6A => array(0x6A4),
2469
-                    0xFB6B => array(0x6A4), 0xFB6C => array(0x6A4), 0xFB6D => array(0x6A4),
2470
-                    0xFB6E => array(0x6A6), 0xFB6F => array(0x6A6), 0xFB70 => array(0x6A6),
2471
-                    0xFB71 => array(0x6A6), 0xFB72 => array(0x684), 0xFB73 => array(0x684),
2472
-                    0xFB74 => array(0x684), 0xFB75 => array(0x684), 0xFB76 => array(0x683),
2473
-                    0xFB77 => array(0x683), 0xFB78 => array(0x683), 0xFB79 => array(0x683),
2474
-                    0xFB7A => array(0x686), 0xFB7B => array(0x686), 0xFB7C => array(0x686),
2475
-                    0xFB7D => array(0x686), 0xFB7E => array(0x687), 0xFB7F => array(0x687),
2476
-                    0xFB80 => array(0x687), 0xFB81 => array(0x687), 0xFB82 => array(0x68D),
2477
-                    0xFB83 => array(0x68D), 0xFB84 => array(0x68C), 0xFB85 => array(0x68C),
2478
-                    0xFB86 => array(0x68E), 0xFB87 => array(0x68E), 0xFB88 => array(0x688),
2479
-                    0xFB89 => array(0x688), 0xFB8A => array(0x698), 0xFB8B => array(0x698),
2480
-                    0xFB8C => array(0x691), 0xFB8D => array(0x691), 0xFB8E => array(0x6A9),
2481
-                    0xFB8F => array(0x6A9), 0xFB90 => array(0x6A9), 0xFB91 => array(0x6A9),
2482
-                    0xFB92 => array(0x6AF), 0xFB93 => array(0x6AF), 0xFB94 => array(0x6AF),
2483
-                    0xFB95 => array(0x6AF), 0xFB96 => array(0x6B3), 0xFB97 => array(0x6B3),
2484
-                    0xFB98 => array(0x6B3), 0xFB99 => array(0x6B3), 0xFB9A => array(0x6B1),
2485
-                    0xFB9B => array(0x6B1), 0xFB9C => array(0x6B1), 0xFB9D => array(0x6B1),
2486
-                    0xFB9E => array(0x6BA), 0xFB9F => array(0x6BA), 0xFBA0 => array(0x6BB),
2487
-                    0xFBA1 => array(0x6BB), 0xFBA2 => array(0x6BB), 0xFBA3 => array(0x6BB),
2488
-                    0xFBA4 => array(0x6C0), 0xFBA5 => array(0x6C0), 0xFBA6 => array(0x6C1),
2489
-                    0xFBA7 => array(0x6C1), 0xFBA8 => array(0x6C1), 0xFBA9 => array(0x6C1),
2490
-                    0xFBAA => array(0x6BE), 0xFBAB => array(0x6BE), 0xFBAC => array(0x6BE),
2491
-                    0xFBAD => array(0x6BE), 0xFBAE => array(0x6D2), 0xFBAF => array(0x6D2),
2492
-                    0xFBB0 => array(0x6D3), 0xFBB1 => array(0x6D3), 0xFBD3 => array(0x6AD),
2493
-                    0xFBD4 => array(0x6AD), 0xFBD5 => array(0x6AD), 0xFBD6 => array(0x6AD),
2494
-                    0xFBD7 => array(0x6C7), 0xFBD8 => array(0x6C7), 0xFBD9 => array(0x6C6),
2495
-                    0xFBDA => array(0x6C6), 0xFBDB => array(0x6C8), 0xFBDC => array(0x6C8),
2496
-                    0xFBDD => array(0x6C7, 0x674), 0xFBDE => array(0x6CB), 0xFBDF => array(0x6CB),
2497
-                    0xFBE0 => array(0x6C5), 0xFBE1 => array(0x6C5), 0xFBE2 => array(0x6C9),
2498
-                    0xFBE3 => array(0x6C9), 0xFBE4 => array(0x6D0), 0xFBE5 => array(0x6D0),
2499
-                    0xFBE6 => array(0x6D0), 0xFBE7 => array(0x6D0), 0xFBE8 => array(0x649),
2500
-                    0xFBE9 => array(0x649), 0xFBEA => array(0x626, 0x627), 0xFBEB => array(0x626, 0x627),
2501
-                    0xFBEC => array(0x626, 0x6D5), 0xFBED => array(0x626, 0x6D5), 0xFBEE => array(0x626, 0x648),
2502
-                    0xFBEF => array(0x626, 0x648), 0xFBF0 => array(0x626, 0x6C7), 0xFBF1 => array(0x626, 0x6C7),
2503
-                    0xFBF2 => array(0x626, 0x6C6), 0xFBF3 => array(0x626, 0x6C6), 0xFBF4 => array(0x626, 0x6C8),
2504
-                    0xFBF5 => array(0x626, 0x6C8), 0xFBF6 => array(0x626, 0x6D0), 0xFBF7 => array(0x626, 0x6D0),
2505
-                    0xFBF8 => array(0x626, 0x6D0), 0xFBF9 => array(0x626, 0x649), 0xFBFA => array(0x626, 0x649),
2506
-                    0xFBFB => array(0x626, 0x649), 0xFBFC => array(0x6CC), 0xFBFD => array(0x6CC),
2507
-                    0xFBFE => array(0x6CC), 0xFBFF => array(0x6CC), 0xFC00 => array(0x626, 0x62C),
2508
-                    0xFC01 => array(0x626, 0x62D), 0xFC02 => array(0x626, 0x645), 0xFC03 => array(0x626, 0x649),
2509
-                    0xFC04 => array(0x626, 0x64A), 0xFC05 => array(0x628, 0x62C), 0xFC06 => array(0x628, 0x62D),
2510
-                    0xFC07 => array(0x628, 0x62E), 0xFC08 => array(0x628, 0x645), 0xFC09 => array(0x628, 0x649),
2511
-                    0xFC0A => array(0x628, 0x64A), 0xFC0B => array(0x62A, 0x62C), 0xFC0C => array(0x62A, 0x62D),
2512
-                    0xFC0D => array(0x62A, 0x62E), 0xFC0E => array(0x62A, 0x645), 0xFC0F => array(0x62A, 0x649),
2513
-                    0xFC10 => array(0x62A, 0x64A), 0xFC11 => array(0x62B, 0x62C), 0xFC12 => array(0x62B, 0x645),
2514
-                    0xFC13 => array(0x62B, 0x649), 0xFC14 => array(0x62B, 0x64A), 0xFC15 => array(0x62C, 0x62D),
2515
-                    0xFC16 => array(0x62C, 0x645), 0xFC17 => array(0x62D, 0x62C), 0xFC18 => array(0x62D, 0x645),
2516
-                    0xFC19 => array(0x62E, 0x62C), 0xFC1A => array(0x62E, 0x62D), 0xFC1B => array(0x62E, 0x645),
2517
-                    0xFC1C => array(0x633, 0x62C), 0xFC1D => array(0x633, 0x62D), 0xFC1E => array(0x633, 0x62E),
2518
-                    0xFC1F => array(0x633, 0x645), 0xFC20 => array(0x635, 0x62D), 0xFC21 => array(0x635, 0x645),
2519
-                    0xFC22 => array(0x636, 0x62C), 0xFC23 => array(0x636, 0x62D), 0xFC24 => array(0x636, 0x62E),
2520
-                    0xFC25 => array(0x636, 0x645), 0xFC26 => array(0x637, 0x62D), 0xFC27 => array(0x637, 0x645),
2521
-                    0xFC28 => array(0x638, 0x645), 0xFC29 => array(0x639, 0x62C), 0xFC2A => array(0x639, 0x645),
2522
-                    0xFC2B => array(0x63A, 0x62C), 0xFC2C => array(0x63A, 0x645), 0xFC2D => array(0x641, 0x62C),
2523
-                    0xFC2E => array(0x641, 0x62D), 0xFC2F => array(0x641, 0x62E), 0xFC30 => array(0x641, 0x645),
2524
-                    0xFC31 => array(0x641, 0x649), 0xFC32 => array(0x641, 0x64A), 0xFC33 => array(0x642, 0x62D),
2525
-                    0xFC34 => array(0x642, 0x645), 0xFC35 => array(0x642, 0x649), 0xFC36 => array(0x642, 0x64A),
2526
-                    0xFC37 => array(0x643, 0x627), 0xFC38 => array(0x643, 0x62C), 0xFC39 => array(0x643, 0x62D),
2527
-                    0xFC3A => array(0x643, 0x62E), 0xFC3B => array(0x643, 0x644), 0xFC3C => array(0x643, 0x645),
2528
-                    0xFC3D => array(0x643, 0x649), 0xFC3E => array(0x643, 0x64A), 0xFC3F => array(0x644, 0x62C),
2529
-                    0xFC40 => array(0x644, 0x62D), 0xFC41 => array(0x644, 0x62E), 0xFC42 => array(0x644, 0x645),
2530
-                    0xFC43 => array(0x644, 0x649), 0xFC44 => array(0x644, 0x64A), 0xFC45 => array(0x645, 0x62C),
2531
-                    0xFC46 => array(0x645, 0x62D), 0xFC47 => array(0x645, 0x62E), 0xFC48 => array(0x645, 0x645),
2532
-                    0xFC49 => array(0x645, 0x649), 0xFC4A => array(0x645, 0x64A), 0xFC4B => array(0x646, 0x62C),
2533
-                    0xFC4C => array(0x646, 0x62D), 0xFC4D => array(0x646, 0x62E), 0xFC4E => array(0x646, 0x645),
2534
-                    0xFC4F => array(0x646, 0x649), 0xFC50 => array(0x646, 0x64A), 0xFC51 => array(0x647, 0x62C),
2535
-                    0xFC52 => array(0x647, 0x645), 0xFC53 => array(0x647, 0x649), 0xFC54 => array(0x647, 0x64A),
2536
-                    0xFC55 => array(0x64A, 0x62C), 0xFC56 => array(0x64A, 0x62D), 0xFC57 => array(0x64A, 0x62E),
2537
-                    0xFC58 => array(0x64A, 0x645), 0xFC59 => array(0x64A, 0x649), 0xFC5A => array(0x64A, 0x64A),
2538
-                    0xFC5B => array(0x630, 0x670), 0xFC5C => array(0x631, 0x670), 0xFC5D => array(0x649, 0x670),
2539
-                    0xFC64 => array(0x626, 0x631), 0xFC65 => array(0x626, 0x632), 0xFC66 => array(0x626, 0x645),
2540
-                    0xFC67 => array(0x626, 0x646), 0xFC68 => array(0x626, 0x649), 0xFC69 => array(0x626, 0x64A),
2541
-                    0xFC6A => array(0x628, 0x631), 0xFC6B => array(0x628, 0x632), 0xFC6C => array(0x628, 0x645),
2542
-                    0xFC6D => array(0x628, 0x646), 0xFC6E => array(0x628, 0x649), 0xFC6F => array(0x628, 0x64A),
2543
-                    0xFC70 => array(0x62A, 0x631), 0xFC71 => array(0x62A, 0x632), 0xFC72 => array(0x62A, 0x645),
2544
-                    0xFC73 => array(0x62A, 0x646), 0xFC74 => array(0x62A, 0x649), 0xFC75 => array(0x62A, 0x64A),
2545
-                    0xFC76 => array(0x62B, 0x631), 0xFC77 => array(0x62B, 0x632), 0xFC78 => array(0x62B, 0x645),
2546
-                    0xFC79 => array(0x62B, 0x646), 0xFC7A => array(0x62B, 0x649), 0xFC7B => array(0x62B, 0x64A),
2547
-                    0xFC7C => array(0x641, 0x649), 0xFC7D => array(0x641, 0x64A), 0xFC7E => array(0x642, 0x649),
2548
-                    0xFC7F => array(0x642, 0x64A), 0xFC80 => array(0x643, 0x627), 0xFC81 => array(0x643, 0x644),
2549
-                    0xFC82 => array(0x643, 0x645), 0xFC83 => array(0x643, 0x649), 0xFC84 => array(0x643, 0x64A),
2550
-                    0xFC85 => array(0x644, 0x645), 0xFC86 => array(0x644, 0x649), 0xFC87 => array(0x644, 0x64A),
2551
-                    0xFC88 => array(0x645, 0x627), 0xFC89 => array(0x645, 0x645), 0xFC8A => array(0x646, 0x631),
2552
-                    0xFC8B => array(0x646, 0x632), 0xFC8C => array(0x646, 0x645), 0xFC8D => array(0x646, 0x646),
2553
-                    0xFC8E => array(0x646, 0x649), 0xFC8F => array(0x646, 0x64A), 0xFC90 => array(0x649, 0x670),
2554
-                    0xFC91 => array(0x64A, 0x631), 0xFC92 => array(0x64A, 0x632), 0xFC93 => array(0x64A, 0x645),
2555
-                    0xFC94 => array(0x64A, 0x646), 0xFC95 => array(0x64A, 0x649), 0xFC96 => array(0x64A, 0x64A),
2556
-                    0xFC97 => array(0x626, 0x62C), 0xFC98 => array(0x626, 0x62D), 0xFC99 => array(0x626, 0x62E),
2557
-                    0xFC9A => array(0x626, 0x645), 0xFC9B => array(0x626, 0x647), 0xFC9C => array(0x628, 0x62C),
2558
-                    0xFC9D => array(0x628, 0x62D), 0xFC9E => array(0x628, 0x62E), 0xFC9F => array(0x628, 0x645),
2559
-                    0xFCA0 => array(0x628, 0x647), 0xFCA1 => array(0x62A, 0x62C), 0xFCA2 => array(0x62A, 0x62D),
2560
-                    0xFCA3 => array(0x62A, 0x62E), 0xFCA4 => array(0x62A, 0x645), 0xFCA5 => array(0x62A, 0x647),
2561
-                    0xFCA6 => array(0x62B, 0x645), 0xFCA7 => array(0x62C, 0x62D), 0xFCA8 => array(0x62C, 0x645),
2562
-                    0xFCA9 => array(0x62D, 0x62C), 0xFCAA => array(0x62D, 0x645), 0xFCAB => array(0x62E, 0x62C),
2563
-                    0xFCAC => array(0x62E, 0x645), 0xFCAD => array(0x633, 0x62C), 0xFCAE => array(0x633, 0x62D),
2564
-                    0xFCAF => array(0x633, 0x62E), 0xFCB0 => array(0x633, 0x645), 0xFCB1 => array(0x635, 0x62D),
2565
-                    0xFCB2 => array(0x635, 0x62E), 0xFCB3 => array(0x635, 0x645), 0xFCB4 => array(0x636, 0x62C),
2566
-                    0xFCB5 => array(0x636, 0x62D), 0xFCB6 => array(0x636, 0x62E), 0xFCB7 => array(0x636, 0x645),
2567
-                    0xFCB8 => array(0x637, 0x62D), 0xFCB9 => array(0x638, 0x645), 0xFCBA => array(0x639, 0x62C),
2568
-                    0xFCBB => array(0x639, 0x645), 0xFCBC => array(0x63A, 0x62C), 0xFCBD => array(0x63A, 0x645),
2569
-                    0xFCBE => array(0x641, 0x62C), 0xFCBF => array(0x641, 0x62D), 0xFCC0 => array(0x641, 0x62E),
2570
-                    0xFCC1 => array(0x641, 0x645), 0xFCC2 => array(0x642, 0x62D), 0xFCC3 => array(0x642, 0x645),
2571
-                    0xFCC4 => array(0x643, 0x62C), 0xFCC5 => array(0x643, 0x62D), 0xFCC6 => array(0x643, 0x62E),
2572
-                    0xFCC7 => array(0x643, 0x644), 0xFCC8 => array(0x643, 0x645), 0xFCC9 => array(0x644, 0x62C),
2573
-                    0xFCCA => array(0x644, 0x62D), 0xFCCB => array(0x644, 0x62E), 0xFCCC => array(0x644, 0x645),
2574
-                    0xFCCD => array(0x644, 0x647), 0xFCCE => array(0x645, 0x62C), 0xFCCF => array(0x645, 0x62D),
2575
-                    0xFCD0 => array(0x645, 0x62E), 0xFCD1 => array(0x645, 0x645), 0xFCD2 => array(0x646, 0x62C),
2576
-                    0xFCD3 => array(0x646, 0x62D), 0xFCD4 => array(0x646, 0x62E), 0xFCD5 => array(0x646, 0x645),
2577
-                    0xFCD6 => array(0x646, 0x647), 0xFCD7 => array(0x647, 0x62C), 0xFCD8 => array(0x647, 0x645),
2578
-                    0xFCD9 => array(0x647, 0x670), 0xFCDA => array(0x64A, 0x62C), 0xFCDB => array(0x64A, 0x62D),
2579
-                    0xFCDC => array(0x64A, 0x62E), 0xFCDD => array(0x64A, 0x645), 0xFCDE => array(0x64A, 0x647),
2580
-                    0xFCDF => array(0x626, 0x645), 0xFCE0 => array(0x626, 0x647), 0xFCE1 => array(0x628, 0x645),
2581
-                    0xFCE2 => array(0x628, 0x647), 0xFCE3 => array(0x62A, 0x645), 0xFCE4 => array(0x62A, 0x647),
2582
-                    0xFCE5 => array(0x62B, 0x645), 0xFCE6 => array(0x62B, 0x647), 0xFCE7 => array(0x633, 0x645),
2583
-                    0xFCE8 => array(0x633, 0x647), 0xFCE9 => array(0x634, 0x645), 0xFCEA => array(0x634, 0x647),
2584
-                    0xFCEB => array(0x643, 0x644), 0xFCEC => array(0x643, 0x645), 0xFCED => array(0x644, 0x645),
2585
-                    0xFCEE => array(0x646, 0x645), 0xFCEF => array(0x646, 0x647), 0xFCF0 => array(0x64A, 0x645),
2586
-                    0xFCF1 => array(0x64A, 0x647), 0xFCF2 => array(0x640, 0x64E, 0x651), 0xFCF3 => array(0x640, 0x64F, 0x651),
2587
-                    0xFCF4 => array(0x640, 0x650, 0x651), 0xFCF5 => array(0x637, 0x649), 0xFCF6 => array(0x637, 0x64A),
2588
-                    0xFCF7 => array(0x639, 0x649), 0xFCF8 => array(0x639, 0x64A), 0xFCF9 => array(0x63A, 0x649),
2589
-                    0xFCFA => array(0x63A, 0x64A), 0xFCFB => array(0x633, 0x649), 0xFCFC => array(0x633, 0x64A),
2590
-                    0xFCFD => array(0x634, 0x649), 0xFCFE => array(0x634, 0x64A), 0xFCFF => array(0x62D, 0x649),
2591
-                    0xFD00 => array(0x62D, 0x64A), 0xFD01 => array(0x62C, 0x649), 0xFD02 => array(0x62C, 0x64A),
2592
-                    0xFD03 => array(0x62E, 0x649), 0xFD04 => array(0x62E, 0x64A), 0xFD05 => array(0x635, 0x649),
2593
-                    0xFD06 => array(0x635, 0x64A), 0xFD07 => array(0x636, 0x649), 0xFD08 => array(0x636, 0x64A),
2594
-                    0xFD09 => array(0x634, 0x62C), 0xFD0A => array(0x634, 0x62D), 0xFD0B => array(0x634, 0x62E),
2595
-                    0xFD0C => array(0x634, 0x645), 0xFD0D => array(0x634, 0x631), 0xFD0E => array(0x633, 0x631),
2596
-                    0xFD0F => array(0x635, 0x631), 0xFD10 => array(0x636, 0x631), 0xFD11 => array(0x637, 0x649),
2597
-                    0xFD12 => array(0x637, 0x64A), 0xFD13 => array(0x639, 0x649), 0xFD14 => array(0x639, 0x64A),
2598
-                    0xFD15 => array(0x63A, 0x649), 0xFD16 => array(0x63A, 0x64A), 0xFD17 => array(0x633, 0x649),
2599
-                    0xFD18 => array(0x633, 0x64A), 0xFD19 => array(0x634, 0x649), 0xFD1A => array(0x634, 0x64A),
2600
-                    0xFD1B => array(0x62D, 0x649), 0xFD1C => array(0x62D, 0x64A), 0xFD1D => array(0x62C, 0x649),
2601
-                    0xFD1E => array(0x62C, 0x64A), 0xFD1F => array(0x62E, 0x649), 0xFD20 => array(0x62E, 0x64A),
2602
-                    0xFD21 => array(0x635, 0x649), 0xFD22 => array(0x635, 0x64A), 0xFD23 => array(0x636, 0x649),
2603
-                    0xFD24 => array(0x636, 0x64A), 0xFD25 => array(0x634, 0x62C), 0xFD26 => array(0x634, 0x62D),
2604
-                    0xFD27 => array(0x634, 0x62E), 0xFD28 => array(0x634, 0x645), 0xFD29 => array(0x634, 0x631),
2605
-                    0xFD2A => array(0x633, 0x631), 0xFD2B => array(0x635, 0x631), 0xFD2C => array(0x636, 0x631),
2606
-                    0xFD2D => array(0x634, 0x62C), 0xFD2E => array(0x634, 0x62D), 0xFD2F => array(0x634, 0x62E),
2607
-                    0xFD30 => array(0x634, 0x645), 0xFD31 => array(0x633, 0x647), 0xFD32 => array(0x634, 0x647),
2608
-                    0xFD33 => array(0x637, 0x645), 0xFD34 => array(0x633, 0x62C), 0xFD35 => array(0x633, 0x62D),
2609
-                    0xFD36 => array(0x633, 0x62E), 0xFD37 => array(0x634, 0x62C), 0xFD38 => array(0x634, 0x62D),
2610
-                    0xFD39 => array(0x634, 0x62E), 0xFD3A => array(0x637, 0x645), 0xFD3B => array(0x638, 0x645),
2611
-                    0xFD3C => array(0x627, 0x64B), 0xFD3D => array(0x627, 0x64B), 0xFD50 => array(0x62A, 0x62C, 0x645),
2612
-                    0xFD51 => array(0x62A, 0x62D, 0x62C), 0xFD52 => array(0x62A, 0x62D, 0x62C), 0xFD53 => array(0x62A, 0x62D, 0x645),
2613
-                    0xFD54 => array(0x62A, 0x62E, 0x645), 0xFD55 => array(0x62A, 0x645, 0x62C), 0xFD56 => array(0x62A, 0x645, 0x62D),
2614
-                    0xFD57 => array(0x62A, 0x645, 0x62E), 0xFD58 => array(0x62C, 0x645, 0x62D), 0xFD59 => array(0x62C, 0x645, 0x62D),
2615
-                    0xFD5A => array(0x62D, 0x645, 0x64A), 0xFD5B => array(0x62D, 0x645, 0x649), 0xFD5C => array(0x633, 0x62D, 0x62C),
2616
-                    0xFD5D => array(0x633, 0x62C, 0x62D), 0xFD5E => array(0x633, 0x62C, 0x649), 0xFD5F => array(0x633, 0x645, 0x62D),
2617
-                    0xFD60 => array(0x633, 0x645, 0x62D), 0xFD61 => array(0x633, 0x645, 0x62C), 0xFD62 => array(0x633, 0x645, 0x645),
2618
-                    0xFD63 => array(0x633, 0x645, 0x645), 0xFD64 => array(0x635, 0x62D, 0x62D), 0xFD65 => array(0x635, 0x62D, 0x62D),
2619
-                    0xFD66 => array(0x635, 0x645, 0x645), 0xFD67 => array(0x634, 0x62D, 0x645), 0xFD68 => array(0x634, 0x62D, 0x645),
2620
-                    0xFD69 => array(0x634, 0x62C, 0x64A), 0xFD6A => array(0x634, 0x645, 0x62E), 0xFD6B => array(0x634, 0x645, 0x62E),
2621
-                    0xFD6C => array(0x634, 0x645, 0x645), 0xFD6D => array(0x634, 0x645, 0x645), 0xFD6E => array(0x636, 0x62D, 0x649),
2622
-                    0xFD6F => array(0x636, 0x62E, 0x645), 0xFD70 => array(0x636, 0x62E, 0x645), 0xFD71 => array(0x637, 0x645, 0x62D),
2623
-                    0xFD72 => array(0x637, 0x645, 0x62D), 0xFD73 => array(0x637, 0x645, 0x645), 0xFD74 => array(0x637, 0x645, 0x64A),
2624
-                    0xFD75 => array(0x639, 0x62C, 0x645), 0xFD76 => array(0x639, 0x645, 0x645), 0xFD77 => array(0x639, 0x645, 0x645),
2625
-                    0xFD78 => array(0x639, 0x645, 0x649), 0xFD79 => array(0x63A, 0x645, 0x645), 0xFD7A => array(0x63A, 0x645, 0x64A),
2626
-                    0xFD7B => array(0x63A, 0x645, 0x649), 0xFD7C => array(0x641, 0x62E, 0x645), 0xFD7D => array(0x641, 0x62E, 0x645),
2627
-                    0xFD7E => array(0x642, 0x645, 0x62D), 0xFD7F => array(0x642, 0x645, 0x645), 0xFD80 => array(0x644, 0x62D, 0x645),
2628
-                    0xFD81 => array(0x644, 0x62D, 0x64A), 0xFD82 => array(0x644, 0x62D, 0x649), 0xFD83 => array(0x644, 0x62C, 0x62C),
2629
-                    0xFD84 => array(0x644, 0x62C, 0x62C), 0xFD85 => array(0x644, 0x62E, 0x645), 0xFD86 => array(0x644, 0x62E, 0x645),
2630
-                    0xFD87 => array(0x644, 0x645, 0x62D), 0xFD88 => array(0x644, 0x645, 0x62D), 0xFD89 => array(0x645, 0x62D, 0x62C),
2631
-                    0xFD8A => array(0x645, 0x62D, 0x645), 0xFD8B => array(0x645, 0x62D, 0x64A), 0xFD8C => array(0x645, 0x62C, 0x62D),
2632
-                    0xFD8D => array(0x645, 0x62C, 0x645), 0xFD8E => array(0x645, 0x62E, 0x62C), 0xFD8F => array(0x645, 0x62E, 0x645),
2633
-                    0xFD92 => array(0x645, 0x62C, 0x62E), 0xFD93 => array(0x647, 0x645, 0x62C), 0xFD94 => array(0x647, 0x645, 0x645),
2634
-                    0xFD95 => array(0x646, 0x62D, 0x645), 0xFD96 => array(0x646, 0x62D, 0x649), 0xFD97 => array(0x646, 0x62C, 0x645),
2635
-                    0xFD98 => array(0x646, 0x62C, 0x645), 0xFD99 => array(0x646, 0x62C, 0x649), 0xFD9A => array(0x646, 0x645, 0x64A),
2636
-                    0xFD9B => array(0x646, 0x645, 0x649), 0xFD9C => array(0x64A, 0x645, 0x645), 0xFD9D => array(0x64A, 0x645, 0x645),
2637
-                    0xFD9E => array(0x628, 0x62E, 0x64A), 0xFD9F => array(0x62A, 0x62C, 0x64A), 0xFDA0 => array(0x62A, 0x62C, 0x649),
2638
-                    0xFDA1 => array(0x62A, 0x62E, 0x64A), 0xFDA2 => array(0x62A, 0x62E, 0x649), 0xFDA3 => array(0x62A, 0x645, 0x64A),
2639
-                    0xFDA4 => array(0x62A, 0x645, 0x649), 0xFDA5 => array(0x62C, 0x645, 0x64A), 0xFDA6 => array(0x62C, 0x62D, 0x649),
2640
-                    0xFDA7 => array(0x62C, 0x645, 0x649), 0xFDA8 => array(0x633, 0x62E, 0x649), 0xFDA9 => array(0x635, 0x62D, 0x64A),
2641
-                    0xFDAA => array(0x634, 0x62D, 0x64A), 0xFDAB => array(0x636, 0x62D, 0x64A), 0xFDAC => array(0x644, 0x62C, 0x64A),
2642
-                    0xFDAD => array(0x644, 0x645, 0x64A), 0xFDAE => array(0x64A, 0x62D, 0x64A), 0xFDAF => array(0x64A, 0x62C, 0x64A),
2643
-                    0xFDB0 => array(0x64A, 0x645, 0x64A), 0xFDB1 => array(0x645, 0x645, 0x64A), 0xFDB2 => array(0x642, 0x645, 0x64A),
2644
-                    0xFDB3 => array(0x646, 0x62D, 0x64A), 0xFDB4 => array(0x642, 0x645, 0x62D), 0xFDB5 => array(0x644, 0x62D, 0x645),
2645
-                    0xFDB6 => array(0x639, 0x645, 0x64A), 0xFDB7 => array(0x643, 0x645, 0x64A), 0xFDB8 => array(0x646, 0x62C, 0x62D),
2646
-                    0xFDB9 => array(0x645, 0x62E, 0x64A), 0xFDBA => array(0x644, 0x62C, 0x645), 0xFDBB => array(0x643, 0x645, 0x645),
2647
-                    0xFDBC => array(0x644, 0x62C, 0x645), 0xFDBD => array(0x646, 0x62C, 0x62D), 0xFDBE => array(0x62C, 0x62D, 0x64A),
2648
-                    0xFDBF => array(0x62D, 0x62C, 0x64A), 0xFDC0 => array(0x645, 0x62C, 0x64A), 0xFDC1 => array(0x641, 0x645, 0x64A),
2649
-                    0xFDC2 => array(0x628, 0x62D, 0x64A), 0xFDC3 => array(0x643, 0x645, 0x645), 0xFDC4 => array(0x639, 0x62C, 0x645),
2650
-                    0xFDC5 => array(0x635, 0x645, 0x645), 0xFDC6 => array(0x633, 0x62E, 0x64A), 0xFDC7 => array(0x646, 0x62C, 0x64A),
2651
-                    0xFDF0 => array(0x635, 0x644, 0x6D2), 0xFDF1 => array(0x642, 0x644, 0x6D2), 0xFDF2 => array(0x627, 0x644, 0x644, 0x647),
2652
-                    0xFDF3 => array(0x627, 0x643, 0x628, 0x631), 0xFDF4 => array(0x645, 0x62D, 0x645, 0x62F), 0xFDF5 => array(0x635, 0x644, 0x639, 0x645),
2653
-                    0xFDF6 => array(0x631, 0x633, 0x648, 0x644), 0xFDF7 => array(0x639, 0x644, 0x64A, 0x647), 0xFDF8 => array(0x648, 0x633, 0x644, 0x645),
2654
-                    0xFDF9 => array(0x635, 0x644, 0x649), 0xFDFC => array(0x631, 0x6CC, 0x627, 0x644), 0xFE11 => array(0x3001),
2655
-                    0xFE17 => array(0x3016), 0xFE18 => array(0x3017), 0xFE31 => array(0x2014),
2656
-                    0xFE32 => array(0x2013), 0xFE39 => array(0x3014), 0xFE3A => array(0x3015),
2657
-                    0xFE3B => array(0x3010), 0xFE3C => array(0x3011), 0xFE3D => array(0x300A),
2658
-                    0xFE3E => array(0x300B), 0xFE3F => array(0x3008), 0xFE40 => array(0x3009),
2659
-                    0xFE41 => array(0x300C), 0xFE42 => array(0x300D), 0xFE43 => array(0x300E),
2660
-                    0xFE44 => array(0x300F), 0xFE51 => array(0x3001), 0xFE58 => array(0x2014),
2661
-                    0xFE5D => array(0x3014), 0xFE5E => array(0x3015), 0xFE63 => array(0x2D),
2662
-                    0xFE71 => array(0x640, 0x64B), 0xFE77 => array(0x640, 0x64E), 0xFE79 => array(0x640, 0x64F),
2663
-                    0xFE7B => array(0x640, 0x650), 0xFE7D => array(0x640, 0x651), 0xFE7F => array(0x640, 0x652),
2664
-                    0xFE80 => array(0x621), 0xFE81 => array(0x622), 0xFE82 => array(0x622),
2665
-                    0xFE83 => array(0x623), 0xFE84 => array(0x623), 0xFE85 => array(0x624),
2666
-                    0xFE86 => array(0x624), 0xFE87 => array(0x625), 0xFE88 => array(0x625),
2667
-                    0xFE89 => array(0x626), 0xFE8A => array(0x626), 0xFE8B => array(0x626),
2668
-                    0xFE8C => array(0x626), 0xFE8D => array(0x627), 0xFE8E => array(0x627),
2669
-                    0xFE8F => array(0x628), 0xFE90 => array(0x628), 0xFE91 => array(0x628),
2670
-                    0xFE92 => array(0x628), 0xFE93 => array(0x629), 0xFE94 => array(0x629),
2671
-                    0xFE95 => array(0x62A), 0xFE96 => array(0x62A), 0xFE97 => array(0x62A),
2672
-                    0xFE98 => array(0x62A), 0xFE99 => array(0x62B), 0xFE9A => array(0x62B),
2673
-                    0xFE9B => array(0x62B), 0xFE9C => array(0x62B), 0xFE9D => array(0x62C),
2674
-                    0xFE9E => array(0x62C), 0xFE9F => array(0x62C), 0xFEA0 => array(0x62C),
2675
-                    0xFEA1 => array(0x62D), 0xFEA2 => array(0x62D), 0xFEA3 => array(0x62D),
2676
-                    0xFEA4 => array(0x62D), 0xFEA5 => array(0x62E), 0xFEA6 => array(0x62E),
2677
-                    0xFEA7 => array(0x62E), 0xFEA8 => array(0x62E), 0xFEA9 => array(0x62F),
2678
-                    0xFEAA => array(0x62F), 0xFEAB => array(0x630), 0xFEAC => array(0x630),
2679
-                    0xFEAD => array(0x631), 0xFEAE => array(0x631), 0xFEAF => array(0x632),
2680
-                    0xFEB0 => array(0x632), 0xFEB1 => array(0x633), 0xFEB2 => array(0x633),
2681
-                    0xFEB3 => array(0x633), 0xFEB4 => array(0x633), 0xFEB5 => array(0x634),
2682
-                    0xFEB6 => array(0x634), 0xFEB7 => array(0x634), 0xFEB8 => array(0x634),
2683
-                    0xFEB9 => array(0x635), 0xFEBA => array(0x635), 0xFEBB => array(0x635),
2684
-                    0xFEBC => array(0x635), 0xFEBD => array(0x636), 0xFEBE => array(0x636),
2685
-                    0xFEBF => array(0x636), 0xFEC0 => array(0x636), 0xFEC1 => array(0x637),
2686
-                    0xFEC2 => array(0x637), 0xFEC3 => array(0x637), 0xFEC4 => array(0x637),
2687
-                    0xFEC5 => array(0x638), 0xFEC6 => array(0x638), 0xFEC7 => array(0x638),
2688
-                    0xFEC8 => array(0x638), 0xFEC9 => array(0x639), 0xFECA => array(0x639),
2689
-                    0xFECB => array(0x639), 0xFECC => array(0x639), 0xFECD => array(0x63A),
2690
-                    0xFECE => array(0x63A), 0xFECF => array(0x63A), 0xFED0 => array(0x63A),
2691
-                    0xFED1 => array(0x641), 0xFED2 => array(0x641), 0xFED3 => array(0x641),
2692
-                    0xFED4 => array(0x641), 0xFED5 => array(0x642), 0xFED6 => array(0x642),
2693
-                    0xFED7 => array(0x642), 0xFED8 => array(0x642), 0xFED9 => array(0x643),
2694
-                    0xFEDA => array(0x643), 0xFEDB => array(0x643), 0xFEDC => array(0x643),
2695
-                    0xFEDD => array(0x644), 0xFEDE => array(0x644), 0xFEDF => array(0x644),
2696
-                    0xFEE0 => array(0x644), 0xFEE1 => array(0x645), 0xFEE2 => array(0x645),
2697
-                    0xFEE3 => array(0x645), 0xFEE4 => array(0x645), 0xFEE5 => array(0x646),
2698
-                    0xFEE6 => array(0x646), 0xFEE7 => array(0x646), 0xFEE8 => array(0x646),
2699
-                    0xFEE9 => array(0x647), 0xFEEA => array(0x647), 0xFEEB => array(0x647),
2700
-                    0xFEEC => array(0x647), 0xFEED => array(0x648), 0xFEEE => array(0x648),
2701
-                    0xFEEF => array(0x649), 0xFEF0 => array(0x649), 0xFEF1 => array(0x64A),
2702
-                    0xFEF2 => array(0x64A), 0xFEF3 => array(0x64A), 0xFEF4 => array(0x64A),
2703
-                    0xFEF5 => array(0x644, 0x622), 0xFEF6 => array(0x644, 0x622), 0xFEF7 => array(0x644, 0x623),
2704
-                    0xFEF8 => array(0x644, 0x623), 0xFEF9 => array(0x644, 0x625), 0xFEFA => array(0x644, 0x625),
2705
-                    0xFEFB => array(0x644, 0x627), 0xFEFC => array(0x644, 0x627), 0xFF0D => array(0x2D),
2706
-                    0xFF0E => array(0x2E), 0xFF10 => array(0x30), 0xFF11 => array(0x31),
2707
-                    0xFF12 => array(0x32), 0xFF13 => array(0x33), 0xFF14 => array(0x34),
2708
-                    0xFF15 => array(0x35), 0xFF16 => array(0x36), 0xFF17 => array(0x37),
2709
-                    0xFF18 => array(0x38), 0xFF19 => array(0x39), 0xFF21 => array(0x61),
2710
-                    0xFF22 => array(0x62), 0xFF23 => array(0x63), 0xFF24 => array(0x64),
2711
-                    0xFF25 => array(0x65), 0xFF26 => array(0x66), 0xFF27 => array(0x67),
2712
-                    0xFF28 => array(0x68), 0xFF29 => array(0x69), 0xFF2A => array(0x6A),
2713
-                    0xFF2B => array(0x6B), 0xFF2C => array(0x6C), 0xFF2D => array(0x6D),
2714
-                    0xFF2E => array(0x6E), 0xFF2F => array(0x6F), 0xFF30 => array(0x70),
2715
-                    0xFF31 => array(0x71), 0xFF32 => array(0x72), 0xFF33 => array(0x73),
2716
-                    0xFF34 => array(0x74), 0xFF35 => array(0x75), 0xFF36 => array(0x76),
2717
-                    0xFF37 => array(0x77), 0xFF38 => array(0x78), 0xFF39 => array(0x79),
2718
-                    0xFF3A => array(0x7A), 0xFF41 => array(0x61), 0xFF42 => array(0x62),
2719
-                    0xFF43 => array(0x63), 0xFF44 => array(0x64), 0xFF45 => array(0x65),
2720
-                    0xFF46 => array(0x66), 0xFF47 => array(0x67), 0xFF48 => array(0x68),
2721
-                    0xFF49 => array(0x69), 0xFF4A => array(0x6A), 0xFF4B => array(0x6B),
2722
-                    0xFF4C => array(0x6C), 0xFF4D => array(0x6D), 0xFF4E => array(0x6E),
2723
-                    0xFF4F => array(0x6F), 0xFF50 => array(0x70), 0xFF51 => array(0x71),
2724
-                    0xFF52 => array(0x72), 0xFF53 => array(0x73), 0xFF54 => array(0x74),
2725
-                    0xFF55 => array(0x75), 0xFF56 => array(0x76), 0xFF57 => array(0x77),
2726
-                    0xFF58 => array(0x78), 0xFF59 => array(0x79), 0xFF5A => array(0x7A),
2727
-                    0xFF5F => array(0x2985), 0xFF60 => array(0x2986), 0xFF61 => array(0x2E),
2728
-                    0xFF62 => array(0x300C), 0xFF63 => array(0x300D), 0xFF64 => array(0x3001),
2729
-                    0xFF65 => array(0x30FB), 0xFF66 => array(0x30F2), 0xFF67 => array(0x30A1),
2730
-                    0xFF68 => array(0x30A3), 0xFF69 => array(0x30A5), 0xFF6A => array(0x30A7),
2731
-                    0xFF6B => array(0x30A9), 0xFF6C => array(0x30E3), 0xFF6D => array(0x30E5),
2732
-                    0xFF6E => array(0x30E7), 0xFF6F => array(0x30C3), 0xFF70 => array(0x30FC),
2733
-                    0xFF71 => array(0x30A2), 0xFF72 => array(0x30A4), 0xFF73 => array(0x30A6),
2734
-                    0xFF74 => array(0x30A8), 0xFF75 => array(0x30AA), 0xFF76 => array(0x30AB),
2735
-                    0xFF77 => array(0x30AD), 0xFF78 => array(0x30AF), 0xFF79 => array(0x30B1),
2736
-                    0xFF7A => array(0x30B3), 0xFF7B => array(0x30B5), 0xFF7C => array(0x30B7),
2737
-                    0xFF7D => array(0x30B9), 0xFF7E => array(0x30BB), 0xFF7F => array(0x30BD),
2738
-                    0xFF80 => array(0x30BF), 0xFF81 => array(0x30C1), 0xFF82 => array(0x30C4),
2739
-                    0xFF83 => array(0x30C6), 0xFF84 => array(0x30C8), 0xFF85 => array(0x30CA),
2740
-                    0xFF86 => array(0x30CB), 0xFF87 => array(0x30CC), 0xFF88 => array(0x30CD),
2741
-                    0xFF89 => array(0x30CE), 0xFF8A => array(0x30CF), 0xFF8B => array(0x30D2),
2742
-                    0xFF8C => array(0x30D5), 0xFF8D => array(0x30D8), 0xFF8E => array(0x30DB),
2743
-                    0xFF8F => array(0x30DE), 0xFF90 => array(0x30DF), 0xFF91 => array(0x30E0),
2744
-                    0xFF92 => array(0x30E1), 0xFF93 => array(0x30E2), 0xFF94 => array(0x30E4),
2745
-                    0xFF95 => array(0x30E6), 0xFF96 => array(0x30E8), 0xFF97 => array(0x30E9),
2746
-                    0xFF98 => array(0x30EA), 0xFF99 => array(0x30EB), 0xFF9A => array(0x30EC),
2747
-                    0xFF9B => array(0x30ED), 0xFF9C => array(0x30EF), 0xFF9D => array(0x30F3),
2748
-                    0xFF9E => array(0x3099), 0xFF9F => array(0x309A), 0xFFA1 => array(0x1100),
2749
-                    0xFFA2 => array(0x1101), 0xFFA3 => array(0x11AA), 0xFFA4 => array(0x1102),
2750
-                    0xFFA5 => array(0x11AC), 0xFFA6 => array(0x11AD), 0xFFA7 => array(0x1103),
2751
-                    0xFFA8 => array(0x1104), 0xFFA9 => array(0x1105), 0xFFAA => array(0x11B0),
2752
-                    0xFFAB => array(0x11B1), 0xFFAC => array(0x11B2), 0xFFAD => array(0x11B3),
2753
-                    0xFFAE => array(0x11B4), 0xFFAF => array(0x11B5), 0xFFB0 => array(0x111A),
2754
-                    0xFFB1 => array(0x1106), 0xFFB2 => array(0x1107), 0xFFB3 => array(0x1108),
2755
-                    0xFFB4 => array(0x1121), 0xFFB5 => array(0x1109), 0xFFB6 => array(0x110A),
2756
-                    0xFFB7 => array(0x110B), 0xFFB8 => array(0x110C), 0xFFB9 => array(0x110D),
2757
-                    0xFFBA => array(0x110E), 0xFFBB => array(0x110F), 0xFFBC => array(0x1110),
2758
-                    0xFFBD => array(0x1111), 0xFFBE => array(0x1112), 0xFFC2 => array(0x1161),
2759
-                    0xFFC3 => array(0x1162), 0xFFC4 => array(0x1163), 0xFFC5 => array(0x1164),
2760
-                    0xFFC6 => array(0x1165), 0xFFC7 => array(0x1166), 0xFFCA => array(0x1167),
2761
-                    0xFFCB => array(0x1168), 0xFFCC => array(0x1169), 0xFFCD => array(0x116A),
2762
-                    0xFFCE => array(0x116B), 0xFFCF => array(0x116C), 0xFFD2 => array(0x116D),
2763
-                    0xFFD3 => array(0x116E), 0xFFD4 => array(0x116F), 0xFFD5 => array(0x1170),
2764
-                    0xFFD6 => array(0x1171), 0xFFD7 => array(0x1172), 0xFFDA => array(0x1173),
2765
-                    0xFFDB => array(0x1174), 0xFFDC => array(0x1175), 0xFFE0 => array(0xA2),
2766
-                    0xFFE1 => array(0xA3), 0xFFE2 => array(0xAC), 0xFFE4 => array(0xA6),
2767
-                    0xFFE5 => array(0xA5), 0xFFE6 => array(0x20A9), 0xFFE8 => array(0x2502),
2768
-                    0xFFE9 => array(0x2190), 0xFFEA => array(0x2191), 0xFFEB => array(0x2192),
2769
-                    0xFFEC => array(0x2193), 0xFFED => array(0x25A0), 0xFFEE => array(0x25CB),
2770
-                    0x10400 => array(0x10428), 0x10401 => array(0x10429), 0x10402 => array(0x1042A),
2771
-                    0x10403 => array(0x1042B), 0x10404 => array(0x1042C), 0x10405 => array(0x1042D),
2772
-                    0x10406 => array(0x1042E), 0x10407 => array(0x1042F), 0x10408 => array(0x10430),
2773
-                    0x10409 => array(0x10431), 0x1040A => array(0x10432), 0x1040B => array(0x10433),
2774
-                    0x1040C => array(0x10434), 0x1040D => array(0x10435), 0x1040E => array(0x10436),
2775
-                    0x1040F => array(0x10437), 0x10410 => array(0x10438), 0x10411 => array(0x10439),
2776
-                    0x10412 => array(0x1043A), 0x10413 => array(0x1043B), 0x10414 => array(0x1043C),
2777
-                    0x10415 => array(0x1043D), 0x10416 => array(0x1043E), 0x10417 => array(0x1043F),
2778
-                    0x10418 => array(0x10440), 0x10419 => array(0x10441), 0x1041A => array(0x10442),
2779
-                    0x1041B => array(0x10443), 0x1041C => array(0x10444), 0x1041D => array(0x10445),
2780
-                    0x1041E => array(0x10446), 0x1041F => array(0x10447), 0x10420 => array(0x10448),
2781
-                    0x10421 => array(0x10449), 0x10422 => array(0x1044A), 0x10423 => array(0x1044B),
2782
-                    0x10424 => array(0x1044C), 0x10425 => array(0x1044D), 0x10426 => array(0x1044E),
2783
-                    0x10427 => array(0x1044F), 0x118A0 => array(0x118C0), 0x118A1 => array(0x118C1),
2784
-                    0x118A2 => array(0x118C2), 0x118A3 => array(0x118C3), 0x118A4 => array(0x118C4),
2785
-                    0x118A5 => array(0x118C5), 0x118A6 => array(0x118C6), 0x118A7 => array(0x118C7),
2786
-                    0x118A8 => array(0x118C8), 0x118A9 => array(0x118C9), 0x118AA => array(0x118CA),
2787
-                    0x118AB => array(0x118CB), 0x118AC => array(0x118CC), 0x118AD => array(0x118CD),
2788
-                    0x118AE => array(0x118CE), 0x118AF => array(0x118CF), 0x118B0 => array(0x118D0),
2789
-                    0x118B1 => array(0x118D1), 0x118B2 => array(0x118D2), 0x118B3 => array(0x118D3),
2790
-                    0x118B4 => array(0x118D4), 0x118B5 => array(0x118D5), 0x118B6 => array(0x118D6),
2791
-                    0x118B7 => array(0x118D7), 0x118B8 => array(0x118D8), 0x118B9 => array(0x118D9),
2792
-                    0x118BA => array(0x118DA), 0x118BB => array(0x118DB), 0x118BC => array(0x118DC),
2793
-                    0x118BD => array(0x118DD), 0x118BE => array(0x118DE), 0x118BF => array(0x118DF),
2794
-                    0x1D15E => array(0x1D157, 0x1D165), 0x1D15F => array(0x1D158, 0x1D165), 0x1D160 => array(0x1D158, 0x1D165, 0x1D16E),
2795
-                    0x1D161 => array(0x1D158, 0x1D165, 0x1D16F), 0x1D162 => array(0x1D158, 0x1D165, 0x1D170), 0x1D163 => array(0x1D158, 0x1D165, 0x1D171),
2796
-                    0x1D164 => array(0x1D158, 0x1D165, 0x1D172), 0x1D1BB => array(0x1D1B9, 0x1D165), 0x1D1BC => array(0x1D1BA, 0x1D165),
2797
-                    0x1D1BD => array(0x1D1B9, 0x1D165, 0x1D16E), 0x1D1BE => array(0x1D1BA, 0x1D165, 0x1D16E), 0x1D1BF => array(0x1D1B9, 0x1D165, 0x1D16F),
2798
-                    0x1D1C0 => array(0x1D1BA, 0x1D165, 0x1D16F), 0x1D400 => array(0x61), 0x1D401 => array(0x62),
2799
-                    0x1D402 => array(0x63), 0x1D403 => array(0x64), 0x1D404 => array(0x65),
2800
-                    0x1D405 => array(0x66), 0x1D406 => array(0x67), 0x1D407 => array(0x68),
2801
-                    0x1D408 => array(0x69), 0x1D409 => array(0x6A), 0x1D40A => array(0x6B),
2802
-                    0x1D40B => array(0x6C), 0x1D40C => array(0x6D), 0x1D40D => array(0x6E),
2803
-                    0x1D40E => array(0x6F), 0x1D40F => array(0x70), 0x1D410 => array(0x71),
2804
-                    0x1D411 => array(0x72), 0x1D412 => array(0x73), 0x1D413 => array(0x74),
2805
-                    0x1D414 => array(0x75), 0x1D415 => array(0x76), 0x1D416 => array(0x77),
2806
-                    0x1D417 => array(0x78), 0x1D418 => array(0x79), 0x1D419 => array(0x7A),
2807
-                    0x1D41A => array(0x61), 0x1D41B => array(0x62), 0x1D41C => array(0x63),
2808
-                    0x1D41D => array(0x64), 0x1D41E => array(0x65), 0x1D41F => array(0x66),
2809
-                    0x1D420 => array(0x67), 0x1D421 => array(0x68), 0x1D422 => array(0x69),
2810
-                    0x1D423 => array(0x6A), 0x1D424 => array(0x6B), 0x1D425 => array(0x6C),
2811
-                    0x1D426 => array(0x6D), 0x1D427 => array(0x6E), 0x1D428 => array(0x6F),
2812
-                    0x1D429 => array(0x70), 0x1D42A => array(0x71), 0x1D42B => array(0x72),
2813
-                    0x1D42C => array(0x73), 0x1D42D => array(0x74), 0x1D42E => array(0x75),
2814
-                    0x1D42F => array(0x76), 0x1D430 => array(0x77), 0x1D431 => array(0x78),
2815
-                    0x1D432 => array(0x79), 0x1D433 => array(0x7A), 0x1D434 => array(0x61),
2816
-                    0x1D435 => array(0x62), 0x1D436 => array(0x63), 0x1D437 => array(0x64),
2817
-                    0x1D438 => array(0x65), 0x1D439 => array(0x66), 0x1D43A => array(0x67),
2818
-                    0x1D43B => array(0x68), 0x1D43C => array(0x69), 0x1D43D => array(0x6A),
2819
-                    0x1D43E => array(0x6B), 0x1D43F => array(0x6C), 0x1D440 => array(0x6D),
2820
-                    0x1D441 => array(0x6E), 0x1D442 => array(0x6F), 0x1D443 => array(0x70),
2821
-                    0x1D444 => array(0x71), 0x1D445 => array(0x72), 0x1D446 => array(0x73),
2822
-                    0x1D447 => array(0x74), 0x1D448 => array(0x75), 0x1D449 => array(0x76),
2823
-                    0x1D44A => array(0x77), 0x1D44B => array(0x78), 0x1D44C => array(0x79),
2824
-                    0x1D44D => array(0x7A), 0x1D44E => array(0x61), 0x1D44F => array(0x62),
2825
-                    0x1D450 => array(0x63), 0x1D451 => array(0x64), 0x1D452 => array(0x65),
2826
-                    0x1D453 => array(0x66), 0x1D454 => array(0x67), 0x1D456 => array(0x69),
2827
-                    0x1D457 => array(0x6A), 0x1D458 => array(0x6B), 0x1D459 => array(0x6C),
2828
-                    0x1D45A => array(0x6D), 0x1D45B => array(0x6E), 0x1D45C => array(0x6F),
2829
-                    0x1D45D => array(0x70), 0x1D45E => array(0x71), 0x1D45F => array(0x72),
2830
-                    0x1D460 => array(0x73), 0x1D461 => array(0x74), 0x1D462 => array(0x75),
2831
-                    0x1D463 => array(0x76), 0x1D464 => array(0x77), 0x1D465 => array(0x78),
2832
-                    0x1D466 => array(0x79), 0x1D467 => array(0x7A), 0x1D468 => array(0x61),
2833
-                    0x1D469 => array(0x62), 0x1D46A => array(0x63), 0x1D46B => array(0x64),
2834
-                    0x1D46C => array(0x65), 0x1D46D => array(0x66), 0x1D46E => array(0x67),
2835
-                    0x1D46F => array(0x68), 0x1D470 => array(0x69), 0x1D471 => array(0x6A),
2836
-                    0x1D472 => array(0x6B), 0x1D473 => array(0x6C), 0x1D474 => array(0x6D),
2837
-                    0x1D475 => array(0x6E), 0x1D476 => array(0x6F), 0x1D477 => array(0x70),
2838
-                    0x1D478 => array(0x71), 0x1D479 => array(0x72), 0x1D47A => array(0x73),
2839
-                    0x1D47B => array(0x74), 0x1D47C => array(0x75), 0x1D47D => array(0x76),
2840
-                    0x1D47E => array(0x77), 0x1D47F => array(0x78), 0x1D480 => array(0x79),
2841
-                    0x1D481 => array(0x7A), 0x1D482 => array(0x61), 0x1D483 => array(0x62),
2842
-                    0x1D484 => array(0x63), 0x1D485 => array(0x64), 0x1D486 => array(0x65),
2843
-                    0x1D487 => array(0x66), 0x1D488 => array(0x67), 0x1D489 => array(0x68),
2844
-                    0x1D48A => array(0x69), 0x1D48B => array(0x6A), 0x1D48C => array(0x6B),
2845
-                    0x1D48D => array(0x6C), 0x1D48E => array(0x6D), 0x1D48F => array(0x6E),
2846
-                    0x1D490 => array(0x6F), 0x1D491 => array(0x70), 0x1D492 => array(0x71),
2847
-                    0x1D493 => array(0x72), 0x1D494 => array(0x73), 0x1D495 => array(0x74),
2848
-                    0x1D496 => array(0x75), 0x1D497 => array(0x76), 0x1D498 => array(0x77),
2849
-                    0x1D499 => array(0x78), 0x1D49A => array(0x79), 0x1D49B => array(0x7A),
2850
-                    0x1D49C => array(0x61), 0x1D49E => array(0x63), 0x1D49F => array(0x64),
2851
-                    0x1D4A2 => array(0x67), 0x1D4A5 => array(0x6A), 0x1D4A6 => array(0x6B),
2852
-                    0x1D4A9 => array(0x6E), 0x1D4AA => array(0x6F), 0x1D4AB => array(0x70),
2853
-                    0x1D4AC => array(0x71), 0x1D4AE => array(0x73), 0x1D4AF => array(0x74),
2854
-                    0x1D4B0 => array(0x75), 0x1D4B1 => array(0x76), 0x1D4B2 => array(0x77),
2855
-                    0x1D4B3 => array(0x78), 0x1D4B4 => array(0x79), 0x1D4B5 => array(0x7A),
2856
-                    0x1D4B6 => array(0x61), 0x1D4B7 => array(0x62), 0x1D4B8 => array(0x63),
2857
-                    0x1D4B9 => array(0x64), 0x1D4BB => array(0x66), 0x1D4BD => array(0x68),
2858
-                    0x1D4BE => array(0x69), 0x1D4BF => array(0x6A), 0x1D4C0 => array(0x6B),
2859
-                    0x1D4C1 => array(0x6C), 0x1D4C2 => array(0x6D), 0x1D4C3 => array(0x6E),
2860
-                    0x1D4C5 => array(0x70), 0x1D4C6 => array(0x71), 0x1D4C7 => array(0x72),
2861
-                    0x1D4C8 => array(0x73), 0x1D4C9 => array(0x74), 0x1D4CA => array(0x75),
2862
-                    0x1D4CB => array(0x76), 0x1D4CC => array(0x77), 0x1D4CD => array(0x78),
2863
-                    0x1D4CE => array(0x79), 0x1D4CF => array(0x7A), 0x1D4D0 => array(0x61),
2864
-                    0x1D4D1 => array(0x62), 0x1D4D2 => array(0x63), 0x1D4D3 => array(0x64),
2865
-                    0x1D4D4 => array(0x65), 0x1D4D5 => array(0x66), 0x1D4D6 => array(0x67),
2866
-                    0x1D4D7 => array(0x68), 0x1D4D8 => array(0x69), 0x1D4D9 => array(0x6A),
2867
-                    0x1D4DA => array(0x6B), 0x1D4DB => array(0x6C), 0x1D4DC => array(0x6D),
2868
-                    0x1D4DD => array(0x6E), 0x1D4DE => array(0x6F), 0x1D4DF => array(0x70),
2869
-                    0x1D4E0 => array(0x71), 0x1D4E1 => array(0x72), 0x1D4E2 => array(0x73),
2870
-                    0x1D4E3 => array(0x74), 0x1D4E4 => array(0x75), 0x1D4E5 => array(0x76),
2871
-                    0x1D4E6 => array(0x77), 0x1D4E7 => array(0x78), 0x1D4E8 => array(0x79),
2872
-                    0x1D4E9 => array(0x7A), 0x1D4EA => array(0x61), 0x1D4EB => array(0x62),
2873
-                    0x1D4EC => array(0x63), 0x1D4ED => array(0x64), 0x1D4EE => array(0x65),
2874
-                    0x1D4EF => array(0x66), 0x1D4F0 => array(0x67), 0x1D4F1 => array(0x68),
2875
-                    0x1D4F2 => array(0x69), 0x1D4F3 => array(0x6A), 0x1D4F4 => array(0x6B),
2876
-                    0x1D4F5 => array(0x6C), 0x1D4F6 => array(0x6D), 0x1D4F7 => array(0x6E),
2877
-                    0x1D4F8 => array(0x6F), 0x1D4F9 => array(0x70), 0x1D4FA => array(0x71),
2878
-                    0x1D4FB => array(0x72), 0x1D4FC => array(0x73), 0x1D4FD => array(0x74),
2879
-                    0x1D4FE => array(0x75), 0x1D4FF => array(0x76), 0x1D500 => array(0x77),
2880
-                    0x1D501 => array(0x78), 0x1D502 => array(0x79), 0x1D503 => array(0x7A),
2881
-                    0x1D504 => array(0x61), 0x1D505 => array(0x62), 0x1D507 => array(0x64),
2882
-                    0x1D508 => array(0x65), 0x1D509 => array(0x66), 0x1D50A => array(0x67),
2883
-                    0x1D50D => array(0x6A), 0x1D50E => array(0x6B), 0x1D50F => array(0x6C),
2884
-                    0x1D510 => array(0x6D), 0x1D511 => array(0x6E), 0x1D512 => array(0x6F),
2885
-                    0x1D513 => array(0x70), 0x1D514 => array(0x71), 0x1D516 => array(0x73),
2886
-                    0x1D517 => array(0x74), 0x1D518 => array(0x75), 0x1D519 => array(0x76),
2887
-                    0x1D51A => array(0x77), 0x1D51B => array(0x78), 0x1D51C => array(0x79),
2888
-                    0x1D51E => array(0x61), 0x1D51F => array(0x62), 0x1D520 => array(0x63),
2889
-                    0x1D521 => array(0x64), 0x1D522 => array(0x65), 0x1D523 => array(0x66),
2890
-                    0x1D524 => array(0x67), 0x1D525 => array(0x68), 0x1D526 => array(0x69),
2891
-                    0x1D527 => array(0x6A), 0x1D528 => array(0x6B), 0x1D529 => array(0x6C),
2892
-                    0x1D52A => array(0x6D), 0x1D52B => array(0x6E), 0x1D52C => array(0x6F),
2893
-                    0x1D52D => array(0x70), 0x1D52E => array(0x71), 0x1D52F => array(0x72),
2894
-                    0x1D530 => array(0x73), 0x1D531 => array(0x74), 0x1D532 => array(0x75),
2895
-                    0x1D533 => array(0x76), 0x1D534 => array(0x77), 0x1D535 => array(0x78),
2896
-                    0x1D536 => array(0x79), 0x1D537 => array(0x7A), 0x1D538 => array(0x61),
2897
-                    0x1D539 => array(0x62), 0x1D53B => array(0x64), 0x1D53C => array(0x65),
2898
-                    0x1D53D => array(0x66), 0x1D53E => array(0x67), 0x1D540 => array(0x69),
2899
-                    0x1D541 => array(0x6A), 0x1D542 => array(0x6B), 0x1D543 => array(0x6C),
2900
-                    0x1D544 => array(0x6D), 0x1D546 => array(0x6F), 0x1D54A => array(0x73),
2901
-                    0x1D54B => array(0x74), 0x1D54C => array(0x75), 0x1D54D => array(0x76),
2902
-                    0x1D54E => array(0x77), 0x1D54F => array(0x78), 0x1D550 => array(0x79),
2903
-                    0x1D552 => array(0x61), 0x1D553 => array(0x62), 0x1D554 => array(0x63),
2904
-                    0x1D555 => array(0x64), 0x1D556 => array(0x65), 0x1D557 => array(0x66),
2905
-                    0x1D558 => array(0x67), 0x1D559 => array(0x68), 0x1D55A => array(0x69),
2906
-                    0x1D55B => array(0x6A), 0x1D55C => array(0x6B), 0x1D55D => array(0x6C),
2907
-                    0x1D55E => array(0x6D), 0x1D55F => array(0x6E), 0x1D560 => array(0x6F),
2908
-                    0x1D561 => array(0x70), 0x1D562 => array(0x71), 0x1D563 => array(0x72),
2909
-                    0x1D564 => array(0x73), 0x1D565 => array(0x74), 0x1D566 => array(0x75),
2910
-                    0x1D567 => array(0x76), 0x1D568 => array(0x77), 0x1D569 => array(0x78),
2911
-                    0x1D56A => array(0x79), 0x1D56B => array(0x7A), 0x1D56C => array(0x61),
2912
-                    0x1D56D => array(0x62), 0x1D56E => array(0x63), 0x1D56F => array(0x64),
2913
-                    0x1D570 => array(0x65), 0x1D571 => array(0x66), 0x1D572 => array(0x67),
2914
-                    0x1D573 => array(0x68), 0x1D574 => array(0x69), 0x1D575 => array(0x6A),
2915
-                    0x1D576 => array(0x6B), 0x1D577 => array(0x6C), 0x1D578 => array(0x6D),
2916
-                    0x1D579 => array(0x6E), 0x1D57A => array(0x6F), 0x1D57B => array(0x70),
2917
-                    0x1D57C => array(0x71), 0x1D57D => array(0x72), 0x1D57E => array(0x73),
2918
-                    0x1D57F => array(0x74), 0x1D580 => array(0x75), 0x1D581 => array(0x76),
2919
-                    0x1D582 => array(0x77), 0x1D583 => array(0x78), 0x1D584 => array(0x79),
2920
-                    0x1D585 => array(0x7A), 0x1D586 => array(0x61), 0x1D587 => array(0x62),
2921
-                    0x1D588 => array(0x63), 0x1D589 => array(0x64), 0x1D58A => array(0x65),
2922
-                    0x1D58B => array(0x66), 0x1D58C => array(0x67), 0x1D58D => array(0x68),
2923
-                    0x1D58E => array(0x69), 0x1D58F => array(0x6A), 0x1D590 => array(0x6B),
2924
-                    0x1D591 => array(0x6C), 0x1D592 => array(0x6D), 0x1D593 => array(0x6E),
2925
-                    0x1D594 => array(0x6F), 0x1D595 => array(0x70), 0x1D596 => array(0x71),
2926
-                    0x1D597 => array(0x72), 0x1D598 => array(0x73), 0x1D599 => array(0x74),
2927
-                    0x1D59A => array(0x75), 0x1D59B => array(0x76), 0x1D59C => array(0x77),
2928
-                    0x1D59D => array(0x78), 0x1D59E => array(0x79), 0x1D59F => array(0x7A),
2929
-                    0x1D5A0 => array(0x61), 0x1D5A1 => array(0x62), 0x1D5A2 => array(0x63),
2930
-                    0x1D5A3 => array(0x64), 0x1D5A4 => array(0x65), 0x1D5A5 => array(0x66),
2931
-                    0x1D5A6 => array(0x67), 0x1D5A7 => array(0x68), 0x1D5A8 => array(0x69),
2932
-                    0x1D5A9 => array(0x6A), 0x1D5AA => array(0x6B), 0x1D5AB => array(0x6C),
2933
-                    0x1D5AC => array(0x6D), 0x1D5AD => array(0x6E), 0x1D5AE => array(0x6F),
2934
-                    0x1D5AF => array(0x70), 0x1D5B0 => array(0x71), 0x1D5B1 => array(0x72),
2935
-                    0x1D5B2 => array(0x73), 0x1D5B3 => array(0x74), 0x1D5B4 => array(0x75),
2936
-                    0x1D5B5 => array(0x76), 0x1D5B6 => array(0x77), 0x1D5B7 => array(0x78),
2937
-                    0x1D5B8 => array(0x79), 0x1D5B9 => array(0x7A), 0x1D5BA => array(0x61),
2938
-                    0x1D5BB => array(0x62), 0x1D5BC => array(0x63), 0x1D5BD => array(0x64),
2939
-                    0x1D5BE => array(0x65), 0x1D5BF => array(0x66), 0x1D5C0 => array(0x67),
2940
-                    0x1D5C1 => array(0x68), 0x1D5C2 => array(0x69), 0x1D5C3 => array(0x6A),
2941
-                    0x1D5C4 => array(0x6B), 0x1D5C5 => array(0x6C), 0x1D5C6 => array(0x6D),
2942
-                    0x1D5C7 => array(0x6E), 0x1D5C8 => array(0x6F), 0x1D5C9 => array(0x70),
2943
-                    0x1D5CA => array(0x71), 0x1D5CB => array(0x72), 0x1D5CC => array(0x73),
2944
-                    0x1D5CD => array(0x74), 0x1D5CE => array(0x75), 0x1D5CF => array(0x76),
2945
-                    0x1D5D0 => array(0x77), 0x1D5D1 => array(0x78), 0x1D5D2 => array(0x79),
2946
-                    0x1D5D3 => array(0x7A), 0x1D5D4 => array(0x61), 0x1D5D5 => array(0x62),
2947
-                    0x1D5D6 => array(0x63), 0x1D5D7 => array(0x64), 0x1D5D8 => array(0x65),
2948
-                    0x1D5D9 => array(0x66), 0x1D5DA => array(0x67), 0x1D5DB => array(0x68),
2949
-                    0x1D5DC => array(0x69), 0x1D5DD => array(0x6A), 0x1D5DE => array(0x6B),
2950
-                    0x1D5DF => array(0x6C), 0x1D5E0 => array(0x6D), 0x1D5E1 => array(0x6E),
2951
-                    0x1D5E2 => array(0x6F), 0x1D5E3 => array(0x70), 0x1D5E4 => array(0x71),
2952
-                    0x1D5E5 => array(0x72), 0x1D5E6 => array(0x73), 0x1D5E7 => array(0x74),
2953
-                    0x1D5E8 => array(0x75), 0x1D5E9 => array(0x76), 0x1D5EA => array(0x77),
2954
-                    0x1D5EB => array(0x78), 0x1D5EC => array(0x79), 0x1D5ED => array(0x7A),
2955
-                    0x1D5EE => array(0x61), 0x1D5EF => array(0x62), 0x1D5F0 => array(0x63),
2956
-                    0x1D5F1 => array(0x64), 0x1D5F2 => array(0x65), 0x1D5F3 => array(0x66),
2957
-                    0x1D5F4 => array(0x67), 0x1D5F5 => array(0x68), 0x1D5F6 => array(0x69),
2958
-                    0x1D5F7 => array(0x6A), 0x1D5F8 => array(0x6B), 0x1D5F9 => array(0x6C),
2959
-                    0x1D5FA => array(0x6D), 0x1D5FB => array(0x6E), 0x1D5FC => array(0x6F),
2960
-                    0x1D5FD => array(0x70), 0x1D5FE => array(0x71), 0x1D5FF => array(0x72),
2961
-                    0x1D600 => array(0x73), 0x1D601 => array(0x74), 0x1D602 => array(0x75),
2962
-                    0x1D603 => array(0x76), 0x1D604 => array(0x77), 0x1D605 => array(0x78),
2963
-                    0x1D606 => array(0x79), 0x1D607 => array(0x7A), 0x1D608 => array(0x61),
2964
-                    0x1D609 => array(0x62), 0x1D60A => array(0x63), 0x1D60B => array(0x64),
2965
-                    0x1D60C => array(0x65), 0x1D60D => array(0x66), 0x1D60E => array(0x67),
2966
-                    0x1D60F => array(0x68), 0x1D610 => array(0x69), 0x1D611 => array(0x6A),
2967
-                    0x1D612 => array(0x6B), 0x1D613 => array(0x6C), 0x1D614 => array(0x6D),
2968
-                    0x1D615 => array(0x6E), 0x1D616 => array(0x6F), 0x1D617 => array(0x70),
2969
-                    0x1D618 => array(0x71), 0x1D619 => array(0x72), 0x1D61A => array(0x73),
2970
-                    0x1D61B => array(0x74), 0x1D61C => array(0x75), 0x1D61D => array(0x76),
2971
-                    0x1D61E => array(0x77), 0x1D61F => array(0x78), 0x1D620 => array(0x79),
2972
-                    0x1D621 => array(0x7A), 0x1D622 => array(0x61), 0x1D623 => array(0x62),
2973
-                    0x1D624 => array(0x63), 0x1D625 => array(0x64), 0x1D626 => array(0x65),
2974
-                    0x1D627 => array(0x66), 0x1D628 => array(0x67), 0x1D629 => array(0x68),
2975
-                    0x1D62A => array(0x69), 0x1D62B => array(0x6A), 0x1D62C => array(0x6B),
2976
-                    0x1D62D => array(0x6C), 0x1D62E => array(0x6D), 0x1D62F => array(0x6E),
2977
-                    0x1D630 => array(0x6F), 0x1D631 => array(0x70), 0x1D632 => array(0x71),
2978
-                    0x1D633 => array(0x72), 0x1D634 => array(0x73), 0x1D635 => array(0x74),
2979
-                    0x1D636 => array(0x75), 0x1D637 => array(0x76), 0x1D638 => array(0x77),
2980
-                    0x1D639 => array(0x78), 0x1D63A => array(0x79), 0x1D63B => array(0x7A),
2981
-                    0x1D63C => array(0x61), 0x1D63D => array(0x62), 0x1D63E => array(0x63),
2982
-                    0x1D63F => array(0x64), 0x1D640 => array(0x65), 0x1D641 => array(0x66),
2983
-                    0x1D642 => array(0x67), 0x1D643 => array(0x68), 0x1D644 => array(0x69),
2984
-                    0x1D645 => array(0x6A), 0x1D646 => array(0x6B), 0x1D647 => array(0x6C),
2985
-                    0x1D648 => array(0x6D), 0x1D649 => array(0x6E), 0x1D64A => array(0x6F),
2986
-                    0x1D64B => array(0x70), 0x1D64C => array(0x71), 0x1D64D => array(0x72),
2987
-                    0x1D64E => array(0x73), 0x1D64F => array(0x74), 0x1D650 => array(0x75),
2988
-                    0x1D651 => array(0x76), 0x1D652 => array(0x77), 0x1D653 => array(0x78),
2989
-                    0x1D654 => array(0x79), 0x1D655 => array(0x7A), 0x1D656 => array(0x61),
2990
-                    0x1D657 => array(0x62), 0x1D658 => array(0x63), 0x1D659 => array(0x64),
2991
-                    0x1D65A => array(0x65), 0x1D65B => array(0x66), 0x1D65C => array(0x67),
2992
-                    0x1D65D => array(0x68), 0x1D65E => array(0x69), 0x1D65F => array(0x6A),
2993
-                    0x1D660 => array(0x6B), 0x1D661 => array(0x6C), 0x1D662 => array(0x6D),
2994
-                    0x1D663 => array(0x6E), 0x1D664 => array(0x6F), 0x1D665 => array(0x70),
2995
-                    0x1D666 => array(0x71), 0x1D667 => array(0x72), 0x1D668 => array(0x73),
2996
-                    0x1D669 => array(0x74), 0x1D66A => array(0x75), 0x1D66B => array(0x76),
2997
-                    0x1D66C => array(0x77), 0x1D66D => array(0x78), 0x1D66E => array(0x79),
2998
-                    0x1D66F => array(0x7A), 0x1D670 => array(0x61), 0x1D671 => array(0x62),
2999
-                    0x1D672 => array(0x63), 0x1D673 => array(0x64), 0x1D674 => array(0x65),
3000
-                    0x1D675 => array(0x66), 0x1D676 => array(0x67), 0x1D677 => array(0x68),
3001
-                    0x1D678 => array(0x69), 0x1D679 => array(0x6A), 0x1D67A => array(0x6B),
3002
-                    0x1D67B => array(0x6C), 0x1D67C => array(0x6D), 0x1D67D => array(0x6E),
3003
-                    0x1D67E => array(0x6F), 0x1D67F => array(0x70), 0x1D680 => array(0x71),
3004
-                    0x1D681 => array(0x72), 0x1D682 => array(0x73), 0x1D683 => array(0x74),
3005
-                    0x1D684 => array(0x75), 0x1D685 => array(0x76), 0x1D686 => array(0x77),
3006
-                    0x1D687 => array(0x78), 0x1D688 => array(0x79), 0x1D689 => array(0x7A),
3007
-                    0x1D68A => array(0x61), 0x1D68B => array(0x62), 0x1D68C => array(0x63),
3008
-                    0x1D68D => array(0x64), 0x1D68E => array(0x65), 0x1D68F => array(0x66),
3009
-                    0x1D690 => array(0x67), 0x1D691 => array(0x68), 0x1D692 => array(0x69),
3010
-                    0x1D693 => array(0x6A), 0x1D694 => array(0x6B), 0x1D695 => array(0x6C),
3011
-                    0x1D696 => array(0x6D), 0x1D697 => array(0x6E), 0x1D698 => array(0x6F),
3012
-                    0x1D699 => array(0x70), 0x1D69A => array(0x71), 0x1D69B => array(0x72),
3013
-                    0x1D69C => array(0x73), 0x1D69D => array(0x74), 0x1D69E => array(0x75),
3014
-                    0x1D69F => array(0x76), 0x1D6A0 => array(0x77), 0x1D6A1 => array(0x78),
3015
-                    0x1D6A2 => array(0x79), 0x1D6A3 => array(0x7A), 0x1D6A4 => array(0x131),
3016
-                    0x1D6A5 => array(0x237), 0x1D6A8 => array(0x3B1), 0x1D6A9 => array(0x3B2),
3017
-                    0x1D6AA => array(0x3B3), 0x1D6AB => array(0x3B4), 0x1D6AC => array(0x3B5),
3018
-                    0x1D6AD => array(0x3B6), 0x1D6AE => array(0x3B7), 0x1D6AF => array(0x3B8),
3019
-                    0x1D6B0 => array(0x3B9), 0x1D6B1 => array(0x3BA), 0x1D6B2 => array(0x3BB),
3020
-                    0x1D6B3 => array(0x3BC), 0x1D6B4 => array(0x3BD), 0x1D6B5 => array(0x3BE),
3021
-                    0x1D6B6 => array(0x3BF), 0x1D6B7 => array(0x3C0), 0x1D6B8 => array(0x3C1),
3022
-                    0x1D6B9 => array(0x3B8), 0x1D6BA => array(0x3C3), 0x1D6BB => array(0x3C4),
3023
-                    0x1D6BC => array(0x3C5), 0x1D6BD => array(0x3C6), 0x1D6BE => array(0x3C7),
3024
-                    0x1D6BF => array(0x3C8), 0x1D6C0 => array(0x3C9), 0x1D6C1 => array(0x2207),
3025
-                    0x1D6C2 => array(0x3B1), 0x1D6C3 => array(0x3B2), 0x1D6C4 => array(0x3B3),
3026
-                    0x1D6C5 => array(0x3B4), 0x1D6C6 => array(0x3B5), 0x1D6C7 => array(0x3B6),
3027
-                    0x1D6C8 => array(0x3B7), 0x1D6C9 => array(0x3B8), 0x1D6CA => array(0x3B9),
3028
-                    0x1D6CB => array(0x3BA), 0x1D6CC => array(0x3BB), 0x1D6CD => array(0x3BC),
3029
-                    0x1D6CE => array(0x3BD), 0x1D6CF => array(0x3BE), 0x1D6D0 => array(0x3BF),
3030
-                    0x1D6D1 => array(0x3C0), 0x1D6D2 => array(0x3C1), 0x1D6D3 => array(0x3C3),
3031
-                    0x1D6D4 => array(0x3C3), 0x1D6D5 => array(0x3C4), 0x1D6D6 => array(0x3C5),
3032
-                    0x1D6D7 => array(0x3C6), 0x1D6D8 => array(0x3C7), 0x1D6D9 => array(0x3C8),
3033
-                    0x1D6DA => array(0x3C9), 0x1D6DB => array(0x2202), 0x1D6DC => array(0x3B5),
3034
-                    0x1D6DD => array(0x3B8), 0x1D6DE => array(0x3BA), 0x1D6DF => array(0x3C6),
3035
-                    0x1D6E0 => array(0x3C1), 0x1D6E1 => array(0x3C0), 0x1D6E2 => array(0x3B1),
3036
-                    0x1D6E3 => array(0x3B2), 0x1D6E4 => array(0x3B3), 0x1D6E5 => array(0x3B4),
3037
-                    0x1D6E6 => array(0x3B5), 0x1D6E7 => array(0x3B6), 0x1D6E8 => array(0x3B7),
3038
-                    0x1D6E9 => array(0x3B8), 0x1D6EA => array(0x3B9), 0x1D6EB => array(0x3BA),
3039
-                    0x1D6EC => array(0x3BB), 0x1D6ED => array(0x3BC), 0x1D6EE => array(0x3BD),
3040
-                    0x1D6EF => array(0x3BE), 0x1D6F0 => array(0x3BF), 0x1D6F1 => array(0x3C0),
3041
-                    0x1D6F2 => array(0x3C1), 0x1D6F3 => array(0x3B8), 0x1D6F4 => array(0x3C3),
3042
-                    0x1D6F5 => array(0x3C4), 0x1D6F6 => array(0x3C5), 0x1D6F7 => array(0x3C6),
3043
-                    0x1D6F8 => array(0x3C7), 0x1D6F9 => array(0x3C8), 0x1D6FA => array(0x3C9),
3044
-                    0x1D6FB => array(0x2207), 0x1D6FC => array(0x3B1), 0x1D6FD => array(0x3B2),
3045
-                    0x1D6FE => array(0x3B3), 0x1D6FF => array(0x3B4), 0x1D700 => array(0x3B5),
3046
-                    0x1D701 => array(0x3B6), 0x1D702 => array(0x3B7), 0x1D703 => array(0x3B8),
3047
-                    0x1D704 => array(0x3B9), 0x1D705 => array(0x3BA), 0x1D706 => array(0x3BB),
3048
-                    0x1D707 => array(0x3BC), 0x1D708 => array(0x3BD), 0x1D709 => array(0x3BE),
3049
-                    0x1D70A => array(0x3BF), 0x1D70B => array(0x3C0), 0x1D70C => array(0x3C1),
3050
-                    0x1D70D => array(0x3C3), 0x1D70E => array(0x3C3), 0x1D70F => array(0x3C4),
3051
-                    0x1D710 => array(0x3C5), 0x1D711 => array(0x3C6), 0x1D712 => array(0x3C7),
3052
-                    0x1D713 => array(0x3C8), 0x1D714 => array(0x3C9), 0x1D715 => array(0x2202),
3053
-                    0x1D716 => array(0x3B5), 0x1D717 => array(0x3B8), 0x1D718 => array(0x3BA),
3054
-                    0x1D719 => array(0x3C6), 0x1D71A => array(0x3C1), 0x1D71B => array(0x3C0),
3055
-                    0x1D71C => array(0x3B1), 0x1D71D => array(0x3B2), 0x1D71E => array(0x3B3),
3056
-                    0x1D71F => array(0x3B4), 0x1D720 => array(0x3B5), 0x1D721 => array(0x3B6),
3057
-                    0x1D722 => array(0x3B7), 0x1D723 => array(0x3B8), 0x1D724 => array(0x3B9),
3058
-                    0x1D725 => array(0x3BA), 0x1D726 => array(0x3BB), 0x1D727 => array(0x3BC),
3059
-                    0x1D728 => array(0x3BD), 0x1D729 => array(0x3BE), 0x1D72A => array(0x3BF),
3060
-                    0x1D72B => array(0x3C0), 0x1D72C => array(0x3C1), 0x1D72D => array(0x3B8),
3061
-                    0x1D72E => array(0x3C3), 0x1D72F => array(0x3C4), 0x1D730 => array(0x3C5),
3062
-                    0x1D731 => array(0x3C6), 0x1D732 => array(0x3C7), 0x1D733 => array(0x3C8),
3063
-                    0x1D734 => array(0x3C9), 0x1D735 => array(0x2207), 0x1D736 => array(0x3B1),
3064
-                    0x1D737 => array(0x3B2), 0x1D738 => array(0x3B3), 0x1D739 => array(0x3B4),
3065
-                    0x1D73A => array(0x3B5), 0x1D73B => array(0x3B6), 0x1D73C => array(0x3B7),
3066
-                    0x1D73D => array(0x3B8), 0x1D73E => array(0x3B9), 0x1D73F => array(0x3BA),
3067
-                    0x1D740 => array(0x3BB), 0x1D741 => array(0x3BC), 0x1D742 => array(0x3BD),
3068
-                    0x1D743 => array(0x3BE), 0x1D744 => array(0x3BF), 0x1D745 => array(0x3C0),
3069
-                    0x1D746 => array(0x3C1), 0x1D747 => array(0x3C3), 0x1D748 => array(0x3C3),
3070
-                    0x1D749 => array(0x3C4), 0x1D74A => array(0x3C5), 0x1D74B => array(0x3C6),
3071
-                    0x1D74C => array(0x3C7), 0x1D74D => array(0x3C8), 0x1D74E => array(0x3C9),
3072
-                    0x1D74F => array(0x2202), 0x1D750 => array(0x3B5), 0x1D751 => array(0x3B8),
3073
-                    0x1D752 => array(0x3BA), 0x1D753 => array(0x3C6), 0x1D754 => array(0x3C1),
3074
-                    0x1D755 => array(0x3C0), 0x1D756 => array(0x3B1), 0x1D757 => array(0x3B2),
3075
-                    0x1D758 => array(0x3B3), 0x1D759 => array(0x3B4), 0x1D75A => array(0x3B5),
3076
-                    0x1D75B => array(0x3B6), 0x1D75C => array(0x3B7), 0x1D75D => array(0x3B8),
3077
-                    0x1D75E => array(0x3B9), 0x1D75F => array(0x3BA), 0x1D760 => array(0x3BB),
3078
-                    0x1D761 => array(0x3BC), 0x1D762 => array(0x3BD), 0x1D763 => array(0x3BE),
3079
-                    0x1D764 => array(0x3BF), 0x1D765 => array(0x3C0), 0x1D766 => array(0x3C1),
3080
-                    0x1D767 => array(0x3B8), 0x1D768 => array(0x3C3), 0x1D769 => array(0x3C4),
3081
-                    0x1D76A => array(0x3C5), 0x1D76B => array(0x3C6), 0x1D76C => array(0x3C7),
3082
-                    0x1D76D => array(0x3C8), 0x1D76E => array(0x3C9), 0x1D76F => array(0x2207),
3083
-                    0x1D770 => array(0x3B1), 0x1D771 => array(0x3B2), 0x1D772 => array(0x3B3),
3084
-                    0x1D773 => array(0x3B4), 0x1D774 => array(0x3B5), 0x1D775 => array(0x3B6),
3085
-                    0x1D776 => array(0x3B7), 0x1D777 => array(0x3B8), 0x1D778 => array(0x3B9),
3086
-                    0x1D779 => array(0x3BA), 0x1D77A => array(0x3BB), 0x1D77B => array(0x3BC),
3087
-                    0x1D77C => array(0x3BD), 0x1D77D => array(0x3BE), 0x1D77E => array(0x3BF),
3088
-                    0x1D77F => array(0x3C0), 0x1D780 => array(0x3C1), 0x1D781 => array(0x3C3),
3089
-                    0x1D782 => array(0x3C3), 0x1D783 => array(0x3C4), 0x1D784 => array(0x3C5),
3090
-                    0x1D785 => array(0x3C6), 0x1D786 => array(0x3C7), 0x1D787 => array(0x3C8),
3091
-                    0x1D788 => array(0x3C9), 0x1D789 => array(0x2202), 0x1D78A => array(0x3B5),
3092
-                    0x1D78B => array(0x3B8), 0x1D78C => array(0x3BA), 0x1D78D => array(0x3C6),
3093
-                    0x1D78E => array(0x3C1), 0x1D78F => array(0x3C0), 0x1D790 => array(0x3B1),
3094
-                    0x1D791 => array(0x3B2), 0x1D792 => array(0x3B3), 0x1D793 => array(0x3B4),
3095
-                    0x1D794 => array(0x3B5), 0x1D795 => array(0x3B6), 0x1D796 => array(0x3B7),
3096
-                    0x1D797 => array(0x3B8), 0x1D798 => array(0x3B9), 0x1D799 => array(0x3BA),
3097
-                    0x1D79A => array(0x3BB), 0x1D79B => array(0x3BC), 0x1D79C => array(0x3BD),
3098
-                    0x1D79D => array(0x3BE), 0x1D79E => array(0x3BF), 0x1D79F => array(0x3C0),
3099
-                    0x1D7A0 => array(0x3C1), 0x1D7A1 => array(0x3B8), 0x1D7A2 => array(0x3C3),
3100
-                    0x1D7A3 => array(0x3C4), 0x1D7A4 => array(0x3C5), 0x1D7A5 => array(0x3C6),
3101
-                    0x1D7A6 => array(0x3C7), 0x1D7A7 => array(0x3C8), 0x1D7A8 => array(0x3C9),
3102
-                    0x1D7A9 => array(0x2207), 0x1D7AA => array(0x3B1), 0x1D7AB => array(0x3B2),
3103
-                    0x1D7AC => array(0x3B3), 0x1D7AD => array(0x3B4), 0x1D7AE => array(0x3B5),
3104
-                    0x1D7AF => array(0x3B6), 0x1D7B0 => array(0x3B7), 0x1D7B1 => array(0x3B8),
3105
-                    0x1D7B2 => array(0x3B9), 0x1D7B3 => array(0x3BA), 0x1D7B4 => array(0x3BB),
3106
-                    0x1D7B5 => array(0x3BC), 0x1D7B6 => array(0x3BD), 0x1D7B7 => array(0x3BE),
3107
-                    0x1D7B8 => array(0x3BF), 0x1D7B9 => array(0x3C0), 0x1D7BA => array(0x3C1),
3108
-                    0x1D7BB => array(0x3C3), 0x1D7BC => array(0x3C3), 0x1D7BD => array(0x3C4),
3109
-                    0x1D7BE => array(0x3C5), 0x1D7BF => array(0x3C6), 0x1D7C0 => array(0x3C7),
3110
-                    0x1D7C1 => array(0x3C8), 0x1D7C2 => array(0x3C9), 0x1D7C3 => array(0x2202),
3111
-                    0x1D7C4 => array(0x3B5), 0x1D7C5 => array(0x3B8), 0x1D7C6 => array(0x3BA),
3112
-                    0x1D7C7 => array(0x3C6), 0x1D7C8 => array(0x3C1), 0x1D7C9 => array(0x3C0),
3113
-                    0x1D7CA => array(0x3DD), 0x1D7CB => array(0x3DD), 0x1D7CE => array(0x30),
3114
-                    0x1D7CF => array(0x31), 0x1D7D0 => array(0x32), 0x1D7D1 => array(0x33),
3115
-                    0x1D7D2 => array(0x34), 0x1D7D3 => array(0x35), 0x1D7D4 => array(0x36),
3116
-                    0x1D7D5 => array(0x37), 0x1D7D6 => array(0x38), 0x1D7D7 => array(0x39),
3117
-                    0x1D7D8 => array(0x30), 0x1D7D9 => array(0x31), 0x1D7DA => array(0x32),
3118
-                    0x1D7DB => array(0x33), 0x1D7DC => array(0x34), 0x1D7DD => array(0x35),
3119
-                    0x1D7DE => array(0x36), 0x1D7DF => array(0x37), 0x1D7E0 => array(0x38),
3120
-                    0x1D7E1 => array(0x39), 0x1D7E2 => array(0x30), 0x1D7E3 => array(0x31),
3121
-                    0x1D7E4 => array(0x32), 0x1D7E5 => array(0x33), 0x1D7E6 => array(0x34),
3122
-                    0x1D7E7 => array(0x35), 0x1D7E8 => array(0x36), 0x1D7E9 => array(0x37),
3123
-                    0x1D7EA => array(0x38), 0x1D7EB => array(0x39), 0x1D7EC => array(0x30),
3124
-                    0x1D7ED => array(0x31), 0x1D7EE => array(0x32), 0x1D7EF => array(0x33),
3125
-                    0x1D7F0 => array(0x34), 0x1D7F1 => array(0x35), 0x1D7F2 => array(0x36),
3126
-                    0x1D7F3 => array(0x37), 0x1D7F4 => array(0x38), 0x1D7F5 => array(0x39),
3127
-                    0x1D7F6 => array(0x30), 0x1D7F7 => array(0x31), 0x1D7F8 => array(0x32),
3128
-                    0x1D7F9 => array(0x33), 0x1D7FA => array(0x34), 0x1D7FB => array(0x35),
3129
-                    0x1D7FC => array(0x36), 0x1D7FD => array(0x37), 0x1D7FE => array(0x38),
3130
-                    0x1D7FF => array(0x39), 0x1EE00 => array(0x627), 0x1EE01 => array(0x628),
3131
-                    0x1EE02 => array(0x62C), 0x1EE03 => array(0x62F), 0x1EE05 => array(0x648),
3132
-                    0x1EE06 => array(0x632), 0x1EE07 => array(0x62D), 0x1EE08 => array(0x637),
3133
-                    0x1EE09 => array(0x64A), 0x1EE0A => array(0x643), 0x1EE0B => array(0x644),
3134
-                    0x1EE0C => array(0x645), 0x1EE0D => array(0x646), 0x1EE0E => array(0x633),
3135
-                    0x1EE0F => array(0x639), 0x1EE10 => array(0x641), 0x1EE11 => array(0x635),
3136
-                    0x1EE12 => array(0x642), 0x1EE13 => array(0x631), 0x1EE14 => array(0x634),
3137
-                    0x1EE15 => array(0x62A), 0x1EE16 => array(0x62B), 0x1EE17 => array(0x62E),
3138
-                    0x1EE18 => array(0x630), 0x1EE19 => array(0x636), 0x1EE1A => array(0x638),
3139
-                    0x1EE1B => array(0x63A), 0x1EE1C => array(0x66E), 0x1EE1D => array(0x6BA),
3140
-                    0x1EE1E => array(0x6A1), 0x1EE1F => array(0x66F), 0x1EE21 => array(0x628),
3141
-                    0x1EE22 => array(0x62C), 0x1EE24 => array(0x647), 0x1EE27 => array(0x62D),
3142
-                    0x1EE29 => array(0x64A), 0x1EE2A => array(0x643), 0x1EE2B => array(0x644),
3143
-                    0x1EE2C => array(0x645), 0x1EE2D => array(0x646), 0x1EE2E => array(0x633),
3144
-                    0x1EE2F => array(0x639), 0x1EE30 => array(0x641), 0x1EE31 => array(0x635),
3145
-                    0x1EE32 => array(0x642), 0x1EE34 => array(0x634), 0x1EE35 => array(0x62A),
3146
-                    0x1EE36 => array(0x62B), 0x1EE37 => array(0x62E), 0x1EE39 => array(0x636),
3147
-                    0x1EE3B => array(0x63A), 0x1EE42 => array(0x62C), 0x1EE47 => array(0x62D),
3148
-                    0x1EE49 => array(0x64A), 0x1EE4B => array(0x644), 0x1EE4D => array(0x646),
3149
-                    0x1EE4E => array(0x633), 0x1EE4F => array(0x639), 0x1EE51 => array(0x635),
3150
-                    0x1EE52 => array(0x642), 0x1EE54 => array(0x634), 0x1EE57 => array(0x62E),
3151
-                    0x1EE59 => array(0x636), 0x1EE5B => array(0x63A), 0x1EE5D => array(0x6BA),
3152
-                    0x1EE5F => array(0x66F), 0x1EE61 => array(0x628), 0x1EE62 => array(0x62C),
3153
-                    0x1EE64 => array(0x647), 0x1EE67 => array(0x62D), 0x1EE68 => array(0x637),
3154
-                    0x1EE69 => array(0x64A), 0x1EE6A => array(0x643), 0x1EE6C => array(0x645),
3155
-                    0x1EE6D => array(0x646), 0x1EE6E => array(0x633), 0x1EE6F => array(0x639),
3156
-                    0x1EE70 => array(0x641), 0x1EE71 => array(0x635), 0x1EE72 => array(0x642),
3157
-                    0x1EE74 => array(0x634), 0x1EE75 => array(0x62A), 0x1EE76 => array(0x62B),
3158
-                    0x1EE77 => array(0x62E), 0x1EE79 => array(0x636), 0x1EE7A => array(0x638),
3159
-                    0x1EE7B => array(0x63A), 0x1EE7C => array(0x66E), 0x1EE7E => array(0x6A1),
3160
-                    0x1EE80 => array(0x627), 0x1EE81 => array(0x628), 0x1EE82 => array(0x62C),
3161
-                    0x1EE83 => array(0x62F), 0x1EE84 => array(0x647), 0x1EE85 => array(0x648),
3162
-                    0x1EE86 => array(0x632), 0x1EE87 => array(0x62D), 0x1EE88 => array(0x637),
3163
-                    0x1EE89 => array(0x64A), 0x1EE8B => array(0x644), 0x1EE8C => array(0x645),
3164
-                    0x1EE8D => array(0x646), 0x1EE8E => array(0x633), 0x1EE8F => array(0x639),
3165
-                    0x1EE90 => array(0x641), 0x1EE91 => array(0x635), 0x1EE92 => array(0x642),
3166
-                    0x1EE93 => array(0x631), 0x1EE94 => array(0x634), 0x1EE95 => array(0x62A),
3167
-                    0x1EE96 => array(0x62B), 0x1EE97 => array(0x62E), 0x1EE98 => array(0x630),
3168
-                    0x1EE99 => array(0x636), 0x1EE9A => array(0x638), 0x1EE9B => array(0x63A),
3169
-                    0x1EEA1 => array(0x628), 0x1EEA2 => array(0x62C), 0x1EEA3 => array(0x62F),
3170
-                    0x1EEA5 => array(0x648), 0x1EEA6 => array(0x632), 0x1EEA7 => array(0x62D),
3171
-                    0x1EEA8 => array(0x637), 0x1EEA9 => array(0x64A), 0x1EEAB => array(0x644),
3172
-                    0x1EEAC => array(0x645), 0x1EEAD => array(0x646), 0x1EEAE => array(0x633),
3173
-                    0x1EEAF => array(0x639), 0x1EEB0 => array(0x641), 0x1EEB1 => array(0x635),
3174
-                    0x1EEB2 => array(0x642), 0x1EEB3 => array(0x631), 0x1EEB4 => array(0x634),
3175
-                    0x1EEB5 => array(0x62A), 0x1EEB6 => array(0x62B), 0x1EEB7 => array(0x62E),
3176
-                    0x1EEB8 => array(0x630), 0x1EEB9 => array(0x636), 0x1EEBA => array(0x638),
3177
-                    0x1EEBB => array(0x63A), 0x1F12A => array(0x3014, 0x73, 0x3015), 0x1F12B => array(0x63),
3178
-                    0x1F12C => array(0x72), 0x1F12D => array(0x63, 0x64), 0x1F12E => array(0x77, 0x7A),
3179
-                    0x1F130 => array(0x61), 0x1F131 => array(0x62), 0x1F132 => array(0x63),
3180
-                    0x1F133 => array(0x64), 0x1F134 => array(0x65), 0x1F135 => array(0x66),
3181
-                    0x1F136 => array(0x67), 0x1F137 => array(0x68), 0x1F138 => array(0x69),
3182
-                    0x1F139 => array(0x6A), 0x1F13A => array(0x6B), 0x1F13B => array(0x6C),
3183
-                    0x1F13C => array(0x6D), 0x1F13D => array(0x6E), 0x1F13E => array(0x6F),
3184
-                    0x1F13F => array(0x70), 0x1F140 => array(0x71), 0x1F141 => array(0x72),
3185
-                    0x1F142 => array(0x73), 0x1F143 => array(0x74), 0x1F144 => array(0x75),
3186
-                    0x1F145 => array(0x76), 0x1F146 => array(0x77), 0x1F147 => array(0x78),
3187
-                    0x1F148 => array(0x79), 0x1F149 => array(0x7A), 0x1F14A => array(0x68, 0x76),
3188
-                    0x1F14B => array(0x6D, 0x76), 0x1F14C => array(0x73, 0x64), 0x1F14D => array(0x73, 0x73),
3189
-                    0x1F14E => array(0x70, 0x70, 0x76), 0x1F14F => array(0x77, 0x63), 0x1F16A => array(0x6D, 0x63),
3190
-                    0x1F16B => array(0x6D, 0x64), 0x1F190 => array(0x64, 0x6A), 0x1F200 => array(0x307B, 0x304B),
3191
-                    0x1F201 => array(0x30B3, 0x30B3), 0x1F202 => array(0x30B5), 0x1F210 => array(0x624B),
3192
-                    0x1F211 => array(0x5B57), 0x1F212 => array(0x53CC), 0x1F213 => array(0x30C7),
3193
-                    0x1F214 => array(0x4E8C), 0x1F215 => array(0x591A), 0x1F216 => array(0x89E3),
3194
-                    0x1F217 => array(0x5929), 0x1F218 => array(0x4EA4), 0x1F219 => array(0x6620),
3195
-                    0x1F21A => array(0x7121), 0x1F21B => array(0x6599), 0x1F21C => array(0x524D),
3196
-                    0x1F21D => array(0x5F8C), 0x1F21E => array(0x518D), 0x1F21F => array(0x65B0),
3197
-                    0x1F220 => array(0x521D), 0x1F221 => array(0x7D42), 0x1F222 => array(0x751F),
3198
-                    0x1F223 => array(0x8CA9), 0x1F224 => array(0x58F0), 0x1F225 => array(0x5439),
3199
-                    0x1F226 => array(0x6F14), 0x1F227 => array(0x6295), 0x1F228 => array(0x6355),
3200
-                    0x1F229 => array(0x4E00), 0x1F22A => array(0x4E09), 0x1F22B => array(0x904A),
3201
-                    0x1F22C => array(0x5DE6), 0x1F22D => array(0x4E2D), 0x1F22E => array(0x53F3),
3202
-                    0x1F22F => array(0x6307), 0x1F230 => array(0x8D70), 0x1F231 => array(0x6253),
3203
-                    0x1F232 => array(0x7981), 0x1F233 => array(0x7A7A), 0x1F234 => array(0x5408),
3204
-                    0x1F235 => array(0x6E80), 0x1F236 => array(0x6709), 0x1F237 => array(0x6708),
3205
-                    0x1F238 => array(0x7533), 0x1F239 => array(0x5272), 0x1F23A => array(0x55B6),
3206
-                    0x1F240 => array(0x3014, 0x672C, 0x3015), 0x1F241 => array(0x3014, 0x4E09, 0x3015), 0x1F242 => array(0x3014, 0x4E8C, 0x3015),
3207
-                    0x1F243 => array(0x3014, 0x5B89, 0x3015), 0x1F244 => array(0x3014, 0x70B9, 0x3015), 0x1F245 => array(0x3014, 0x6253, 0x3015),
3208
-                    0x1F246 => array(0x3014, 0x76D7, 0x3015), 0x1F247 => array(0x3014, 0x52DD, 0x3015), 0x1F248 => array(0x3014, 0x6557, 0x3015),
3209
-                    0x1F250 => array(0x5F97), 0x1F251 => array(0x53EF), 0x2F800 => array(0x4E3D),
3210
-                    0x2F801 => array(0x4E38), 0x2F802 => array(0x4E41), 0x2F803 => array(0x20122),
3211
-                    0x2F804 => array(0x4F60), 0x2F805 => array(0x4FAE), 0x2F806 => array(0x4FBB),
3212
-                    0x2F807 => array(0x5002), 0x2F808 => array(0x507A), 0x2F809 => array(0x5099),
3213
-                    0x2F80A => array(0x50E7), 0x2F80B => array(0x50CF), 0x2F80C => array(0x349E),
3214
-                    0x2F80D => array(0x2063A), 0x2F80E => array(0x514D), 0x2F80F => array(0x5154),
3215
-                    0x2F810 => array(0x5164), 0x2F811 => array(0x5177), 0x2F812 => array(0x2051C),
3216
-                    0x2F813 => array(0x34B9), 0x2F814 => array(0x5167), 0x2F815 => array(0x518D),
3217
-                    0x2F816 => array(0x2054B), 0x2F817 => array(0x5197), 0x2F818 => array(0x51A4),
3218
-                    0x2F819 => array(0x4ECC), 0x2F81A => array(0x51AC), 0x2F81B => array(0x51B5),
3219
-                    0x2F81C => array(0x291DF), 0x2F81D => array(0x51F5), 0x2F81E => array(0x5203),
3220
-                    0x2F81F => array(0x34DF), 0x2F820 => array(0x523B), 0x2F821 => array(0x5246),
3221
-                    0x2F822 => array(0x5272), 0x2F823 => array(0x5277), 0x2F824 => array(0x3515),
3222
-                    0x2F825 => array(0x52C7), 0x2F826 => array(0x52C9), 0x2F827 => array(0x52E4),
3223
-                    0x2F828 => array(0x52FA), 0x2F829 => array(0x5305), 0x2F82A => array(0x5306),
3224
-                    0x2F82B => array(0x5317), 0x2F82C => array(0x5349), 0x2F82D => array(0x5351),
3225
-                    0x2F82E => array(0x535A), 0x2F82F => array(0x5373), 0x2F830 => array(0x537D),
3226
-                    0x2F831 => array(0x537F), 0x2F832 => array(0x537F), 0x2F833 => array(0x537F),
3227
-                    0x2F834 => array(0x20A2C), 0x2F835 => array(0x7070), 0x2F836 => array(0x53CA),
3228
-                    0x2F837 => array(0x53DF), 0x2F838 => array(0x20B63), 0x2F839 => array(0x53EB),
3229
-                    0x2F83A => array(0x53F1), 0x2F83B => array(0x5406), 0x2F83C => array(0x549E),
3230
-                    0x2F83D => array(0x5438), 0x2F83E => array(0x5448), 0x2F83F => array(0x5468),
3231
-                    0x2F840 => array(0x54A2), 0x2F841 => array(0x54F6), 0x2F842 => array(0x5510),
3232
-                    0x2F843 => array(0x5553), 0x2F844 => array(0x5563), 0x2F845 => array(0x5584),
3233
-                    0x2F846 => array(0x5584), 0x2F847 => array(0x5599), 0x2F848 => array(0x55AB),
3234
-                    0x2F849 => array(0x55B3), 0x2F84A => array(0x55C2), 0x2F84B => array(0x5716),
3235
-                    0x2F84C => array(0x5606), 0x2F84D => array(0x5717), 0x2F84E => array(0x5651),
3236
-                    0x2F84F => array(0x5674), 0x2F850 => array(0x5207), 0x2F851 => array(0x58EE),
3237
-                    0x2F852 => array(0x57CE), 0x2F853 => array(0x57F4), 0x2F854 => array(0x580D),
3238
-                    0x2F855 => array(0x578B), 0x2F856 => array(0x5832), 0x2F857 => array(0x5831),
3239
-                    0x2F858 => array(0x58AC), 0x2F859 => array(0x214E4), 0x2F85A => array(0x58F2),
3240
-                    0x2F85B => array(0x58F7), 0x2F85C => array(0x5906), 0x2F85D => array(0x591A),
3241
-                    0x2F85E => array(0x5922), 0x2F85F => array(0x5962), 0x2F860 => array(0x216A8),
3242
-                    0x2F861 => array(0x216EA), 0x2F862 => array(0x59EC), 0x2F863 => array(0x5A1B),
3243
-                    0x2F864 => array(0x5A27), 0x2F865 => array(0x59D8), 0x2F866 => array(0x5A66),
3244
-                    0x2F867 => array(0x36EE), 0x2F869 => array(0x5B08), 0x2F86A => array(0x5B3E),
3245
-                    0x2F86B => array(0x5B3E), 0x2F86C => array(0x219C8), 0x2F86D => array(0x5BC3),
3246
-                    0x2F86E => array(0x5BD8), 0x2F86F => array(0x5BE7), 0x2F870 => array(0x5BF3),
3247
-                    0x2F871 => array(0x21B18), 0x2F872 => array(0x5BFF), 0x2F873 => array(0x5C06),
3248
-                    0x2F875 => array(0x5C22), 0x2F876 => array(0x3781), 0x2F877 => array(0x5C60),
3249
-                    0x2F878 => array(0x5C6E), 0x2F879 => array(0x5CC0), 0x2F87A => array(0x5C8D),
3250
-                    0x2F87B => array(0x21DE4), 0x2F87C => array(0x5D43), 0x2F87D => array(0x21DE6),
3251
-                    0x2F87E => array(0x5D6E), 0x2F87F => array(0x5D6B), 0x2F880 => array(0x5D7C),
3252
-                    0x2F881 => array(0x5DE1), 0x2F882 => array(0x5DE2), 0x2F883 => array(0x382F),
3253
-                    0x2F884 => array(0x5DFD), 0x2F885 => array(0x5E28), 0x2F886 => array(0x5E3D),
3254
-                    0x2F887 => array(0x5E69), 0x2F888 => array(0x3862), 0x2F889 => array(0x22183),
3255
-                    0x2F88A => array(0x387C), 0x2F88B => array(0x5EB0), 0x2F88C => array(0x5EB3),
3256
-                    0x2F88D => array(0x5EB6), 0x2F88E => array(0x5ECA), 0x2F88F => array(0x2A392),
3257
-                    0x2F890 => array(0x5EFE), 0x2F891 => array(0x22331), 0x2F892 => array(0x22331),
3258
-                    0x2F893 => array(0x8201), 0x2F894 => array(0x5F22), 0x2F895 => array(0x5F22),
3259
-                    0x2F896 => array(0x38C7), 0x2F897 => array(0x232B8), 0x2F898 => array(0x261DA),
3260
-                    0x2F899 => array(0x5F62), 0x2F89A => array(0x5F6B), 0x2F89B => array(0x38E3),
3261
-                    0x2F89C => array(0x5F9A), 0x2F89D => array(0x5FCD), 0x2F89E => array(0x5FD7),
3262
-                    0x2F89F => array(0x5FF9), 0x2F8A0 => array(0x6081), 0x2F8A1 => array(0x393A),
3263
-                    0x2F8A2 => array(0x391C), 0x2F8A3 => array(0x6094), 0x2F8A4 => array(0x226D4),
3264
-                    0x2F8A5 => array(0x60C7), 0x2F8A6 => array(0x6148), 0x2F8A7 => array(0x614C),
3265
-                    0x2F8A8 => array(0x614E), 0x2F8A9 => array(0x614C), 0x2F8AA => array(0x617A),
3266
-                    0x2F8AB => array(0x618E), 0x2F8AC => array(0x61B2), 0x2F8AD => array(0x61A4),
3267
-                    0x2F8AE => array(0x61AF), 0x2F8AF => array(0x61DE), 0x2F8B0 => array(0x61F2),
3268
-                    0x2F8B1 => array(0x61F6), 0x2F8B2 => array(0x6210), 0x2F8B3 => array(0x621B),
3269
-                    0x2F8B4 => array(0x625D), 0x2F8B5 => array(0x62B1), 0x2F8B6 => array(0x62D4),
3270
-                    0x2F8B7 => array(0x6350), 0x2F8B8 => array(0x22B0C), 0x2F8B9 => array(0x633D),
3271
-                    0x2F8BA => array(0x62FC), 0x2F8BB => array(0x6368), 0x2F8BC => array(0x6383),
3272
-                    0x2F8BD => array(0x63E4), 0x2F8BE => array(0x22BF1), 0x2F8BF => array(0x6422),
3273
-                    0x2F8C0 => array(0x63C5), 0x2F8C1 => array(0x63A9), 0x2F8C2 => array(0x3A2E),
3274
-                    0x2F8C3 => array(0x6469), 0x2F8C4 => array(0x647E), 0x2F8C5 => array(0x649D),
3275
-                    0x2F8C6 => array(0x6477), 0x2F8C7 => array(0x3A6C), 0x2F8C8 => array(0x654F),
3276
-                    0x2F8C9 => array(0x656C), 0x2F8CA => array(0x2300A), 0x2F8CB => array(0x65E3),
3277
-                    0x2F8CC => array(0x66F8), 0x2F8CD => array(0x6649), 0x2F8CE => array(0x3B19),
3278
-                    0x2F8CF => array(0x6691), 0x2F8D0 => array(0x3B08), 0x2F8D1 => array(0x3AE4),
3279
-                    0x2F8D2 => array(0x5192), 0x2F8D3 => array(0x5195), 0x2F8D4 => array(0x6700),
3280
-                    0x2F8D5 => array(0x669C), 0x2F8D6 => array(0x80AD), 0x2F8D7 => array(0x43D9),
3281
-                    0x2F8D8 => array(0x6717), 0x2F8D9 => array(0x671B), 0x2F8DA => array(0x6721),
3282
-                    0x2F8DB => array(0x675E), 0x2F8DC => array(0x6753), 0x2F8DD => array(0x233C3),
3283
-                    0x2F8DE => array(0x3B49), 0x2F8DF => array(0x67FA), 0x2F8E0 => array(0x6785),
3284
-                    0x2F8E1 => array(0x6852), 0x2F8E2 => array(0x6885), 0x2F8E3 => array(0x2346D),
3285
-                    0x2F8E4 => array(0x688E), 0x2F8E5 => array(0x681F), 0x2F8E6 => array(0x6914),
3286
-                    0x2F8E7 => array(0x3B9D), 0x2F8E8 => array(0x6942), 0x2F8E9 => array(0x69A3),
3287
-                    0x2F8EA => array(0x69EA), 0x2F8EB => array(0x6AA8), 0x2F8EC => array(0x236A3),
3288
-                    0x2F8ED => array(0x6ADB), 0x2F8EE => array(0x3C18), 0x2F8EF => array(0x6B21),
3289
-                    0x2F8F0 => array(0x238A7), 0x2F8F1 => array(0x6B54), 0x2F8F2 => array(0x3C4E),
3290
-                    0x2F8F3 => array(0x6B72), 0x2F8F4 => array(0x6B9F), 0x2F8F5 => array(0x6BBA),
3291
-                    0x2F8F6 => array(0x6BBB), 0x2F8F7 => array(0x23A8D), 0x2F8F8 => array(0x21D0B),
3292
-                    0x2F8F9 => array(0x23AFA), 0x2F8FA => array(0x6C4E), 0x2F8FB => array(0x23CBC),
3293
-                    0x2F8FC => array(0x6CBF), 0x2F8FD => array(0x6CCD), 0x2F8FE => array(0x6C67),
3294
-                    0x2F8FF => array(0x6D16), 0x2F900 => array(0x6D3E), 0x2F901 => array(0x6D77),
3295
-                    0x2F902 => array(0x6D41), 0x2F903 => array(0x6D69), 0x2F904 => array(0x6D78),
3296
-                    0x2F905 => array(0x6D85), 0x2F906 => array(0x23D1E), 0x2F907 => array(0x6D34),
3297
-                    0x2F908 => array(0x6E2F), 0x2F909 => array(0x6E6E), 0x2F90A => array(0x3D33),
3298
-                    0x2F90B => array(0x6ECB), 0x2F90C => array(0x6EC7), 0x2F90D => array(0x23ED1),
3299
-                    0x2F90E => array(0x6DF9), 0x2F90F => array(0x6F6E), 0x2F910 => array(0x23F5E),
3300
-                    0x2F911 => array(0x23F8E), 0x2F912 => array(0x6FC6), 0x2F913 => array(0x7039),
3301
-                    0x2F914 => array(0x701E), 0x2F915 => array(0x701B), 0x2F916 => array(0x3D96),
3302
-                    0x2F917 => array(0x704A), 0x2F918 => array(0x707D), 0x2F919 => array(0x7077),
3303
-                    0x2F91A => array(0x70AD), 0x2F91B => array(0x20525), 0x2F91C => array(0x7145),
3304
-                    0x2F91D => array(0x24263), 0x2F91E => array(0x719C), 0x2F920 => array(0x7228),
3305
-                    0x2F921 => array(0x7235), 0x2F922 => array(0x7250), 0x2F923 => array(0x24608),
3306
-                    0x2F924 => array(0x7280), 0x2F925 => array(0x7295), 0x2F926 => array(0x24735),
3307
-                    0x2F927 => array(0x24814), 0x2F928 => array(0x737A), 0x2F929 => array(0x738B),
3308
-                    0x2F92A => array(0x3EAC), 0x2F92B => array(0x73A5), 0x2F92C => array(0x3EB8),
3309
-                    0x2F92D => array(0x3EB8), 0x2F92E => array(0x7447), 0x2F92F => array(0x745C),
3310
-                    0x2F930 => array(0x7471), 0x2F931 => array(0x7485), 0x2F932 => array(0x74CA),
3311
-                    0x2F933 => array(0x3F1B), 0x2F934 => array(0x7524), 0x2F935 => array(0x24C36),
3312
-                    0x2F936 => array(0x753E), 0x2F937 => array(0x24C92), 0x2F938 => array(0x7570),
3313
-                    0x2F939 => array(0x2219F), 0x2F93A => array(0x7610), 0x2F93B => array(0x24FA1),
3314
-                    0x2F93C => array(0x24FB8), 0x2F93D => array(0x25044), 0x2F93E => array(0x3FFC),
3315
-                    0x2F93F => array(0x4008), 0x2F940 => array(0x76F4), 0x2F941 => array(0x250F3),
3316
-                    0x2F942 => array(0x250F2), 0x2F943 => array(0x25119), 0x2F944 => array(0x25133),
3317
-                    0x2F945 => array(0x771E), 0x2F946 => array(0x771F), 0x2F947 => array(0x771F),
3318
-                    0x2F948 => array(0x774A), 0x2F949 => array(0x4039), 0x2F94A => array(0x778B),
3319
-                    0x2F94B => array(0x4046), 0x2F94C => array(0x4096), 0x2F94D => array(0x2541D),
3320
-                    0x2F94E => array(0x784E), 0x2F94F => array(0x788C), 0x2F950 => array(0x78CC),
3321
-                    0x2F951 => array(0x40E3), 0x2F952 => array(0x25626), 0x2F953 => array(0x7956),
3322
-                    0x2F954 => array(0x2569A), 0x2F955 => array(0x256C5), 0x2F956 => array(0x798F),
3323
-                    0x2F957 => array(0x79EB), 0x2F958 => array(0x412F), 0x2F959 => array(0x7A40),
3324
-                    0x2F95A => array(0x7A4A), 0x2F95B => array(0x7A4F), 0x2F95C => array(0x2597C),
3325
-                    0x2F95D => array(0x25AA7), 0x2F95E => array(0x25AA7), 0x2F960 => array(0x4202),
3326
-                    0x2F961 => array(0x25BAB), 0x2F962 => array(0x7BC6), 0x2F963 => array(0x7BC9),
3327
-                    0x2F964 => array(0x4227), 0x2F965 => array(0x25C80), 0x2F966 => array(0x7CD2),
3328
-                    0x2F967 => array(0x42A0), 0x2F968 => array(0x7CE8), 0x2F969 => array(0x7CE3),
3329
-                    0x2F96A => array(0x7D00), 0x2F96B => array(0x25F86), 0x2F96C => array(0x7D63),
3330
-                    0x2F96D => array(0x4301), 0x2F96E => array(0x7DC7), 0x2F96F => array(0x7E02),
3331
-                    0x2F970 => array(0x7E45), 0x2F971 => array(0x4334), 0x2F972 => array(0x26228),
3332
-                    0x2F973 => array(0x26247), 0x2F974 => array(0x4359), 0x2F975 => array(0x262D9),
3333
-                    0x2F976 => array(0x7F7A), 0x2F977 => array(0x2633E), 0x2F978 => array(0x7F95),
3334
-                    0x2F979 => array(0x7FFA), 0x2F97A => array(0x8005), 0x2F97B => array(0x264DA),
3335
-                    0x2F97C => array(0x26523), 0x2F97D => array(0x8060), 0x2F97E => array(0x265A8),
3336
-                    0x2F97F => array(0x8070), 0x2F980 => array(0x2335F), 0x2F981 => array(0x43D5),
3337
-                    0x2F982 => array(0x80B2), 0x2F983 => array(0x8103), 0x2F984 => array(0x440B),
3338
-                    0x2F985 => array(0x813E), 0x2F986 => array(0x5AB5), 0x2F987 => array(0x267A7),
3339
-                    0x2F988 => array(0x267B5), 0x2F989 => array(0x23393), 0x2F98A => array(0x2339C),
3340
-                    0x2F98B => array(0x8201), 0x2F98C => array(0x8204), 0x2F98D => array(0x8F9E),
3341
-                    0x2F98E => array(0x446B), 0x2F98F => array(0x8291), 0x2F990 => array(0x828B),
3342
-                    0x2F991 => array(0x829D), 0x2F992 => array(0x52B3), 0x2F993 => array(0x82B1),
3343
-                    0x2F994 => array(0x82B3), 0x2F995 => array(0x82BD), 0x2F996 => array(0x82E6),
3344
-                    0x2F997 => array(0x26B3C), 0x2F998 => array(0x82E5), 0x2F999 => array(0x831D),
3345
-                    0x2F99A => array(0x8363), 0x2F99B => array(0x83AD), 0x2F99C => array(0x8323),
3346
-                    0x2F99D => array(0x83BD), 0x2F99E => array(0x83E7), 0x2F99F => array(0x8457),
3347
-                    0x2F9A0 => array(0x8353), 0x2F9A1 => array(0x83CA), 0x2F9A2 => array(0x83CC),
3348
-                    0x2F9A3 => array(0x83DC), 0x2F9A4 => array(0x26C36), 0x2F9A5 => array(0x26D6B),
3349
-                    0x2F9A6 => array(0x26CD5), 0x2F9A7 => array(0x452B), 0x2F9A8 => array(0x84F1),
3350
-                    0x2F9A9 => array(0x84F3), 0x2F9AA => array(0x8516), 0x2F9AB => array(0x273CA),
3351
-                    0x2F9AC => array(0x8564), 0x2F9AD => array(0x26F2C), 0x2F9AE => array(0x455D),
3352
-                    0x2F9AF => array(0x4561), 0x2F9B0 => array(0x26FB1), 0x2F9B1 => array(0x270D2),
3353
-                    0x2F9B2 => array(0x456B), 0x2F9B3 => array(0x8650), 0x2F9B4 => array(0x865C),
3354
-                    0x2F9B5 => array(0x8667), 0x2F9B6 => array(0x8669), 0x2F9B7 => array(0x86A9),
3355
-                    0x2F9B8 => array(0x8688), 0x2F9B9 => array(0x870E), 0x2F9BA => array(0x86E2),
3356
-                    0x2F9BB => array(0x8779), 0x2F9BC => array(0x8728), 0x2F9BD => array(0x876B),
3357
-                    0x2F9BE => array(0x8786), 0x2F9C0 => array(0x87E1), 0x2F9C1 => array(0x8801),
3358
-                    0x2F9C2 => array(0x45F9), 0x2F9C3 => array(0x8860), 0x2F9C4 => array(0x8863),
3359
-                    0x2F9C5 => array(0x27667), 0x2F9C6 => array(0x88D7), 0x2F9C7 => array(0x88DE),
3360
-                    0x2F9C8 => array(0x4635), 0x2F9C9 => array(0x88FA), 0x2F9CA => array(0x34BB),
3361
-                    0x2F9CB => array(0x278AE), 0x2F9CC => array(0x27966), 0x2F9CD => array(0x46BE),
3362
-                    0x2F9CE => array(0x46C7), 0x2F9CF => array(0x8AA0), 0x2F9D0 => array(0x8AED),
3363
-                    0x2F9D1 => array(0x8B8A), 0x2F9D2 => array(0x8C55), 0x2F9D3 => array(0x27CA8),
3364
-                    0x2F9D4 => array(0x8CAB), 0x2F9D5 => array(0x8CC1), 0x2F9D6 => array(0x8D1B),
3365
-                    0x2F9D7 => array(0x8D77), 0x2F9D8 => array(0x27F2F), 0x2F9D9 => array(0x20804),
3366
-                    0x2F9DA => array(0x8DCB), 0x2F9DB => array(0x8DBC), 0x2F9DC => array(0x8DF0),
3367
-                    0x2F9DD => array(0x208DE), 0x2F9DE => array(0x8ED4), 0x2F9DF => array(0x8F38),
3368
-                    0x2F9E0 => array(0x285D2), 0x2F9E1 => array(0x285ED), 0x2F9E2 => array(0x9094),
3369
-                    0x2F9E3 => array(0x90F1), 0x2F9E4 => array(0x9111), 0x2F9E5 => array(0x2872E),
3370
-                    0x2F9E6 => array(0x911B), 0x2F9E7 => array(0x9238), 0x2F9E8 => array(0x92D7),
3371
-                    0x2F9E9 => array(0x92D8), 0x2F9EA => array(0x927C), 0x2F9EB => array(0x93F9),
3372
-                    0x2F9EC => array(0x9415), 0x2F9ED => array(0x28BFA), 0x2F9EE => array(0x958B),
3373
-                    0x2F9EF => array(0x4995), 0x2F9F0 => array(0x95B7), 0x2F9F1 => array(0x28D77),
3374
-                    0x2F9F2 => array(0x49E6), 0x2F9F3 => array(0x96C3), 0x2F9F4 => array(0x5DB2),
3375
-                    0x2F9F5 => array(0x9723), 0x2F9F6 => array(0x29145), 0x2F9F7 => array(0x2921A),
3376
-                    0x2F9F8 => array(0x4A6E), 0x2F9F9 => array(0x4A76), 0x2F9FA => array(0x97E0),
3377
-                    0x2F9FB => array(0x2940A), 0x2F9FC => array(0x4AB2), 0x2F9FD => array(0x29496),
3378
-                    0x2F9FE => array(0x980B), 0x2F9FF => array(0x980B), 0x2FA00 => array(0x9829),
3379
-                    0x2FA01 => array(0x295B6), 0x2FA02 => array(0x98E2), 0x2FA03 => array(0x4B33),
3380
-                    0x2FA04 => array(0x9929), 0x2FA05 => array(0x99A7), 0x2FA06 => array(0x99C2),
3381
-                    0x2FA07 => array(0x99FE), 0x2FA08 => array(0x4BCE), 0x2FA09 => array(0x29B30),
3382
-                    0x2FA0A => array(0x9B12), 0x2FA0B => array(0x9C40), 0x2FA0C => array(0x9CFD),
3383
-                    0x2FA0D => array(0x4CCE), 0x2FA0E => array(0x4CED), 0x2FA0F => array(0x9D67),
3384
-                    0x2FA10 => array(0x2A0CE), 0x2FA11 => array(0x4CF8), 0x2FA12 => array(0x2A105),
3385
-                    0x2FA13 => array(0x2A20E), 0x2FA14 => array(0x2A291), 0x2FA15 => array(0x9EBB),
3386
-                    0x2FA16 => array(0x4D56), 0x2FA17 => array(0x9EF9), 0x2FA18 => array(0x9EFE),
3387
-                    0x2FA19 => array(0x9F05), 0x2FA1A => array(0x9F0F), 0x2FA1B => array(0x9F16),
3388
-                    0x2FA1C => array(0x9F3B), 0x2FA1D => array(0x2A600)
3389
-            ),
3390
-            'norm_combcls' => array(0x334 => 1, 0x335 => 1, 0x336 => 1, 0x337 => 1,
3391
-                    0x338 => 1, 0x93C => 7, 0x9BC => 7, 0xA3C => 7, 0xABC => 7,
3392
-                    0xB3C => 7, 0xCBC => 7, 0x1037 => 7, 0x3099 => 8, 0x309A => 8,
3393
-                    0x94D => 9, 0x9CD => 9, 0xA4D => 9, 0xACD => 9, 0xB4D => 9,
3394
-                    0xBCD => 9, 0xC4D => 9, 0xCCD => 9, 0xD4D => 9, 0xDCA => 9,
3395
-                    0xE3A => 9, 0xF84 => 9, 0x1039 => 9, 0x1714 => 9, 0x1734 => 9,
3396
-                    0x17D2 => 9, 0x5B0 => 10, 0x5B1 => 11, 0x5B2 => 12, 0x5B3 => 13,
3397
-                    0x5B4 => 14, 0x5B5 => 15, 0x5B6 => 16, 0x5B7 => 17, 0x5B8 => 18,
3398
-                    0x5B9 => 19, 0x5BB => 20, 0x5Bc => 21, 0x5BD => 22, 0x5BF => 23,
3399
-                    0x5C1 => 24, 0x5C2 => 25, 0xFB1E => 26, 0x64B => 27, 0x64C => 28,
3400
-                    0x64D => 29, 0x64E => 30, 0x64F => 31, 0x650 => 32, 0x651 => 33,
3401
-                    0x652 => 34, 0x670 => 35, 0x711 => 36, 0xC55 => 84, 0xC56 => 91,
3402
-                    0xE38 => 103, 0xE39 => 103, 0xE48 => 107, 0xE49 => 107, 0xE4A => 107,
3403
-                    0xE4B => 107, 0xEB8 => 118, 0xEB9 => 118, 0xEC8 => 122, 0xEC9 => 122,
3404
-                    0xECA => 122, 0xECB => 122, 0xF71 => 129, 0xF72 => 130, 0xF7A => 130,
3405
-                    0xF7B => 130, 0xF7C => 130, 0xF7D => 130, 0xF80 => 130, 0xF74 => 132,
3406
-                    0x321 => 202, 0x322 => 202, 0x327 => 202, 0x328 => 202, 0x31B => 216,
3407
-                    0xF39 => 216, 0x1D165 => 216, 0x1D166 => 216, 0x1D16E => 216, 0x1D16F => 216,
3408
-                    0x1D170 => 216, 0x1D171 => 216, 0x1D172 => 216, 0x302A => 218, 0x316 => 220,
3409
-                    0x317 => 220, 0x318 => 220, 0x319 => 220, 0x31C => 220, 0x31D => 220,
3410
-                    0x31E => 220, 0x31F => 220, 0x320 => 220, 0x323 => 220, 0x324 => 220,
3411
-                    0x325 => 220, 0x326 => 220, 0x329 => 220, 0x32A => 220, 0x32B => 220,
3412
-                    0x32C => 220, 0x32D => 220, 0x32E => 220, 0x32F => 220, 0x330 => 220,
3413
-                    0x331 => 220, 0x332 => 220, 0x333 => 220, 0x339 => 220, 0x33A => 220,
3414
-                    0x33B => 220, 0x33C => 220, 0x347 => 220, 0x348 => 220, 0x349 => 220,
3415
-                    0x34D => 220, 0x34E => 220, 0x353 => 220, 0x354 => 220, 0x355 => 220,
3416
-                    0x356 => 220, 0x591 => 220, 0x596 => 220, 0x59B => 220, 0x5A3 => 220,
3417
-                    0x5A4 => 220, 0x5A5 => 220, 0x5A6 => 220, 0x5A7 => 220, 0x5AA => 220,
3418
-                    0x655 => 220, 0x656 => 220, 0x6E3 => 220, 0x6EA => 220, 0x6ED => 220,
3419
-                    0x731 => 220, 0x734 => 220, 0x737 => 220, 0x738 => 220, 0x739 => 220,
3420
-                    0x73B => 220, 0x73C => 220, 0x73E => 220, 0x742 => 220, 0x744 => 220,
3421
-                    0x746 => 220, 0x748 => 220, 0x952 => 220, 0xF18 => 220, 0xF19 => 220,
3422
-                    0xF35 => 220, 0xF37 => 220, 0xFC6 => 220, 0x193B => 220, 0x20E8 => 220,
3423
-                    0x1D17B => 220, 0x1D17C => 220, 0x1D17D => 220, 0x1D17E => 220, 0x1D17F => 220,
3424
-                    0x1D180 => 220, 0x1D181 => 220, 0x1D182 => 220, 0x1D18A => 220, 0x1D18B => 220,
3425
-                    0x59A => 222, 0x5AD => 222, 0x1929 => 222, 0x302D => 222, 0x302E => 224,
3426
-                    0x302F => 224, 0x1D16D => 226, 0x5AE => 228, 0x18A9 => 228, 0x302B => 228,
3427
-                    0x300 => 230, 0x301 => 230, 0x302 => 230, 0x303 => 230, 0x304 => 230,
3428
-                    0x305 => 230, 0x306 => 230, 0x307 => 230, 0x308 => 230, 0x309 => 230,
3429
-                    0x30A => 230, 0x30B => 230, 0x30C => 230, 0x30D => 230, 0x30E => 230,
3430
-                    0x30F => 230, 0x310 => 230, 0x311 => 230, 0x312 => 230, 0x313 => 230,
3431
-                    0x314 => 230, 0x33D => 230, 0x33E => 230, 0x33F => 230, 0x340 => 230,
3432
-                    0x341 => 230, 0x342 => 230, 0x343 => 230, 0x344 => 230, 0x346 => 230,
3433
-                    0x34A => 230, 0x34B => 230, 0x34C => 230, 0x350 => 230, 0x351 => 230,
3434
-                    0x352 => 230, 0x357 => 230, 0x363 => 230, 0x364 => 230, 0x365 => 230,
3435
-                    0x366 => 230, 0x367 => 230, 0x368 => 230, 0x369 => 230, 0x36A => 230,
3436
-                    0x36B => 230, 0x36C => 230, 0x36D => 230, 0x36E => 230, 0x36F => 230,
3437
-                    0x483 => 230, 0x484 => 230, 0x485 => 230, 0x486 => 230, 0x592 => 230,
3438
-                    0x593 => 230, 0x594 => 230, 0x595 => 230, 0x597 => 230, 0x598 => 230,
3439
-                    0x599 => 230, 0x59C => 230, 0x59D => 230, 0x59E => 230, 0x59F => 230,
3440
-                    0x5A0 => 230, 0x5A1 => 230, 0x5A8 => 230, 0x5A9 => 230, 0x5AB => 230,
3441
-                    0x5AC => 230, 0x5AF => 230, 0x5C4 => 230, 0x610 => 230, 0x611 => 230,
3442
-                    0x612 => 230, 0x613 => 230, 0x614 => 230, 0x615 => 230, 0x653 => 230,
3443
-                    0x654 => 230, 0x657 => 230, 0x658 => 230, 0x6D6 => 230, 0x6D7 => 230,
3444
-                    0x6D8 => 230, 0x6D9 => 230, 0x6DA => 230, 0x6DB => 230, 0x6DC => 230,
3445
-                    0x6DF => 230, 0x6E0 => 230, 0x6E1 => 230, 0x6E2 => 230, 0x6E4 => 230,
3446
-                    0x6E7 => 230, 0x6E8 => 230, 0x6EB => 230, 0x6EC => 230, 0x730 => 230,
3447
-                    0x732 => 230, 0x733 => 230, 0x735 => 230, 0x736 => 230, 0x73A => 230,
3448
-                    0x73D => 230, 0x73F => 230, 0x740 => 230, 0x741 => 230, 0x743 => 230,
3449
-                    0x745 => 230, 0x747 => 230, 0x749 => 230, 0x74A => 230, 0x951 => 230,
3450
-                    0x953 => 230, 0x954 => 230, 0xF82 => 230, 0xF83 => 230, 0xF86 => 230,
3451
-                    0xF87 => 230, 0x170D => 230, 0x193A => 230, 0x20D0 => 230, 0x20D1 => 230,
3452
-                    0x20D4 => 230, 0x20D5 => 230, 0x20D6 => 230, 0x20D7 => 230, 0x20DB => 230,
3453
-                    0x20DC => 230, 0x20E1 => 230, 0x20E7 => 230, 0x20E9 => 230, 0xFE20 => 230,
3454
-                    0xFE21 => 230, 0xFE22 => 230, 0xFE23 => 230, 0x1D185 => 230, 0x1D186 => 230,
3455
-                    0x1D187 => 230, 0x1D189 => 230, 0x1D188 => 230, 0x1D1AA => 230, 0x1D1AB => 230,
3456
-                    0x1D1AC => 230, 0x1D1AD => 230, 0x315 => 232, 0x31A => 232, 0x302C => 232,
3457
-                    0x35F => 233, 0x362 => 233, 0x35D => 234, 0x35E => 234, 0x360 => 234,
3458
-                    0x361 => 234, 0x345 => 240
3459
-            )
3460
-    );
1376
+					0x33C3 => array(0x62, 0x71), 0x33C6 => array(0x63, 0x2215, 0x6B, 0x67),
1377
+					0x33C7 => array(0x63, 0x6F, 0x2E), 0x33C8 => array(0x64, 0x62),
1378
+					0x33C9 => array(0x67, 0x79), 0x33CB => array(0x68, 0x70),
1379
+					0x33CD => array(0x6B, 0x6B), 0x33CE => array(0x6B, 0x6D),
1380
+					0x33D7 => array(0x70, 0x68), 0x33D9 => array(0x70, 0x70, 0x6D),
1381
+					0x33DA => array(0x70, 0x72), 0x33DC => array(0x73, 0x76),
1382
+					0x33DD => array(0x77, 0x62), 0xFB00 => array(0x66, 0x66),
1383
+					0xFB01 => array(0x66, 0x69), 0xFB02 => array(0x66, 0x6C),
1384
+					0xFB03 => array(0x66, 0x66, 0x69), 0xFB04 => array(0x66, 0x66, 0x6C),
1385
+					0xFB05 => array(0x73, 0x74), 0xFB06 => array(0x73, 0x74),
1386
+					0xFB13 => array(0x574, 0x576), 0xFB14 => array(0x574, 0x565),
1387
+					0xFB15 => array(0x574, 0x56B), 0xFB16 => array(0x57E, 0x576),
1388
+					0xFB17 => array(0x574, 0x56D), 0xFF21 => array(0xFF41),
1389
+					0xFF22 => array(0xFF42), 0xFF23 => array(0xFF43), 0xFF24 => array(0xFF44),
1390
+					0xFF25 => array(0xFF45), 0xFF26 => array(0xFF46), 0xFF27 => array(0xFF47),
1391
+					0xFF28 => array(0xFF48), 0xFF29 => array(0xFF49), 0xFF2A => array(0xFF4A),
1392
+					0xFF2B => array(0xFF4B), 0xFF2C => array(0xFF4C), 0xFF2D => array(0xFF4D),
1393
+					0xFF2E => array(0xFF4E), 0xFF2F => array(0xFF4F), 0xFF30 => array(0xFF50),
1394
+					0xFF31 => array(0xFF51), 0xFF32 => array(0xFF52), 0xFF33 => array(0xFF53),
1395
+					0xFF34 => array(0xFF54), 0xFF35 => array(0xFF55), 0xFF36 => array(0xFF56),
1396
+					0xFF37 => array(0xFF57), 0xFF38 => array(0xFF58), 0xFF39 => array(0xFF59),
1397
+					0xFF3A => array(0xFF5A), 0x10400 => array(0x10428), 0x10401 => array(0x10429),
1398
+					0x10402 => array(0x1042A), 0x10403 => array(0x1042B), 0x10404 => array(0x1042C),
1399
+					0x10405 => array(0x1042D), 0x10406 => array(0x1042E), 0x10407 => array(0x1042F),
1400
+					0x10408 => array(0x10430), 0x10409 => array(0x10431), 0x1040A => array(0x10432),
1401
+					0x1040B => array(0x10433), 0x1040C => array(0x10434), 0x1040D => array(0x10435),
1402
+					0x1040E => array(0x10436), 0x1040F => array(0x10437), 0x10410 => array(0x10438),
1403
+					0x10411 => array(0x10439), 0x10412 => array(0x1043A), 0x10413 => array(0x1043B),
1404
+					0x10414 => array(0x1043C), 0x10415 => array(0x1043D), 0x10416 => array(0x1043E),
1405
+					0x10417 => array(0x1043F), 0x10418 => array(0x10440), 0x10419 => array(0x10441),
1406
+					0x1041A => array(0x10442), 0x1041B => array(0x10443), 0x1041C => array(0x10444),
1407
+					0x1041D => array(0x10445), 0x1041E => array(0x10446), 0x1041F => array(0x10447),
1408
+					0x10420 => array(0x10448), 0x10421 => array(0x10449), 0x10422 => array(0x1044A),
1409
+					0x10423 => array(0x1044B), 0x10424 => array(0x1044C), 0x10425 => array(0x1044D),
1410
+					0x1D400 => array(0x61), 0x1D401 => array(0x62), 0x1D402 => array(0x63),
1411
+					0x1D403 => array(0x64), 0x1D404 => array(0x65), 0x1D405 => array(0x66),
1412
+					0x1D406 => array(0x67), 0x1D407 => array(0x68), 0x1D408 => array(0x69),
1413
+					0x1D409 => array(0x6A), 0x1D40A => array(0x6B), 0x1D40B => array(0x6C),
1414
+					0x1D40C => array(0x6D), 0x1D40D => array(0x6E), 0x1D40E => array(0x6F),
1415
+					0x1D40F => array(0x70), 0x1D410 => array(0x71), 0x1D411 => array(0x72),
1416
+					0x1D412 => array(0x73), 0x1D413 => array(0x74), 0x1D414 => array(0x75),
1417
+					0x1D415 => array(0x76), 0x1D416 => array(0x77), 0x1D417 => array(0x78),
1418
+					0x1D418 => array(0x79), 0x1D419 => array(0x7A), 0x1D434 => array(0x61),
1419
+					0x1D435 => array(0x62), 0x1D436 => array(0x63), 0x1D437 => array(0x64),
1420
+					0x1D438 => array(0x65), 0x1D439 => array(0x66), 0x1D43A => array(0x67),
1421
+					0x1D43B => array(0x68), 0x1D43C => array(0x69), 0x1D43D => array(0x6A),
1422
+					0x1D43E => array(0x6B), 0x1D43F => array(0x6C), 0x1D440 => array(0x6D),
1423
+					0x1D441 => array(0x6E), 0x1D442 => array(0x6F), 0x1D443 => array(0x70),
1424
+					0x1D444 => array(0x71), 0x1D445 => array(0x72), 0x1D446 => array(0x73),
1425
+					0x1D447 => array(0x74), 0x1D448 => array(0x75), 0x1D449 => array(0x76),
1426
+					0x1D44A => array(0x77), 0x1D44B => array(0x78), 0x1D44C => array(0x79),
1427
+					0x1D44D => array(0x7A), 0x1D468 => array(0x61), 0x1D469 => array(0x62),
1428
+					0x1D46A => array(0x63), 0x1D46B => array(0x64), 0x1D46C => array(0x65),
1429
+					0x1D46D => array(0x66), 0x1D46E => array(0x67), 0x1D46F => array(0x68),
1430
+					0x1D470 => array(0x69), 0x1D471 => array(0x6A), 0x1D472 => array(0x6B),
1431
+					0x1D473 => array(0x6C), 0x1D474 => array(0x6D), 0x1D475 => array(0x6E),
1432
+					0x1D476 => array(0x6F), 0x1D477 => array(0x70), 0x1D478 => array(0x71),
1433
+					0x1D479 => array(0x72), 0x1D47A => array(0x73), 0x1D47B => array(0x74),
1434
+					0x1D47C => array(0x75), 0x1D47D => array(0x76), 0x1D47E => array(0x77),
1435
+					0x1D47F => array(0x78), 0x1D480 => array(0x79), 0x1D481 => array(0x7A),
1436
+					0x1D49C => array(0x61), 0x1D49E => array(0x63), 0x1D49F => array(0x64),
1437
+					0x1D4A2 => array(0x67), 0x1D4A5 => array(0x6A), 0x1D4A6 => array(0x6B),
1438
+					0x1D4A9 => array(0x6E), 0x1D4AA => array(0x6F), 0x1D4AB => array(0x70),
1439
+					0x1D4AC => array(0x71), 0x1D4AE => array(0x73), 0x1D4AF => array(0x74),
1440
+					0x1D4B0 => array(0x75), 0x1D4B1 => array(0x76), 0x1D4B2 => array(0x77),
1441
+					0x1D4B3 => array(0x78), 0x1D4B4 => array(0x79), 0x1D4B5 => array(0x7A),
1442
+					0x1D4D0 => array(0x61), 0x1D4D1 => array(0x62), 0x1D4D2 => array(0x63),
1443
+					0x1D4D3 => array(0x64), 0x1D4D4 => array(0x65), 0x1D4D5 => array(0x66),
1444
+					0x1D4D6 => array(0x67), 0x1D4D7 => array(0x68), 0x1D4D8 => array(0x69),
1445
+					0x1D4D9 => array(0x6A), 0x1D4DA => array(0x6B), 0x1D4DB => array(0x6C),
1446
+					0x1D4DC => array(0x6D), 0x1D4DD => array(0x6E), 0x1D4DE => array(0x6F),
1447
+					0x1D4DF => array(0x70), 0x1D4E0 => array(0x71), 0x1D4E1 => array(0x72),
1448
+					0x1D4E2 => array(0x73), 0x1D4E3 => array(0x74), 0x1D4E4 => array(0x75),
1449
+					0x1D4E5 => array(0x76), 0x1D4E6 => array(0x77), 0x1D4E7 => array(0x78),
1450
+					0x1D4E8 => array(0x79), 0x1D4E9 => array(0x7A), 0x1D504 => array(0x61),
1451
+					0x1D505 => array(0x62), 0x1D507 => array(0x64), 0x1D508 => array(0x65),
1452
+					0x1D509 => array(0x66), 0x1D50A => array(0x67), 0x1D50D => array(0x6A),
1453
+					0x1D50E => array(0x6B), 0x1D50F => array(0x6C), 0x1D510 => array(0x6D),
1454
+					0x1D511 => array(0x6E), 0x1D512 => array(0x6F), 0x1D513 => array(0x70),
1455
+					0x1D514 => array(0x71), 0x1D516 => array(0x73), 0x1D517 => array(0x74),
1456
+					0x1D518 => array(0x75), 0x1D519 => array(0x76), 0x1D51A => array(0x77),
1457
+					0x1D51B => array(0x78), 0x1D51C => array(0x79), 0x1D538 => array(0x61),
1458
+					0x1D539 => array(0x62), 0x1D53B => array(0x64), 0x1D53C => array(0x65),
1459
+					0x1D53D => array(0x66), 0x1D53E => array(0x67), 0x1D540 => array(0x69),
1460
+					0x1D541 => array(0x6A), 0x1D542 => array(0x6B), 0x1D543 => array(0x6C),
1461
+					0x1D544 => array(0x6D), 0x1D546 => array(0x6F), 0x1D54A => array(0x73),
1462
+					0x1D54B => array(0x74), 0x1D54C => array(0x75), 0x1D54D => array(0x76),
1463
+					0x1D54E => array(0x77), 0x1D54F => array(0x78), 0x1D550 => array(0x79),
1464
+					0x1D56C => array(0x61), 0x1D56D => array(0x62), 0x1D56E => array(0x63),
1465
+					0x1D56F => array(0x64), 0x1D570 => array(0x65), 0x1D571 => array(0x66),
1466
+					0x1D572 => array(0x67), 0x1D573 => array(0x68), 0x1D574 => array(0x69),
1467
+					0x1D575 => array(0x6A), 0x1D576 => array(0x6B), 0x1D577 => array(0x6C),
1468
+					0x1D578 => array(0x6D), 0x1D579 => array(0x6E), 0x1D57A => array(0x6F),
1469
+					0x1D57B => array(0x70), 0x1D57C => array(0x71), 0x1D57D => array(0x72),
1470
+					0x1D57E => array(0x73), 0x1D57F => array(0x74), 0x1D580 => array(0x75),
1471
+					0x1D581 => array(0x76), 0x1D582 => array(0x77), 0x1D583 => array(0x78),
1472
+					0x1D584 => array(0x79), 0x1D585 => array(0x7A), 0x1D5A0 => array(0x61),
1473
+					0x1D5A1 => array(0x62), 0x1D5A2 => array(0x63), 0x1D5A3 => array(0x64),
1474
+					0x1D5A4 => array(0x65), 0x1D5A5 => array(0x66), 0x1D5A6 => array(0x67),
1475
+					0x1D5A7 => array(0x68), 0x1D5A8 => array(0x69), 0x1D5A9 => array(0x6A),
1476
+					0x1D5AA => array(0x6B), 0x1D5AB => array(0x6C), 0x1D5AC => array(0x6D),
1477
+					0x1D5AD => array(0x6E), 0x1D5AE => array(0x6F), 0x1D5AF => array(0x70),
1478
+					0x1D5B0 => array(0x71), 0x1D5B1 => array(0x72), 0x1D5B2 => array(0x73),
1479
+					0x1D5B3 => array(0x74), 0x1D5B4 => array(0x75), 0x1D5B5 => array(0x76),
1480
+					0x1D5B6 => array(0x77), 0x1D5B7 => array(0x78), 0x1D5B8 => array(0x79),
1481
+					0x1D5B9 => array(0x7A), 0x1D5D4 => array(0x61), 0x1D5D5 => array(0x62),
1482
+					0x1D5D6 => array(0x63), 0x1D5D7 => array(0x64), 0x1D5D8 => array(0x65),
1483
+					0x1D5D9 => array(0x66), 0x1D5DA => array(0x67), 0x1D5DB => array(0x68),
1484
+					0x1D5DC => array(0x69), 0x1D5DD => array(0x6A), 0x1D5DE => array(0x6B),
1485
+					0x1D5DF => array(0x6C), 0x1D5E0 => array(0x6D), 0x1D5E1 => array(0x6E),
1486
+					0x1D5E2 => array(0x6F), 0x1D5E3 => array(0x70), 0x1D5E4 => array(0x71),
1487
+					0x1D5E5 => array(0x72), 0x1D5E6 => array(0x73), 0x1D5E7 => array(0x74),
1488
+					0x1D5E8 => array(0x75), 0x1D5E9 => array(0x76), 0x1D5EA => array(0x77),
1489
+					0x1D5EB => array(0x78), 0x1D5EC => array(0x79), 0x1D5ED => array(0x7A),
1490
+					0x1D608 => array(0x61), 0x1D609 => array(0x62), 0x1D60A => array(0x63),
1491
+					0x1D60B => array(0x64), 0x1D60C => array(0x65), 0x1D60D => array(0x66),
1492
+					0x1D60E => array(0x67), 0x1D60F => array(0x68), 0x1D610 => array(0x69),
1493
+					0x1D611 => array(0x6A), 0x1D612 => array(0x6B), 0x1D613 => array(0x6C),
1494
+					0x1D614 => array(0x6D), 0x1D615 => array(0x6E), 0x1D616 => array(0x6F),
1495
+					0x1D617 => array(0x70), 0x1D618 => array(0x71), 0x1D619 => array(0x72),
1496
+					0x1D61A => array(0x73), 0x1D61B => array(0x74), 0x1D61C => array(0x75),
1497
+					0x1D61D => array(0x76), 0x1D61E => array(0x77), 0x1D61F => array(0x78),
1498
+					0x1D620 => array(0x79), 0x1D621 => array(0x7A), 0x1D63C => array(0x61),
1499
+					0x1D63D => array(0x62), 0x1D63E => array(0x63), 0x1D63F => array(0x64),
1500
+					0x1D640 => array(0x65), 0x1D641 => array(0x66), 0x1D642 => array(0x67),
1501
+					0x1D643 => array(0x68), 0x1D644 => array(0x69), 0x1D645 => array(0x6A),
1502
+					0x1D646 => array(0x6B), 0x1D647 => array(0x6C), 0x1D648 => array(0x6D),
1503
+					0x1D649 => array(0x6E), 0x1D64A => array(0x6F), 0x1D64B => array(0x70),
1504
+					0x1D64C => array(0x71), 0x1D64D => array(0x72), 0x1D64E => array(0x73),
1505
+					0x1D64F => array(0x74), 0x1D650 => array(0x75), 0x1D651 => array(0x76),
1506
+					0x1D652 => array(0x77), 0x1D653 => array(0x78), 0x1D654 => array(0x79),
1507
+					0x1D655 => array(0x7A), 0x1D670 => array(0x61), 0x1D671 => array(0x62),
1508
+					0x1D672 => array(0x63), 0x1D673 => array(0x64), 0x1D674 => array(0x65),
1509
+					0x1D675 => array(0x66), 0x1D676 => array(0x67), 0x1D677 => array(0x68),
1510
+					0x1D678 => array(0x69), 0x1D679 => array(0x6A), 0x1D67A => array(0x6B),
1511
+					0x1D67B => array(0x6C), 0x1D67C => array(0x6D), 0x1D67D => array(0x6E),
1512
+					0x1D67E => array(0x6F), 0x1D67F => array(0x70), 0x1D680 => array(0x71),
1513
+					0x1D681 => array(0x72), 0x1D682 => array(0x73), 0x1D683 => array(0x74),
1514
+					0x1D684 => array(0x75), 0x1D685 => array(0x76), 0x1D686 => array(0x77),
1515
+					0x1D687 => array(0x78), 0x1D688 => array(0x79), 0x1D689 => array(0x7A),
1516
+					0x1D6A8 => array(0x3B1), 0x1D6A9 => array(0x3B2), 0x1D6AA => array(0x3B3),
1517
+					0x1D6AB => array(0x3B4), 0x1D6AC => array(0x3B5), 0x1D6AD => array(0x3B6),
1518
+					0x1D6AE => array(0x3B7), 0x1D6AF => array(0x3B8), 0x1D6B0 => array(0x3B9),
1519
+					0x1D6B1 => array(0x3BA), 0x1D6B2 => array(0x3BB), 0x1D6B3 => array(0x3BC),
1520
+					0x1D6B4 => array(0x3BD), 0x1D6B5 => array(0x3BE), 0x1D6B6 => array(0x3BF),
1521
+					0x1D6B7 => array(0x3C0), 0x1D6B8 => array(0x3C1), 0x1D6B9 => array(0x3B8),
1522
+					0x1D6BA => array(0x3C3), 0x1D6BB => array(0x3C4), 0x1D6BC => array(0x3C5),
1523
+					0x1D6BD => array(0x3C6), 0x1D6BE => array(0x3C7), 0x1D6BF => array(0x3C8),
1524
+					0x1D6C0 => array(0x3C9), 0x1D6D3 => array(0x3C3), 0x1D6E2 => array(0x3B1),
1525
+					0x1D6E3 => array(0x3B2), 0x1D6E4 => array(0x3B3), 0x1D6E5 => array(0x3B4),
1526
+					0x1D6E6 => array(0x3B5), 0x1D6E7 => array(0x3B6), 0x1D6E8 => array(0x3B7),
1527
+					0x1D6E9 => array(0x3B8), 0x1D6EA => array(0x3B9), 0x1D6EB => array(0x3BA),
1528
+					0x1D6EC => array(0x3BB), 0x1D6ED => array(0x3BC), 0x1D6EE => array(0x3BD),
1529
+					0x1D6EF => array(0x3BE), 0x1D6F0 => array(0x3BF), 0x1D6F1 => array(0x3C0),
1530
+					0x1D6F2 => array(0x3C1), 0x1D6F3 => array(0x3B8), 0x1D6F4 => array(0x3C3),
1531
+					0x1D6F5 => array(0x3C4), 0x1D6F6 => array(0x3C5), 0x1D6F7 => array(0x3C6),
1532
+					0x1D6F8 => array(0x3C7), 0x1D6F9 => array(0x3C8), 0x1D6FA => array(0x3C9),
1533
+					0x1D70D => array(0x3C3), 0x1D71C => array(0x3B1), 0x1D71D => array(0x3B2),
1534
+					0x1D71E => array(0x3B3), 0x1D71F => array(0x3B4), 0x1D720 => array(0x3B5),
1535
+					0x1D721 => array(0x3B6), 0x1D722 => array(0x3B7), 0x1D723 => array(0x3B8),
1536
+					0x1D724 => array(0x3B9), 0x1D725 => array(0x3BA), 0x1D726 => array(0x3BB),
1537
+					0x1D727 => array(0x3BC), 0x1D728 => array(0x3BD), 0x1D729 => array(0x3BE),
1538
+					0x1D72A => array(0x3BF), 0x1D72B => array(0x3C0), 0x1D72C => array(0x3C1),
1539
+					0x1D72D => array(0x3B8), 0x1D72E => array(0x3C3), 0x1D72F => array(0x3C4),
1540
+					0x1D730 => array(0x3C5), 0x1D731 => array(0x3C6), 0x1D732 => array(0x3C7),
1541
+					0x1D733 => array(0x3C8), 0x1D734 => array(0x3C9), 0x1D747 => array(0x3C3),
1542
+					0x1D756 => array(0x3B1), 0x1D757 => array(0x3B2), 0x1D758 => array(0x3B3),
1543
+					0x1D759 => array(0x3B4), 0x1D75A => array(0x3B5), 0x1D75B => array(0x3B6),
1544
+					0x1D75C => array(0x3B7), 0x1D75D => array(0x3B8), 0x1D75E => array(0x3B9),
1545
+					0x1D75F => array(0x3BA), 0x1D760 => array(0x3BB), 0x1D761 => array(0x3BC),
1546
+					0x1D762 => array(0x3BD), 0x1D763 => array(0x3BE), 0x1D764 => array(0x3BF),
1547
+					0x1D765 => array(0x3C0), 0x1D766 => array(0x3C1), 0x1D767 => array(0x3B8),
1548
+					0x1D768 => array(0x3C3), 0x1D769 => array(0x3C4), 0x1D76A => array(0x3C5),
1549
+					0x1D76B => array(0x3C6), 0x1D76C => array(0x3C7), 0x1D76D => array(0x3C8),
1550
+					0x1D76E => array(0x3C9), 0x1D781 => array(0x3C3), 0x1D790 => array(0x3B1),
1551
+					0x1D791 => array(0x3B2), 0x1D792 => array(0x3B3), 0x1D793 => array(0x3B4),
1552
+					0x1D794 => array(0x3B5), 0x1D795 => array(0x3B6), 0x1D796 => array(0x3B7),
1553
+					0x1D797 => array(0x3B8), 0x1D798 => array(0x3B9), 0x1D799 => array(0x3BA),
1554
+					0x1D79A => array(0x3BB), 0x1D79B => array(0x3BC), 0x1D79C => array(0x3BD),
1555
+					0x1D79D => array(0x3BE), 0x1D79E => array(0x3BF), 0x1D79F => array(0x3C0),
1556
+					0x1D7A0 => array(0x3C1), 0x1D7A1 => array(0x3B8), 0x1D7A2 => array(0x3C3),
1557
+					0x1D7A3 => array(0x3C4), 0x1D7A4 => array(0x3C5), 0x1D7A5 => array(0x3C6),
1558
+					0x1D7A6 => array(0x3C7), 0x1D7A7 => array(0x3C8), 0x1D7A8 => array(0x3C9),
1559
+					0x1D7BB => array(0x3C3), 0x3F9 => array(0x3C3), 0x1D2C => array(0x61),
1560
+					0x1D2D => array(0xE6), 0x1D2E => array(0x62), 0x1D30 => array(0x64),
1561
+					0x1D31 => array(0x65), 0x1D32 => array(0x1DD), 0x1D33 => array(0x67),
1562
+					0x1D34 => array(0x68), 0x1D35 => array(0x69), 0x1D36 => array(0x6A),
1563
+					0x1D37 => array(0x6B), 0x1D38 => array(0x6C), 0x1D39 => array(0x6D),
1564
+					0x1D3A => array(0x6E), 0x1D3C => array(0x6F), 0x1D3D => array(0x223),
1565
+					0x1D3E => array(0x70), 0x1D3F => array(0x72), 0x1D40 => array(0x74),
1566
+					0x1D41 => array(0x75), 0x1D42 => array(0x77), 0x213B => array(0x66, 0x61, 0x78),
1567
+					0x3250 => array(0x70, 0x74, 0x65), 0x32CC => array(0x68, 0x67),
1568
+					0x32CE => array(0x65, 0x76), 0x32CF => array(0x6C, 0x74, 0x64),
1569
+					0x337A => array(0x69, 0x75), 0x33DE => array(0x76, 0x2215, 0x6D),
1570
+					0x33DF => array(0x61, 0x2215, 0x6D)
1571
+			),
1572
+			'replacemaps' => array(0x41 => array(0x61), 0x42 => array(0x62), 0x43 => array(0x63),
1573
+					0x44 => array(0x64), 0x45 => array(0x65), 0x46 => array(0x66),
1574
+					0x47 => array(0x67), 0x48 => array(0x68), 0x49 => array(0x69),
1575
+					0x4A => array(0x6A), 0x4B => array(0x6B), 0x4C => array(0x6C),
1576
+					0x4D => array(0x6D), 0x4E => array(0x6E), 0x4F => array(0x6F),
1577
+					0x50 => array(0x70), 0x51 => array(0x71), 0x52 => array(0x72),
1578
+					0x53 => array(0x73), 0x54 => array(0x74), 0x55 => array(0x75),
1579
+					0x56 => array(0x76), 0x57 => array(0x77), 0x58 => array(0x78),
1580
+					0x59 => array(0x79), 0x5A => array(0x7A), 0xAA => array(0x61),
1581
+					0xB2 => array(0x32), 0xB3 => array(0x33), 0xB5 => array(0x3BC),
1582
+					0xB9 => array(0x31), 0xBA => array(0x6F), 0xBC => array(0x31, 0x2044, 0x34),
1583
+					0xBD => array(0x31, 0x2044, 0x32), 0xBE => array(0x33, 0x2044, 0x34), 0xC0 => array(0xE0),
1584
+					0xC1 => array(0xE1), 0xC2 => array(0xE2), 0xC3 => array(0xE3),
1585
+					0xC4 => array(0xE4), 0xC5 => array(0xE5), 0xC6 => array(0xE6),
1586
+					0xC7 => array(0xE7), 0xC8 => array(0xE8), 0xC9 => array(0xE9),
1587
+					0xCA => array(0xEA), 0xCB => array(0xEB), 0xCC => array(0xEC),
1588
+					0xCD => array(0xED), 0xCE => array(0xEE), 0xCF => array(0xEF),
1589
+					0xD0 => array(0xF0), 0xD1 => array(0xF1), 0xD2 => array(0xF2),
1590
+					0xD3 => array(0xF3), 0xD4 => array(0xF4), 0xD5 => array(0xF5),
1591
+					0xD6 => array(0xF6), 0xD8 => array(0xF8), 0xD9 => array(0xF9),
1592
+					0xDA => array(0xFA), 0xDB => array(0xFB), 0xDC => array(0xFC),
1593
+					0xDD => array(0xFD), 0xDE => array(0xFE), 0x100 => array(0x101),
1594
+					0x102 => array(0x103), 0x104 => array(0x105), 0x106 => array(0x107),
1595
+					0x108 => array(0x109), 0x10A => array(0x10B), 0x10C => array(0x10D),
1596
+					0x10E => array(0x10F), 0x110 => array(0x111), 0x112 => array(0x113),
1597
+					0x114 => array(0x115), 0x116 => array(0x117), 0x118 => array(0x119),
1598
+					0x11A => array(0x11B), 0x11C => array(0x11D), 0x11E => array(0x11F),
1599
+					0x120 => array(0x121), 0x122 => array(0x123), 0x124 => array(0x125),
1600
+					0x126 => array(0x127), 0x128 => array(0x129), 0x12A => array(0x12B),
1601
+					0x12C => array(0x12D), 0x12E => array(0x12F), 0x130 => array(0x69, 0x307),
1602
+					0x132 => array(0x69, 0x6A), 0x133 => array(0x69, 0x6A), 0x134 => array(0x135),
1603
+					0x136 => array(0x137), 0x139 => array(0x13A), 0x13B => array(0x13C),
1604
+					0x13D => array(0x13E), 0x13F => array(0x6C, 0xB7), 0x140 => array(0x6C, 0xB7),
1605
+					0x141 => array(0x142), 0x143 => array(0x144), 0x145 => array(0x146),
1606
+					0x147 => array(0x148), 0x149 => array(0x2BC, 0x6E), 0x14A => array(0x14B),
1607
+					0x14C => array(0x14D), 0x14E => array(0x14F), 0x150 => array(0x151),
1608
+					0x152 => array(0x153), 0x154 => array(0x155), 0x156 => array(0x157),
1609
+					0x158 => array(0x159), 0x15A => array(0x15B), 0x15C => array(0x15D),
1610
+					0x15E => array(0x15F), 0x160 => array(0x161), 0x162 => array(0x163),
1611
+					0x164 => array(0x165), 0x166 => array(0x167), 0x168 => array(0x169),
1612
+					0x16A => array(0x16B), 0x16C => array(0x16D), 0x16E => array(0x16F),
1613
+					0x170 => array(0x171), 0x172 => array(0x173), 0x174 => array(0x175),
1614
+					0x176 => array(0x177), 0x178 => array(0xFF), 0x179 => array(0x17A),
1615
+					0x17B => array(0x17C), 0x17D => array(0x17E), 0x17F => array(0x73),
1616
+					0x181 => array(0x253), 0x182 => array(0x183), 0x184 => array(0x185),
1617
+					0x186 => array(0x254), 0x187 => array(0x188), 0x189 => array(0x256),
1618
+					0x18A => array(0x257), 0x18B => array(0x18C), 0x18E => array(0x1DD),
1619
+					0x18F => array(0x259), 0x190 => array(0x25B), 0x191 => array(0x192),
1620
+					0x193 => array(0x260), 0x194 => array(0x263), 0x196 => array(0x269),
1621
+					0x197 => array(0x268), 0x198 => array(0x199), 0x19C => array(0x26F),
1622
+					0x19D => array(0x272), 0x19F => array(0x275), 0x1A0 => array(0x1A1),
1623
+					0x1A2 => array(0x1A3), 0x1A4 => array(0x1A5), 0x1A6 => array(0x280),
1624
+					0x1A7 => array(0x1A8), 0x1A9 => array(0x283), 0x1AC => array(0x1AD),
1625
+					0x1AE => array(0x288), 0x1AF => array(0x1B0), 0x1B1 => array(0x28A),
1626
+					0x1B2 => array(0x28B), 0x1B3 => array(0x1B4), 0x1B5 => array(0x1B6),
1627
+					0x1B7 => array(0x292), 0x1B8 => array(0x1B9), 0x1BC => array(0x1BD),
1628
+					0x1C4 => array(0x64, 0x17E), 0x1C5 => array(0x64, 0x17E), 0x1C6 => array(0x64, 0x17E),
1629
+					0x1C7 => array(0x6C, 0x6A), 0x1C8 => array(0x6C, 0x6A), 0x1C9 => array(0x6C, 0x6A),
1630
+					0x1CA => array(0x6E, 0x6A), 0x1CB => array(0x6E, 0x6A), 0x1CC => array(0x6E, 0x6A),
1631
+					0x1CD => array(0x1CE), 0x1CF => array(0x1D0), 0x1D1 => array(0x1D2),
1632
+					0x1D3 => array(0x1D4), 0x1D5 => array(0x1D6), 0x1D7 => array(0x1D8),
1633
+					0x1D9 => array(0x1DA), 0x1DB => array(0x1DC), 0x1DE => array(0x1DF),
1634
+					0x1E0 => array(0x1E1), 0x1E2 => array(0x1E3), 0x1E4 => array(0x1E5),
1635
+					0x1E6 => array(0x1E7), 0x1E8 => array(0x1E9), 0x1EA => array(0x1EB),
1636
+					0x1EC => array(0x1ED), 0x1EE => array(0x1EF), 0x1F1 => array(0x64, 0x7A),
1637
+					0x1F2 => array(0x64, 0x7A), 0x1F3 => array(0x64, 0x7A), 0x1F4 => array(0x1F5),
1638
+					0x1F6 => array(0x195), 0x1F7 => array(0x1BF), 0x1F8 => array(0x1F9),
1639
+					0x1FA => array(0x1FB), 0x1FC => array(0x1FD), 0x1FE => array(0x1FF),
1640
+					0x200 => array(0x201), 0x202 => array(0x203), 0x204 => array(0x205),
1641
+					0x206 => array(0x207), 0x208 => array(0x209), 0x20A => array(0x20B),
1642
+					0x20C => array(0x20D), 0x20E => array(0x20F), 0x210 => array(0x211),
1643
+					0x212 => array(0x213), 0x214 => array(0x215), 0x216 => array(0x217),
1644
+					0x218 => array(0x219), 0x21A => array(0x21B), 0x21C => array(0x21D),
1645
+					0x21E => array(0x21F), 0x220 => array(0x19E), 0x222 => array(0x223),
1646
+					0x224 => array(0x225), 0x226 => array(0x227), 0x228 => array(0x229),
1647
+					0x22A => array(0x22B), 0x22C => array(0x22D), 0x22E => array(0x22F),
1648
+					0x230 => array(0x231), 0x232 => array(0x233), 0x23A => array(0x2C65),
1649
+					0x23B => array(0x23C), 0x23D => array(0x19A), 0x23E => array(0x2C66),
1650
+					0x241 => array(0x242), 0x243 => array(0x180), 0x244 => array(0x289),
1651
+					0x245 => array(0x28C), 0x246 => array(0x247), 0x248 => array(0x249),
1652
+					0x24A => array(0x24B), 0x24C => array(0x24D), 0x24E => array(0x24F),
1653
+					0x2B0 => array(0x68), 0x2B1 => array(0x266), 0x2B2 => array(0x6A),
1654
+					0x2B3 => array(0x72), 0x2B4 => array(0x279), 0x2B5 => array(0x27B),
1655
+					0x2B6 => array(0x281), 0x2B7 => array(0x77), 0x2B8 => array(0x79),
1656
+					0x2E0 => array(0x263), 0x2E1 => array(0x6C), 0x2E2 => array(0x73),
1657
+					0x2E3 => array(0x78), 0x2E4 => array(0x295), 0x340 => array(0x300),
1658
+					0x341 => array(0x301), 0x343 => array(0x313), 0x344 => array(0x308, 0x301),
1659
+					0x345 => array(0x3B9), 0x370 => array(0x371), 0x372 => array(0x373),
1660
+					0x374 => array(0x2B9), 0x376 => array(0x377), 0x37F => array(0x3F3),
1661
+					0x386 => array(0x3AC), 0x387 => array(0xB7), 0x388 => array(0x3AD),
1662
+					0x389 => array(0x3AE), 0x38A => array(0x3AF), 0x38C => array(0x3CC),
1663
+					0x38E => array(0x3CD), 0x38F => array(0x3CE), 0x391 => array(0x3B1),
1664
+					0x392 => array(0x3B2), 0x393 => array(0x3B3), 0x394 => array(0x3B4),
1665
+					0x395 => array(0x3B5), 0x396 => array(0x3B6), 0x397 => array(0x3B7),
1666
+					0x398 => array(0x3B8), 0x399 => array(0x3B9), 0x39A => array(0x3BA),
1667
+					0x39B => array(0x3BB), 0x39C => array(0x3BC), 0x39D => array(0x3BD),
1668
+					0x39E => array(0x3BE), 0x39F => array(0x3BF), 0x3A0 => array(0x3C0),
1669
+					0x3A1 => array(0x3C1), 0x3A3 => array(0x3C3), 0x3A4 => array(0x3C4),
1670
+					0x3A5 => array(0x3C5), 0x3A6 => array(0x3C6), 0x3A7 => array(0x3C7),
1671
+					0x3A8 => array(0x3C8), 0x3A9 => array(0x3C9), 0x3AA => array(0x3CA),
1672
+					0x3AB => array(0x3CB), 0x3CF => array(0x3D7), 0x3D0 => array(0x3B2),
1673
+					0x3D1 => array(0x3B8), 0x3D2 => array(0x3C5), 0x3D3 => array(0x3CD),
1674
+					0x3D4 => array(0x3CB), 0x3D5 => array(0x3C6), 0x3D6 => array(0x3C0),
1675
+					0x3D8 => array(0x3D9), 0x3DA => array(0x3DB), 0x3DC => array(0x3DD),
1676
+					0x3DE => array(0x3DF), 0x3E0 => array(0x3E1), 0x3E2 => array(0x3E3),
1677
+					0x3E4 => array(0x3E5), 0x3E6 => array(0x3E7), 0x3E8 => array(0x3E9),
1678
+					0x3EA => array(0x3EB), 0x3EC => array(0x3ED), 0x3EE => array(0x3EF),
1679
+					0x3F0 => array(0x3BA), 0x3F1 => array(0x3C1), 0x3F2 => array(0x3C3),
1680
+					0x3F4 => array(0x3B8), 0x3F5 => array(0x3B5), 0x3F7 => array(0x3F8),
1681
+					0x3F9 => array(0x3C3), 0x3FA => array(0x3FB), 0x3FD => array(0x37B),
1682
+					0x3FE => array(0x37C), 0x3FF => array(0x37D), 0x400 => array(0x450),
1683
+					0x401 => array(0x451), 0x402 => array(0x452), 0x403 => array(0x453),
1684
+					0x404 => array(0x454), 0x405 => array(0x455), 0x406 => array(0x456),
1685
+					0x407 => array(0x457), 0x408 => array(0x458), 0x409 => array(0x459),
1686
+					0x40A => array(0x45A), 0x40B => array(0x45B), 0x40C => array(0x45C),
1687
+					0x40D => array(0x45D), 0x40E => array(0x45E), 0x40F => array(0x45F),
1688
+					0x410 => array(0x430), 0x411 => array(0x431), 0x412 => array(0x432),
1689
+					0x413 => array(0x433), 0x414 => array(0x434), 0x415 => array(0x435),
1690
+					0x416 => array(0x436), 0x417 => array(0x437), 0x418 => array(0x438),
1691
+					0x419 => array(0x439), 0x41A => array(0x43A), 0x41B => array(0x43B),
1692
+					0x41C => array(0x43C), 0x41D => array(0x43D), 0x41E => array(0x43E),
1693
+					0x41F => array(0x43F), 0x420 => array(0x440), 0x421 => array(0x441),
1694
+					0x422 => array(0x442), 0x423 => array(0x443), 0x424 => array(0x444),
1695
+					0x425 => array(0x445), 0x426 => array(0x446), 0x427 => array(0x447),
1696
+					0x428 => array(0x448), 0x429 => array(0x449), 0x42A => array(0x44A),
1697
+					0x42B => array(0x44B), 0x42C => array(0x44C), 0x42D => array(0x44D),
1698
+					0x42E => array(0x44E), 0x42F => array(0x44F), 0x460 => array(0x461),
1699
+					0x462 => array(0x463), 0x464 => array(0x465), 0x466 => array(0x467),
1700
+					0x468 => array(0x469), 0x46A => array(0x46B), 0x46C => array(0x46D),
1701
+					0x46E => array(0x46F), 0x470 => array(0x471), 0x472 => array(0x473),
1702
+					0x474 => array(0x475), 0x476 => array(0x477), 0x478 => array(0x479),
1703
+					0x47A => array(0x47B), 0x47C => array(0x47D), 0x47E => array(0x47F),
1704
+					0x480 => array(0x481), 0x48A => array(0x48B), 0x48C => array(0x48D),
1705
+					0x48E => array(0x48F), 0x490 => array(0x491), 0x492 => array(0x493),
1706
+					0x494 => array(0x495), 0x496 => array(0x497), 0x498 => array(0x499),
1707
+					0x49A => array(0x49B), 0x49C => array(0x49D), 0x49E => array(0x49F),
1708
+					0x4A0 => array(0x4A1), 0x4A2 => array(0x4A3), 0x4A4 => array(0x4A5),
1709
+					0x4A6 => array(0x4A7), 0x4A8 => array(0x4A9), 0x4AA => array(0x4AB),
1710
+					0x4AC => array(0x4AD), 0x4AE => array(0x4AF), 0x4B0 => array(0x4B1),
1711
+					0x4B2 => array(0x4B3), 0x4B4 => array(0x4B5), 0x4B6 => array(0x4B7),
1712
+					0x4B8 => array(0x4B9), 0x4BA => array(0x4BB), 0x4BC => array(0x4BD),
1713
+					0x4BE => array(0x4BF), 0x4C1 => array(0x4C2), 0x4C3 => array(0x4C4),
1714
+					0x4C5 => array(0x4C6), 0x4C7 => array(0x4C8), 0x4C9 => array(0x4CA),
1715
+					0x4CB => array(0x4CC), 0x4CD => array(0x4CE), 0x4D0 => array(0x4D1),
1716
+					0x4D2 => array(0x4D3), 0x4D4 => array(0x4D5), 0x4D6 => array(0x4D7),
1717
+					0x4D8 => array(0x4D9), 0x4DA => array(0x4DB), 0x4DC => array(0x4DD),
1718
+					0x4DE => array(0x4DF), 0x4E0 => array(0x4E1), 0x4E2 => array(0x4E3),
1719
+					0x4E4 => array(0x4E5), 0x4E6 => array(0x4E7), 0x4E8 => array(0x4E9),
1720
+					0x4EA => array(0x4EB), 0x4EC => array(0x4ED), 0x4EE => array(0x4EF),
1721
+					0x4F0 => array(0x4F1), 0x4F2 => array(0x4F3), 0x4F4 => array(0x4F5),
1722
+					0x4F6 => array(0x4F7), 0x4F8 => array(0x4F9), 0x4FA => array(0x4FB),
1723
+					0x4FC => array(0x4FD), 0x4FE => array(0x4FF), 0x500 => array(0x501),
1724
+					0x502 => array(0x503), 0x504 => array(0x505), 0x506 => array(0x507),
1725
+					0x508 => array(0x509), 0x50A => array(0x50B), 0x50C => array(0x50D),
1726
+					0x50E => array(0x50F), 0x510 => array(0x511), 0x512 => array(0x513),
1727
+					0x514 => array(0x515), 0x516 => array(0x517), 0x518 => array(0x519),
1728
+					0x51A => array(0x51B), 0x51C => array(0x51D), 0x51E => array(0x51F),
1729
+					0x520 => array(0x521), 0x522 => array(0x523), 0x524 => array(0x525),
1730
+					0x526 => array(0x527), 0x528 => array(0x529), 0x52A => array(0x52B),
1731
+					0x52C => array(0x52D), 0x52E => array(0x52F), 0x531 => array(0x561),
1732
+					0x532 => array(0x562), 0x533 => array(0x563), 0x534 => array(0x564),
1733
+					0x535 => array(0x565), 0x536 => array(0x566), 0x537 => array(0x567),
1734
+					0x538 => array(0x568), 0x539 => array(0x569), 0x53A => array(0x56A),
1735
+					0x53B => array(0x56B), 0x53C => array(0x56C), 0x53D => array(0x56D),
1736
+					0x53E => array(0x56E), 0x53F => array(0x56F), 0x540 => array(0x570),
1737
+					0x541 => array(0x571), 0x542 => array(0x572), 0x543 => array(0x573),
1738
+					0x544 => array(0x574), 0x545 => array(0x575), 0x546 => array(0x576),
1739
+					0x547 => array(0x577), 0x548 => array(0x578), 0x549 => array(0x579),
1740
+					0x54A => array(0x57A), 0x54B => array(0x57B), 0x54C => array(0x57C),
1741
+					0x54D => array(0x57D), 0x54E => array(0x57E), 0x54F => array(0x57F),
1742
+					0x550 => array(0x580), 0x551 => array(0x581), 0x552 => array(0x582),
1743
+					0x553 => array(0x583), 0x554 => array(0x584), 0x555 => array(0x585),
1744
+					0x556 => array(0x586), 0x587 => array(0x565, 0x582), 0x675 => array(0x627, 0x674),
1745
+					0x676 => array(0x648, 0x674), 0x677 => array(0x6C7, 0x674), 0x678 => array(0x64A, 0x674),
1746
+					0x958 => array(0x915, 0x93C), 0x959 => array(0x916, 0x93C), 0x95A => array(0x917, 0x93C),
1747
+					0x95B => array(0x91C, 0x93C), 0x95C => array(0x921, 0x93C), 0x95D => array(0x922, 0x93C),
1748
+					0x95E => array(0x92B, 0x93C), 0x95F => array(0x92F, 0x93C), 0x9DC => array(0x9A1, 0x9BC),
1749
+					0x9DD => array(0x9A2, 0x9BC), 0x9DF => array(0x9AF, 0x9BC), 0xA33 => array(0xA32, 0xA3C),
1750
+					0xA36 => array(0xA38, 0xA3C), 0xA59 => array(0xA16, 0xA3C), 0xA5A => array(0xA17, 0xA3C),
1751
+					0xA5B => array(0xA1C, 0xA3C), 0xA5E => array(0xA2B, 0xA3C), 0xB5C => array(0xB21, 0xB3C),
1752
+					0xB5D => array(0xB22, 0xB3C), 0xE33 => array(0xE4D, 0xE32), 0xEB3 => array(0xECD, 0xEB2),
1753
+					0xEDC => array(0xEAB, 0xE99), 0xEDD => array(0xEAB, 0xEA1), 0xF0C => array(0xF0B),
1754
+					0xF43 => array(0xF42, 0xFB7), 0xF4D => array(0xF4C, 0xFB7), 0xF52 => array(0xF51, 0xFB7),
1755
+					0xF57 => array(0xF56, 0xFB7), 0xF5C => array(0xF5B, 0xFB7), 0xF69 => array(0xF40, 0xFB5),
1756
+					0xF73 => array(0xF71, 0xF72), 0xF75 => array(0xF71, 0xF74), 0xF76 => array(0xFB2, 0xF80),
1757
+					0xF77 => array(0xFB2, 0xF71, 0xF80), 0xF78 => array(0xFB3, 0xF80), 0xF79 => array(0xFB3, 0xF71, 0xF80),
1758
+					0xF81 => array(0xF71, 0xF80), 0xF93 => array(0xF92, 0xFB7), 0xF9D => array(0xF9C, 0xFB7),
1759
+					0xFA2 => array(0xFA1, 0xFB7), 0xFA7 => array(0xFA6, 0xFB7), 0xFAC => array(0xFAB, 0xFB7),
1760
+					0xFB9 => array(0xF90, 0xFB5), 0x10C7 => array(0x2D27), 0x10CD => array(0x2D2D),
1761
+					0x10FC => array(0x10DC), 0x1D2C => array(0x61), 0x1D2D => array(0xE6),
1762
+					0x1D2E => array(0x62), 0x1D30 => array(0x64), 0x1D31 => array(0x65),
1763
+					0x1D32 => array(0x1DD), 0x1D33 => array(0x67), 0x1D34 => array(0x68),
1764
+					0x1D35 => array(0x69), 0x1D36 => array(0x6A), 0x1D37 => array(0x6B),
1765
+					0x1D38 => array(0x6C), 0x1D39 => array(0x6D), 0x1D3A => array(0x6E),
1766
+					0x1D3C => array(0x6F), 0x1D3D => array(0x223), 0x1D3E => array(0x70),
1767
+					0x1D3F => array(0x72), 0x1D40 => array(0x74), 0x1D41 => array(0x75),
1768
+					0x1D42 => array(0x77), 0x1D43 => array(0x61), 0x1D44 => array(0x250),
1769
+					0x1D45 => array(0x251), 0x1D46 => array(0x1D02), 0x1D47 => array(0x62),
1770
+					0x1D48 => array(0x64), 0x1D49 => array(0x65), 0x1D4A => array(0x259),
1771
+					0x1D4B => array(0x25B), 0x1D4C => array(0x25C), 0x1D4D => array(0x67),
1772
+					0x1D4F => array(0x6B), 0x1D50 => array(0x6D), 0x1D51 => array(0x14B),
1773
+					0x1D52 => array(0x6F), 0x1D53 => array(0x254), 0x1D54 => array(0x1D16),
1774
+					0x1D55 => array(0x1D17), 0x1D56 => array(0x70), 0x1D57 => array(0x74),
1775
+					0x1D58 => array(0x75), 0x1D59 => array(0x1D1D), 0x1D5A => array(0x26F),
1776
+					0x1D5B => array(0x76), 0x1D5C => array(0x1D25), 0x1D5D => array(0x3B2),
1777
+					0x1D5E => array(0x3B3), 0x1D5F => array(0x3B4), 0x1D60 => array(0x3C6),
1778
+					0x1D61 => array(0x3C7), 0x1D62 => array(0x69), 0x1D63 => array(0x72),
1779
+					0x1D64 => array(0x75), 0x1D65 => array(0x76), 0x1D66 => array(0x3B2),
1780
+					0x1D67 => array(0x3B3), 0x1D68 => array(0x3C1), 0x1D69 => array(0x3C6),
1781
+					0x1D6A => array(0x3C7), 0x1D78 => array(0x43D), 0x1D9B => array(0x252),
1782
+					0x1D9C => array(0x63), 0x1D9D => array(0x255), 0x1D9E => array(0xF0),
1783
+					0x1D9F => array(0x25C), 0x1DA0 => array(0x66), 0x1DA1 => array(0x25F),
1784
+					0x1DA2 => array(0x261), 0x1DA3 => array(0x265), 0x1DA4 => array(0x268),
1785
+					0x1DA5 => array(0x269), 0x1DA6 => array(0x26A), 0x1DA7 => array(0x1D7B),
1786
+					0x1DA8 => array(0x29D), 0x1DA9 => array(0x26D), 0x1DAA => array(0x1D85),
1787
+					0x1DAB => array(0x29F), 0x1DAC => array(0x271), 0x1DAD => array(0x270),
1788
+					0x1DAE => array(0x272), 0x1DAF => array(0x273), 0x1DB0 => array(0x274),
1789
+					0x1DB1 => array(0x275), 0x1DB2 => array(0x278), 0x1DB3 => array(0x282),
1790
+					0x1DB4 => array(0x283), 0x1DB5 => array(0x1AB), 0x1DB6 => array(0x289),
1791
+					0x1DB7 => array(0x28A), 0x1DB8 => array(0x1D1C), 0x1DB9 => array(0x28B),
1792
+					0x1DBA => array(0x28C), 0x1DBB => array(0x7A), 0x1DBC => array(0x290),
1793
+					0x1DBD => array(0x291), 0x1DBE => array(0x292), 0x1DBF => array(0x3B8),
1794
+					0x1E00 => array(0x1E01), 0x1E02 => array(0x1E03), 0x1E04 => array(0x1E05),
1795
+					0x1E06 => array(0x1E07), 0x1E08 => array(0x1E09), 0x1E0A => array(0x1E0B),
1796
+					0x1E0C => array(0x1E0D), 0x1E0E => array(0x1E0F), 0x1E10 => array(0x1E11),
1797
+					0x1E12 => array(0x1E13), 0x1E14 => array(0x1E15), 0x1E16 => array(0x1E17),
1798
+					0x1E18 => array(0x1E19), 0x1E1A => array(0x1E1B), 0x1E1C => array(0x1E1D),
1799
+					0x1E1E => array(0x1E1F), 0x1E20 => array(0x1E21), 0x1E22 => array(0x1E23),
1800
+					0x1E24 => array(0x1E25), 0x1E26 => array(0x1E27), 0x1E28 => array(0x1E29),
1801
+					0x1E2A => array(0x1E2B), 0x1E2C => array(0x1E2D), 0x1E2E => array(0x1E2F),
1802
+					0x1E30 => array(0x1E31), 0x1E32 => array(0x1E33), 0x1E34 => array(0x1E35),
1803
+					0x1E36 => array(0x1E37), 0x1E38 => array(0x1E39), 0x1E3A => array(0x1E3B),
1804
+					0x1E3C => array(0x1E3D), 0x1E3E => array(0x1E3F), 0x1E40 => array(0x1E41),
1805
+					0x1E42 => array(0x1E43), 0x1E44 => array(0x1E45), 0x1E46 => array(0x1E47),
1806
+					0x1E48 => array(0x1E49), 0x1E4A => array(0x1E4B), 0x1E4C => array(0x1E4D),
1807
+					0x1E4E => array(0x1E4F), 0x1E50 => array(0x1E51), 0x1E52 => array(0x1E53),
1808
+					0x1E54 => array(0x1E55), 0x1E56 => array(0x1E57), 0x1E58 => array(0x1E59),
1809
+					0x1E5A => array(0x1E5B), 0x1E5C => array(0x1E5D), 0x1E5E => array(0x1E5F),
1810
+					0x1E60 => array(0x1E61), 0x1E62 => array(0x1E63), 0x1E64 => array(0x1E65),
1811
+					0x1E66 => array(0x1E67), 0x1E68 => array(0x1E69), 0x1E6A => array(0x1E6B),
1812
+					0x1E6C => array(0x1E6D), 0x1E6E => array(0x1E6F), 0x1E70 => array(0x1E71),
1813
+					0x1E72 => array(0x1E73), 0x1E74 => array(0x1E75), 0x1E76 => array(0x1E77),
1814
+					0x1E78 => array(0x1E79), 0x1E7A => array(0x1E7B), 0x1E7C => array(0x1E7D),
1815
+					0x1E7E => array(0x1E7F), 0x1E80 => array(0x1E81), 0x1E82 => array(0x1E83),
1816
+					0x1E84 => array(0x1E85), 0x1E86 => array(0x1E87), 0x1E88 => array(0x1E89),
1817
+					0x1E8A => array(0x1E8B), 0x1E8C => array(0x1E8D), 0x1E8E => array(0x1E8F),
1818
+					0x1E90 => array(0x1E91), 0x1E92 => array(0x1E93), 0x1E94 => array(0x1E95),
1819
+					0x1E9A => array(0x61, 0x2BE), 0x1E9B => array(0x1E61), 0x1E9E => array(0x73, 0x73),
1820
+					0x1EA0 => array(0x1EA1), 0x1EA2 => array(0x1EA3), 0x1EA4 => array(0x1EA5),
1821
+					0x1EA6 => array(0x1EA7), 0x1EA8 => array(0x1EA9), 0x1EAA => array(0x1EAB),
1822
+					0x1EAC => array(0x1EAD), 0x1EAE => array(0x1EAF), 0x1EB0 => array(0x1EB1),
1823
+					0x1EB2 => array(0x1EB3), 0x1EB4 => array(0x1EB5), 0x1EB6 => array(0x1EB7),
1824
+					0x1EB8 => array(0x1EB9), 0x1EBA => array(0x1EBB), 0x1EBC => array(0x1EBD),
1825
+					0x1EBE => array(0x1EBF), 0x1EC0 => array(0x1EC1), 0x1EC2 => array(0x1EC3),
1826
+					0x1EC4 => array(0x1EC5), 0x1EC6 => array(0x1EC7), 0x1EC8 => array(0x1EC9),
1827
+					0x1ECA => array(0x1ECB), 0x1ECC => array(0x1ECD), 0x1ECE => array(0x1ECF),
1828
+					0x1ED0 => array(0x1ED1), 0x1ED2 => array(0x1ED3), 0x1ED4 => array(0x1ED5),
1829
+					0x1ED6 => array(0x1ED7), 0x1ED8 => array(0x1ED9), 0x1EDA => array(0x1EDB),
1830
+					0x1EDC => array(0x1EDD), 0x1EDE => array(0x1EDF), 0x1EE0 => array(0x1EE1),
1831
+					0x1EE2 => array(0x1EE3), 0x1EE4 => array(0x1EE5), 0x1EE6 => array(0x1EE7),
1832
+					0x1EE8 => array(0x1EE9), 0x1EEA => array(0x1EEB), 0x1EEC => array(0x1EED),
1833
+					0x1EEE => array(0x1EEF), 0x1EF0 => array(0x1EF1), 0x1EF2 => array(0x1EF3),
1834
+					0x1EF4 => array(0x1EF5), 0x1EF6 => array(0x1EF7), 0x1EF8 => array(0x1EF9),
1835
+					0x1EFA => array(0x1EFB), 0x1EFC => array(0x1EFD), 0x1EFE => array(0x1EFF),
1836
+					0x1F08 => array(0x1F00), 0x1F09 => array(0x1F01), 0x1F0A => array(0x1F02),
1837
+					0x1F0B => array(0x1F03), 0x1F0C => array(0x1F04), 0x1F0D => array(0x1F05),
1838
+					0x1F0E => array(0x1F06), 0x1F0F => array(0x1F07), 0x1F18 => array(0x1F10),
1839
+					0x1F19 => array(0x1F11), 0x1F1A => array(0x1F12), 0x1F1B => array(0x1F13),
1840
+					0x1F1C => array(0x1F14), 0x1F1D => array(0x1F15), 0x1F28 => array(0x1F20),
1841
+					0x1F29 => array(0x1F21), 0x1F2A => array(0x1F22), 0x1F2B => array(0x1F23),
1842
+					0x1F2C => array(0x1F24), 0x1F2D => array(0x1F25), 0x1F2E => array(0x1F26),
1843
+					0x1F2F => array(0x1F27), 0x1F38 => array(0x1F30), 0x1F39 => array(0x1F31),
1844
+					0x1F3A => array(0x1F32), 0x1F3B => array(0x1F33), 0x1F3C => array(0x1F34),
1845
+					0x1F3D => array(0x1F35), 0x1F3E => array(0x1F36), 0x1F3F => array(0x1F37),
1846
+					0x1F48 => array(0x1F40), 0x1F49 => array(0x1F41), 0x1F4A => array(0x1F42),
1847
+					0x1F4B => array(0x1F43), 0x1F4C => array(0x1F44), 0x1F4D => array(0x1F45),
1848
+					0x1F59 => array(0x1F51), 0x1F5B => array(0x1F53), 0x1F5D => array(0x1F55),
1849
+					0x1F5F => array(0x1F57), 0x1F68 => array(0x1F60), 0x1F69 => array(0x1F61),
1850
+					0x1F6A => array(0x1F62), 0x1F6B => array(0x1F63), 0x1F6C => array(0x1F64),
1851
+					0x1F6D => array(0x1F65), 0x1F6E => array(0x1F66), 0x1F6F => array(0x1F67),
1852
+					0x1F71 => array(0x3AC), 0x1F73 => array(0x3AD), 0x1F75 => array(0x3AE),
1853
+					0x1F77 => array(0x3AF), 0x1F79 => array(0x3CC), 0x1F7B => array(0x3CD),
1854
+					0x1F7D => array(0x3CE), 0x1F80 => array(0x1F00, 0x3B9), 0x1F81 => array(0x1F01, 0x3B9),
1855
+					0x1F82 => array(0x1F02, 0x3B9), 0x1F83 => array(0x1F03, 0x3B9), 0x1F84 => array(0x1F04, 0x3B9),
1856
+					0x1F85 => array(0x1F05, 0x3B9), 0x1F86 => array(0x1F06, 0x3B9), 0x1F87 => array(0x1F07, 0x3B9),
1857
+					0x1F88 => array(0x1F00, 0x3B9), 0x1F89 => array(0x1F01, 0x3B9), 0x1F8A => array(0x1F02, 0x3B9),
1858
+					0x1F8B => array(0x1F03, 0x3B9), 0x1F8C => array(0x1F04, 0x3B9), 0x1F8D => array(0x1F05, 0x3B9),
1859
+					0x1F8E => array(0x1F06, 0x3B9), 0x1F8F => array(0x1F07, 0x3B9), 0x1F90 => array(0x1F20, 0x3B9),
1860
+					0x1F91 => array(0x1F21, 0x3B9), 0x1F92 => array(0x1F22, 0x3B9), 0x1F93 => array(0x1F23, 0x3B9),
1861
+					0x1F94 => array(0x1F24, 0x3B9), 0x1F95 => array(0x1F25, 0x3B9), 0x1F96 => array(0x1F26, 0x3B9),
1862
+					0x1F97 => array(0x1F27, 0x3B9), 0x1F98 => array(0x1F20, 0x3B9), 0x1F99 => array(0x1F21, 0x3B9),
1863
+					0x1F9A => array(0x1F22, 0x3B9), 0x1F9B => array(0x1F23, 0x3B9), 0x1F9C => array(0x1F24, 0x3B9),
1864
+					0x1F9D => array(0x1F25, 0x3B9), 0x1F9E => array(0x1F26, 0x3B9), 0x1F9F => array(0x1F27, 0x3B9),
1865
+					0x1FA0 => array(0x1F60, 0x3B9), 0x1FA1 => array(0x1F61, 0x3B9), 0x1FA2 => array(0x1F62, 0x3B9),
1866
+					0x1FA3 => array(0x1F63, 0x3B9), 0x1FA4 => array(0x1F64, 0x3B9), 0x1FA5 => array(0x1F65, 0x3B9),
1867
+					0x1FA6 => array(0x1F66, 0x3B9), 0x1FA7 => array(0x1F67, 0x3B9), 0x1FA8 => array(0x1F60, 0x3B9),
1868
+					0x1FA9 => array(0x1F61, 0x3B9), 0x1FAA => array(0x1F62, 0x3B9), 0x1FAB => array(0x1F63, 0x3B9),
1869
+					0x1FAC => array(0x1F64, 0x3B9), 0x1FAD => array(0x1F65, 0x3B9), 0x1FAE => array(0x1F66, 0x3B9),
1870
+					0x1FAF => array(0x1F67, 0x3B9), 0x1FB2 => array(0x1F70, 0x3B9), 0x1FB3 => array(0x3B1, 0x3B9),
1871
+					0x1FB4 => array(0x3AC, 0x3B9), 0x1FB7 => array(0x1FB6, 0x3B9), 0x1FB8 => array(0x1FB0),
1872
+					0x1FB9 => array(0x1FB1), 0x1FBA => array(0x1F70), 0x1FBB => array(0x3AC),
1873
+					0x1FBC => array(0x3B1, 0x3B9), 0x1FBE => array(0x3B9), 0x1FC2 => array(0x1F74, 0x3B9),
1874
+					0x1FC3 => array(0x3B7, 0x3B9), 0x1FC4 => array(0x3AE, 0x3B9), 0x1FC7 => array(0x1FC6, 0x3B9),
1875
+					0x1FC8 => array(0x1F72), 0x1FC9 => array(0x3AD), 0x1FCA => array(0x1F74),
1876
+					0x1FCB => array(0x3AE), 0x1FCC => array(0x3B7, 0x3B9), 0x1FD3 => array(0x390),
1877
+					0x1FD8 => array(0x1FD0), 0x1FD9 => array(0x1FD1), 0x1FDA => array(0x1F76),
1878
+					0x1FDB => array(0x3AF), 0x1FE3 => array(0x3B0), 0x1FE8 => array(0x1FE0),
1879
+					0x1FE9 => array(0x1FE1), 0x1FEA => array(0x1F7A), 0x1FEB => array(0x3CD),
1880
+					0x1FEC => array(0x1FE5), 0x1FF2 => array(0x1F7C, 0x3B9), 0x1FF3 => array(0x3C9, 0x3B9),
1881
+					0x1FF4 => array(0x3CE, 0x3B9), 0x1FF7 => array(0x1FF6, 0x3B9), 0x1FF8 => array(0x1F78),
1882
+					0x1FF9 => array(0x3CC), 0x1FFA => array(0x1F7C), 0x1FFB => array(0x3CE),
1883
+					0x1FFC => array(0x3C9, 0x3B9), 0x2011 => array(0x2010), 0x2033 => array(0x2032, 0x2032),
1884
+					0x2034 => array(0x2032, 0x2032, 0x2032), 0x2036 => array(0x2035, 0x2035), 0x2037 => array(0x2035, 0x2035, 0x2035),
1885
+					0x2057 => array(0x2032, 0x2032, 0x2032, 0x2032), 0x2070 => array(0x30), 0x2071 => array(0x69),
1886
+					0x2074 => array(0x34), 0x2075 => array(0x35), 0x2076 => array(0x36),
1887
+					0x2077 => array(0x37), 0x2078 => array(0x38), 0x2079 => array(0x39),
1888
+					0x207B => array(0x2212), 0x207F => array(0x6E), 0x2080 => array(0x30),
1889
+					0x2081 => array(0x31), 0x2082 => array(0x32), 0x2083 => array(0x33),
1890
+					0x2084 => array(0x34), 0x2085 => array(0x35), 0x2086 => array(0x36),
1891
+					0x2087 => array(0x37), 0x2088 => array(0x38), 0x2089 => array(0x39),
1892
+					0x208B => array(0x2212), 0x2090 => array(0x61), 0x2091 => array(0x65),
1893
+					0x2092 => array(0x6F), 0x2093 => array(0x78), 0x2094 => array(0x259),
1894
+					0x2095 => array(0x68), 0x2096 => array(0x6B), 0x2097 => array(0x6C),
1895
+					0x2098 => array(0x6D), 0x2099 => array(0x6E), 0x209A => array(0x70),
1896
+					0x209B => array(0x73), 0x209C => array(0x74), 0x20A8 => array(0x72, 0x73),
1897
+					0x2102 => array(0x63), 0x2103 => array(0xB0, 0x63), 0x2107 => array(0x25B),
1898
+					0x2109 => array(0xB0, 0x66), 0x210A => array(0x67), 0x210B => array(0x68),
1899
+					0x210C => array(0x68), 0x210D => array(0x68), 0x210E => array(0x68),
1900
+					0x210F => array(0x127), 0x2110 => array(0x69), 0x2111 => array(0x69),
1901
+					0x2112 => array(0x6C), 0x2113 => array(0x6C), 0x2115 => array(0x6E),
1902
+					0x2116 => array(0x6E, 0x6F), 0x2119 => array(0x70), 0x211A => array(0x71),
1903
+					0x211B => array(0x72), 0x211C => array(0x72), 0x211D => array(0x72),
1904
+					0x2120 => array(0x73, 0x6D), 0x2121 => array(0x74, 0x65, 0x6C), 0x2122 => array(0x74, 0x6D),
1905
+					0x2124 => array(0x7A), 0x2126 => array(0x3C9), 0x2128 => array(0x7A),
1906
+					0x212A => array(0x6B), 0x212B => array(0xE5), 0x212C => array(0x62),
1907
+					0x212D => array(0x63), 0x212F => array(0x65), 0x2130 => array(0x65),
1908
+					0x2131 => array(0x66), 0x2133 => array(0x6D), 0x2134 => array(0x6F),
1909
+					0x2135 => array(0x5D0), 0x2136 => array(0x5D1), 0x2137 => array(0x5D2),
1910
+					0x2138 => array(0x5D3), 0x2139 => array(0x69), 0x213B => array(0x66, 0x61, 0x78),
1911
+					0x213C => array(0x3C0), 0x213D => array(0x3B3), 0x213E => array(0x3B3),
1912
+					0x213F => array(0x3C0), 0x2140 => array(0x2211), 0x2145 => array(0x64),
1913
+					0x2146 => array(0x64), 0x2147 => array(0x65), 0x2148 => array(0x69),
1914
+					0x2149 => array(0x6A), 0x2150 => array(0x31, 0x2044, 0x37), 0x2151 => array(0x31, 0x2044, 0x39),
1915
+					0x2152 => array(0x31, 0x2044, 0x31, 0x30), 0x2153 => array(0x31, 0x2044, 0x33), 0x2154 => array(0x32, 0x2044, 0x33),
1916
+					0x2155 => array(0x31, 0x2044, 0x35), 0x2156 => array(0x32, 0x2044, 0x35), 0x2157 => array(0x33, 0x2044, 0x35),
1917
+					0x2158 => array(0x34, 0x2044, 0x35), 0x2159 => array(0x31, 0x2044, 0x36), 0x215A => array(0x35, 0x2044, 0x36),
1918
+					0x215B => array(0x31, 0x2044, 0x38), 0x215C => array(0x33, 0x2044, 0x38), 0x215D => array(0x35, 0x2044, 0x38),
1919
+					0x215E => array(0x37, 0x2044, 0x38), 0x215F => array(0x31, 0x2044), 0x2160 => array(0x69),
1920
+					0x2161 => array(0x69, 0x69), 0x2162 => array(0x69, 0x69, 0x69), 0x2163 => array(0x69, 0x76),
1921
+					0x2164 => array(0x76), 0x2165 => array(0x76, 0x69), 0x2166 => array(0x76, 0x69, 0x69),
1922
+					0x2167 => array(0x76, 0x69, 0x69, 0x69), 0x2168 => array(0x69, 0x78), 0x2169 => array(0x78),
1923
+					0x216A => array(0x78, 0x69), 0x216B => array(0x78, 0x69, 0x69), 0x216C => array(0x6C),
1924
+					0x216D => array(0x63), 0x216E => array(0x64), 0x216F => array(0x6D),
1925
+					0x2170 => array(0x69), 0x2171 => array(0x69, 0x69), 0x2172 => array(0x69, 0x69, 0x69),
1926
+					0x2173 => array(0x69, 0x76), 0x2174 => array(0x76), 0x2175 => array(0x76, 0x69),
1927
+					0x2176 => array(0x76, 0x69, 0x69), 0x2177 => array(0x76, 0x69, 0x69, 0x69), 0x2178 => array(0x69, 0x78),
1928
+					0x2179 => array(0x78), 0x217A => array(0x78, 0x69), 0x217B => array(0x78, 0x69, 0x69),
1929
+					0x217C => array(0x6C), 0x217D => array(0x63), 0x217E => array(0x64),
1930
+					0x217F => array(0x6D), 0x2189 => array(0x30, 0x2044, 0x33), 0x222C => array(0x222B, 0x222B),
1931
+					0x222D => array(0x222B, 0x222B, 0x222B), 0x222F => array(0x222E, 0x222E), 0x2230 => array(0x222E, 0x222E, 0x222E),
1932
+					0x2329 => array(0x3008), 0x232A => array(0x3009), 0x2460 => array(0x31),
1933
+					0x2461 => array(0x32), 0x2462 => array(0x33), 0x2463 => array(0x34),
1934
+					0x2464 => array(0x35), 0x2465 => array(0x36), 0x2466 => array(0x37),
1935
+					0x2467 => array(0x38), 0x2468 => array(0x39), 0x2469 => array(0x31, 0x30),
1936
+					0x246A => array(0x31, 0x31), 0x246B => array(0x31, 0x32), 0x246C => array(0x31, 0x33),
1937
+					0x246D => array(0x31, 0x34), 0x246E => array(0x31, 0x35), 0x246F => array(0x31, 0x36),
1938
+					0x2470 => array(0x31, 0x37), 0x2471 => array(0x31, 0x38), 0x2472 => array(0x31, 0x39),
1939
+					0x2473 => array(0x32, 0x30), 0x24B6 => array(0x61), 0x24B7 => array(0x62),
1940
+					0x24B8 => array(0x63), 0x24B9 => array(0x64), 0x24BA => array(0x65),
1941
+					0x24BB => array(0x66), 0x24BC => array(0x67), 0x24BD => array(0x68),
1942
+					0x24BE => array(0x69), 0x24BF => array(0x6A), 0x24C0 => array(0x6B),
1943
+					0x24C1 => array(0x6C), 0x24C2 => array(0x6D), 0x24C3 => array(0x6E),
1944
+					0x24C4 => array(0x6F), 0x24C5 => array(0x70), 0x24C6 => array(0x71),
1945
+					0x24C7 => array(0x72), 0x24C8 => array(0x73), 0x24C9 => array(0x74),
1946
+					0x24CA => array(0x75), 0x24CB => array(0x76), 0x24CC => array(0x77),
1947
+					0x24CD => array(0x78), 0x24CE => array(0x79), 0x24CF => array(0x7A),
1948
+					0x24D0 => array(0x61), 0x24D1 => array(0x62), 0x24D2 => array(0x63),
1949
+					0x24D3 => array(0x64), 0x24D4 => array(0x65), 0x24D5 => array(0x66),
1950
+					0x24D6 => array(0x67), 0x24D7 => array(0x68), 0x24D8 => array(0x69),
1951
+					0x24D9 => array(0x6A), 0x24DA => array(0x6B), 0x24DB => array(0x6C),
1952
+					0x24DC => array(0x6D), 0x24DD => array(0x6E), 0x24DE => array(0x6F),
1953
+					0x24DF => array(0x70), 0x24E0 => array(0x71), 0x24E1 => array(0x72),
1954
+					0x24E2 => array(0x73), 0x24E3 => array(0x74), 0x24E4 => array(0x75),
1955
+					0x24E5 => array(0x76), 0x24E6 => array(0x77), 0x24E7 => array(0x78),
1956
+					0x24E8 => array(0x79), 0x24E9 => array(0x7A), 0x24EA => array(0x30),
1957
+					0x2A0C => array(0x222B, 0x222B, 0x222B, 0x222B), 0x2ADC => array(0x2ADD, 0x338), 0x2C00 => array(0x2C30),
1958
+					0x2C01 => array(0x2C31), 0x2C02 => array(0x2C32), 0x2C03 => array(0x2C33),
1959
+					0x2C04 => array(0x2C34), 0x2C05 => array(0x2C35), 0x2C06 => array(0x2C36),
1960
+					0x2C07 => array(0x2C37), 0x2C08 => array(0x2C38), 0x2C09 => array(0x2C39),
1961
+					0x2C0A => array(0x2C3A), 0x2C0B => array(0x2C3B), 0x2C0C => array(0x2C3C),
1962
+					0x2C0D => array(0x2C3D), 0x2C0E => array(0x2C3E), 0x2C0F => array(0x2C3F),
1963
+					0x2C10 => array(0x2C40), 0x2C11 => array(0x2C41), 0x2C12 => array(0x2C42),
1964
+					0x2C13 => array(0x2C43), 0x2C14 => array(0x2C44), 0x2C15 => array(0x2C45),
1965
+					0x2C16 => array(0x2C46), 0x2C17 => array(0x2C47), 0x2C18 => array(0x2C48),
1966
+					0x2C19 => array(0x2C49), 0x2C1A => array(0x2C4A), 0x2C1B => array(0x2C4B),
1967
+					0x2C1C => array(0x2C4C), 0x2C1D => array(0x2C4D), 0x2C1E => array(0x2C4E),
1968
+					0x2C1F => array(0x2C4F), 0x2C20 => array(0x2C50), 0x2C21 => array(0x2C51),
1969
+					0x2C22 => array(0x2C52), 0x2C23 => array(0x2C53), 0x2C24 => array(0x2C54),
1970
+					0x2C25 => array(0x2C55), 0x2C26 => array(0x2C56), 0x2C27 => array(0x2C57),
1971
+					0x2C28 => array(0x2C58), 0x2C29 => array(0x2C59), 0x2C2A => array(0x2C5A),
1972
+					0x2C2B => array(0x2C5B), 0x2C2C => array(0x2C5C), 0x2C2D => array(0x2C5D),
1973
+					0x2C2E => array(0x2C5E), 0x2C60 => array(0x2C61), 0x2C62 => array(0x26B),
1974
+					0x2C63 => array(0x1D7D), 0x2C64 => array(0x27D), 0x2C67 => array(0x2C68),
1975
+					0x2C69 => array(0x2C6A), 0x2C6B => array(0x2C6C), 0x2C6D => array(0x251),
1976
+					0x2C6E => array(0x271), 0x2C6F => array(0x250), 0x2C70 => array(0x252),
1977
+					0x2C72 => array(0x2C73), 0x2C75 => array(0x2C76), 0x2C7C => array(0x6A),
1978
+					0x2C7D => array(0x76), 0x2C7E => array(0x23F), 0x2C7F => array(0x240),
1979
+					0x2C80 => array(0x2C81), 0x2C82 => array(0x2C83), 0x2C84 => array(0x2C85),
1980
+					0x2C86 => array(0x2C87), 0x2C88 => array(0x2C89), 0x2C8A => array(0x2C8B),
1981
+					0x2C8C => array(0x2C8D), 0x2C8E => array(0x2C8F), 0x2C90 => array(0x2C91),
1982
+					0x2C92 => array(0x2C93), 0x2C94 => array(0x2C95), 0x2C96 => array(0x2C97),
1983
+					0x2C98 => array(0x2C99), 0x2C9A => array(0x2C9B), 0x2C9C => array(0x2C9D),
1984
+					0x2C9E => array(0x2C9F), 0x2CA0 => array(0x2CA1), 0x2CA2 => array(0x2CA3),
1985
+					0x2CA4 => array(0x2CA5), 0x2CA6 => array(0x2CA7), 0x2CA8 => array(0x2CA9),
1986
+					0x2CAA => array(0x2CAB), 0x2CAC => array(0x2CAD), 0x2CAE => array(0x2CAF),
1987
+					0x2CB0 => array(0x2CB1), 0x2CB2 => array(0x2CB3), 0x2CB4 => array(0x2CB5),
1988
+					0x2CB6 => array(0x2CB7), 0x2CB8 => array(0x2CB9), 0x2CBA => array(0x2CBB),
1989
+					0x2CBC => array(0x2CBD), 0x2CBE => array(0x2CBF), 0x2CC0 => array(0x2CC1),
1990
+					0x2CC2 => array(0x2CC3), 0x2CC4 => array(0x2CC5), 0x2CC6 => array(0x2CC7),
1991
+					0x2CC8 => array(0x2CC9), 0x2CCA => array(0x2CCB), 0x2CCC => array(0x2CCD),
1992
+					0x2CCE => array(0x2CCF), 0x2CD0 => array(0x2CD1), 0x2CD2 => array(0x2CD3),
1993
+					0x2CD4 => array(0x2CD5), 0x2CD6 => array(0x2CD7), 0x2CD8 => array(0x2CD9),
1994
+					0x2CDA => array(0x2CDB), 0x2CDC => array(0x2CDD), 0x2CDE => array(0x2CDF),
1995
+					0x2CE0 => array(0x2CE1), 0x2CE2 => array(0x2CE3), 0x2CEB => array(0x2CEC),
1996
+					0x2CED => array(0x2CEE), 0x2CF2 => array(0x2CF3), 0x2D6F => array(0x2D61),
1997
+					0x2E9F => array(0x6BCD), 0x2EF3 => array(0x9F9F), 0x2F00 => array(0x4E00),
1998
+					0x2F01 => array(0x4E28), 0x2F02 => array(0x4E36), 0x2F03 => array(0x4E3F),
1999
+					0x2F04 => array(0x4E59), 0x2F05 => array(0x4E85), 0x2F06 => array(0x4E8C),
2000
+					0x2F07 => array(0x4EA0), 0x2F08 => array(0x4EBA), 0x2F09 => array(0x513F),
2001
+					0x2F0A => array(0x5165), 0x2F0B => array(0x516B), 0x2F0C => array(0x5182),
2002
+					0x2F0D => array(0x5196), 0x2F0E => array(0x51AB), 0x2F0F => array(0x51E0),
2003
+					0x2F10 => array(0x51F5), 0x2F11 => array(0x5200), 0x2F12 => array(0x529B),
2004
+					0x2F13 => array(0x52F9), 0x2F14 => array(0x5315), 0x2F15 => array(0x531A),
2005
+					0x2F16 => array(0x5338), 0x2F17 => array(0x5341), 0x2F18 => array(0x535C),
2006
+					0x2F19 => array(0x5369), 0x2F1A => array(0x5382), 0x2F1B => array(0x53B6),
2007
+					0x2F1C => array(0x53C8), 0x2F1D => array(0x53E3), 0x2F1E => array(0x56D7),
2008
+					0x2F1F => array(0x571F), 0x2F20 => array(0x58EB), 0x2F21 => array(0x5902),
2009
+					0x2F22 => array(0x590A), 0x2F23 => array(0x5915), 0x2F24 => array(0x5927),
2010
+					0x2F25 => array(0x5973), 0x2F26 => array(0x5B50), 0x2F27 => array(0x5B80),
2011
+					0x2F28 => array(0x5BF8), 0x2F29 => array(0x5C0F), 0x2F2A => array(0x5C22),
2012
+					0x2F2B => array(0x5C38), 0x2F2C => array(0x5C6E), 0x2F2D => array(0x5C71),
2013
+					0x2F2E => array(0x5DDB), 0x2F2F => array(0x5DE5), 0x2F30 => array(0x5DF1),
2014
+					0x2F31 => array(0x5DFE), 0x2F32 => array(0x5E72), 0x2F33 => array(0x5E7A),
2015
+					0x2F34 => array(0x5E7F), 0x2F35 => array(0x5EF4), 0x2F36 => array(0x5EFE),
2016
+					0x2F37 => array(0x5F0B), 0x2F38 => array(0x5F13), 0x2F39 => array(0x5F50),
2017
+					0x2F3A => array(0x5F61), 0x2F3B => array(0x5F73), 0x2F3C => array(0x5FC3),
2018
+					0x2F3D => array(0x6208), 0x2F3E => array(0x6236), 0x2F3F => array(0x624B),
2019
+					0x2F40 => array(0x652F), 0x2F41 => array(0x6534), 0x2F42 => array(0x6587),
2020
+					0x2F43 => array(0x6597), 0x2F44 => array(0x65A4), 0x2F45 => array(0x65B9),
2021
+					0x2F46 => array(0x65E0), 0x2F47 => array(0x65E5), 0x2F48 => array(0x66F0),
2022
+					0x2F49 => array(0x6708), 0x2F4A => array(0x6728), 0x2F4B => array(0x6B20),
2023
+					0x2F4C => array(0x6B62), 0x2F4D => array(0x6B79), 0x2F4E => array(0x6BB3),
2024
+					0x2F4F => array(0x6BCB), 0x2F50 => array(0x6BD4), 0x2F51 => array(0x6BDB),
2025
+					0x2F52 => array(0x6C0F), 0x2F53 => array(0x6C14), 0x2F54 => array(0x6C34),
2026
+					0x2F55 => array(0x706B), 0x2F56 => array(0x722A), 0x2F57 => array(0x7236),
2027
+					0x2F58 => array(0x723B), 0x2F59 => array(0x723F), 0x2F5A => array(0x7247),
2028
+					0x2F5B => array(0x7259), 0x2F5C => array(0x725B), 0x2F5D => array(0x72AC),
2029
+					0x2F5E => array(0x7384), 0x2F5F => array(0x7389), 0x2F60 => array(0x74DC),
2030
+					0x2F61 => array(0x74E6), 0x2F62 => array(0x7518), 0x2F63 => array(0x751F),
2031
+					0x2F64 => array(0x7528), 0x2F65 => array(0x7530), 0x2F66 => array(0x758B),
2032
+					0x2F67 => array(0x7592), 0x2F68 => array(0x7676), 0x2F69 => array(0x767D),
2033
+					0x2F6A => array(0x76AE), 0x2F6B => array(0x76BF), 0x2F6C => array(0x76EE),
2034
+					0x2F6D => array(0x77DB), 0x2F6E => array(0x77E2), 0x2F6F => array(0x77F3),
2035
+					0x2F70 => array(0x793A), 0x2F71 => array(0x79B8), 0x2F72 => array(0x79BE),
2036
+					0x2F73 => array(0x7A74), 0x2F74 => array(0x7ACB), 0x2F75 => array(0x7AF9),
2037
+					0x2F76 => array(0x7C73), 0x2F77 => array(0x7CF8), 0x2F78 => array(0x7F36),
2038
+					0x2F79 => array(0x7F51), 0x2F7A => array(0x7F8A), 0x2F7B => array(0x7FBD),
2039
+					0x2F7C => array(0x8001), 0x2F7D => array(0x800C), 0x2F7E => array(0x8012),
2040
+					0x2F7F => array(0x8033), 0x2F80 => array(0x807F), 0x2F81 => array(0x8089),
2041
+					0x2F82 => array(0x81E3), 0x2F83 => array(0x81EA), 0x2F84 => array(0x81F3),
2042
+					0x2F85 => array(0x81FC), 0x2F86 => array(0x820C), 0x2F87 => array(0x821B),
2043
+					0x2F88 => array(0x821F), 0x2F89 => array(0x826E), 0x2F8A => array(0x8272),
2044
+					0x2F8B => array(0x8278), 0x2F8C => array(0x864D), 0x2F8D => array(0x866B),
2045
+					0x2F8E => array(0x8840), 0x2F8F => array(0x884C), 0x2F90 => array(0x8863),
2046
+					0x2F91 => array(0x897E), 0x2F92 => array(0x898B), 0x2F93 => array(0x89D2),
2047
+					0x2F94 => array(0x8A00), 0x2F95 => array(0x8C37), 0x2F96 => array(0x8C46),
2048
+					0x2F97 => array(0x8C55), 0x2F98 => array(0x8C78), 0x2F99 => array(0x8C9D),
2049
+					0x2F9A => array(0x8D64), 0x2F9B => array(0x8D70), 0x2F9C => array(0x8DB3),
2050
+					0x2F9D => array(0x8EAB), 0x2F9E => array(0x8ECA), 0x2F9F => array(0x8F9B),
2051
+					0x2FA0 => array(0x8FB0), 0x2FA1 => array(0x8FB5), 0x2FA2 => array(0x9091),
2052
+					0x2FA3 => array(0x9149), 0x2FA4 => array(0x91C6), 0x2FA5 => array(0x91CC),
2053
+					0x2FA6 => array(0x91D1), 0x2FA7 => array(0x9577), 0x2FA8 => array(0x9580),
2054
+					0x2FA9 => array(0x961C), 0x2FAA => array(0x96B6), 0x2FAB => array(0x96B9),
2055
+					0x2FAC => array(0x96E8), 0x2FAD => array(0x9751), 0x2FAE => array(0x975E),
2056
+					0x2FAF => array(0x9762), 0x2FB0 => array(0x9769), 0x2FB1 => array(0x97CB),
2057
+					0x2FB2 => array(0x97ED), 0x2FB3 => array(0x97F3), 0x2FB4 => array(0x9801),
2058
+					0x2FB5 => array(0x98A8), 0x2FB6 => array(0x98DB), 0x2FB7 => array(0x98DF),
2059
+					0x2FB8 => array(0x9996), 0x2FB9 => array(0x9999), 0x2FBA => array(0x99AC),
2060
+					0x2FBB => array(0x9AA8), 0x2FBC => array(0x9AD8), 0x2FBD => array(0x9ADF),
2061
+					0x2FBE => array(0x9B25), 0x2FBF => array(0x9B2F), 0x2FC0 => array(0x9B32),
2062
+					0x2FC1 => array(0x9B3C), 0x2FC2 => array(0x9B5A), 0x2FC3 => array(0x9CE5),
2063
+					0x2FC4 => array(0x9E75), 0x2FC5 => array(0x9E7F), 0x2FC6 => array(0x9EA5),
2064
+					0x2FC7 => array(0x9EBB), 0x2FC8 => array(0x9EC3), 0x2FC9 => array(0x9ECD),
2065
+					0x2FCA => array(0x9ED1), 0x2FCB => array(0x9EF9), 0x2FCC => array(0x9EFD),
2066
+					0x2FCD => array(0x9F0E), 0x2FCE => array(0x9F13), 0x2FCF => array(0x9F20),
2067
+					0x2FD0 => array(0x9F3B), 0x2FD1 => array(0x9F4A), 0x2FD2 => array(0x9F52),
2068
+					0x2FD3 => array(0x9F8D), 0x2FD4 => array(0x9F9C), 0x2FD5 => array(0x9FA0),
2069
+					0x3002 => array(0x2E), 0x3036 => array(0x3012), 0x3038 => array(0x5341),
2070
+					0x3039 => array(0x5344), 0x303A => array(0x5345), 0x309F => array(0x3088, 0x308A),
2071
+					0x30FF => array(0x30B3, 0x30C8), 0x3131 => array(0x1100), 0x3132 => array(0x1101),
2072
+					0x3133 => array(0x11AA), 0x3134 => array(0x1102), 0x3135 => array(0x11AC),
2073
+					0x3136 => array(0x11AD), 0x3137 => array(0x1103), 0x3138 => array(0x1104),
2074
+					0x3139 => array(0x1105), 0x313A => array(0x11B0), 0x313B => array(0x11B1),
2075
+					0x313C => array(0x11B2), 0x313D => array(0x11B3), 0x313E => array(0x11B4),
2076
+					0x313F => array(0x11B5), 0x3140 => array(0x111A), 0x3141 => array(0x1106),
2077
+					0x3142 => array(0x1107), 0x3143 => array(0x1108), 0x3144 => array(0x1121),
2078
+					0x3145 => array(0x1109), 0x3146 => array(0x110A), 0x3147 => array(0x110B),
2079
+					0x3148 => array(0x110C), 0x3149 => array(0x110D), 0x314A => array(0x110E),
2080
+					0x314B => array(0x110F), 0x314C => array(0x1110), 0x314D => array(0x1111),
2081
+					0x314E => array(0x1112), 0x314F => array(0x1161), 0x3150 => array(0x1162),
2082
+					0x3151 => array(0x1163), 0x3152 => array(0x1164), 0x3153 => array(0x1165),
2083
+					0x3154 => array(0x1166), 0x3155 => array(0x1167), 0x3156 => array(0x1168),
2084
+					0x3157 => array(0x1169), 0x3158 => array(0x116A), 0x3159 => array(0x116B),
2085
+					0x315A => array(0x116C), 0x315B => array(0x116D), 0x315C => array(0x116E),
2086
+					0x315D => array(0x116F), 0x315E => array(0x1170), 0x315F => array(0x1171),
2087
+					0x3160 => array(0x1172), 0x3161 => array(0x1173), 0x3162 => array(0x1174),
2088
+					0x3163 => array(0x1175), 0x3165 => array(0x1114), 0x3166 => array(0x1115),
2089
+					0x3167 => array(0x11C7), 0x3168 => array(0x11C8), 0x3169 => array(0x11CC),
2090
+					0x316A => array(0x11CE), 0x316B => array(0x11D3), 0x316C => array(0x11D7),
2091
+					0x316D => array(0x11D9), 0x316E => array(0x111C), 0x316F => array(0x11DD),
2092
+					0x3170 => array(0x11DF), 0x3171 => array(0x111D), 0x3172 => array(0x111E),
2093
+					0x3173 => array(0x1120), 0x3174 => array(0x1122), 0x3175 => array(0x1123),
2094
+					0x3176 => array(0x1127), 0x3177 => array(0x1129), 0x3178 => array(0x112B),
2095
+					0x3179 => array(0x112C), 0x317A => array(0x112D), 0x317B => array(0x112E),
2096
+					0x317C => array(0x112F), 0x317D => array(0x1132), 0x317E => array(0x1136),
2097
+					0x317F => array(0x1140), 0x3180 => array(0x1147), 0x3181 => array(0x114C),
2098
+					0x3182 => array(0x11F1), 0x3183 => array(0x11F2), 0x3184 => array(0x1157),
2099
+					0x3185 => array(0x1158), 0x3186 => array(0x1159), 0x3187 => array(0x1184),
2100
+					0x3188 => array(0x1185), 0x3189 => array(0x1188), 0x318A => array(0x1191),
2101
+					0x318B => array(0x1192), 0x318C => array(0x1194), 0x318D => array(0x119E),
2102
+					0x318E => array(0x11A1), 0x3192 => array(0x4E00), 0x3193 => array(0x4E8C),
2103
+					0x3194 => array(0x4E09), 0x3195 => array(0x56DB), 0x3196 => array(0x4E0A),
2104
+					0x3197 => array(0x4E2D), 0x3198 => array(0x4E0B), 0x3199 => array(0x7532),
2105
+					0x319A => array(0x4E59), 0x319B => array(0x4E19), 0x319C => array(0x4E01),
2106
+					0x319D => array(0x5929), 0x319E => array(0x5730), 0x319F => array(0x4EBA),
2107
+					0x3244 => array(0x554F), 0x3245 => array(0x5E7C), 0x3246 => array(0x6587),
2108
+					0x3247 => array(0x7B8F), 0x3250 => array(0x70, 0x74, 0x65), 0x3251 => array(0x32, 0x31),
2109
+					0x3252 => array(0x32, 0x32), 0x3253 => array(0x32, 0x33), 0x3254 => array(0x32, 0x34),
2110
+					0x3255 => array(0x32, 0x35), 0x3256 => array(0x32, 0x36), 0x3257 => array(0x32, 0x37),
2111
+					0x3258 => array(0x32, 0x38), 0x3259 => array(0x32, 0x39), 0x325A => array(0x33, 0x30),
2112
+					0x325B => array(0x33, 0x31), 0x325C => array(0x33, 0x32), 0x325D => array(0x33, 0x33),
2113
+					0x325E => array(0x33, 0x34), 0x325F => array(0x33, 0x35), 0x3260 => array(0x1100),
2114
+					0x3261 => array(0x1102), 0x3262 => array(0x1103), 0x3263 => array(0x1105),
2115
+					0x3264 => array(0x1106), 0x3265 => array(0x1107), 0x3266 => array(0x1109),
2116
+					0x3267 => array(0x110B), 0x3268 => array(0x110C), 0x3269 => array(0x110E),
2117
+					0x326A => array(0x110F), 0x326B => array(0x1110), 0x326C => array(0x1111),
2118
+					0x326D => array(0x1112), 0x326E => array(0xAC00), 0x326F => array(0xB098),
2119
+					0x3270 => array(0xB2E4), 0x3271 => array(0xB77C), 0x3272 => array(0xB9C8),
2120
+					0x3273 => array(0xBC14), 0x3274 => array(0xC0AC), 0x3275 => array(0xC544),
2121
+					0x3276 => array(0xC790), 0x3277 => array(0xCC28), 0x3278 => array(0xCE74),
2122
+					0x3279 => array(0xD0C0), 0x327A => array(0xD30C), 0x327B => array(0xD558),
2123
+					0x327C => array(0xCC38, 0xACE0), 0x327D => array(0xC8FC, 0xC758), 0x327E => array(0xC6B0),
2124
+					0x3280 => array(0x4E00), 0x3281 => array(0x4E8C), 0x3282 => array(0x4E09),
2125
+					0x3283 => array(0x56DB), 0x3284 => array(0x4E94), 0x3285 => array(0x516D),
2126
+					0x3286 => array(0x4E03), 0x3287 => array(0x516B), 0x3288 => array(0x4E5D),
2127
+					0x3289 => array(0x5341), 0x328A => array(0x6708), 0x328B => array(0x706B),
2128
+					0x328C => array(0x6C34), 0x328D => array(0x6728), 0x328E => array(0x91D1),
2129
+					0x328F => array(0x571F), 0x3290 => array(0x65E5), 0x3291 => array(0x682A),
2130
+					0x3292 => array(0x6709), 0x3293 => array(0x793E), 0x3294 => array(0x540D),
2131
+					0x3295 => array(0x7279), 0x3296 => array(0x8CA1), 0x3297 => array(0x795D),
2132
+					0x3298 => array(0x52B4), 0x3299 => array(0x79D8), 0x329A => array(0x7537),
2133
+					0x329B => array(0x5973), 0x329C => array(0x9069), 0x329D => array(0x512A),
2134
+					0x329E => array(0x5370), 0x329F => array(0x6CE8), 0x32A0 => array(0x9805),
2135
+					0x32A1 => array(0x4F11), 0x32A2 => array(0x5199), 0x32A3 => array(0x6B63),
2136
+					0x32A4 => array(0x4E0A), 0x32A5 => array(0x4E2D), 0x32A6 => array(0x4E0B),
2137
+					0x32A7 => array(0x5DE6), 0x32A8 => array(0x53F3), 0x32A9 => array(0x533B),
2138
+					0x32AA => array(0x5B97), 0x32AB => array(0x5B66), 0x32AC => array(0x76E3),
2139
+					0x32AD => array(0x4F01), 0x32AE => array(0x8CC7), 0x32AF => array(0x5354),
2140
+					0x32B0 => array(0x591C), 0x32B1 => array(0x33, 0x36), 0x32B2 => array(0x33, 0x37),
2141
+					0x32B3 => array(0x33, 0x38), 0x32B4 => array(0x33, 0x39), 0x32B5 => array(0x34, 0x30),
2142
+					0x32B6 => array(0x34, 0x31), 0x32B7 => array(0x34, 0x32), 0x32B8 => array(0x34, 0x33),
2143
+					0x32B9 => array(0x34, 0x34), 0x32BA => array(0x34, 0x35), 0x32BB => array(0x34, 0x36),
2144
+					0x32BC => array(0x34, 0x37), 0x32BD => array(0x34, 0x38), 0x32BE => array(0x34, 0x39),
2145
+					0x32BF => array(0x35, 0x30), 0x32C0 => array(0x31, 0x6708), 0x32C1 => array(0x32, 0x6708),
2146
+					0x32C2 => array(0x33, 0x6708), 0x32C3 => array(0x34, 0x6708), 0x32C4 => array(0x35, 0x6708),
2147
+					0x32C5 => array(0x36, 0x6708), 0x32C6 => array(0x37, 0x6708), 0x32C7 => array(0x38, 0x6708),
2148
+					0x32C8 => array(0x39, 0x6708), 0x32C9 => array(0x31, 0x30, 0x6708), 0x32CA => array(0x31, 0x31, 0x6708),
2149
+					0x32CB => array(0x31, 0x32, 0x6708), 0x32CC => array(0x68, 0x67), 0x32CD => array(0x65, 0x72, 0x67),
2150
+					0x32CE => array(0x65, 0x76), 0x32CF => array(0x6C, 0x74, 0x64), 0x32D0 => array(0x30A2),
2151
+					0x32D1 => array(0x30A4), 0x32D2 => array(0x30A6), 0x32D3 => array(0x30A8),
2152
+					0x32D4 => array(0x30AA), 0x32D5 => array(0x30AB), 0x32D6 => array(0x30AD),
2153
+					0x32D7 => array(0x30AF), 0x32D8 => array(0x30B1), 0x32D9 => array(0x30B3),
2154
+					0x32DA => array(0x30B5), 0x32DB => array(0x30B7), 0x32DC => array(0x30B9),
2155
+					0x32DD => array(0x30BB), 0x32DE => array(0x30BD), 0x32DF => array(0x30BF),
2156
+					0x32E0 => array(0x30C1), 0x32E1 => array(0x30C4), 0x32E2 => array(0x30C6),
2157
+					0x32E3 => array(0x30C8), 0x32E4 => array(0x30CA), 0x32E5 => array(0x30CB),
2158
+					0x32E6 => array(0x30CC), 0x32E7 => array(0x30CD), 0x32E8 => array(0x30CE),
2159
+					0x32E9 => array(0x30CF), 0x32EA => array(0x30D2), 0x32EB => array(0x30D5),
2160
+					0x32EC => array(0x30D8), 0x32ED => array(0x30DB), 0x32EE => array(0x30DE),
2161
+					0x32EF => array(0x30DF), 0x32F0 => array(0x30E0), 0x32F1 => array(0x30E1),
2162
+					0x32F2 => array(0x30E2), 0x32F3 => array(0x30E4), 0x32F4 => array(0x30E6),
2163
+					0x32F5 => array(0x30E8), 0x32F6 => array(0x30E9), 0x32F7 => array(0x30EA),
2164
+					0x32F8 => array(0x30EB), 0x32F9 => array(0x30EC), 0x32FA => array(0x30ED),
2165
+					0x32FB => array(0x30EF), 0x32FC => array(0x30F0), 0x32FD => array(0x30F1),
2166
+					0x32FE => array(0x30F2), 0x3300 => array(0x30A2, 0x30D1, 0x30FC, 0x30C8), 0x3301 => array(0x30A2, 0x30EB, 0x30D5, 0x30A1),
2167
+					0x3302 => array(0x30A2, 0x30F3, 0x30DA, 0x30A2), 0x3303 => array(0x30A2, 0x30FC, 0x30EB), 0x3304 => array(0x30A4, 0x30CB, 0x30F3, 0x30B0),
2168
+					0x3305 => array(0x30A4, 0x30F3, 0x30C1), 0x3306 => array(0x30A6, 0x30A9, 0x30F3), 0x3307 => array(0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C9),
2169
+					0x3308 => array(0x30A8, 0x30FC, 0x30AB, 0x30FC), 0x3309 => array(0x30AA, 0x30F3, 0x30B9), 0x330A => array(0x30AA, 0x30FC, 0x30E0),
2170
+					0x330B => array(0x30AB, 0x30A4, 0x30EA), 0x330C => array(0x30AB, 0x30E9, 0x30C3, 0x30C8), 0x330D => array(0x30AB, 0x30ED, 0x30EA, 0x30FC),
2171
+					0x330E => array(0x30AC, 0x30ED, 0x30F3), 0x330F => array(0x30AC, 0x30F3, 0x30DE), 0x3310 => array(0x30AE, 0x30AC),
2172
+					0x3311 => array(0x30AE, 0x30CB, 0x30FC), 0x3312 => array(0x30AD, 0x30E5, 0x30EA, 0x30FC), 0x3313 => array(0x30AE, 0x30EB, 0x30C0, 0x30FC),
2173
+					0x3314 => array(0x30AD, 0x30ED), 0x3315 => array(0x30AD, 0x30ED, 0x30B0, 0x30E9, 0x30E0), 0x3316 => array(0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB),
2174
+					0x3317 => array(0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8), 0x3318 => array(0x30B0, 0x30E9, 0x30E0), 0x3319 => array(0x30B0, 0x30E9, 0x30E0, 0x30C8, 0x30F3),
2175
+					0x331A => array(0x30AF, 0x30EB, 0x30BC, 0x30A4, 0x30ED), 0x331B => array(0x30AF, 0x30ED, 0x30FC, 0x30CD), 0x331C => array(0x30B1, 0x30FC, 0x30B9),
2176
+					0x331D => array(0x30B3, 0x30EB, 0x30CA), 0x331E => array(0x30B3, 0x30FC, 0x30DD), 0x331F => array(0x30B5, 0x30A4, 0x30AF, 0x30EB),
2177
+					0x3320 => array(0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0), 0x3321 => array(0x30B7, 0x30EA, 0x30F3, 0x30B0), 0x3322 => array(0x30BB, 0x30F3, 0x30C1),
2178
+					0x3323 => array(0x30BB, 0x30F3, 0x30C8), 0x3324 => array(0x30C0, 0x30FC, 0x30B9), 0x3325 => array(0x30C7, 0x30B7),
2179
+					0x3326 => array(0x30C9, 0x30EB), 0x3327 => array(0x30C8, 0x30F3), 0x3328 => array(0x30CA, 0x30CE),
2180
+					0x3329 => array(0x30CE, 0x30C3, 0x30C8), 0x332A => array(0x30CF, 0x30A4, 0x30C4), 0x332B => array(0x30D1, 0x30FC, 0x30BB, 0x30F3, 0x30C8),
2181
+					0x332C => array(0x30D1, 0x30FC, 0x30C4), 0x332D => array(0x30D0, 0x30FC, 0x30EC, 0x30EB), 0x332E => array(0x30D4, 0x30A2, 0x30B9, 0x30C8, 0x30EB),
2182
+					0x332F => array(0x30D4, 0x30AF, 0x30EB), 0x3330 => array(0x30D4, 0x30B3), 0x3331 => array(0x30D3, 0x30EB),
2183
+					0x3332 => array(0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C9), 0x3333 => array(0x30D5, 0x30A3, 0x30FC, 0x30C8), 0x3334 => array(0x30D6, 0x30C3, 0x30B7, 0x30A7, 0x30EB),
2184
+					0x3335 => array(0x30D5, 0x30E9, 0x30F3), 0x3336 => array(0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB), 0x3337 => array(0x30DA, 0x30BD),
2185
+					0x3338 => array(0x30DA, 0x30CB, 0x30D2), 0x3339 => array(0x30D8, 0x30EB, 0x30C4), 0x333A => array(0x30DA, 0x30F3, 0x30B9),
2186
+					0x333B => array(0x30DA, 0x30FC, 0x30B8), 0x333C => array(0x30D9, 0x30FC, 0x30BF), 0x333D => array(0x30DD, 0x30A4, 0x30F3, 0x30C8),
2187
+					0x333E => array(0x30DC, 0x30EB, 0x30C8), 0x333F => array(0x30DB, 0x30F3), 0x3340 => array(0x30DD, 0x30F3, 0x30C9),
2188
+					0x3341 => array(0x30DB, 0x30FC, 0x30EB), 0x3342 => array(0x30DB, 0x30FC, 0x30F3), 0x3343 => array(0x30DE, 0x30A4, 0x30AF, 0x30ED),
2189
+					0x3344 => array(0x30DE, 0x30A4, 0x30EB), 0x3345 => array(0x30DE, 0x30C3, 0x30CF), 0x3346 => array(0x30DE, 0x30EB, 0x30AF),
2190
+					0x3347 => array(0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3), 0x3348 => array(0x30DF, 0x30AF, 0x30ED, 0x30F3), 0x3349 => array(0x30DF, 0x30EA),
2191
+					0x334A => array(0x30DF, 0x30EA, 0x30D0, 0x30FC, 0x30EB), 0x334B => array(0x30E1, 0x30AC), 0x334C => array(0x30E1, 0x30AC, 0x30C8, 0x30F3),
2192
+					0x334D => array(0x30E1, 0x30FC, 0x30C8, 0x30EB), 0x334E => array(0x30E4, 0x30FC, 0x30C9), 0x334F => array(0x30E4, 0x30FC, 0x30EB),
2193
+					0x3350 => array(0x30E6, 0x30A2, 0x30F3), 0x3351 => array(0x30EA, 0x30C3, 0x30C8, 0x30EB), 0x3352 => array(0x30EA, 0x30E9),
2194
+					0x3353 => array(0x30EB, 0x30D4, 0x30FC), 0x3354 => array(0x30EB, 0x30FC, 0x30D6, 0x30EB), 0x3355 => array(0x30EC, 0x30E0),
2195
+					0x3356 => array(0x30EC, 0x30F3, 0x30C8, 0x30B2, 0x30F3), 0x3357 => array(0x30EF, 0x30C3, 0x30C8), 0x3358 => array(0x30, 0x70B9),
2196
+					0x3359 => array(0x31, 0x70B9), 0x335A => array(0x32, 0x70B9), 0x335B => array(0x33, 0x70B9),
2197
+					0x335C => array(0x34, 0x70B9), 0x335D => array(0x35, 0x70B9), 0x335E => array(0x36, 0x70B9),
2198
+					0x335F => array(0x37, 0x70B9), 0x3360 => array(0x38, 0x70B9), 0x3361 => array(0x39, 0x70B9),
2199
+					0x3362 => array(0x31, 0x30, 0x70B9), 0x3363 => array(0x31, 0x31, 0x70B9), 0x3364 => array(0x31, 0x32, 0x70B9),
2200
+					0x3365 => array(0x31, 0x33, 0x70B9), 0x3366 => array(0x31, 0x34, 0x70B9), 0x3367 => array(0x31, 0x35, 0x70B9),
2201
+					0x3368 => array(0x31, 0x36, 0x70B9), 0x3369 => array(0x31, 0x37, 0x70B9), 0x336A => array(0x31, 0x38, 0x70B9),
2202
+					0x336B => array(0x31, 0x39, 0x70B9), 0x336C => array(0x32, 0x30, 0x70B9), 0x336D => array(0x32, 0x31, 0x70B9),
2203
+					0x336E => array(0x32, 0x32, 0x70B9), 0x336F => array(0x32, 0x33, 0x70B9), 0x3370 => array(0x32, 0x34, 0x70B9),
2204
+					0x3371 => array(0x68, 0x70, 0x61), 0x3372 => array(0x64, 0x61), 0x3373 => array(0x61, 0x75),
2205
+					0x3374 => array(0x62, 0x61, 0x72), 0x3375 => array(0x6F, 0x76), 0x3376 => array(0x70, 0x63),
2206
+					0x3377 => array(0x64, 0x6D), 0x3378 => array(0x64, 0x6D, 0x32), 0x3379 => array(0x64, 0x6D, 0x33),
2207
+					0x337A => array(0x69, 0x75), 0x337B => array(0x5E73, 0x6210), 0x337C => array(0x662D, 0x548C),
2208
+					0x337D => array(0x5927, 0x6B63), 0x337E => array(0x660E, 0x6CBB), 0x337F => array(0x682A, 0x5F0F, 0x4F1A, 0x793E),
2209
+					0x3380 => array(0x70, 0x61), 0x3381 => array(0x6E, 0x61), 0x3382 => array(0x3BC, 0x61),
2210
+					0x3383 => array(0x6D, 0x61), 0x3384 => array(0x6B, 0x61), 0x3385 => array(0x6B, 0x62),
2211
+					0x3386 => array(0x6D, 0x62), 0x3387 => array(0x67, 0x62), 0x3388 => array(0x63, 0x61, 0x6C),
2212
+					0x3389 => array(0x6B, 0x63, 0x61, 0x6C), 0x338A => array(0x70, 0x66), 0x338B => array(0x6E, 0x66),
2213
+					0x338C => array(0x3BC, 0x66), 0x338D => array(0x3BC, 0x67), 0x338E => array(0x6D, 0x67),
2214
+					0x338F => array(0x6B, 0x67), 0x3390 => array(0x68, 0x7A), 0x3391 => array(0x6B, 0x68, 0x7A),
2215
+					0x3392 => array(0x6D, 0x68, 0x7A), 0x3393 => array(0x67, 0x68, 0x7A), 0x3394 => array(0x74, 0x68, 0x7A),
2216
+					0x3395 => array(0x3BC, 0x6C), 0x3396 => array(0x6D, 0x6C), 0x3397 => array(0x64, 0x6C),
2217
+					0x3398 => array(0x6B, 0x6C), 0x3399 => array(0x66, 0x6D), 0x339A => array(0x6E, 0x6D),
2218
+					0x339B => array(0x3BC, 0x6D), 0x339C => array(0x6D, 0x6D), 0x339D => array(0x63, 0x6D),
2219
+					0x339E => array(0x6B, 0x6D), 0x339F => array(0x6D, 0x6D, 0x32), 0x33A0 => array(0x63, 0x6D, 0x32),
2220
+					0x33A1 => array(0x6D, 0x32), 0x33A2 => array(0x6B, 0x6D, 0x32), 0x33A3 => array(0x6D, 0x6D, 0x33),
2221
+					0x33A4 => array(0x63, 0x6D, 0x33), 0x33A5 => array(0x6D, 0x33), 0x33A6 => array(0x6B, 0x6D, 0x33),
2222
+					0x33A7 => array(0x6D, 0x2215, 0x73), 0x33A8 => array(0x6D, 0x2215, 0x73, 0x32), 0x33A9 => array(0x70, 0x61),
2223
+					0x33AA => array(0x6B, 0x70, 0x61), 0x33AB => array(0x6D, 0x70, 0x61), 0x33AC => array(0x67, 0x70, 0x61),
2224
+					0x33AD => array(0x72, 0x61, 0x64), 0x33AE => array(0x72, 0x61, 0x64, 0x2215, 0x73), 0x33AF => array(0x72, 0x61, 0x64, 0x2215, 0x73, 0x32),
2225
+					0x33B0 => array(0x70, 0x73), 0x33B1 => array(0x6E, 0x73), 0x33B2 => array(0x3BC, 0x73),
2226
+					0x33B3 => array(0x6D, 0x73), 0x33B4 => array(0x70, 0x76), 0x33B5 => array(0x6E, 0x76),
2227
+					0x33B6 => array(0x3BC, 0x76), 0x33B7 => array(0x6D, 0x76), 0x33B8 => array(0x6B, 0x76),
2228
+					0x33B9 => array(0x6D, 0x76), 0x33BA => array(0x70, 0x77), 0x33BB => array(0x6E, 0x77),
2229
+					0x33BC => array(0x3BC, 0x77), 0x33BD => array(0x6D, 0x77), 0x33BE => array(0x6B, 0x77),
2230
+					0x33BF => array(0x6D, 0x77), 0x33C0 => array(0x6B, 0x3C9), 0x33C1 => array(0x6D, 0x3C9),
2231
+					0x33C3 => array(0x62, 0x71), 0x33C4 => array(0x63, 0x63), 0x33C5 => array(0x63, 0x64),
2232
+					0x33C6 => array(0x63, 0x2215, 0x6B, 0x67), 0x33C8 => array(0x64, 0x62), 0x33C9 => array(0x67, 0x79),
2233
+					0x33CA => array(0x68, 0x61), 0x33CB => array(0x68, 0x70), 0x33CC => array(0x69, 0x6E),
2234
+					0x33CD => array(0x6B, 0x6B), 0x33CE => array(0x6B, 0x6D), 0x33CF => array(0x6B, 0x74),
2235
+					0x33D0 => array(0x6C, 0x6D), 0x33D1 => array(0x6C, 0x6E), 0x33D2 => array(0x6C, 0x6F, 0x67),
2236
+					0x33D3 => array(0x6C, 0x78), 0x33D4 => array(0x6D, 0x62), 0x33D5 => array(0x6D, 0x69, 0x6C),
2237
+					0x33D6 => array(0x6D, 0x6F, 0x6C), 0x33D7 => array(0x70, 0x68), 0x33D9 => array(0x70, 0x70, 0x6D),
2238
+					0x33DA => array(0x70, 0x72), 0x33DB => array(0x73, 0x72), 0x33DC => array(0x73, 0x76),
2239
+					0x33DD => array(0x77, 0x62), 0x33DE => array(0x76, 0x2215, 0x6D), 0x33DF => array(0x61, 0x2215, 0x6D),
2240
+					0x33E0 => array(0x31, 0x65E5), 0x33E1 => array(0x32, 0x65E5), 0x33E2 => array(0x33, 0x65E5),
2241
+					0x33E3 => array(0x34, 0x65E5), 0x33E4 => array(0x35, 0x65E5), 0x33E5 => array(0x36, 0x65E5),
2242
+					0x33E6 => array(0x37, 0x65E5), 0x33E7 => array(0x38, 0x65E5), 0x33E8 => array(0x39, 0x65E5),
2243
+					0x33E9 => array(0x31, 0x30, 0x65E5), 0x33EA => array(0x31, 0x31, 0x65E5), 0x33EB => array(0x31, 0x32, 0x65E5),
2244
+					0x33EC => array(0x31, 0x33, 0x65E5), 0x33ED => array(0x31, 0x34, 0x65E5), 0x33EE => array(0x31, 0x35, 0x65E5),
2245
+					0x33EF => array(0x31, 0x36, 0x65E5), 0x33F0 => array(0x31, 0x37, 0x65E5), 0x33F1 => array(0x31, 0x38, 0x65E5),
2246
+					0x33F2 => array(0x31, 0x39, 0x65E5), 0x33F3 => array(0x32, 0x30, 0x65E5), 0x33F4 => array(0x32, 0x31, 0x65E5),
2247
+					0x33F5 => array(0x32, 0x32, 0x65E5), 0x33F6 => array(0x32, 0x33, 0x65E5), 0x33F7 => array(0x32, 0x34, 0x65E5),
2248
+					0x33F8 => array(0x32, 0x35, 0x65E5), 0x33F9 => array(0x32, 0x36, 0x65E5), 0x33FA => array(0x32, 0x37, 0x65E5),
2249
+					0x33FB => array(0x32, 0x38, 0x65E5), 0x33FC => array(0x32, 0x39, 0x65E5), 0x33FD => array(0x33, 0x30, 0x65E5),
2250
+					0x33FE => array(0x33, 0x31, 0x65E5), 0x33FF => array(0x67, 0x61, 0x6C), 0xA640 => array(0xA641),
2251
+					0xA642 => array(0xA643), 0xA644 => array(0xA645), 0xA646 => array(0xA647),
2252
+					0xA648 => array(0xA649), 0xA64A => array(0xA64B), 0xA64C => array(0xA64D),
2253
+					0xA64E => array(0xA64F), 0xA650 => array(0xA651), 0xA652 => array(0xA653),
2254
+					0xA654 => array(0xA655), 0xA656 => array(0xA657), 0xA658 => array(0xA659),
2255
+					0xA65A => array(0xA65B), 0xA65C => array(0xA65D), 0xA65E => array(0xA65F),
2256
+					0xA660 => array(0xA661), 0xA662 => array(0xA663), 0xA664 => array(0xA665),
2257
+					0xA666 => array(0xA667), 0xA668 => array(0xA669), 0xA66A => array(0xA66B),
2258
+					0xA66C => array(0xA66D), 0xA680 => array(0xA681), 0xA682 => array(0xA683),
2259
+					0xA684 => array(0xA685), 0xA686 => array(0xA687), 0xA688 => array(0xA689),
2260
+					0xA68A => array(0xA68B), 0xA68C => array(0xA68D), 0xA68E => array(0xA68F),
2261
+					0xA690 => array(0xA691), 0xA692 => array(0xA693), 0xA694 => array(0xA695),
2262
+					0xA696 => array(0xA697), 0xA698 => array(0xA699), 0xA69A => array(0xA69B),
2263
+					0xA69C => array(0x44A), 0xA69D => array(0x44C), 0xA722 => array(0xA723),
2264
+					0xA724 => array(0xA725), 0xA726 => array(0xA727), 0xA728 => array(0xA729),
2265
+					0xA72A => array(0xA72B), 0xA72C => array(0xA72D), 0xA72E => array(0xA72F),
2266
+					0xA732 => array(0xA733), 0xA734 => array(0xA735), 0xA736 => array(0xA737),
2267
+					0xA738 => array(0xA739), 0xA73A => array(0xA73B), 0xA73C => array(0xA73D),
2268
+					0xA73E => array(0xA73F), 0xA740 => array(0xA741), 0xA742 => array(0xA743),
2269
+					0xA744 => array(0xA745), 0xA746 => array(0xA747), 0xA748 => array(0xA749),
2270
+					0xA74A => array(0xA74B), 0xA74C => array(0xA74D), 0xA74E => array(0xA74F),
2271
+					0xA750 => array(0xA751), 0xA752 => array(0xA753), 0xA754 => array(0xA755),
2272
+					0xA756 => array(0xA757), 0xA758 => array(0xA759), 0xA75A => array(0xA75B),
2273
+					0xA75C => array(0xA75D), 0xA75E => array(0xA75F), 0xA760 => array(0xA761),
2274
+					0xA762 => array(0xA763), 0xA764 => array(0xA765), 0xA766 => array(0xA767),
2275
+					0xA768 => array(0xA769), 0xA76A => array(0xA76B), 0xA76C => array(0xA76D),
2276
+					0xA76E => array(0xA76F), 0xA770 => array(0xA76F), 0xA779 => array(0xA77A),
2277
+					0xA77B => array(0xA77C), 0xA77D => array(0x1D79), 0xA77E => array(0xA77F),
2278
+					0xA780 => array(0xA781), 0xA782 => array(0xA783), 0xA784 => array(0xA785),
2279
+					0xA786 => array(0xA787), 0xA78B => array(0xA78C), 0xA78D => array(0x265),
2280
+					0xA790 => array(0xA791), 0xA792 => array(0xA793), 0xA796 => array(0xA797),
2281
+					0xA798 => array(0xA799), 0xA79A => array(0xA79B), 0xA79C => array(0xA79D),
2282
+					0xA79E => array(0xA79F), 0xA7A0 => array(0xA7A1), 0xA7A2 => array(0xA7A3),
2283
+					0xA7A4 => array(0xA7A5), 0xA7A6 => array(0xA7A7), 0xA7A8 => array(0xA7A9),
2284
+					0xA7AA => array(0x266), 0xA7AB => array(0x25C), 0xA7AC => array(0x261),
2285
+					0xA7AD => array(0x26C), 0xA7B0 => array(0x29E), 0xA7B1 => array(0x287),
2286
+					0xA7F8 => array(0x127), 0xA7F9 => array(0x153), 0xAB5C => array(0xA727),
2287
+					0xAB5D => array(0xAB37), 0xAB5E => array(0x26B), 0xAB5F => array(0xAB52),
2288
+					0xF900 => array(0x8C48), 0xF901 => array(0x66F4), 0xF902 => array(0x8ECA),
2289
+					0xF903 => array(0x8CC8), 0xF904 => array(0x6ED1), 0xF905 => array(0x4E32),
2290
+					0xF906 => array(0x53E5), 0xF907 => array(0x9F9C), 0xF908 => array(0x9F9C),
2291
+					0xF909 => array(0x5951), 0xF90A => array(0x91D1), 0xF90B => array(0x5587),
2292
+					0xF90C => array(0x5948), 0xF90D => array(0x61F6), 0xF90E => array(0x7669),
2293
+					0xF90F => array(0x7F85), 0xF910 => array(0x863F), 0xF911 => array(0x87BA),
2294
+					0xF912 => array(0x88F8), 0xF913 => array(0x908F), 0xF914 => array(0x6A02),
2295
+					0xF915 => array(0x6D1B), 0xF916 => array(0x70D9), 0xF917 => array(0x73DE),
2296
+					0xF918 => array(0x843D), 0xF919 => array(0x916A), 0xF91A => array(0x99F1),
2297
+					0xF91B => array(0x4E82), 0xF91C => array(0x5375), 0xF91D => array(0x6B04),
2298
+					0xF91E => array(0x721B), 0xF91F => array(0x862D), 0xF920 => array(0x9E1E),
2299
+					0xF921 => array(0x5D50), 0xF922 => array(0x6FEB), 0xF923 => array(0x85CD),
2300
+					0xF924 => array(0x8964), 0xF925 => array(0x62C9), 0xF926 => array(0x81D8),
2301
+					0xF927 => array(0x881F), 0xF928 => array(0x5ECA), 0xF929 => array(0x6717),
2302
+					0xF92A => array(0x6D6A), 0xF92B => array(0x72FC), 0xF92C => array(0x90CE),
2303
+					0xF92D => array(0x4F86), 0xF92E => array(0x51B7), 0xF92F => array(0x52DE),
2304
+					0xF930 => array(0x64C4), 0xF931 => array(0x6AD3), 0xF932 => array(0x7210),
2305
+					0xF933 => array(0x76E7), 0xF934 => array(0x8001), 0xF935 => array(0x8606),
2306
+					0xF936 => array(0x865C), 0xF937 => array(0x8DEF), 0xF938 => array(0x9732),
2307
+					0xF939 => array(0x9B6F), 0xF93A => array(0x9DFA), 0xF93B => array(0x788C),
2308
+					0xF93C => array(0x797F), 0xF93D => array(0x7DA0), 0xF93E => array(0x83C9),
2309
+					0xF93F => array(0x9304), 0xF940 => array(0x9E7F), 0xF941 => array(0x8AD6),
2310
+					0xF942 => array(0x58DF), 0xF943 => array(0x5F04), 0xF944 => array(0x7C60),
2311
+					0xF945 => array(0x807E), 0xF946 => array(0x7262), 0xF947 => array(0x78CA),
2312
+					0xF948 => array(0x8CC2), 0xF949 => array(0x96F7), 0xF94A => array(0x58D8),
2313
+					0xF94B => array(0x5C62), 0xF94C => array(0x6A13), 0xF94D => array(0x6DDA),
2314
+					0xF94E => array(0x6F0F), 0xF94F => array(0x7D2F), 0xF950 => array(0x7E37),
2315
+					0xF951 => array(0x964B), 0xF952 => array(0x52D2), 0xF953 => array(0x808B),
2316
+					0xF954 => array(0x51DC), 0xF955 => array(0x51CC), 0xF956 => array(0x7A1C),
2317
+					0xF957 => array(0x7DBE), 0xF958 => array(0x83F1), 0xF959 => array(0x9675),
2318
+					0xF95A => array(0x8B80), 0xF95B => array(0x62CF), 0xF95C => array(0x6A02),
2319
+					0xF95D => array(0x8AFE), 0xF95E => array(0x4E39), 0xF95F => array(0x5BE7),
2320
+					0xF960 => array(0x6012), 0xF961 => array(0x7387), 0xF962 => array(0x7570),
2321
+					0xF963 => array(0x5317), 0xF964 => array(0x78FB), 0xF965 => array(0x4FBF),
2322
+					0xF966 => array(0x5FA9), 0xF967 => array(0x4E0D), 0xF968 => array(0x6CCC),
2323
+					0xF969 => array(0x6578), 0xF96A => array(0x7D22), 0xF96B => array(0x53C3),
2324
+					0xF96C => array(0x585E), 0xF96D => array(0x7701), 0xF96E => array(0x8449),
2325
+					0xF96F => array(0x8AAA), 0xF970 => array(0x6BBA), 0xF971 => array(0x8FB0),
2326
+					0xF972 => array(0x6C88), 0xF973 => array(0x62FE), 0xF974 => array(0x82E5),
2327
+					0xF975 => array(0x63A0), 0xF976 => array(0x7565), 0xF977 => array(0x4EAE),
2328
+					0xF978 => array(0x5169), 0xF979 => array(0x51C9), 0xF97A => array(0x6881),
2329
+					0xF97B => array(0x7CE7), 0xF97C => array(0x826F), 0xF97D => array(0x8AD2),
2330
+					0xF97E => array(0x91CF), 0xF97F => array(0x52F5), 0xF980 => array(0x5442),
2331
+					0xF981 => array(0x5973), 0xF982 => array(0x5EEC), 0xF983 => array(0x65C5),
2332
+					0xF984 => array(0x6FFE), 0xF985 => array(0x792A), 0xF986 => array(0x95AD),
2333
+					0xF987 => array(0x9A6A), 0xF988 => array(0x9E97), 0xF989 => array(0x9ECE),
2334
+					0xF98A => array(0x529B), 0xF98B => array(0x66C6), 0xF98C => array(0x6B77),
2335
+					0xF98D => array(0x8F62), 0xF98E => array(0x5E74), 0xF98F => array(0x6190),
2336
+					0xF990 => array(0x6200), 0xF991 => array(0x649A), 0xF992 => array(0x6F23),
2337
+					0xF993 => array(0x7149), 0xF994 => array(0x7489), 0xF995 => array(0x79CA),
2338
+					0xF996 => array(0x7DF4), 0xF997 => array(0x806F), 0xF998 => array(0x8F26),
2339
+					0xF999 => array(0x84EE), 0xF99A => array(0x9023), 0xF99B => array(0x934A),
2340
+					0xF99C => array(0x5217), 0xF99D => array(0x52A3), 0xF99E => array(0x54BD),
2341
+					0xF99F => array(0x70C8), 0xF9A0 => array(0x88C2), 0xF9A1 => array(0x8AAA),
2342
+					0xF9A2 => array(0x5EC9), 0xF9A3 => array(0x5FF5), 0xF9A4 => array(0x637B),
2343
+					0xF9A5 => array(0x6BAE), 0xF9A6 => array(0x7C3E), 0xF9A7 => array(0x7375),
2344
+					0xF9A8 => array(0x4EE4), 0xF9A9 => array(0x56F9), 0xF9AA => array(0x5BE7),
2345
+					0xF9AB => array(0x5DBA), 0xF9AC => array(0x601C), 0xF9AD => array(0x73B2),
2346
+					0xF9AE => array(0x7469), 0xF9AF => array(0x7F9A), 0xF9B0 => array(0x8046),
2347
+					0xF9B1 => array(0x9234), 0xF9B2 => array(0x96F6), 0xF9B3 => array(0x9748),
2348
+					0xF9B4 => array(0x9818), 0xF9B5 => array(0x4F8B), 0xF9B6 => array(0x79AE),
2349
+					0xF9B7 => array(0x91B4), 0xF9B8 => array(0x96B8), 0xF9B9 => array(0x60E1),
2350
+					0xF9BA => array(0x4E86), 0xF9BB => array(0x50DA), 0xF9BC => array(0x5BEE),
2351
+					0xF9BD => array(0x5C3F), 0xF9BE => array(0x6599), 0xF9BF => array(0x6A02),
2352
+					0xF9C0 => array(0x71CE), 0xF9C1 => array(0x7642), 0xF9C2 => array(0x84FC),
2353
+					0xF9C3 => array(0x907C), 0xF9C4 => array(0x9F8D), 0xF9C5 => array(0x6688),
2354
+					0xF9C6 => array(0x962E), 0xF9C7 => array(0x5289), 0xF9C8 => array(0x677B),
2355
+					0xF9C9 => array(0x67F3), 0xF9CA => array(0x6D41), 0xF9CB => array(0x6E9C),
2356
+					0xF9CC => array(0x7409), 0xF9CD => array(0x7559), 0xF9CE => array(0x786B),
2357
+					0xF9CF => array(0x7D10), 0xF9D0 => array(0x985E), 0xF9D1 => array(0x516D),
2358
+					0xF9D2 => array(0x622E), 0xF9D3 => array(0x9678), 0xF9D4 => array(0x502B),
2359
+					0xF9D5 => array(0x5D19), 0xF9D6 => array(0x6DEA), 0xF9D7 => array(0x8F2A),
2360
+					0xF9D8 => array(0x5F8B), 0xF9D9 => array(0x6144), 0xF9DA => array(0x6817),
2361
+					0xF9DB => array(0x7387), 0xF9DC => array(0x9686), 0xF9DD => array(0x5229),
2362
+					0xF9DE => array(0x540F), 0xF9DF => array(0x5C65), 0xF9E0 => array(0x6613),
2363
+					0xF9E1 => array(0x674E), 0xF9E2 => array(0x68A8), 0xF9E3 => array(0x6CE5),
2364
+					0xF9E4 => array(0x7406), 0xF9E5 => array(0x75E2), 0xF9E6 => array(0x7F79),
2365
+					0xF9E7 => array(0x88CF), 0xF9E8 => array(0x88E1), 0xF9E9 => array(0x91CC),
2366
+					0xF9EA => array(0x96E2), 0xF9EB => array(0x533F), 0xF9EC => array(0x6EBA),
2367
+					0xF9ED => array(0x541D), 0xF9EE => array(0x71D0), 0xF9EF => array(0x7498),
2368
+					0xF9F0 => array(0x85FA), 0xF9F1 => array(0x96A3), 0xF9F2 => array(0x9C57),
2369
+					0xF9F3 => array(0x9E9F), 0xF9F4 => array(0x6797), 0xF9F5 => array(0x6DCB),
2370
+					0xF9F6 => array(0x81E8), 0xF9F7 => array(0x7ACB), 0xF9F8 => array(0x7B20),
2371
+					0xF9F9 => array(0x7C92), 0xF9FA => array(0x72C0), 0xF9FB => array(0x7099),
2372
+					0xF9FC => array(0x8B58), 0xF9FD => array(0x4EC0), 0xF9FE => array(0x8336),
2373
+					0xF9FF => array(0x523A), 0xFA00 => array(0x5207), 0xFA01 => array(0x5EA6),
2374
+					0xFA02 => array(0x62D3), 0xFA03 => array(0x7CD6), 0xFA04 => array(0x5B85),
2375
+					0xFA05 => array(0x6D1E), 0xFA06 => array(0x66B4), 0xFA07 => array(0x8F3B),
2376
+					0xFA08 => array(0x884C), 0xFA09 => array(0x964D), 0xFA0A => array(0x898B),
2377
+					0xFA0B => array(0x5ED3), 0xFA0C => array(0x5140), 0xFA0D => array(0x55C0),
2378
+					0xFA10 => array(0x585A), 0xFA12 => array(0x6674), 0xFA15 => array(0x51DE),
2379
+					0xFA16 => array(0x732A), 0xFA17 => array(0x76CA), 0xFA18 => array(0x793C),
2380
+					0xFA19 => array(0x795E), 0xFA1A => array(0x7965), 0xFA1B => array(0x798F),
2381
+					0xFA1C => array(0x9756), 0xFA1D => array(0x7CBE), 0xFA1E => array(0x7FBD),
2382
+					0xFA20 => array(0x8612), 0xFA22 => array(0x8AF8), 0xFA25 => array(0x9038),
2383
+					0xFA26 => array(0x90FD), 0xFA2A => array(0x98EF), 0xFA2B => array(0x98FC),
2384
+					0xFA2C => array(0x9928), 0xFA2D => array(0x9DB4), 0xFA2E => array(0x90DE),
2385
+					0xFA2F => array(0x96B7), 0xFA30 => array(0x4FAE), 0xFA31 => array(0x50E7),
2386
+					0xFA32 => array(0x514D), 0xFA33 => array(0x52C9), 0xFA34 => array(0x52E4),
2387
+					0xFA35 => array(0x5351), 0xFA36 => array(0x559D), 0xFA37 => array(0x5606),
2388
+					0xFA38 => array(0x5668), 0xFA39 => array(0x5840), 0xFA3A => array(0x58A8),
2389
+					0xFA3B => array(0x5C64), 0xFA3C => array(0x5C6E), 0xFA3D => array(0x6094),
2390
+					0xFA3E => array(0x6168), 0xFA3F => array(0x618E), 0xFA40 => array(0x61F2),
2391
+					0xFA41 => array(0x654F), 0xFA42 => array(0x65E2), 0xFA43 => array(0x6691),
2392
+					0xFA44 => array(0x6885), 0xFA45 => array(0x6D77), 0xFA46 => array(0x6E1A),
2393
+					0xFA47 => array(0x6F22), 0xFA48 => array(0x716E), 0xFA49 => array(0x722B),
2394
+					0xFA4A => array(0x7422), 0xFA4B => array(0x7891), 0xFA4C => array(0x793E),
2395
+					0xFA4D => array(0x7949), 0xFA4E => array(0x7948), 0xFA4F => array(0x7950),
2396
+					0xFA50 => array(0x7956), 0xFA51 => array(0x795D), 0xFA52 => array(0x798D),
2397
+					0xFA53 => array(0x798E), 0xFA54 => array(0x7A40), 0xFA55 => array(0x7A81),
2398
+					0xFA56 => array(0x7BC0), 0xFA57 => array(0x7DF4), 0xFA58 => array(0x7E09),
2399
+					0xFA59 => array(0x7E41), 0xFA5A => array(0x7F72), 0xFA5B => array(0x8005),
2400
+					0xFA5C => array(0x81ED), 0xFA5D => array(0x8279), 0xFA5E => array(0x8279),
2401
+					0xFA5F => array(0x8457), 0xFA60 => array(0x8910), 0xFA61 => array(0x8996),
2402
+					0xFA62 => array(0x8B01), 0xFA63 => array(0x8B39), 0xFA64 => array(0x8CD3),
2403
+					0xFA65 => array(0x8D08), 0xFA66 => array(0x8FB6), 0xFA67 => array(0x9038),
2404
+					0xFA68 => array(0x96E3), 0xFA69 => array(0x97FF), 0xFA6A => array(0x983B),
2405
+					0xFA6B => array(0x6075), 0xFA6C => array(0x242EE), 0xFA6D => array(0x8218),
2406
+					0xFA70 => array(0x4E26), 0xFA71 => array(0x51B5), 0xFA72 => array(0x5168),
2407
+					0xFA73 => array(0x4F80), 0xFA74 => array(0x5145), 0xFA75 => array(0x5180),
2408
+					0xFA76 => array(0x52C7), 0xFA77 => array(0x52FA), 0xFA78 => array(0x559D),
2409
+					0xFA79 => array(0x5555), 0xFA7A => array(0x5599), 0xFA7B => array(0x55E2),
2410
+					0xFA7C => array(0x585A), 0xFA7D => array(0x58B3), 0xFA7E => array(0x5944),
2411
+					0xFA7F => array(0x5954), 0xFA80 => array(0x5A62), 0xFA81 => array(0x5B28),
2412
+					0xFA82 => array(0x5ED2), 0xFA83 => array(0x5ED9), 0xFA84 => array(0x5F69),
2413
+					0xFA85 => array(0x5FAD), 0xFA86 => array(0x60D8), 0xFA87 => array(0x614E),
2414
+					0xFA88 => array(0x6108), 0xFA89 => array(0x618E), 0xFA8A => array(0x6160),
2415
+					0xFA8B => array(0x61F2), 0xFA8C => array(0x6234), 0xFA8D => array(0x63C4),
2416
+					0xFA8E => array(0x641C), 0xFA8F => array(0x6452), 0xFA90 => array(0x6556),
2417
+					0xFA91 => array(0x6674), 0xFA92 => array(0x6717), 0xFA93 => array(0x671B),
2418
+					0xFA94 => array(0x6756), 0xFA95 => array(0x6B79), 0xFA96 => array(0x6BBA),
2419
+					0xFA97 => array(0x6D41), 0xFA98 => array(0x6EDB), 0xFA99 => array(0x6ECB),
2420
+					0xFA9A => array(0x6F22), 0xFA9B => array(0x701E), 0xFA9C => array(0x716E),
2421
+					0xFA9D => array(0x77A7), 0xFA9E => array(0x7235), 0xFA9F => array(0x72AF),
2422
+					0xFAA0 => array(0x732A), 0xFAA1 => array(0x7471), 0xFAA2 => array(0x7506),
2423
+					0xFAA3 => array(0x753B), 0xFAA4 => array(0x761D), 0xFAA5 => array(0x761F),
2424
+					0xFAA6 => array(0x76CA), 0xFAA7 => array(0x76DB), 0xFAA8 => array(0x76F4),
2425
+					0xFAA9 => array(0x774A), 0xFAAA => array(0x7740), 0xFAAB => array(0x78CC),
2426
+					0xFAAC => array(0x7AB1), 0xFAAD => array(0x7BC0), 0xFAAE => array(0x7C7B),
2427
+					0xFAAF => array(0x7D5B), 0xFAB0 => array(0x7DF4), 0xFAB1 => array(0x7F3E),
2428
+					0xFAB2 => array(0x8005), 0xFAB3 => array(0x8352), 0xFAB4 => array(0x83EF),
2429
+					0xFAB5 => array(0x8779), 0xFAB6 => array(0x8941), 0xFAB7 => array(0x8986),
2430
+					0xFAB8 => array(0x8996), 0xFAB9 => array(0x8ABF), 0xFABA => array(0x8AF8),
2431
+					0xFABB => array(0x8ACB), 0xFABC => array(0x8B01), 0xFABD => array(0x8AFE),
2432
+					0xFABE => array(0x8AED), 0xFABF => array(0x8B39), 0xFAC0 => array(0x8B8A),
2433
+					0xFAC1 => array(0x8D08), 0xFAC2 => array(0x8F38), 0xFAC3 => array(0x9072),
2434
+					0xFAC4 => array(0x9199), 0xFAC5 => array(0x9276), 0xFAC6 => array(0x967C),
2435
+					0xFAC7 => array(0x96E3), 0xFAC8 => array(0x9756), 0xFAC9 => array(0x97DB),
2436
+					0xFACA => array(0x97FF), 0xFACB => array(0x980B), 0xFACC => array(0x983B),
2437
+					0xFACD => array(0x9B12), 0xFACE => array(0x9F9C), 0xFACF => array(0x2284A),
2438
+					0xFAD0 => array(0x22844), 0xFAD1 => array(0x233D5), 0xFAD2 => array(0x3B9D),
2439
+					0xFAD3 => array(0x4018), 0xFAD4 => array(0x4039), 0xFAD5 => array(0x25249),
2440
+					0xFAD6 => array(0x25CD0), 0xFAD7 => array(0x27ED3), 0xFAD8 => array(0x9F43),
2441
+					0xFAD9 => array(0x9F8E), 0xFB00 => array(0x66, 0x66), 0xFB01 => array(0x66, 0x69),
2442
+					0xFB02 => array(0x66, 0x6C), 0xFB03 => array(0x66, 0x66, 0x69), 0xFB04 => array(0x66, 0x66, 0x6C),
2443
+					0xFB05 => array(0x73, 0x74), 0xFB06 => array(0x73, 0x74), 0xFB13 => array(0x574, 0x576),
2444
+					0xFB14 => array(0x574, 0x565), 0xFB15 => array(0x574, 0x56B), 0xFB16 => array(0x57E, 0x576),
2445
+					0xFB17 => array(0x574, 0x56D), 0xFB1D => array(0x5D9, 0x5B4), 0xFB1F => array(0x5F2, 0x5B7),
2446
+					0xFB20 => array(0x5E2), 0xFB21 => array(0x5D0), 0xFB22 => array(0x5D3),
2447
+					0xFB23 => array(0x5D4), 0xFB24 => array(0x5DB), 0xFB25 => array(0x5DC),
2448
+					0xFB26 => array(0x5DD), 0xFB27 => array(0x5E8), 0xFB28 => array(0x5EA),
2449
+					0xFB2A => array(0x5E9, 0x5C1), 0xFB2B => array(0x5E9, 0x5C2), 0xFB2C => array(0x5E9, 0x5BC, 0x5C1),
2450
+					0xFB2D => array(0x5E9, 0x5BC, 0x5C2), 0xFB2E => array(0x5D0, 0x5B7), 0xFB2F => array(0x5D0, 0x5B8),
2451
+					0xFB30 => array(0x5D0, 0x5BC), 0xFB31 => array(0x5D1, 0x5BC), 0xFB32 => array(0x5D2, 0x5BC),
2452
+					0xFB33 => array(0x5D3, 0x5BC), 0xFB34 => array(0x5D4, 0x5BC), 0xFB35 => array(0x5D5, 0x5BC),
2453
+					0xFB36 => array(0x5D6, 0x5BC), 0xFB38 => array(0x5D8, 0x5BC), 0xFB39 => array(0x5D9, 0x5BC),
2454
+					0xFB3A => array(0x5DA, 0x5BC), 0xFB3B => array(0x5DB, 0x5BC), 0xFB3C => array(0x5DC, 0x5BC),
2455
+					0xFB3E => array(0x5DE, 0x5BC), 0xFB40 => array(0x5E0, 0x5BC), 0xFB41 => array(0x5E1, 0x5BC),
2456
+					0xFB43 => array(0x5E3, 0x5BC), 0xFB44 => array(0x5E4, 0x5BC), 0xFB46 => array(0x5E6, 0x5BC),
2457
+					0xFB47 => array(0x5E7, 0x5BC), 0xFB48 => array(0x5E8, 0x5BC), 0xFB49 => array(0x5E9, 0x5BC),
2458
+					0xFB4A => array(0x5EA, 0x5BC), 0xFB4B => array(0x5D5, 0x5B9), 0xFB4C => array(0x5D1, 0x5BF),
2459
+					0xFB4D => array(0x5DB, 0x5BF), 0xFB4E => array(0x5E4, 0x5BF), 0xFB4F => array(0x5D0, 0x5DC),
2460
+					0xFB50 => array(0x671), 0xFB51 => array(0x671), 0xFB52 => array(0x67B),
2461
+					0xFB53 => array(0x67B), 0xFB54 => array(0x67B), 0xFB55 => array(0x67B),
2462
+					0xFB56 => array(0x67E), 0xFB57 => array(0x67E), 0xFB58 => array(0x67E),
2463
+					0xFB59 => array(0x67E), 0xFB5A => array(0x680), 0xFB5B => array(0x680),
2464
+					0xFB5C => array(0x680), 0xFB5D => array(0x680), 0xFB5E => array(0x67A),
2465
+					0xFB5F => array(0x67A), 0xFB60 => array(0x67A), 0xFB61 => array(0x67A),
2466
+					0xFB62 => array(0x67F), 0xFB63 => array(0x67F), 0xFB64 => array(0x67F),
2467
+					0xFB65 => array(0x67F), 0xFB66 => array(0x679), 0xFB67 => array(0x679),
2468
+					0xFB68 => array(0x679), 0xFB69 => array(0x679), 0xFB6A => array(0x6A4),
2469
+					0xFB6B => array(0x6A4), 0xFB6C => array(0x6A4), 0xFB6D => array(0x6A4),
2470
+					0xFB6E => array(0x6A6), 0xFB6F => array(0x6A6), 0xFB70 => array(0x6A6),
2471
+					0xFB71 => array(0x6A6), 0xFB72 => array(0x684), 0xFB73 => array(0x684),
2472
+					0xFB74 => array(0x684), 0xFB75 => array(0x684), 0xFB76 => array(0x683),
2473
+					0xFB77 => array(0x683), 0xFB78 => array(0x683), 0xFB79 => array(0x683),
2474
+					0xFB7A => array(0x686), 0xFB7B => array(0x686), 0xFB7C => array(0x686),
2475
+					0xFB7D => array(0x686), 0xFB7E => array(0x687), 0xFB7F => array(0x687),
2476
+					0xFB80 => array(0x687), 0xFB81 => array(0x687), 0xFB82 => array(0x68D),
2477
+					0xFB83 => array(0x68D), 0xFB84 => array(0x68C), 0xFB85 => array(0x68C),
2478
+					0xFB86 => array(0x68E), 0xFB87 => array(0x68E), 0xFB88 => array(0x688),
2479
+					0xFB89 => array(0x688), 0xFB8A => array(0x698), 0xFB8B => array(0x698),
2480
+					0xFB8C => array(0x691), 0xFB8D => array(0x691), 0xFB8E => array(0x6A9),
2481
+					0xFB8F => array(0x6A9), 0xFB90 => array(0x6A9), 0xFB91 => array(0x6A9),
2482
+					0xFB92 => array(0x6AF), 0xFB93 => array(0x6AF), 0xFB94 => array(0x6AF),
2483
+					0xFB95 => array(0x6AF), 0xFB96 => array(0x6B3), 0xFB97 => array(0x6B3),
2484
+					0xFB98 => array(0x6B3), 0xFB99 => array(0x6B3), 0xFB9A => array(0x6B1),
2485
+					0xFB9B => array(0x6B1), 0xFB9C => array(0x6B1), 0xFB9D => array(0x6B1),
2486
+					0xFB9E => array(0x6BA), 0xFB9F => array(0x6BA), 0xFBA0 => array(0x6BB),
2487
+					0xFBA1 => array(0x6BB), 0xFBA2 => array(0x6BB), 0xFBA3 => array(0x6BB),
2488
+					0xFBA4 => array(0x6C0), 0xFBA5 => array(0x6C0), 0xFBA6 => array(0x6C1),
2489
+					0xFBA7 => array(0x6C1), 0xFBA8 => array(0x6C1), 0xFBA9 => array(0x6C1),
2490
+					0xFBAA => array(0x6BE), 0xFBAB => array(0x6BE), 0xFBAC => array(0x6BE),
2491
+					0xFBAD => array(0x6BE), 0xFBAE => array(0x6D2), 0xFBAF => array(0x6D2),
2492
+					0xFBB0 => array(0x6D3), 0xFBB1 => array(0x6D3), 0xFBD3 => array(0x6AD),
2493
+					0xFBD4 => array(0x6AD), 0xFBD5 => array(0x6AD), 0xFBD6 => array(0x6AD),
2494
+					0xFBD7 => array(0x6C7), 0xFBD8 => array(0x6C7), 0xFBD9 => array(0x6C6),
2495
+					0xFBDA => array(0x6C6), 0xFBDB => array(0x6C8), 0xFBDC => array(0x6C8),
2496
+					0xFBDD => array(0x6C7, 0x674), 0xFBDE => array(0x6CB), 0xFBDF => array(0x6CB),
2497
+					0xFBE0 => array(0x6C5), 0xFBE1 => array(0x6C5), 0xFBE2 => array(0x6C9),
2498
+					0xFBE3 => array(0x6C9), 0xFBE4 => array(0x6D0), 0xFBE5 => array(0x6D0),
2499
+					0xFBE6 => array(0x6D0), 0xFBE7 => array(0x6D0), 0xFBE8 => array(0x649),
2500
+					0xFBE9 => array(0x649), 0xFBEA => array(0x626, 0x627), 0xFBEB => array(0x626, 0x627),
2501
+					0xFBEC => array(0x626, 0x6D5), 0xFBED => array(0x626, 0x6D5), 0xFBEE => array(0x626, 0x648),
2502
+					0xFBEF => array(0x626, 0x648), 0xFBF0 => array(0x626, 0x6C7), 0xFBF1 => array(0x626, 0x6C7),
2503
+					0xFBF2 => array(0x626, 0x6C6), 0xFBF3 => array(0x626, 0x6C6), 0xFBF4 => array(0x626, 0x6C8),
2504
+					0xFBF5 => array(0x626, 0x6C8), 0xFBF6 => array(0x626, 0x6D0), 0xFBF7 => array(0x626, 0x6D0),
2505
+					0xFBF8 => array(0x626, 0x6D0), 0xFBF9 => array(0x626, 0x649), 0xFBFA => array(0x626, 0x649),
2506
+					0xFBFB => array(0x626, 0x649), 0xFBFC => array(0x6CC), 0xFBFD => array(0x6CC),
2507
+					0xFBFE => array(0x6CC), 0xFBFF => array(0x6CC), 0xFC00 => array(0x626, 0x62C),
2508
+					0xFC01 => array(0x626, 0x62D), 0xFC02 => array(0x626, 0x645), 0xFC03 => array(0x626, 0x649),
2509
+					0xFC04 => array(0x626, 0x64A), 0xFC05 => array(0x628, 0x62C), 0xFC06 => array(0x628, 0x62D),
2510
+					0xFC07 => array(0x628, 0x62E), 0xFC08 => array(0x628, 0x645), 0xFC09 => array(0x628, 0x649),
2511
+					0xFC0A => array(0x628, 0x64A), 0xFC0B => array(0x62A, 0x62C), 0xFC0C => array(0x62A, 0x62D),
2512
+					0xFC0D => array(0x62A, 0x62E), 0xFC0E => array(0x62A, 0x645), 0xFC0F => array(0x62A, 0x649),
2513
+					0xFC10 => array(0x62A, 0x64A), 0xFC11 => array(0x62B, 0x62C), 0xFC12 => array(0x62B, 0x645),
2514
+					0xFC13 => array(0x62B, 0x649), 0xFC14 => array(0x62B, 0x64A), 0xFC15 => array(0x62C, 0x62D),
2515
+					0xFC16 => array(0x62C, 0x645), 0xFC17 => array(0x62D, 0x62C), 0xFC18 => array(0x62D, 0x645),
2516
+					0xFC19 => array(0x62E, 0x62C), 0xFC1A => array(0x62E, 0x62D), 0xFC1B => array(0x62E, 0x645),
2517
+					0xFC1C => array(0x633, 0x62C), 0xFC1D => array(0x633, 0x62D), 0xFC1E => array(0x633, 0x62E),
2518
+					0xFC1F => array(0x633, 0x645), 0xFC20 => array(0x635, 0x62D), 0xFC21 => array(0x635, 0x645),
2519
+					0xFC22 => array(0x636, 0x62C), 0xFC23 => array(0x636, 0x62D), 0xFC24 => array(0x636, 0x62E),
2520
+					0xFC25 => array(0x636, 0x645), 0xFC26 => array(0x637, 0x62D), 0xFC27 => array(0x637, 0x645),
2521
+					0xFC28 => array(0x638, 0x645), 0xFC29 => array(0x639, 0x62C), 0xFC2A => array(0x639, 0x645),
2522
+					0xFC2B => array(0x63A, 0x62C), 0xFC2C => array(0x63A, 0x645), 0xFC2D => array(0x641, 0x62C),
2523
+					0xFC2E => array(0x641, 0x62D), 0xFC2F => array(0x641, 0x62E), 0xFC30 => array(0x641, 0x645),
2524
+					0xFC31 => array(0x641, 0x649), 0xFC32 => array(0x641, 0x64A), 0xFC33 => array(0x642, 0x62D),
2525
+					0xFC34 => array(0x642, 0x645), 0xFC35 => array(0x642, 0x649), 0xFC36 => array(0x642, 0x64A),
2526
+					0xFC37 => array(0x643, 0x627), 0xFC38 => array(0x643, 0x62C), 0xFC39 => array(0x643, 0x62D),
2527
+					0xFC3A => array(0x643, 0x62E), 0xFC3B => array(0x643, 0x644), 0xFC3C => array(0x643, 0x645),
2528
+					0xFC3D => array(0x643, 0x649), 0xFC3E => array(0x643, 0x64A), 0xFC3F => array(0x644, 0x62C),
2529
+					0xFC40 => array(0x644, 0x62D), 0xFC41 => array(0x644, 0x62E), 0xFC42 => array(0x644, 0x645),
2530
+					0xFC43 => array(0x644, 0x649), 0xFC44 => array(0x644, 0x64A), 0xFC45 => array(0x645, 0x62C),
2531
+					0xFC46 => array(0x645, 0x62D), 0xFC47 => array(0x645, 0x62E), 0xFC48 => array(0x645, 0x645),
2532
+					0xFC49 => array(0x645, 0x649), 0xFC4A => array(0x645, 0x64A), 0xFC4B => array(0x646, 0x62C),
2533
+					0xFC4C => array(0x646, 0x62D), 0xFC4D => array(0x646, 0x62E), 0xFC4E => array(0x646, 0x645),
2534
+					0xFC4F => array(0x646, 0x649), 0xFC50 => array(0x646, 0x64A), 0xFC51 => array(0x647, 0x62C),
2535
+					0xFC52 => array(0x647, 0x645), 0xFC53 => array(0x647, 0x649), 0xFC54 => array(0x647, 0x64A),
2536
+					0xFC55 => array(0x64A, 0x62C), 0xFC56 => array(0x64A, 0x62D), 0xFC57 => array(0x64A, 0x62E),
2537
+					0xFC58 => array(0x64A, 0x645), 0xFC59 => array(0x64A, 0x649), 0xFC5A => array(0x64A, 0x64A),
2538
+					0xFC5B => array(0x630, 0x670), 0xFC5C => array(0x631, 0x670), 0xFC5D => array(0x649, 0x670),
2539
+					0xFC64 => array(0x626, 0x631), 0xFC65 => array(0x626, 0x632), 0xFC66 => array(0x626, 0x645),
2540
+					0xFC67 => array(0x626, 0x646), 0xFC68 => array(0x626, 0x649), 0xFC69 => array(0x626, 0x64A),
2541
+					0xFC6A => array(0x628, 0x631), 0xFC6B => array(0x628, 0x632), 0xFC6C => array(0x628, 0x645),
2542
+					0xFC6D => array(0x628, 0x646), 0xFC6E => array(0x628, 0x649), 0xFC6F => array(0x628, 0x64A),
2543
+					0xFC70 => array(0x62A, 0x631), 0xFC71 => array(0x62A, 0x632), 0xFC72 => array(0x62A, 0x645),
2544
+					0xFC73 => array(0x62A, 0x646), 0xFC74 => array(0x62A, 0x649), 0xFC75 => array(0x62A, 0x64A),
2545
+					0xFC76 => array(0x62B, 0x631), 0xFC77 => array(0x62B, 0x632), 0xFC78 => array(0x62B, 0x645),
2546
+					0xFC79 => array(0x62B, 0x646), 0xFC7A => array(0x62B, 0x649), 0xFC7B => array(0x62B, 0x64A),
2547
+					0xFC7C => array(0x641, 0x649), 0xFC7D => array(0x641, 0x64A), 0xFC7E => array(0x642, 0x649),
2548
+					0xFC7F => array(0x642, 0x64A), 0xFC80 => array(0x643, 0x627), 0xFC81 => array(0x643, 0x644),
2549
+					0xFC82 => array(0x643, 0x645), 0xFC83 => array(0x643, 0x649), 0xFC84 => array(0x643, 0x64A),
2550
+					0xFC85 => array(0x644, 0x645), 0xFC86 => array(0x644, 0x649), 0xFC87 => array(0x644, 0x64A),
2551
+					0xFC88 => array(0x645, 0x627), 0xFC89 => array(0x645, 0x645), 0xFC8A => array(0x646, 0x631),
2552
+					0xFC8B => array(0x646, 0x632), 0xFC8C => array(0x646, 0x645), 0xFC8D => array(0x646, 0x646),
2553
+					0xFC8E => array(0x646, 0x649), 0xFC8F => array(0x646, 0x64A), 0xFC90 => array(0x649, 0x670),
2554
+					0xFC91 => array(0x64A, 0x631), 0xFC92 => array(0x64A, 0x632), 0xFC93 => array(0x64A, 0x645),
2555
+					0xFC94 => array(0x64A, 0x646), 0xFC95 => array(0x64A, 0x649), 0xFC96 => array(0x64A, 0x64A),
2556
+					0xFC97 => array(0x626, 0x62C), 0xFC98 => array(0x626, 0x62D), 0xFC99 => array(0x626, 0x62E),
2557
+					0xFC9A => array(0x626, 0x645), 0xFC9B => array(0x626, 0x647), 0xFC9C => array(0x628, 0x62C),
2558
+					0xFC9D => array(0x628, 0x62D), 0xFC9E => array(0x628, 0x62E), 0xFC9F => array(0x628, 0x645),
2559
+					0xFCA0 => array(0x628, 0x647), 0xFCA1 => array(0x62A, 0x62C), 0xFCA2 => array(0x62A, 0x62D),
2560
+					0xFCA3 => array(0x62A, 0x62E), 0xFCA4 => array(0x62A, 0x645), 0xFCA5 => array(0x62A, 0x647),
2561
+					0xFCA6 => array(0x62B, 0x645), 0xFCA7 => array(0x62C, 0x62D), 0xFCA8 => array(0x62C, 0x645),
2562
+					0xFCA9 => array(0x62D, 0x62C), 0xFCAA => array(0x62D, 0x645), 0xFCAB => array(0x62E, 0x62C),
2563
+					0xFCAC => array(0x62E, 0x645), 0xFCAD => array(0x633, 0x62C), 0xFCAE => array(0x633, 0x62D),
2564
+					0xFCAF => array(0x633, 0x62E), 0xFCB0 => array(0x633, 0x645), 0xFCB1 => array(0x635, 0x62D),
2565
+					0xFCB2 => array(0x635, 0x62E), 0xFCB3 => array(0x635, 0x645), 0xFCB4 => array(0x636, 0x62C),
2566
+					0xFCB5 => array(0x636, 0x62D), 0xFCB6 => array(0x636, 0x62E), 0xFCB7 => array(0x636, 0x645),
2567
+					0xFCB8 => array(0x637, 0x62D), 0xFCB9 => array(0x638, 0x645), 0xFCBA => array(0x639, 0x62C),
2568
+					0xFCBB => array(0x639, 0x645), 0xFCBC => array(0x63A, 0x62C), 0xFCBD => array(0x63A, 0x645),
2569
+					0xFCBE => array(0x641, 0x62C), 0xFCBF => array(0x641, 0x62D), 0xFCC0 => array(0x641, 0x62E),
2570
+					0xFCC1 => array(0x641, 0x645), 0xFCC2 => array(0x642, 0x62D), 0xFCC3 => array(0x642, 0x645),
2571
+					0xFCC4 => array(0x643, 0x62C), 0xFCC5 => array(0x643, 0x62D), 0xFCC6 => array(0x643, 0x62E),
2572
+					0xFCC7 => array(0x643, 0x644), 0xFCC8 => array(0x643, 0x645), 0xFCC9 => array(0x644, 0x62C),
2573
+					0xFCCA => array(0x644, 0x62D), 0xFCCB => array(0x644, 0x62E), 0xFCCC => array(0x644, 0x645),
2574
+					0xFCCD => array(0x644, 0x647), 0xFCCE => array(0x645, 0x62C), 0xFCCF => array(0x645, 0x62D),
2575
+					0xFCD0 => array(0x645, 0x62E), 0xFCD1 => array(0x645, 0x645), 0xFCD2 => array(0x646, 0x62C),
2576
+					0xFCD3 => array(0x646, 0x62D), 0xFCD4 => array(0x646, 0x62E), 0xFCD5 => array(0x646, 0x645),
2577
+					0xFCD6 => array(0x646, 0x647), 0xFCD7 => array(0x647, 0x62C), 0xFCD8 => array(0x647, 0x645),
2578
+					0xFCD9 => array(0x647, 0x670), 0xFCDA => array(0x64A, 0x62C), 0xFCDB => array(0x64A, 0x62D),
2579
+					0xFCDC => array(0x64A, 0x62E), 0xFCDD => array(0x64A, 0x645), 0xFCDE => array(0x64A, 0x647),
2580
+					0xFCDF => array(0x626, 0x645), 0xFCE0 => array(0x626, 0x647), 0xFCE1 => array(0x628, 0x645),
2581
+					0xFCE2 => array(0x628, 0x647), 0xFCE3 => array(0x62A, 0x645), 0xFCE4 => array(0x62A, 0x647),
2582
+					0xFCE5 => array(0x62B, 0x645), 0xFCE6 => array(0x62B, 0x647), 0xFCE7 => array(0x633, 0x645),
2583
+					0xFCE8 => array(0x633, 0x647), 0xFCE9 => array(0x634, 0x645), 0xFCEA => array(0x634, 0x647),
2584
+					0xFCEB => array(0x643, 0x644), 0xFCEC => array(0x643, 0x645), 0xFCED => array(0x644, 0x645),
2585
+					0xFCEE => array(0x646, 0x645), 0xFCEF => array(0x646, 0x647), 0xFCF0 => array(0x64A, 0x645),
2586
+					0xFCF1 => array(0x64A, 0x647), 0xFCF2 => array(0x640, 0x64E, 0x651), 0xFCF3 => array(0x640, 0x64F, 0x651),
2587
+					0xFCF4 => array(0x640, 0x650, 0x651), 0xFCF5 => array(0x637, 0x649), 0xFCF6 => array(0x637, 0x64A),
2588
+					0xFCF7 => array(0x639, 0x649), 0xFCF8 => array(0x639, 0x64A), 0xFCF9 => array(0x63A, 0x649),
2589
+					0xFCFA => array(0x63A, 0x64A), 0xFCFB => array(0x633, 0x649), 0xFCFC => array(0x633, 0x64A),
2590
+					0xFCFD => array(0x634, 0x649), 0xFCFE => array(0x634, 0x64A), 0xFCFF => array(0x62D, 0x649),
2591
+					0xFD00 => array(0x62D, 0x64A), 0xFD01 => array(0x62C, 0x649), 0xFD02 => array(0x62C, 0x64A),
2592
+					0xFD03 => array(0x62E, 0x649), 0xFD04 => array(0x62E, 0x64A), 0xFD05 => array(0x635, 0x649),
2593
+					0xFD06 => array(0x635, 0x64A), 0xFD07 => array(0x636, 0x649), 0xFD08 => array(0x636, 0x64A),
2594
+					0xFD09 => array(0x634, 0x62C), 0xFD0A => array(0x634, 0x62D), 0xFD0B => array(0x634, 0x62E),
2595
+					0xFD0C => array(0x634, 0x645), 0xFD0D => array(0x634, 0x631), 0xFD0E => array(0x633, 0x631),
2596
+					0xFD0F => array(0x635, 0x631), 0xFD10 => array(0x636, 0x631), 0xFD11 => array(0x637, 0x649),
2597
+					0xFD12 => array(0x637, 0x64A), 0xFD13 => array(0x639, 0x649), 0xFD14 => array(0x639, 0x64A),
2598
+					0xFD15 => array(0x63A, 0x649), 0xFD16 => array(0x63A, 0x64A), 0xFD17 => array(0x633, 0x649),
2599
+					0xFD18 => array(0x633, 0x64A), 0xFD19 => array(0x634, 0x649), 0xFD1A => array(0x634, 0x64A),
2600
+					0xFD1B => array(0x62D, 0x649), 0xFD1C => array(0x62D, 0x64A), 0xFD1D => array(0x62C, 0x649),
2601
+					0xFD1E => array(0x62C, 0x64A), 0xFD1F => array(0x62E, 0x649), 0xFD20 => array(0x62E, 0x64A),
2602
+					0xFD21 => array(0x635, 0x649), 0xFD22 => array(0x635, 0x64A), 0xFD23 => array(0x636, 0x649),
2603
+					0xFD24 => array(0x636, 0x64A), 0xFD25 => array(0x634, 0x62C), 0xFD26 => array(0x634, 0x62D),
2604
+					0xFD27 => array(0x634, 0x62E), 0xFD28 => array(0x634, 0x645), 0xFD29 => array(0x634, 0x631),
2605
+					0xFD2A => array(0x633, 0x631), 0xFD2B => array(0x635, 0x631), 0xFD2C => array(0x636, 0x631),
2606
+					0xFD2D => array(0x634, 0x62C), 0xFD2E => array(0x634, 0x62D), 0xFD2F => array(0x634, 0x62E),
2607
+					0xFD30 => array(0x634, 0x645), 0xFD31 => array(0x633, 0x647), 0xFD32 => array(0x634, 0x647),
2608
+					0xFD33 => array(0x637, 0x645), 0xFD34 => array(0x633, 0x62C), 0xFD35 => array(0x633, 0x62D),
2609
+					0xFD36 => array(0x633, 0x62E), 0xFD37 => array(0x634, 0x62C), 0xFD38 => array(0x634, 0x62D),
2610
+					0xFD39 => array(0x634, 0x62E), 0xFD3A => array(0x637, 0x645), 0xFD3B => array(0x638, 0x645),
2611
+					0xFD3C => array(0x627, 0x64B), 0xFD3D => array(0x627, 0x64B), 0xFD50 => array(0x62A, 0x62C, 0x645),
2612
+					0xFD51 => array(0x62A, 0x62D, 0x62C), 0xFD52 => array(0x62A, 0x62D, 0x62C), 0xFD53 => array(0x62A, 0x62D, 0x645),
2613
+					0xFD54 => array(0x62A, 0x62E, 0x645), 0xFD55 => array(0x62A, 0x645, 0x62C), 0xFD56 => array(0x62A, 0x645, 0x62D),
2614
+					0xFD57 => array(0x62A, 0x645, 0x62E), 0xFD58 => array(0x62C, 0x645, 0x62D), 0xFD59 => array(0x62C, 0x645, 0x62D),
2615
+					0xFD5A => array(0x62D, 0x645, 0x64A), 0xFD5B => array(0x62D, 0x645, 0x649), 0xFD5C => array(0x633, 0x62D, 0x62C),
2616
+					0xFD5D => array(0x633, 0x62C, 0x62D), 0xFD5E => array(0x633, 0x62C, 0x649), 0xFD5F => array(0x633, 0x645, 0x62D),
2617
+					0xFD60 => array(0x633, 0x645, 0x62D), 0xFD61 => array(0x633, 0x645, 0x62C), 0xFD62 => array(0x633, 0x645, 0x645),
2618
+					0xFD63 => array(0x633, 0x645, 0x645), 0xFD64 => array(0x635, 0x62D, 0x62D), 0xFD65 => array(0x635, 0x62D, 0x62D),
2619
+					0xFD66 => array(0x635, 0x645, 0x645), 0xFD67 => array(0x634, 0x62D, 0x645), 0xFD68 => array(0x634, 0x62D, 0x645),
2620
+					0xFD69 => array(0x634, 0x62C, 0x64A), 0xFD6A => array(0x634, 0x645, 0x62E), 0xFD6B => array(0x634, 0x645, 0x62E),
2621
+					0xFD6C => array(0x634, 0x645, 0x645), 0xFD6D => array(0x634, 0x645, 0x645), 0xFD6E => array(0x636, 0x62D, 0x649),
2622
+					0xFD6F => array(0x636, 0x62E, 0x645), 0xFD70 => array(0x636, 0x62E, 0x645), 0xFD71 => array(0x637, 0x645, 0x62D),
2623
+					0xFD72 => array(0x637, 0x645, 0x62D), 0xFD73 => array(0x637, 0x645, 0x645), 0xFD74 => array(0x637, 0x645, 0x64A),
2624
+					0xFD75 => array(0x639, 0x62C, 0x645), 0xFD76 => array(0x639, 0x645, 0x645), 0xFD77 => array(0x639, 0x645, 0x645),
2625
+					0xFD78 => array(0x639, 0x645, 0x649), 0xFD79 => array(0x63A, 0x645, 0x645), 0xFD7A => array(0x63A, 0x645, 0x64A),
2626
+					0xFD7B => array(0x63A, 0x645, 0x649), 0xFD7C => array(0x641, 0x62E, 0x645), 0xFD7D => array(0x641, 0x62E, 0x645),
2627
+					0xFD7E => array(0x642, 0x645, 0x62D), 0xFD7F => array(0x642, 0x645, 0x645), 0xFD80 => array(0x644, 0x62D, 0x645),
2628
+					0xFD81 => array(0x644, 0x62D, 0x64A), 0xFD82 => array(0x644, 0x62D, 0x649), 0xFD83 => array(0x644, 0x62C, 0x62C),
2629
+					0xFD84 => array(0x644, 0x62C, 0x62C), 0xFD85 => array(0x644, 0x62E, 0x645), 0xFD86 => array(0x644, 0x62E, 0x645),
2630
+					0xFD87 => array(0x644, 0x645, 0x62D), 0xFD88 => array(0x644, 0x645, 0x62D), 0xFD89 => array(0x645, 0x62D, 0x62C),
2631
+					0xFD8A => array(0x645, 0x62D, 0x645), 0xFD8B => array(0x645, 0x62D, 0x64A), 0xFD8C => array(0x645, 0x62C, 0x62D),
2632
+					0xFD8D => array(0x645, 0x62C, 0x645), 0xFD8E => array(0x645, 0x62E, 0x62C), 0xFD8F => array(0x645, 0x62E, 0x645),
2633
+					0xFD92 => array(0x645, 0x62C, 0x62E), 0xFD93 => array(0x647, 0x645, 0x62C), 0xFD94 => array(0x647, 0x645, 0x645),
2634
+					0xFD95 => array(0x646, 0x62D, 0x645), 0xFD96 => array(0x646, 0x62D, 0x649), 0xFD97 => array(0x646, 0x62C, 0x645),
2635
+					0xFD98 => array(0x646, 0x62C, 0x645), 0xFD99 => array(0x646, 0x62C, 0x649), 0xFD9A => array(0x646, 0x645, 0x64A),
2636
+					0xFD9B => array(0x646, 0x645, 0x649), 0xFD9C => array(0x64A, 0x645, 0x645), 0xFD9D => array(0x64A, 0x645, 0x645),
2637
+					0xFD9E => array(0x628, 0x62E, 0x64A), 0xFD9F => array(0x62A, 0x62C, 0x64A), 0xFDA0 => array(0x62A, 0x62C, 0x649),
2638
+					0xFDA1 => array(0x62A, 0x62E, 0x64A), 0xFDA2 => array(0x62A, 0x62E, 0x649), 0xFDA3 => array(0x62A, 0x645, 0x64A),
2639
+					0xFDA4 => array(0x62A, 0x645, 0x649), 0xFDA5 => array(0x62C, 0x645, 0x64A), 0xFDA6 => array(0x62C, 0x62D, 0x649),
2640
+					0xFDA7 => array(0x62C, 0x645, 0x649), 0xFDA8 => array(0x633, 0x62E, 0x649), 0xFDA9 => array(0x635, 0x62D, 0x64A),
2641
+					0xFDAA => array(0x634, 0x62D, 0x64A), 0xFDAB => array(0x636, 0x62D, 0x64A), 0xFDAC => array(0x644, 0x62C, 0x64A),
2642
+					0xFDAD => array(0x644, 0x645, 0x64A), 0xFDAE => array(0x64A, 0x62D, 0x64A), 0xFDAF => array(0x64A, 0x62C, 0x64A),
2643
+					0xFDB0 => array(0x64A, 0x645, 0x64A), 0xFDB1 => array(0x645, 0x645, 0x64A), 0xFDB2 => array(0x642, 0x645, 0x64A),
2644
+					0xFDB3 => array(0x646, 0x62D, 0x64A), 0xFDB4 => array(0x642, 0x645, 0x62D), 0xFDB5 => array(0x644, 0x62D, 0x645),
2645
+					0xFDB6 => array(0x639, 0x645, 0x64A), 0xFDB7 => array(0x643, 0x645, 0x64A), 0xFDB8 => array(0x646, 0x62C, 0x62D),
2646
+					0xFDB9 => array(0x645, 0x62E, 0x64A), 0xFDBA => array(0x644, 0x62C, 0x645), 0xFDBB => array(0x643, 0x645, 0x645),
2647
+					0xFDBC => array(0x644, 0x62C, 0x645), 0xFDBD => array(0x646, 0x62C, 0x62D), 0xFDBE => array(0x62C, 0x62D, 0x64A),
2648
+					0xFDBF => array(0x62D, 0x62C, 0x64A), 0xFDC0 => array(0x645, 0x62C, 0x64A), 0xFDC1 => array(0x641, 0x645, 0x64A),
2649
+					0xFDC2 => array(0x628, 0x62D, 0x64A), 0xFDC3 => array(0x643, 0x645, 0x645), 0xFDC4 => array(0x639, 0x62C, 0x645),
2650
+					0xFDC5 => array(0x635, 0x645, 0x645), 0xFDC6 => array(0x633, 0x62E, 0x64A), 0xFDC7 => array(0x646, 0x62C, 0x64A),
2651
+					0xFDF0 => array(0x635, 0x644, 0x6D2), 0xFDF1 => array(0x642, 0x644, 0x6D2), 0xFDF2 => array(0x627, 0x644, 0x644, 0x647),
2652
+					0xFDF3 => array(0x627, 0x643, 0x628, 0x631), 0xFDF4 => array(0x645, 0x62D, 0x645, 0x62F), 0xFDF5 => array(0x635, 0x644, 0x639, 0x645),
2653
+					0xFDF6 => array(0x631, 0x633, 0x648, 0x644), 0xFDF7 => array(0x639, 0x644, 0x64A, 0x647), 0xFDF8 => array(0x648, 0x633, 0x644, 0x645),
2654
+					0xFDF9 => array(0x635, 0x644, 0x649), 0xFDFC => array(0x631, 0x6CC, 0x627, 0x644), 0xFE11 => array(0x3001),
2655
+					0xFE17 => array(0x3016), 0xFE18 => array(0x3017), 0xFE31 => array(0x2014),
2656
+					0xFE32 => array(0x2013), 0xFE39 => array(0x3014), 0xFE3A => array(0x3015),
2657
+					0xFE3B => array(0x3010), 0xFE3C => array(0x3011), 0xFE3D => array(0x300A),
2658
+					0xFE3E => array(0x300B), 0xFE3F => array(0x3008), 0xFE40 => array(0x3009),
2659
+					0xFE41 => array(0x300C), 0xFE42 => array(0x300D), 0xFE43 => array(0x300E),
2660
+					0xFE44 => array(0x300F), 0xFE51 => array(0x3001), 0xFE58 => array(0x2014),
2661
+					0xFE5D => array(0x3014), 0xFE5E => array(0x3015), 0xFE63 => array(0x2D),
2662
+					0xFE71 => array(0x640, 0x64B), 0xFE77 => array(0x640, 0x64E), 0xFE79 => array(0x640, 0x64F),
2663
+					0xFE7B => array(0x640, 0x650), 0xFE7D => array(0x640, 0x651), 0xFE7F => array(0x640, 0x652),
2664
+					0xFE80 => array(0x621), 0xFE81 => array(0x622), 0xFE82 => array(0x622),
2665
+					0xFE83 => array(0x623), 0xFE84 => array(0x623), 0xFE85 => array(0x624),
2666
+					0xFE86 => array(0x624), 0xFE87 => array(0x625), 0xFE88 => array(0x625),
2667
+					0xFE89 => array(0x626), 0xFE8A => array(0x626), 0xFE8B => array(0x626),
2668
+					0xFE8C => array(0x626), 0xFE8D => array(0x627), 0xFE8E => array(0x627),
2669
+					0xFE8F => array(0x628), 0xFE90 => array(0x628), 0xFE91 => array(0x628),
2670
+					0xFE92 => array(0x628), 0xFE93 => array(0x629), 0xFE94 => array(0x629),
2671
+					0xFE95 => array(0x62A), 0xFE96 => array(0x62A), 0xFE97 => array(0x62A),
2672
+					0xFE98 => array(0x62A), 0xFE99 => array(0x62B), 0xFE9A => array(0x62B),
2673
+					0xFE9B => array(0x62B), 0xFE9C => array(0x62B), 0xFE9D => array(0x62C),
2674
+					0xFE9E => array(0x62C), 0xFE9F => array(0x62C), 0xFEA0 => array(0x62C),
2675
+					0xFEA1 => array(0x62D), 0xFEA2 => array(0x62D), 0xFEA3 => array(0x62D),
2676
+					0xFEA4 => array(0x62D), 0xFEA5 => array(0x62E), 0xFEA6 => array(0x62E),
2677
+					0xFEA7 => array(0x62E), 0xFEA8 => array(0x62E), 0xFEA9 => array(0x62F),
2678
+					0xFEAA => array(0x62F), 0xFEAB => array(0x630), 0xFEAC => array(0x630),
2679
+					0xFEAD => array(0x631), 0xFEAE => array(0x631), 0xFEAF => array(0x632),
2680
+					0xFEB0 => array(0x632), 0xFEB1 => array(0x633), 0xFEB2 => array(0x633),
2681
+					0xFEB3 => array(0x633), 0xFEB4 => array(0x633), 0xFEB5 => array(0x634),
2682
+					0xFEB6 => array(0x634), 0xFEB7 => array(0x634), 0xFEB8 => array(0x634),
2683
+					0xFEB9 => array(0x635), 0xFEBA => array(0x635), 0xFEBB => array(0x635),
2684
+					0xFEBC => array(0x635), 0xFEBD => array(0x636), 0xFEBE => array(0x636),
2685
+					0xFEBF => array(0x636), 0xFEC0 => array(0x636), 0xFEC1 => array(0x637),
2686
+					0xFEC2 => array(0x637), 0xFEC3 => array(0x637), 0xFEC4 => array(0x637),
2687
+					0xFEC5 => array(0x638), 0xFEC6 => array(0x638), 0xFEC7 => array(0x638),
2688
+					0xFEC8 => array(0x638), 0xFEC9 => array(0x639), 0xFECA => array(0x639),
2689
+					0xFECB => array(0x639), 0xFECC => array(0x639), 0xFECD => array(0x63A),
2690
+					0xFECE => array(0x63A), 0xFECF => array(0x63A), 0xFED0 => array(0x63A),
2691
+					0xFED1 => array(0x641), 0xFED2 => array(0x641), 0xFED3 => array(0x641),
2692
+					0xFED4 => array(0x641), 0xFED5 => array(0x642), 0xFED6 => array(0x642),
2693
+					0xFED7 => array(0x642), 0xFED8 => array(0x642), 0xFED9 => array(0x643),
2694
+					0xFEDA => array(0x643), 0xFEDB => array(0x643), 0xFEDC => array(0x643),
2695
+					0xFEDD => array(0x644), 0xFEDE => array(0x644), 0xFEDF => array(0x644),
2696
+					0xFEE0 => array(0x644), 0xFEE1 => array(0x645), 0xFEE2 => array(0x645),
2697
+					0xFEE3 => array(0x645), 0xFEE4 => array(0x645), 0xFEE5 => array(0x646),
2698
+					0xFEE6 => array(0x646), 0xFEE7 => array(0x646), 0xFEE8 => array(0x646),
2699
+					0xFEE9 => array(0x647), 0xFEEA => array(0x647), 0xFEEB => array(0x647),
2700
+					0xFEEC => array(0x647), 0xFEED => array(0x648), 0xFEEE => array(0x648),
2701
+					0xFEEF => array(0x649), 0xFEF0 => array(0x649), 0xFEF1 => array(0x64A),
2702
+					0xFEF2 => array(0x64A), 0xFEF3 => array(0x64A), 0xFEF4 => array(0x64A),
2703
+					0xFEF5 => array(0x644, 0x622), 0xFEF6 => array(0x644, 0x622), 0xFEF7 => array(0x644, 0x623),
2704
+					0xFEF8 => array(0x644, 0x623), 0xFEF9 => array(0x644, 0x625), 0xFEFA => array(0x644, 0x625),
2705
+					0xFEFB => array(0x644, 0x627), 0xFEFC => array(0x644, 0x627), 0xFF0D => array(0x2D),
2706
+					0xFF0E => array(0x2E), 0xFF10 => array(0x30), 0xFF11 => array(0x31),
2707
+					0xFF12 => array(0x32), 0xFF13 => array(0x33), 0xFF14 => array(0x34),
2708
+					0xFF15 => array(0x35), 0xFF16 => array(0x36), 0xFF17 => array(0x37),
2709
+					0xFF18 => array(0x38), 0xFF19 => array(0x39), 0xFF21 => array(0x61),
2710
+					0xFF22 => array(0x62), 0xFF23 => array(0x63), 0xFF24 => array(0x64),
2711
+					0xFF25 => array(0x65), 0xFF26 => array(0x66), 0xFF27 => array(0x67),
2712
+					0xFF28 => array(0x68), 0xFF29 => array(0x69), 0xFF2A => array(0x6A),
2713
+					0xFF2B => array(0x6B), 0xFF2C => array(0x6C), 0xFF2D => array(0x6D),
2714
+					0xFF2E => array(0x6E), 0xFF2F => array(0x6F), 0xFF30 => array(0x70),
2715
+					0xFF31 => array(0x71), 0xFF32 => array(0x72), 0xFF33 => array(0x73),
2716
+					0xFF34 => array(0x74), 0xFF35 => array(0x75), 0xFF36 => array(0x76),
2717
+					0xFF37 => array(0x77), 0xFF38 => array(0x78), 0xFF39 => array(0x79),
2718
+					0xFF3A => array(0x7A), 0xFF41 => array(0x61), 0xFF42 => array(0x62),
2719
+					0xFF43 => array(0x63), 0xFF44 => array(0x64), 0xFF45 => array(0x65),
2720
+					0xFF46 => array(0x66), 0xFF47 => array(0x67), 0xFF48 => array(0x68),
2721
+					0xFF49 => array(0x69), 0xFF4A => array(0x6A), 0xFF4B => array(0x6B),
2722
+					0xFF4C => array(0x6C), 0xFF4D => array(0x6D), 0xFF4E => array(0x6E),
2723
+					0xFF4F => array(0x6F), 0xFF50 => array(0x70), 0xFF51 => array(0x71),
2724
+					0xFF52 => array(0x72), 0xFF53 => array(0x73), 0xFF54 => array(0x74),
2725
+					0xFF55 => array(0x75), 0xFF56 => array(0x76), 0xFF57 => array(0x77),
2726
+					0xFF58 => array(0x78), 0xFF59 => array(0x79), 0xFF5A => array(0x7A),
2727
+					0xFF5F => array(0x2985), 0xFF60 => array(0x2986), 0xFF61 => array(0x2E),
2728
+					0xFF62 => array(0x300C), 0xFF63 => array(0x300D), 0xFF64 => array(0x3001),
2729
+					0xFF65 => array(0x30FB), 0xFF66 => array(0x30F2), 0xFF67 => array(0x30A1),
2730
+					0xFF68 => array(0x30A3), 0xFF69 => array(0x30A5), 0xFF6A => array(0x30A7),
2731
+					0xFF6B => array(0x30A9), 0xFF6C => array(0x30E3), 0xFF6D => array(0x30E5),
2732
+					0xFF6E => array(0x30E7), 0xFF6F => array(0x30C3), 0xFF70 => array(0x30FC),
2733
+					0xFF71 => array(0x30A2), 0xFF72 => array(0x30A4), 0xFF73 => array(0x30A6),
2734
+					0xFF74 => array(0x30A8), 0xFF75 => array(0x30AA), 0xFF76 => array(0x30AB),
2735
+					0xFF77 => array(0x30AD), 0xFF78 => array(0x30AF), 0xFF79 => array(0x30B1),
2736
+					0xFF7A => array(0x30B3), 0xFF7B => array(0x30B5), 0xFF7C => array(0x30B7),
2737
+					0xFF7D => array(0x30B9), 0xFF7E => array(0x30BB), 0xFF7F => array(0x30BD),
2738
+					0xFF80 => array(0x30BF), 0xFF81 => array(0x30C1), 0xFF82 => array(0x30C4),
2739
+					0xFF83 => array(0x30C6), 0xFF84 => array(0x30C8), 0xFF85 => array(0x30CA),
2740
+					0xFF86 => array(0x30CB), 0xFF87 => array(0x30CC), 0xFF88 => array(0x30CD),
2741
+					0xFF89 => array(0x30CE), 0xFF8A => array(0x30CF), 0xFF8B => array(0x30D2),
2742
+					0xFF8C => array(0x30D5), 0xFF8D => array(0x30D8), 0xFF8E => array(0x30DB),
2743
+					0xFF8F => array(0x30DE), 0xFF90 => array(0x30DF), 0xFF91 => array(0x30E0),
2744
+					0xFF92 => array(0x30E1), 0xFF93 => array(0x30E2), 0xFF94 => array(0x30E4),
2745
+					0xFF95 => array(0x30E6), 0xFF96 => array(0x30E8), 0xFF97 => array(0x30E9),
2746
+					0xFF98 => array(0x30EA), 0xFF99 => array(0x30EB), 0xFF9A => array(0x30EC),
2747
+					0xFF9B => array(0x30ED), 0xFF9C => array(0x30EF), 0xFF9D => array(0x30F3),
2748
+					0xFF9E => array(0x3099), 0xFF9F => array(0x309A), 0xFFA1 => array(0x1100),
2749
+					0xFFA2 => array(0x1101), 0xFFA3 => array(0x11AA), 0xFFA4 => array(0x1102),
2750
+					0xFFA5 => array(0x11AC), 0xFFA6 => array(0x11AD), 0xFFA7 => array(0x1103),
2751
+					0xFFA8 => array(0x1104), 0xFFA9 => array(0x1105), 0xFFAA => array(0x11B0),
2752
+					0xFFAB => array(0x11B1), 0xFFAC => array(0x11B2), 0xFFAD => array(0x11B3),
2753
+					0xFFAE => array(0x11B4), 0xFFAF => array(0x11B5), 0xFFB0 => array(0x111A),
2754
+					0xFFB1 => array(0x1106), 0xFFB2 => array(0x1107), 0xFFB3 => array(0x1108),
2755
+					0xFFB4 => array(0x1121), 0xFFB5 => array(0x1109), 0xFFB6 => array(0x110A),
2756
+					0xFFB7 => array(0x110B), 0xFFB8 => array(0x110C), 0xFFB9 => array(0x110D),
2757
+					0xFFBA => array(0x110E), 0xFFBB => array(0x110F), 0xFFBC => array(0x1110),
2758
+					0xFFBD => array(0x1111), 0xFFBE => array(0x1112), 0xFFC2 => array(0x1161),
2759
+					0xFFC3 => array(0x1162), 0xFFC4 => array(0x1163), 0xFFC5 => array(0x1164),
2760
+					0xFFC6 => array(0x1165), 0xFFC7 => array(0x1166), 0xFFCA => array(0x1167),
2761
+					0xFFCB => array(0x1168), 0xFFCC => array(0x1169), 0xFFCD => array(0x116A),
2762
+					0xFFCE => array(0x116B), 0xFFCF => array(0x116C), 0xFFD2 => array(0x116D),
2763
+					0xFFD3 => array(0x116E), 0xFFD4 => array(0x116F), 0xFFD5 => array(0x1170),
2764
+					0xFFD6 => array(0x1171), 0xFFD7 => array(0x1172), 0xFFDA => array(0x1173),
2765
+					0xFFDB => array(0x1174), 0xFFDC => array(0x1175), 0xFFE0 => array(0xA2),
2766
+					0xFFE1 => array(0xA3), 0xFFE2 => array(0xAC), 0xFFE4 => array(0xA6),
2767
+					0xFFE5 => array(0xA5), 0xFFE6 => array(0x20A9), 0xFFE8 => array(0x2502),
2768
+					0xFFE9 => array(0x2190), 0xFFEA => array(0x2191), 0xFFEB => array(0x2192),
2769
+					0xFFEC => array(0x2193), 0xFFED => array(0x25A0), 0xFFEE => array(0x25CB),
2770
+					0x10400 => array(0x10428), 0x10401 => array(0x10429), 0x10402 => array(0x1042A),
2771
+					0x10403 => array(0x1042B), 0x10404 => array(0x1042C), 0x10405 => array(0x1042D),
2772
+					0x10406 => array(0x1042E), 0x10407 => array(0x1042F), 0x10408 => array(0x10430),
2773
+					0x10409 => array(0x10431), 0x1040A => array(0x10432), 0x1040B => array(0x10433),
2774
+					0x1040C => array(0x10434), 0x1040D => array(0x10435), 0x1040E => array(0x10436),
2775
+					0x1040F => array(0x10437), 0x10410 => array(0x10438), 0x10411 => array(0x10439),
2776
+					0x10412 => array(0x1043A), 0x10413 => array(0x1043B), 0x10414 => array(0x1043C),
2777
+					0x10415 => array(0x1043D), 0x10416 => array(0x1043E), 0x10417 => array(0x1043F),
2778
+					0x10418 => array(0x10440), 0x10419 => array(0x10441), 0x1041A => array(0x10442),
2779
+					0x1041B => array(0x10443), 0x1041C => array(0x10444), 0x1041D => array(0x10445),
2780
+					0x1041E => array(0x10446), 0x1041F => array(0x10447), 0x10420 => array(0x10448),
2781
+					0x10421 => array(0x10449), 0x10422 => array(0x1044A), 0x10423 => array(0x1044B),
2782
+					0x10424 => array(0x1044C), 0x10425 => array(0x1044D), 0x10426 => array(0x1044E),
2783
+					0x10427 => array(0x1044F), 0x118A0 => array(0x118C0), 0x118A1 => array(0x118C1),
2784
+					0x118A2 => array(0x118C2), 0x118A3 => array(0x118C3), 0x118A4 => array(0x118C4),
2785
+					0x118A5 => array(0x118C5), 0x118A6 => array(0x118C6), 0x118A7 => array(0x118C7),
2786
+					0x118A8 => array(0x118C8), 0x118A9 => array(0x118C9), 0x118AA => array(0x118CA),
2787
+					0x118AB => array(0x118CB), 0x118AC => array(0x118CC), 0x118AD => array(0x118CD),
2788
+					0x118AE => array(0x118CE), 0x118AF => array(0x118CF), 0x118B0 => array(0x118D0),
2789
+					0x118B1 => array(0x118D1), 0x118B2 => array(0x118D2), 0x118B3 => array(0x118D3),
2790
+					0x118B4 => array(0x118D4), 0x118B5 => array(0x118D5), 0x118B6 => array(0x118D6),
2791
+					0x118B7 => array(0x118D7), 0x118B8 => array(0x118D8), 0x118B9 => array(0x118D9),
2792
+					0x118BA => array(0x118DA), 0x118BB => array(0x118DB), 0x118BC => array(0x118DC),
2793
+					0x118BD => array(0x118DD), 0x118BE => array(0x118DE), 0x118BF => array(0x118DF),
2794
+					0x1D15E => array(0x1D157, 0x1D165), 0x1D15F => array(0x1D158, 0x1D165), 0x1D160 => array(0x1D158, 0x1D165, 0x1D16E),
2795
+					0x1D161 => array(0x1D158, 0x1D165, 0x1D16F), 0x1D162 => array(0x1D158, 0x1D165, 0x1D170), 0x1D163 => array(0x1D158, 0x1D165, 0x1D171),
2796
+					0x1D164 => array(0x1D158, 0x1D165, 0x1D172), 0x1D1BB => array(0x1D1B9, 0x1D165), 0x1D1BC => array(0x1D1BA, 0x1D165),
2797
+					0x1D1BD => array(0x1D1B9, 0x1D165, 0x1D16E), 0x1D1BE => array(0x1D1BA, 0x1D165, 0x1D16E), 0x1D1BF => array(0x1D1B9, 0x1D165, 0x1D16F),
2798
+					0x1D1C0 => array(0x1D1BA, 0x1D165, 0x1D16F), 0x1D400 => array(0x61), 0x1D401 => array(0x62),
2799
+					0x1D402 => array(0x63), 0x1D403 => array(0x64), 0x1D404 => array(0x65),
2800
+					0x1D405 => array(0x66), 0x1D406 => array(0x67), 0x1D407 => array(0x68),
2801
+					0x1D408 => array(0x69), 0x1D409 => array(0x6A), 0x1D40A => array(0x6B),
2802
+					0x1D40B => array(0x6C), 0x1D40C => array(0x6D), 0x1D40D => array(0x6E),
2803
+					0x1D40E => array(0x6F), 0x1D40F => array(0x70), 0x1D410 => array(0x71),
2804
+					0x1D411 => array(0x72), 0x1D412 => array(0x73), 0x1D413 => array(0x74),
2805
+					0x1D414 => array(0x75), 0x1D415 => array(0x76), 0x1D416 => array(0x77),
2806
+					0x1D417 => array(0x78), 0x1D418 => array(0x79), 0x1D419 => array(0x7A),
2807
+					0x1D41A => array(0x61), 0x1D41B => array(0x62), 0x1D41C => array(0x63),
2808
+					0x1D41D => array(0x64), 0x1D41E => array(0x65), 0x1D41F => array(0x66),
2809
+					0x1D420 => array(0x67), 0x1D421 => array(0x68), 0x1D422 => array(0x69),
2810
+					0x1D423 => array(0x6A), 0x1D424 => array(0x6B), 0x1D425 => array(0x6C),
2811
+					0x1D426 => array(0x6D), 0x1D427 => array(0x6E), 0x1D428 => array(0x6F),
2812
+					0x1D429 => array(0x70), 0x1D42A => array(0x71), 0x1D42B => array(0x72),
2813
+					0x1D42C => array(0x73), 0x1D42D => array(0x74), 0x1D42E => array(0x75),
2814
+					0x1D42F => array(0x76), 0x1D430 => array(0x77), 0x1D431 => array(0x78),
2815
+					0x1D432 => array(0x79), 0x1D433 => array(0x7A), 0x1D434 => array(0x61),
2816
+					0x1D435 => array(0x62), 0x1D436 => array(0x63), 0x1D437 => array(0x64),
2817
+					0x1D438 => array(0x65), 0x1D439 => array(0x66), 0x1D43A => array(0x67),
2818
+					0x1D43B => array(0x68), 0x1D43C => array(0x69), 0x1D43D => array(0x6A),
2819
+					0x1D43E => array(0x6B), 0x1D43F => array(0x6C), 0x1D440 => array(0x6D),
2820
+					0x1D441 => array(0x6E), 0x1D442 => array(0x6F), 0x1D443 => array(0x70),
2821
+					0x1D444 => array(0x71), 0x1D445 => array(0x72), 0x1D446 => array(0x73),
2822
+					0x1D447 => array(0x74), 0x1D448 => array(0x75), 0x1D449 => array(0x76),
2823
+					0x1D44A => array(0x77), 0x1D44B => array(0x78), 0x1D44C => array(0x79),
2824
+					0x1D44D => array(0x7A), 0x1D44E => array(0x61), 0x1D44F => array(0x62),
2825
+					0x1D450 => array(0x63), 0x1D451 => array(0x64), 0x1D452 => array(0x65),
2826
+					0x1D453 => array(0x66), 0x1D454 => array(0x67), 0x1D456 => array(0x69),
2827
+					0x1D457 => array(0x6A), 0x1D458 => array(0x6B), 0x1D459 => array(0x6C),
2828
+					0x1D45A => array(0x6D), 0x1D45B => array(0x6E), 0x1D45C => array(0x6F),
2829
+					0x1D45D => array(0x70), 0x1D45E => array(0x71), 0x1D45F => array(0x72),
2830
+					0x1D460 => array(0x73), 0x1D461 => array(0x74), 0x1D462 => array(0x75),
2831
+					0x1D463 => array(0x76), 0x1D464 => array(0x77), 0x1D465 => array(0x78),
2832
+					0x1D466 => array(0x79), 0x1D467 => array(0x7A), 0x1D468 => array(0x61),
2833
+					0x1D469 => array(0x62), 0x1D46A => array(0x63), 0x1D46B => array(0x64),
2834
+					0x1D46C => array(0x65), 0x1D46D => array(0x66), 0x1D46E => array(0x67),
2835
+					0x1D46F => array(0x68), 0x1D470 => array(0x69), 0x1D471 => array(0x6A),
2836
+					0x1D472 => array(0x6B), 0x1D473 => array(0x6C), 0x1D474 => array(0x6D),
2837
+					0x1D475 => array(0x6E), 0x1D476 => array(0x6F), 0x1D477 => array(0x70),
2838
+					0x1D478 => array(0x71), 0x1D479 => array(0x72), 0x1D47A => array(0x73),
2839
+					0x1D47B => array(0x74), 0x1D47C => array(0x75), 0x1D47D => array(0x76),
2840
+					0x1D47E => array(0x77), 0x1D47F => array(0x78), 0x1D480 => array(0x79),
2841
+					0x1D481 => array(0x7A), 0x1D482 => array(0x61), 0x1D483 => array(0x62),
2842
+					0x1D484 => array(0x63), 0x1D485 => array(0x64), 0x1D486 => array(0x65),
2843
+					0x1D487 => array(0x66), 0x1D488 => array(0x67), 0x1D489 => array(0x68),
2844
+					0x1D48A => array(0x69), 0x1D48B => array(0x6A), 0x1D48C => array(0x6B),
2845
+					0x1D48D => array(0x6C), 0x1D48E => array(0x6D), 0x1D48F => array(0x6E),
2846
+					0x1D490 => array(0x6F), 0x1D491 => array(0x70), 0x1D492 => array(0x71),
2847
+					0x1D493 => array(0x72), 0x1D494 => array(0x73), 0x1D495 => array(0x74),
2848
+					0x1D496 => array(0x75), 0x1D497 => array(0x76), 0x1D498 => array(0x77),
2849
+					0x1D499 => array(0x78), 0x1D49A => array(0x79), 0x1D49B => array(0x7A),
2850
+					0x1D49C => array(0x61), 0x1D49E => array(0x63), 0x1D49F => array(0x64),
2851
+					0x1D4A2 => array(0x67), 0x1D4A5 => array(0x6A), 0x1D4A6 => array(0x6B),
2852
+					0x1D4A9 => array(0x6E), 0x1D4AA => array(0x6F), 0x1D4AB => array(0x70),
2853
+					0x1D4AC => array(0x71), 0x1D4AE => array(0x73), 0x1D4AF => array(0x74),
2854
+					0x1D4B0 => array(0x75), 0x1D4B1 => array(0x76), 0x1D4B2 => array(0x77),
2855
+					0x1D4B3 => array(0x78), 0x1D4B4 => array(0x79), 0x1D4B5 => array(0x7A),
2856
+					0x1D4B6 => array(0x61), 0x1D4B7 => array(0x62), 0x1D4B8 => array(0x63),
2857
+					0x1D4B9 => array(0x64), 0x1D4BB => array(0x66), 0x1D4BD => array(0x68),
2858
+					0x1D4BE => array(0x69), 0x1D4BF => array(0x6A), 0x1D4C0 => array(0x6B),
2859
+					0x1D4C1 => array(0x6C), 0x1D4C2 => array(0x6D), 0x1D4C3 => array(0x6E),
2860
+					0x1D4C5 => array(0x70), 0x1D4C6 => array(0x71), 0x1D4C7 => array(0x72),
2861
+					0x1D4C8 => array(0x73), 0x1D4C9 => array(0x74), 0x1D4CA => array(0x75),
2862
+					0x1D4CB => array(0x76), 0x1D4CC => array(0x77), 0x1D4CD => array(0x78),
2863
+					0x1D4CE => array(0x79), 0x1D4CF => array(0x7A), 0x1D4D0 => array(0x61),
2864
+					0x1D4D1 => array(0x62), 0x1D4D2 => array(0x63), 0x1D4D3 => array(0x64),
2865
+					0x1D4D4 => array(0x65), 0x1D4D5 => array(0x66), 0x1D4D6 => array(0x67),
2866
+					0x1D4D7 => array(0x68), 0x1D4D8 => array(0x69), 0x1D4D9 => array(0x6A),
2867
+					0x1D4DA => array(0x6B), 0x1D4DB => array(0x6C), 0x1D4DC => array(0x6D),
2868
+					0x1D4DD => array(0x6E), 0x1D4DE => array(0x6F), 0x1D4DF => array(0x70),
2869
+					0x1D4E0 => array(0x71), 0x1D4E1 => array(0x72), 0x1D4E2 => array(0x73),
2870
+					0x1D4E3 => array(0x74), 0x1D4E4 => array(0x75), 0x1D4E5 => array(0x76),
2871
+					0x1D4E6 => array(0x77), 0x1D4E7 => array(0x78), 0x1D4E8 => array(0x79),
2872
+					0x1D4E9 => array(0x7A), 0x1D4EA => array(0x61), 0x1D4EB => array(0x62),
2873
+					0x1D4EC => array(0x63), 0x1D4ED => array(0x64), 0x1D4EE => array(0x65),
2874
+					0x1D4EF => array(0x66), 0x1D4F0 => array(0x67), 0x1D4F1 => array(0x68),
2875
+					0x1D4F2 => array(0x69), 0x1D4F3 => array(0x6A), 0x1D4F4 => array(0x6B),
2876
+					0x1D4F5 => array(0x6C), 0x1D4F6 => array(0x6D), 0x1D4F7 => array(0x6E),
2877
+					0x1D4F8 => array(0x6F), 0x1D4F9 => array(0x70), 0x1D4FA => array(0x71),
2878
+					0x1D4FB => array(0x72), 0x1D4FC => array(0x73), 0x1D4FD => array(0x74),
2879
+					0x1D4FE => array(0x75), 0x1D4FF => array(0x76), 0x1D500 => array(0x77),
2880
+					0x1D501 => array(0x78), 0x1D502 => array(0x79), 0x1D503 => array(0x7A),
2881
+					0x1D504 => array(0x61), 0x1D505 => array(0x62), 0x1D507 => array(0x64),
2882
+					0x1D508 => array(0x65), 0x1D509 => array(0x66), 0x1D50A => array(0x67),
2883
+					0x1D50D => array(0x6A), 0x1D50E => array(0x6B), 0x1D50F => array(0x6C),
2884
+					0x1D510 => array(0x6D), 0x1D511 => array(0x6E), 0x1D512 => array(0x6F),
2885
+					0x1D513 => array(0x70), 0x1D514 => array(0x71), 0x1D516 => array(0x73),
2886
+					0x1D517 => array(0x74), 0x1D518 => array(0x75), 0x1D519 => array(0x76),
2887
+					0x1D51A => array(0x77), 0x1D51B => array(0x78), 0x1D51C => array(0x79),
2888
+					0x1D51E => array(0x61), 0x1D51F => array(0x62), 0x1D520 => array(0x63),
2889
+					0x1D521 => array(0x64), 0x1D522 => array(0x65), 0x1D523 => array(0x66),
2890
+					0x1D524 => array(0x67), 0x1D525 => array(0x68), 0x1D526 => array(0x69),
2891
+					0x1D527 => array(0x6A), 0x1D528 => array(0x6B), 0x1D529 => array(0x6C),
2892
+					0x1D52A => array(0x6D), 0x1D52B => array(0x6E), 0x1D52C => array(0x6F),
2893
+					0x1D52D => array(0x70), 0x1D52E => array(0x71), 0x1D52F => array(0x72),
2894
+					0x1D530 => array(0x73), 0x1D531 => array(0x74), 0x1D532 => array(0x75),
2895
+					0x1D533 => array(0x76), 0x1D534 => array(0x77), 0x1D535 => array(0x78),
2896
+					0x1D536 => array(0x79), 0x1D537 => array(0x7A), 0x1D538 => array(0x61),
2897
+					0x1D539 => array(0x62), 0x1D53B => array(0x64), 0x1D53C => array(0x65),
2898
+					0x1D53D => array(0x66), 0x1D53E => array(0x67), 0x1D540 => array(0x69),
2899
+					0x1D541 => array(0x6A), 0x1D542 => array(0x6B), 0x1D543 => array(0x6C),
2900
+					0x1D544 => array(0x6D), 0x1D546 => array(0x6F), 0x1D54A => array(0x73),
2901
+					0x1D54B => array(0x74), 0x1D54C => array(0x75), 0x1D54D => array(0x76),
2902
+					0x1D54E => array(0x77), 0x1D54F => array(0x78), 0x1D550 => array(0x79),
2903
+					0x1D552 => array(0x61), 0x1D553 => array(0x62), 0x1D554 => array(0x63),
2904
+					0x1D555 => array(0x64), 0x1D556 => array(0x65), 0x1D557 => array(0x66),
2905
+					0x1D558 => array(0x67), 0x1D559 => array(0x68), 0x1D55A => array(0x69),
2906
+					0x1D55B => array(0x6A), 0x1D55C => array(0x6B), 0x1D55D => array(0x6C),
2907
+					0x1D55E => array(0x6D), 0x1D55F => array(0x6E), 0x1D560 => array(0x6F),
2908
+					0x1D561 => array(0x70), 0x1D562 => array(0x71), 0x1D563 => array(0x72),
2909
+					0x1D564 => array(0x73), 0x1D565 => array(0x74), 0x1D566 => array(0x75),
2910
+					0x1D567 => array(0x76), 0x1D568 => array(0x77), 0x1D569 => array(0x78),
2911
+					0x1D56A => array(0x79), 0x1D56B => array(0x7A), 0x1D56C => array(0x61),
2912
+					0x1D56D => array(0x62), 0x1D56E => array(0x63), 0x1D56F => array(0x64),
2913
+					0x1D570 => array(0x65), 0x1D571 => array(0x66), 0x1D572 => array(0x67),
2914
+					0x1D573 => array(0x68), 0x1D574 => array(0x69), 0x1D575 => array(0x6A),
2915
+					0x1D576 => array(0x6B), 0x1D577 => array(0x6C), 0x1D578 => array(0x6D),
2916
+					0x1D579 => array(0x6E), 0x1D57A => array(0x6F), 0x1D57B => array(0x70),
2917
+					0x1D57C => array(0x71), 0x1D57D => array(0x72), 0x1D57E => array(0x73),
2918
+					0x1D57F => array(0x74), 0x1D580 => array(0x75), 0x1D581 => array(0x76),
2919
+					0x1D582 => array(0x77), 0x1D583 => array(0x78), 0x1D584 => array(0x79),
2920
+					0x1D585 => array(0x7A), 0x1D586 => array(0x61), 0x1D587 => array(0x62),
2921
+					0x1D588 => array(0x63), 0x1D589 => array(0x64), 0x1D58A => array(0x65),
2922
+					0x1D58B => array(0x66), 0x1D58C => array(0x67), 0x1D58D => array(0x68),
2923
+					0x1D58E => array(0x69), 0x1D58F => array(0x6A), 0x1D590 => array(0x6B),
2924
+					0x1D591 => array(0x6C), 0x1D592 => array(0x6D), 0x1D593 => array(0x6E),
2925
+					0x1D594 => array(0x6F), 0x1D595 => array(0x70), 0x1D596 => array(0x71),
2926
+					0x1D597 => array(0x72), 0x1D598 => array(0x73), 0x1D599 => array(0x74),
2927
+					0x1D59A => array(0x75), 0x1D59B => array(0x76), 0x1D59C => array(0x77),
2928
+					0x1D59D => array(0x78), 0x1D59E => array(0x79), 0x1D59F => array(0x7A),
2929
+					0x1D5A0 => array(0x61), 0x1D5A1 => array(0x62), 0x1D5A2 => array(0x63),
2930
+					0x1D5A3 => array(0x64), 0x1D5A4 => array(0x65), 0x1D5A5 => array(0x66),
2931
+					0x1D5A6 => array(0x67), 0x1D5A7 => array(0x68), 0x1D5A8 => array(0x69),
2932
+					0x1D5A9 => array(0x6A), 0x1D5AA => array(0x6B), 0x1D5AB => array(0x6C),
2933
+					0x1D5AC => array(0x6D), 0x1D5AD => array(0x6E), 0x1D5AE => array(0x6F),
2934
+					0x1D5AF => array(0x70), 0x1D5B0 => array(0x71), 0x1D5B1 => array(0x72),
2935
+					0x1D5B2 => array(0x73), 0x1D5B3 => array(0x74), 0x1D5B4 => array(0x75),
2936
+					0x1D5B5 => array(0x76), 0x1D5B6 => array(0x77), 0x1D5B7 => array(0x78),
2937
+					0x1D5B8 => array(0x79), 0x1D5B9 => array(0x7A), 0x1D5BA => array(0x61),
2938
+					0x1D5BB => array(0x62), 0x1D5BC => array(0x63), 0x1D5BD => array(0x64),
2939
+					0x1D5BE => array(0x65), 0x1D5BF => array(0x66), 0x1D5C0 => array(0x67),
2940
+					0x1D5C1 => array(0x68), 0x1D5C2 => array(0x69), 0x1D5C3 => array(0x6A),
2941
+					0x1D5C4 => array(0x6B), 0x1D5C5 => array(0x6C), 0x1D5C6 => array(0x6D),
2942
+					0x1D5C7 => array(0x6E), 0x1D5C8 => array(0x6F), 0x1D5C9 => array(0x70),
2943
+					0x1D5CA => array(0x71), 0x1D5CB => array(0x72), 0x1D5CC => array(0x73),
2944
+					0x1D5CD => array(0x74), 0x1D5CE => array(0x75), 0x1D5CF => array(0x76),
2945
+					0x1D5D0 => array(0x77), 0x1D5D1 => array(0x78), 0x1D5D2 => array(0x79),
2946
+					0x1D5D3 => array(0x7A), 0x1D5D4 => array(0x61), 0x1D5D5 => array(0x62),
2947
+					0x1D5D6 => array(0x63), 0x1D5D7 => array(0x64), 0x1D5D8 => array(0x65),
2948
+					0x1D5D9 => array(0x66), 0x1D5DA => array(0x67), 0x1D5DB => array(0x68),
2949
+					0x1D5DC => array(0x69), 0x1D5DD => array(0x6A), 0x1D5DE => array(0x6B),
2950
+					0x1D5DF => array(0x6C), 0x1D5E0 => array(0x6D), 0x1D5E1 => array(0x6E),
2951
+					0x1D5E2 => array(0x6F), 0x1D5E3 => array(0x70), 0x1D5E4 => array(0x71),
2952
+					0x1D5E5 => array(0x72), 0x1D5E6 => array(0x73), 0x1D5E7 => array(0x74),
2953
+					0x1D5E8 => array(0x75), 0x1D5E9 => array(0x76), 0x1D5EA => array(0x77),
2954
+					0x1D5EB => array(0x78), 0x1D5EC => array(0x79), 0x1D5ED => array(0x7A),
2955
+					0x1D5EE => array(0x61), 0x1D5EF => array(0x62), 0x1D5F0 => array(0x63),
2956
+					0x1D5F1 => array(0x64), 0x1D5F2 => array(0x65), 0x1D5F3 => array(0x66),
2957
+					0x1D5F4 => array(0x67), 0x1D5F5 => array(0x68), 0x1D5F6 => array(0x69),
2958
+					0x1D5F7 => array(0x6A), 0x1D5F8 => array(0x6B), 0x1D5F9 => array(0x6C),
2959
+					0x1D5FA => array(0x6D), 0x1D5FB => array(0x6E), 0x1D5FC => array(0x6F),
2960
+					0x1D5FD => array(0x70), 0x1D5FE => array(0x71), 0x1D5FF => array(0x72),
2961
+					0x1D600 => array(0x73), 0x1D601 => array(0x74), 0x1D602 => array(0x75),
2962
+					0x1D603 => array(0x76), 0x1D604 => array(0x77), 0x1D605 => array(0x78),
2963
+					0x1D606 => array(0x79), 0x1D607 => array(0x7A), 0x1D608 => array(0x61),
2964
+					0x1D609 => array(0x62), 0x1D60A => array(0x63), 0x1D60B => array(0x64),
2965
+					0x1D60C => array(0x65), 0x1D60D => array(0x66), 0x1D60E => array(0x67),
2966
+					0x1D60F => array(0x68), 0x1D610 => array(0x69), 0x1D611 => array(0x6A),
2967
+					0x1D612 => array(0x6B), 0x1D613 => array(0x6C), 0x1D614 => array(0x6D),
2968
+					0x1D615 => array(0x6E), 0x1D616 => array(0x6F), 0x1D617 => array(0x70),
2969
+					0x1D618 => array(0x71), 0x1D619 => array(0x72), 0x1D61A => array(0x73),
2970
+					0x1D61B => array(0x74), 0x1D61C => array(0x75), 0x1D61D => array(0x76),
2971
+					0x1D61E => array(0x77), 0x1D61F => array(0x78), 0x1D620 => array(0x79),
2972
+					0x1D621 => array(0x7A), 0x1D622 => array(0x61), 0x1D623 => array(0x62),
2973
+					0x1D624 => array(0x63), 0x1D625 => array(0x64), 0x1D626 => array(0x65),
2974
+					0x1D627 => array(0x66), 0x1D628 => array(0x67), 0x1D629 => array(0x68),
2975
+					0x1D62A => array(0x69), 0x1D62B => array(0x6A), 0x1D62C => array(0x6B),
2976
+					0x1D62D => array(0x6C), 0x1D62E => array(0x6D), 0x1D62F => array(0x6E),
2977
+					0x1D630 => array(0x6F), 0x1D631 => array(0x70), 0x1D632 => array(0x71),
2978
+					0x1D633 => array(0x72), 0x1D634 => array(0x73), 0x1D635 => array(0x74),
2979
+					0x1D636 => array(0x75), 0x1D637 => array(0x76), 0x1D638 => array(0x77),
2980
+					0x1D639 => array(0x78), 0x1D63A => array(0x79), 0x1D63B => array(0x7A),
2981
+					0x1D63C => array(0x61), 0x1D63D => array(0x62), 0x1D63E => array(0x63),
2982
+					0x1D63F => array(0x64), 0x1D640 => array(0x65), 0x1D641 => array(0x66),
2983
+					0x1D642 => array(0x67), 0x1D643 => array(0x68), 0x1D644 => array(0x69),
2984
+					0x1D645 => array(0x6A), 0x1D646 => array(0x6B), 0x1D647 => array(0x6C),
2985
+					0x1D648 => array(0x6D), 0x1D649 => array(0x6E), 0x1D64A => array(0x6F),
2986
+					0x1D64B => array(0x70), 0x1D64C => array(0x71), 0x1D64D => array(0x72),
2987
+					0x1D64E => array(0x73), 0x1D64F => array(0x74), 0x1D650 => array(0x75),
2988
+					0x1D651 => array(0x76), 0x1D652 => array(0x77), 0x1D653 => array(0x78),
2989
+					0x1D654 => array(0x79), 0x1D655 => array(0x7A), 0x1D656 => array(0x61),
2990
+					0x1D657 => array(0x62), 0x1D658 => array(0x63), 0x1D659 => array(0x64),
2991
+					0x1D65A => array(0x65), 0x1D65B => array(0x66), 0x1D65C => array(0x67),
2992
+					0x1D65D => array(0x68), 0x1D65E => array(0x69), 0x1D65F => array(0x6A),
2993
+					0x1D660 => array(0x6B), 0x1D661 => array(0x6C), 0x1D662 => array(0x6D),
2994
+					0x1D663 => array(0x6E), 0x1D664 => array(0x6F), 0x1D665 => array(0x70),
2995
+					0x1D666 => array(0x71), 0x1D667 => array(0x72), 0x1D668 => array(0x73),
2996
+					0x1D669 => array(0x74), 0x1D66A => array(0x75), 0x1D66B => array(0x76),
2997
+					0x1D66C => array(0x77), 0x1D66D => array(0x78), 0x1D66E => array(0x79),
2998
+					0x1D66F => array(0x7A), 0x1D670 => array(0x61), 0x1D671 => array(0x62),
2999
+					0x1D672 => array(0x63), 0x1D673 => array(0x64), 0x1D674 => array(0x65),
3000
+					0x1D675 => array(0x66), 0x1D676 => array(0x67), 0x1D677 => array(0x68),
3001
+					0x1D678 => array(0x69), 0x1D679 => array(0x6A), 0x1D67A => array(0x6B),
3002
+					0x1D67B => array(0x6C), 0x1D67C => array(0x6D), 0x1D67D => array(0x6E),
3003
+					0x1D67E => array(0x6F), 0x1D67F => array(0x70), 0x1D680 => array(0x71),
3004
+					0x1D681 => array(0x72), 0x1D682 => array(0x73), 0x1D683 => array(0x74),
3005
+					0x1D684 => array(0x75), 0x1D685 => array(0x76), 0x1D686 => array(0x77),
3006
+					0x1D687 => array(0x78), 0x1D688 => array(0x79), 0x1D689 => array(0x7A),
3007
+					0x1D68A => array(0x61), 0x1D68B => array(0x62), 0x1D68C => array(0x63),
3008
+					0x1D68D => array(0x64), 0x1D68E => array(0x65), 0x1D68F => array(0x66),
3009
+					0x1D690 => array(0x67), 0x1D691 => array(0x68), 0x1D692 => array(0x69),
3010
+					0x1D693 => array(0x6A), 0x1D694 => array(0x6B), 0x1D695 => array(0x6C),
3011
+					0x1D696 => array(0x6D), 0x1D697 => array(0x6E), 0x1D698 => array(0x6F),
3012
+					0x1D699 => array(0x70), 0x1D69A => array(0x71), 0x1D69B => array(0x72),
3013
+					0x1D69C => array(0x73), 0x1D69D => array(0x74), 0x1D69E => array(0x75),
3014
+					0x1D69F => array(0x76), 0x1D6A0 => array(0x77), 0x1D6A1 => array(0x78),
3015
+					0x1D6A2 => array(0x79), 0x1D6A3 => array(0x7A), 0x1D6A4 => array(0x131),
3016
+					0x1D6A5 => array(0x237), 0x1D6A8 => array(0x3B1), 0x1D6A9 => array(0x3B2),
3017
+					0x1D6AA => array(0x3B3), 0x1D6AB => array(0x3B4), 0x1D6AC => array(0x3B5),
3018
+					0x1D6AD => array(0x3B6), 0x1D6AE => array(0x3B7), 0x1D6AF => array(0x3B8),
3019
+					0x1D6B0 => array(0x3B9), 0x1D6B1 => array(0x3BA), 0x1D6B2 => array(0x3BB),
3020
+					0x1D6B3 => array(0x3BC), 0x1D6B4 => array(0x3BD), 0x1D6B5 => array(0x3BE),
3021
+					0x1D6B6 => array(0x3BF), 0x1D6B7 => array(0x3C0), 0x1D6B8 => array(0x3C1),
3022
+					0x1D6B9 => array(0x3B8), 0x1D6BA => array(0x3C3), 0x1D6BB => array(0x3C4),
3023
+					0x1D6BC => array(0x3C5), 0x1D6BD => array(0x3C6), 0x1D6BE => array(0x3C7),
3024
+					0x1D6BF => array(0x3C8), 0x1D6C0 => array(0x3C9), 0x1D6C1 => array(0x2207),
3025
+					0x1D6C2 => array(0x3B1), 0x1D6C3 => array(0x3B2), 0x1D6C4 => array(0x3B3),
3026
+					0x1D6C5 => array(0x3B4), 0x1D6C6 => array(0x3B5), 0x1D6C7 => array(0x3B6),
3027
+					0x1D6C8 => array(0x3B7), 0x1D6C9 => array(0x3B8), 0x1D6CA => array(0x3B9),
3028
+					0x1D6CB => array(0x3BA), 0x1D6CC => array(0x3BB), 0x1D6CD => array(0x3BC),
3029
+					0x1D6CE => array(0x3BD), 0x1D6CF => array(0x3BE), 0x1D6D0 => array(0x3BF),
3030
+					0x1D6D1 => array(0x3C0), 0x1D6D2 => array(0x3C1), 0x1D6D3 => array(0x3C3),
3031
+					0x1D6D4 => array(0x3C3), 0x1D6D5 => array(0x3C4), 0x1D6D6 => array(0x3C5),
3032
+					0x1D6D7 => array(0x3C6), 0x1D6D8 => array(0x3C7), 0x1D6D9 => array(0x3C8),
3033
+					0x1D6DA => array(0x3C9), 0x1D6DB => array(0x2202), 0x1D6DC => array(0x3B5),
3034
+					0x1D6DD => array(0x3B8), 0x1D6DE => array(0x3BA), 0x1D6DF => array(0x3C6),
3035
+					0x1D6E0 => array(0x3C1), 0x1D6E1 => array(0x3C0), 0x1D6E2 => array(0x3B1),
3036
+					0x1D6E3 => array(0x3B2), 0x1D6E4 => array(0x3B3), 0x1D6E5 => array(0x3B4),
3037
+					0x1D6E6 => array(0x3B5), 0x1D6E7 => array(0x3B6), 0x1D6E8 => array(0x3B7),
3038
+					0x1D6E9 => array(0x3B8), 0x1D6EA => array(0x3B9), 0x1D6EB => array(0x3BA),
3039
+					0x1D6EC => array(0x3BB), 0x1D6ED => array(0x3BC), 0x1D6EE => array(0x3BD),
3040
+					0x1D6EF => array(0x3BE), 0x1D6F0 => array(0x3BF), 0x1D6F1 => array(0x3C0),
3041
+					0x1D6F2 => array(0x3C1), 0x1D6F3 => array(0x3B8), 0x1D6F4 => array(0x3C3),
3042
+					0x1D6F5 => array(0x3C4), 0x1D6F6 => array(0x3C5), 0x1D6F7 => array(0x3C6),
3043
+					0x1D6F8 => array(0x3C7), 0x1D6F9 => array(0x3C8), 0x1D6FA => array(0x3C9),
3044
+					0x1D6FB => array(0x2207), 0x1D6FC => array(0x3B1), 0x1D6FD => array(0x3B2),
3045
+					0x1D6FE => array(0x3B3), 0x1D6FF => array(0x3B4), 0x1D700 => array(0x3B5),
3046
+					0x1D701 => array(0x3B6), 0x1D702 => array(0x3B7), 0x1D703 => array(0x3B8),
3047
+					0x1D704 => array(0x3B9), 0x1D705 => array(0x3BA), 0x1D706 => array(0x3BB),
3048
+					0x1D707 => array(0x3BC), 0x1D708 => array(0x3BD), 0x1D709 => array(0x3BE),
3049
+					0x1D70A => array(0x3BF), 0x1D70B => array(0x3C0), 0x1D70C => array(0x3C1),
3050
+					0x1D70D => array(0x3C3), 0x1D70E => array(0x3C3), 0x1D70F => array(0x3C4),
3051
+					0x1D710 => array(0x3C5), 0x1D711 => array(0x3C6), 0x1D712 => array(0x3C7),
3052
+					0x1D713 => array(0x3C8), 0x1D714 => array(0x3C9), 0x1D715 => array(0x2202),
3053
+					0x1D716 => array(0x3B5), 0x1D717 => array(0x3B8), 0x1D718 => array(0x3BA),
3054
+					0x1D719 => array(0x3C6), 0x1D71A => array(0x3C1), 0x1D71B => array(0x3C0),
3055
+					0x1D71C => array(0x3B1), 0x1D71D => array(0x3B2), 0x1D71E => array(0x3B3),
3056
+					0x1D71F => array(0x3B4), 0x1D720 => array(0x3B5), 0x1D721 => array(0x3B6),
3057
+					0x1D722 => array(0x3B7), 0x1D723 => array(0x3B8), 0x1D724 => array(0x3B9),
3058
+					0x1D725 => array(0x3BA), 0x1D726 => array(0x3BB), 0x1D727 => array(0x3BC),
3059
+					0x1D728 => array(0x3BD), 0x1D729 => array(0x3BE), 0x1D72A => array(0x3BF),
3060
+					0x1D72B => array(0x3C0), 0x1D72C => array(0x3C1), 0x1D72D => array(0x3B8),
3061
+					0x1D72E => array(0x3C3), 0x1D72F => array(0x3C4), 0x1D730 => array(0x3C5),
3062
+					0x1D731 => array(0x3C6), 0x1D732 => array(0x3C7), 0x1D733 => array(0x3C8),
3063
+					0x1D734 => array(0x3C9), 0x1D735 => array(0x2207), 0x1D736 => array(0x3B1),
3064
+					0x1D737 => array(0x3B2), 0x1D738 => array(0x3B3), 0x1D739 => array(0x3B4),
3065
+					0x1D73A => array(0x3B5), 0x1D73B => array(0x3B6), 0x1D73C => array(0x3B7),
3066
+					0x1D73D => array(0x3B8), 0x1D73E => array(0x3B9), 0x1D73F => array(0x3BA),
3067
+					0x1D740 => array(0x3BB), 0x1D741 => array(0x3BC), 0x1D742 => array(0x3BD),
3068
+					0x1D743 => array(0x3BE), 0x1D744 => array(0x3BF), 0x1D745 => array(0x3C0),
3069
+					0x1D746 => array(0x3C1), 0x1D747 => array(0x3C3), 0x1D748 => array(0x3C3),
3070
+					0x1D749 => array(0x3C4), 0x1D74A => array(0x3C5), 0x1D74B => array(0x3C6),
3071
+					0x1D74C => array(0x3C7), 0x1D74D => array(0x3C8), 0x1D74E => array(0x3C9),
3072
+					0x1D74F => array(0x2202), 0x1D750 => array(0x3B5), 0x1D751 => array(0x3B8),
3073
+					0x1D752 => array(0x3BA), 0x1D753 => array(0x3C6), 0x1D754 => array(0x3C1),
3074
+					0x1D755 => array(0x3C0), 0x1D756 => array(0x3B1), 0x1D757 => array(0x3B2),
3075
+					0x1D758 => array(0x3B3), 0x1D759 => array(0x3B4), 0x1D75A => array(0x3B5),
3076
+					0x1D75B => array(0x3B6), 0x1D75C => array(0x3B7), 0x1D75D => array(0x3B8),
3077
+					0x1D75E => array(0x3B9), 0x1D75F => array(0x3BA), 0x1D760 => array(0x3BB),
3078
+					0x1D761 => array(0x3BC), 0x1D762 => array(0x3BD), 0x1D763 => array(0x3BE),
3079
+					0x1D764 => array(0x3BF), 0x1D765 => array(0x3C0), 0x1D766 => array(0x3C1),
3080
+					0x1D767 => array(0x3B8), 0x1D768 => array(0x3C3), 0x1D769 => array(0x3C4),
3081
+					0x1D76A => array(0x3C5), 0x1D76B => array(0x3C6), 0x1D76C => array(0x3C7),
3082
+					0x1D76D => array(0x3C8), 0x1D76E => array(0x3C9), 0x1D76F => array(0x2207),
3083
+					0x1D770 => array(0x3B1), 0x1D771 => array(0x3B2), 0x1D772 => array(0x3B3),
3084
+					0x1D773 => array(0x3B4), 0x1D774 => array(0x3B5), 0x1D775 => array(0x3B6),
3085
+					0x1D776 => array(0x3B7), 0x1D777 => array(0x3B8), 0x1D778 => array(0x3B9),
3086
+					0x1D779 => array(0x3BA), 0x1D77A => array(0x3BB), 0x1D77B => array(0x3BC),
3087
+					0x1D77C => array(0x3BD), 0x1D77D => array(0x3BE), 0x1D77E => array(0x3BF),
3088
+					0x1D77F => array(0x3C0), 0x1D780 => array(0x3C1), 0x1D781 => array(0x3C3),
3089
+					0x1D782 => array(0x3C3), 0x1D783 => array(0x3C4), 0x1D784 => array(0x3C5),
3090
+					0x1D785 => array(0x3C6), 0x1D786 => array(0x3C7), 0x1D787 => array(0x3C8),
3091
+					0x1D788 => array(0x3C9), 0x1D789 => array(0x2202), 0x1D78A => array(0x3B5),
3092
+					0x1D78B => array(0x3B8), 0x1D78C => array(0x3BA), 0x1D78D => array(0x3C6),
3093
+					0x1D78E => array(0x3C1), 0x1D78F => array(0x3C0), 0x1D790 => array(0x3B1),
3094
+					0x1D791 => array(0x3B2), 0x1D792 => array(0x3B3), 0x1D793 => array(0x3B4),
3095
+					0x1D794 => array(0x3B5), 0x1D795 => array(0x3B6), 0x1D796 => array(0x3B7),
3096
+					0x1D797 => array(0x3B8), 0x1D798 => array(0x3B9), 0x1D799 => array(0x3BA),
3097
+					0x1D79A => array(0x3BB), 0x1D79B => array(0x3BC), 0x1D79C => array(0x3BD),
3098
+					0x1D79D => array(0x3BE), 0x1D79E => array(0x3BF), 0x1D79F => array(0x3C0),
3099
+					0x1D7A0 => array(0x3C1), 0x1D7A1 => array(0x3B8), 0x1D7A2 => array(0x3C3),
3100
+					0x1D7A3 => array(0x3C4), 0x1D7A4 => array(0x3C5), 0x1D7A5 => array(0x3C6),
3101
+					0x1D7A6 => array(0x3C7), 0x1D7A7 => array(0x3C8), 0x1D7A8 => array(0x3C9),
3102
+					0x1D7A9 => array(0x2207), 0x1D7AA => array(0x3B1), 0x1D7AB => array(0x3B2),
3103
+					0x1D7AC => array(0x3B3), 0x1D7AD => array(0x3B4), 0x1D7AE => array(0x3B5),
3104
+					0x1D7AF => array(0x3B6), 0x1D7B0 => array(0x3B7), 0x1D7B1 => array(0x3B8),
3105
+					0x1D7B2 => array(0x3B9), 0x1D7B3 => array(0x3BA), 0x1D7B4 => array(0x3BB),
3106
+					0x1D7B5 => array(0x3BC), 0x1D7B6 => array(0x3BD), 0x1D7B7 => array(0x3BE),
3107
+					0x1D7B8 => array(0x3BF), 0x1D7B9 => array(0x3C0), 0x1D7BA => array(0x3C1),
3108
+					0x1D7BB => array(0x3C3), 0x1D7BC => array(0x3C3), 0x1D7BD => array(0x3C4),
3109
+					0x1D7BE => array(0x3C5), 0x1D7BF => array(0x3C6), 0x1D7C0 => array(0x3C7),
3110
+					0x1D7C1 => array(0x3C8), 0x1D7C2 => array(0x3C9), 0x1D7C3 => array(0x2202),
3111
+					0x1D7C4 => array(0x3B5), 0x1D7C5 => array(0x3B8), 0x1D7C6 => array(0x3BA),
3112
+					0x1D7C7 => array(0x3C6), 0x1D7C8 => array(0x3C1), 0x1D7C9 => array(0x3C0),
3113
+					0x1D7CA => array(0x3DD), 0x1D7CB => array(0x3DD), 0x1D7CE => array(0x30),
3114
+					0x1D7CF => array(0x31), 0x1D7D0 => array(0x32), 0x1D7D1 => array(0x33),
3115
+					0x1D7D2 => array(0x34), 0x1D7D3 => array(0x35), 0x1D7D4 => array(0x36),
3116
+					0x1D7D5 => array(0x37), 0x1D7D6 => array(0x38), 0x1D7D7 => array(0x39),
3117
+					0x1D7D8 => array(0x30), 0x1D7D9 => array(0x31), 0x1D7DA => array(0x32),
3118
+					0x1D7DB => array(0x33), 0x1D7DC => array(0x34), 0x1D7DD => array(0x35),
3119
+					0x1D7DE => array(0x36), 0x1D7DF => array(0x37), 0x1D7E0 => array(0x38),
3120
+					0x1D7E1 => array(0x39), 0x1D7E2 => array(0x30), 0x1D7E3 => array(0x31),
3121
+					0x1D7E4 => array(0x32), 0x1D7E5 => array(0x33), 0x1D7E6 => array(0x34),
3122
+					0x1D7E7 => array(0x35), 0x1D7E8 => array(0x36), 0x1D7E9 => array(0x37),
3123
+					0x1D7EA => array(0x38), 0x1D7EB => array(0x39), 0x1D7EC => array(0x30),
3124
+					0x1D7ED => array(0x31), 0x1D7EE => array(0x32), 0x1D7EF => array(0x33),
3125
+					0x1D7F0 => array(0x34), 0x1D7F1 => array(0x35), 0x1D7F2 => array(0x36),
3126
+					0x1D7F3 => array(0x37), 0x1D7F4 => array(0x38), 0x1D7F5 => array(0x39),
3127
+					0x1D7F6 => array(0x30), 0x1D7F7 => array(0x31), 0x1D7F8 => array(0x32),
3128
+					0x1D7F9 => array(0x33), 0x1D7FA => array(0x34), 0x1D7FB => array(0x35),
3129
+					0x1D7FC => array(0x36), 0x1D7FD => array(0x37), 0x1D7FE => array(0x38),
3130
+					0x1D7FF => array(0x39), 0x1EE00 => array(0x627), 0x1EE01 => array(0x628),
3131
+					0x1EE02 => array(0x62C), 0x1EE03 => array(0x62F), 0x1EE05 => array(0x648),
3132
+					0x1EE06 => array(0x632), 0x1EE07 => array(0x62D), 0x1EE08 => array(0x637),
3133
+					0x1EE09 => array(0x64A), 0x1EE0A => array(0x643), 0x1EE0B => array(0x644),
3134
+					0x1EE0C => array(0x645), 0x1EE0D => array(0x646), 0x1EE0E => array(0x633),
3135
+					0x1EE0F => array(0x639), 0x1EE10 => array(0x641), 0x1EE11 => array(0x635),
3136
+					0x1EE12 => array(0x642), 0x1EE13 => array(0x631), 0x1EE14 => array(0x634),
3137
+					0x1EE15 => array(0x62A), 0x1EE16 => array(0x62B), 0x1EE17 => array(0x62E),
3138
+					0x1EE18 => array(0x630), 0x1EE19 => array(0x636), 0x1EE1A => array(0x638),
3139
+					0x1EE1B => array(0x63A), 0x1EE1C => array(0x66E), 0x1EE1D => array(0x6BA),
3140
+					0x1EE1E => array(0x6A1), 0x1EE1F => array(0x66F), 0x1EE21 => array(0x628),
3141
+					0x1EE22 => array(0x62C), 0x1EE24 => array(0x647), 0x1EE27 => array(0x62D),
3142
+					0x1EE29 => array(0x64A), 0x1EE2A => array(0x643), 0x1EE2B => array(0x644),
3143
+					0x1EE2C => array(0x645), 0x1EE2D => array(0x646), 0x1EE2E => array(0x633),
3144
+					0x1EE2F => array(0x639), 0x1EE30 => array(0x641), 0x1EE31 => array(0x635),
3145
+					0x1EE32 => array(0x642), 0x1EE34 => array(0x634), 0x1EE35 => array(0x62A),
3146
+					0x1EE36 => array(0x62B), 0x1EE37 => array(0x62E), 0x1EE39 => array(0x636),
3147
+					0x1EE3B => array(0x63A), 0x1EE42 => array(0x62C), 0x1EE47 => array(0x62D),
3148
+					0x1EE49 => array(0x64A), 0x1EE4B => array(0x644), 0x1EE4D => array(0x646),
3149
+					0x1EE4E => array(0x633), 0x1EE4F => array(0x639), 0x1EE51 => array(0x635),
3150
+					0x1EE52 => array(0x642), 0x1EE54 => array(0x634), 0x1EE57 => array(0x62E),
3151
+					0x1EE59 => array(0x636), 0x1EE5B => array(0x63A), 0x1EE5D => array(0x6BA),
3152
+					0x1EE5F => array(0x66F), 0x1EE61 => array(0x628), 0x1EE62 => array(0x62C),
3153
+					0x1EE64 => array(0x647), 0x1EE67 => array(0x62D), 0x1EE68 => array(0x637),
3154
+					0x1EE69 => array(0x64A), 0x1EE6A => array(0x643), 0x1EE6C => array(0x645),
3155
+					0x1EE6D => array(0x646), 0x1EE6E => array(0x633), 0x1EE6F => array(0x639),
3156
+					0x1EE70 => array(0x641), 0x1EE71 => array(0x635), 0x1EE72 => array(0x642),
3157
+					0x1EE74 => array(0x634), 0x1EE75 => array(0x62A), 0x1EE76 => array(0x62B),
3158
+					0x1EE77 => array(0x62E), 0x1EE79 => array(0x636), 0x1EE7A => array(0x638),
3159
+					0x1EE7B => array(0x63A), 0x1EE7C => array(0x66E), 0x1EE7E => array(0x6A1),
3160
+					0x1EE80 => array(0x627), 0x1EE81 => array(0x628), 0x1EE82 => array(0x62C),
3161
+					0x1EE83 => array(0x62F), 0x1EE84 => array(0x647), 0x1EE85 => array(0x648),
3162
+					0x1EE86 => array(0x632), 0x1EE87 => array(0x62D), 0x1EE88 => array(0x637),
3163
+					0x1EE89 => array(0x64A), 0x1EE8B => array(0x644), 0x1EE8C => array(0x645),
3164
+					0x1EE8D => array(0x646), 0x1EE8E => array(0x633), 0x1EE8F => array(0x639),
3165
+					0x1EE90 => array(0x641), 0x1EE91 => array(0x635), 0x1EE92 => array(0x642),
3166
+					0x1EE93 => array(0x631), 0x1EE94 => array(0x634), 0x1EE95 => array(0x62A),
3167
+					0x1EE96 => array(0x62B), 0x1EE97 => array(0x62E), 0x1EE98 => array(0x630),
3168
+					0x1EE99 => array(0x636), 0x1EE9A => array(0x638), 0x1EE9B => array(0x63A),
3169
+					0x1EEA1 => array(0x628), 0x1EEA2 => array(0x62C), 0x1EEA3 => array(0x62F),
3170
+					0x1EEA5 => array(0x648), 0x1EEA6 => array(0x632), 0x1EEA7 => array(0x62D),
3171
+					0x1EEA8 => array(0x637), 0x1EEA9 => array(0x64A), 0x1EEAB => array(0x644),
3172
+					0x1EEAC => array(0x645), 0x1EEAD => array(0x646), 0x1EEAE => array(0x633),
3173
+					0x1EEAF => array(0x639), 0x1EEB0 => array(0x641), 0x1EEB1 => array(0x635),
3174
+					0x1EEB2 => array(0x642), 0x1EEB3 => array(0x631), 0x1EEB4 => array(0x634),
3175
+					0x1EEB5 => array(0x62A), 0x1EEB6 => array(0x62B), 0x1EEB7 => array(0x62E),
3176
+					0x1EEB8 => array(0x630), 0x1EEB9 => array(0x636), 0x1EEBA => array(0x638),
3177
+					0x1EEBB => array(0x63A), 0x1F12A => array(0x3014, 0x73, 0x3015), 0x1F12B => array(0x63),
3178
+					0x1F12C => array(0x72), 0x1F12D => array(0x63, 0x64), 0x1F12E => array(0x77, 0x7A),
3179
+					0x1F130 => array(0x61), 0x1F131 => array(0x62), 0x1F132 => array(0x63),
3180
+					0x1F133 => array(0x64), 0x1F134 => array(0x65), 0x1F135 => array(0x66),
3181
+					0x1F136 => array(0x67), 0x1F137 => array(0x68), 0x1F138 => array(0x69),
3182
+					0x1F139 => array(0x6A), 0x1F13A => array(0x6B), 0x1F13B => array(0x6C),
3183
+					0x1F13C => array(0x6D), 0x1F13D => array(0x6E), 0x1F13E => array(0x6F),
3184
+					0x1F13F => array(0x70), 0x1F140 => array(0x71), 0x1F141 => array(0x72),
3185
+					0x1F142 => array(0x73), 0x1F143 => array(0x74), 0x1F144 => array(0x75),
3186
+					0x1F145 => array(0x76), 0x1F146 => array(0x77), 0x1F147 => array(0x78),
3187
+					0x1F148 => array(0x79), 0x1F149 => array(0x7A), 0x1F14A => array(0x68, 0x76),
3188
+					0x1F14B => array(0x6D, 0x76), 0x1F14C => array(0x73, 0x64), 0x1F14D => array(0x73, 0x73),
3189
+					0x1F14E => array(0x70, 0x70, 0x76), 0x1F14F => array(0x77, 0x63), 0x1F16A => array(0x6D, 0x63),
3190
+					0x1F16B => array(0x6D, 0x64), 0x1F190 => array(0x64, 0x6A), 0x1F200 => array(0x307B, 0x304B),
3191
+					0x1F201 => array(0x30B3, 0x30B3), 0x1F202 => array(0x30B5), 0x1F210 => array(0x624B),
3192
+					0x1F211 => array(0x5B57), 0x1F212 => array(0x53CC), 0x1F213 => array(0x30C7),
3193
+					0x1F214 => array(0x4E8C), 0x1F215 => array(0x591A), 0x1F216 => array(0x89E3),
3194
+					0x1F217 => array(0x5929), 0x1F218 => array(0x4EA4), 0x1F219 => array(0x6620),
3195
+					0x1F21A => array(0x7121), 0x1F21B => array(0x6599), 0x1F21C => array(0x524D),
3196
+					0x1F21D => array(0x5F8C), 0x1F21E => array(0x518D), 0x1F21F => array(0x65B0),
3197
+					0x1F220 => array(0x521D), 0x1F221 => array(0x7D42), 0x1F222 => array(0x751F),
3198
+					0x1F223 => array(0x8CA9), 0x1F224 => array(0x58F0), 0x1F225 => array(0x5439),
3199
+					0x1F226 => array(0x6F14), 0x1F227 => array(0x6295), 0x1F228 => array(0x6355),
3200
+					0x1F229 => array(0x4E00), 0x1F22A => array(0x4E09), 0x1F22B => array(0x904A),
3201
+					0x1F22C => array(0x5DE6), 0x1F22D => array(0x4E2D), 0x1F22E => array(0x53F3),
3202
+					0x1F22F => array(0x6307), 0x1F230 => array(0x8D70), 0x1F231 => array(0x6253),
3203
+					0x1F232 => array(0x7981), 0x1F233 => array(0x7A7A), 0x1F234 => array(0x5408),
3204
+					0x1F235 => array(0x6E80), 0x1F236 => array(0x6709), 0x1F237 => array(0x6708),
3205
+					0x1F238 => array(0x7533), 0x1F239 => array(0x5272), 0x1F23A => array(0x55B6),
3206
+					0x1F240 => array(0x3014, 0x672C, 0x3015), 0x1F241 => array(0x3014, 0x4E09, 0x3015), 0x1F242 => array(0x3014, 0x4E8C, 0x3015),
3207
+					0x1F243 => array(0x3014, 0x5B89, 0x3015), 0x1F244 => array(0x3014, 0x70B9, 0x3015), 0x1F245 => array(0x3014, 0x6253, 0x3015),
3208
+					0x1F246 => array(0x3014, 0x76D7, 0x3015), 0x1F247 => array(0x3014, 0x52DD, 0x3015), 0x1F248 => array(0x3014, 0x6557, 0x3015),
3209
+					0x1F250 => array(0x5F97), 0x1F251 => array(0x53EF), 0x2F800 => array(0x4E3D),
3210
+					0x2F801 => array(0x4E38), 0x2F802 => array(0x4E41), 0x2F803 => array(0x20122),
3211
+					0x2F804 => array(0x4F60), 0x2F805 => array(0x4FAE), 0x2F806 => array(0x4FBB),
3212
+					0x2F807 => array(0x5002), 0x2F808 => array(0x507A), 0x2F809 => array(0x5099),
3213
+					0x2F80A => array(0x50E7), 0x2F80B => array(0x50CF), 0x2F80C => array(0x349E),
3214
+					0x2F80D => array(0x2063A), 0x2F80E => array(0x514D), 0x2F80F => array(0x5154),
3215
+					0x2F810 => array(0x5164), 0x2F811 => array(0x5177), 0x2F812 => array(0x2051C),
3216
+					0x2F813 => array(0x34B9), 0x2F814 => array(0x5167), 0x2F815 => array(0x518D),
3217
+					0x2F816 => array(0x2054B), 0x2F817 => array(0x5197), 0x2F818 => array(0x51A4),
3218
+					0x2F819 => array(0x4ECC), 0x2F81A => array(0x51AC), 0x2F81B => array(0x51B5),
3219
+					0x2F81C => array(0x291DF), 0x2F81D => array(0x51F5), 0x2F81E => array(0x5203),
3220
+					0x2F81F => array(0x34DF), 0x2F820 => array(0x523B), 0x2F821 => array(0x5246),
3221
+					0x2F822 => array(0x5272), 0x2F823 => array(0x5277), 0x2F824 => array(0x3515),
3222
+					0x2F825 => array(0x52C7), 0x2F826 => array(0x52C9), 0x2F827 => array(0x52E4),
3223
+					0x2F828 => array(0x52FA), 0x2F829 => array(0x5305), 0x2F82A => array(0x5306),
3224
+					0x2F82B => array(0x5317), 0x2F82C => array(0x5349), 0x2F82D => array(0x5351),
3225
+					0x2F82E => array(0x535A), 0x2F82F => array(0x5373), 0x2F830 => array(0x537D),
3226
+					0x2F831 => array(0x537F), 0x2F832 => array(0x537F), 0x2F833 => array(0x537F),
3227
+					0x2F834 => array(0x20A2C), 0x2F835 => array(0x7070), 0x2F836 => array(0x53CA),
3228
+					0x2F837 => array(0x53DF), 0x2F838 => array(0x20B63), 0x2F839 => array(0x53EB),
3229
+					0x2F83A => array(0x53F1), 0x2F83B => array(0x5406), 0x2F83C => array(0x549E),
3230
+					0x2F83D => array(0x5438), 0x2F83E => array(0x5448), 0x2F83F => array(0x5468),
3231
+					0x2F840 => array(0x54A2), 0x2F841 => array(0x54F6), 0x2F842 => array(0x5510),
3232
+					0x2F843 => array(0x5553), 0x2F844 => array(0x5563), 0x2F845 => array(0x5584),
3233
+					0x2F846 => array(0x5584), 0x2F847 => array(0x5599), 0x2F848 => array(0x55AB),
3234
+					0x2F849 => array(0x55B3), 0x2F84A => array(0x55C2), 0x2F84B => array(0x5716),
3235
+					0x2F84C => array(0x5606), 0x2F84D => array(0x5717), 0x2F84E => array(0x5651),
3236
+					0x2F84F => array(0x5674), 0x2F850 => array(0x5207), 0x2F851 => array(0x58EE),
3237
+					0x2F852 => array(0x57CE), 0x2F853 => array(0x57F4), 0x2F854 => array(0x580D),
3238
+					0x2F855 => array(0x578B), 0x2F856 => array(0x5832), 0x2F857 => array(0x5831),
3239
+					0x2F858 => array(0x58AC), 0x2F859 => array(0x214E4), 0x2F85A => array(0x58F2),
3240
+					0x2F85B => array(0x58F7), 0x2F85C => array(0x5906), 0x2F85D => array(0x591A),
3241
+					0x2F85E => array(0x5922), 0x2F85F => array(0x5962), 0x2F860 => array(0x216A8),
3242
+					0x2F861 => array(0x216EA), 0x2F862 => array(0x59EC), 0x2F863 => array(0x5A1B),
3243
+					0x2F864 => array(0x5A27), 0x2F865 => array(0x59D8), 0x2F866 => array(0x5A66),
3244
+					0x2F867 => array(0x36EE), 0x2F869 => array(0x5B08), 0x2F86A => array(0x5B3E),
3245
+					0x2F86B => array(0x5B3E), 0x2F86C => array(0x219C8), 0x2F86D => array(0x5BC3),
3246
+					0x2F86E => array(0x5BD8), 0x2F86F => array(0x5BE7), 0x2F870 => array(0x5BF3),
3247
+					0x2F871 => array(0x21B18), 0x2F872 => array(0x5BFF), 0x2F873 => array(0x5C06),
3248
+					0x2F875 => array(0x5C22), 0x2F876 => array(0x3781), 0x2F877 => array(0x5C60),
3249
+					0x2F878 => array(0x5C6E), 0x2F879 => array(0x5CC0), 0x2F87A => array(0x5C8D),
3250
+					0x2F87B => array(0x21DE4), 0x2F87C => array(0x5D43), 0x2F87D => array(0x21DE6),
3251
+					0x2F87E => array(0x5D6E), 0x2F87F => array(0x5D6B), 0x2F880 => array(0x5D7C),
3252
+					0x2F881 => array(0x5DE1), 0x2F882 => array(0x5DE2), 0x2F883 => array(0x382F),
3253
+					0x2F884 => array(0x5DFD), 0x2F885 => array(0x5E28), 0x2F886 => array(0x5E3D),
3254
+					0x2F887 => array(0x5E69), 0x2F888 => array(0x3862), 0x2F889 => array(0x22183),
3255
+					0x2F88A => array(0x387C), 0x2F88B => array(0x5EB0), 0x2F88C => array(0x5EB3),
3256
+					0x2F88D => array(0x5EB6), 0x2F88E => array(0x5ECA), 0x2F88F => array(0x2A392),
3257
+					0x2F890 => array(0x5EFE), 0x2F891 => array(0x22331), 0x2F892 => array(0x22331),
3258
+					0x2F893 => array(0x8201), 0x2F894 => array(0x5F22), 0x2F895 => array(0x5F22),
3259
+					0x2F896 => array(0x38C7), 0x2F897 => array(0x232B8), 0x2F898 => array(0x261DA),
3260
+					0x2F899 => array(0x5F62), 0x2F89A => array(0x5F6B), 0x2F89B => array(0x38E3),
3261
+					0x2F89C => array(0x5F9A), 0x2F89D => array(0x5FCD), 0x2F89E => array(0x5FD7),
3262
+					0x2F89F => array(0x5FF9), 0x2F8A0 => array(0x6081), 0x2F8A1 => array(0x393A),
3263
+					0x2F8A2 => array(0x391C), 0x2F8A3 => array(0x6094), 0x2F8A4 => array(0x226D4),
3264
+					0x2F8A5 => array(0x60C7), 0x2F8A6 => array(0x6148), 0x2F8A7 => array(0x614C),
3265
+					0x2F8A8 => array(0x614E), 0x2F8A9 => array(0x614C), 0x2F8AA => array(0x617A),
3266
+					0x2F8AB => array(0x618E), 0x2F8AC => array(0x61B2), 0x2F8AD => array(0x61A4),
3267
+					0x2F8AE => array(0x61AF), 0x2F8AF => array(0x61DE), 0x2F8B0 => array(0x61F2),
3268
+					0x2F8B1 => array(0x61F6), 0x2F8B2 => array(0x6210), 0x2F8B3 => array(0x621B),
3269
+					0x2F8B4 => array(0x625D), 0x2F8B5 => array(0x62B1), 0x2F8B6 => array(0x62D4),
3270
+					0x2F8B7 => array(0x6350), 0x2F8B8 => array(0x22B0C), 0x2F8B9 => array(0x633D),
3271
+					0x2F8BA => array(0x62FC), 0x2F8BB => array(0x6368), 0x2F8BC => array(0x6383),
3272
+					0x2F8BD => array(0x63E4), 0x2F8BE => array(0x22BF1), 0x2F8BF => array(0x6422),
3273
+					0x2F8C0 => array(0x63C5), 0x2F8C1 => array(0x63A9), 0x2F8C2 => array(0x3A2E),
3274
+					0x2F8C3 => array(0x6469), 0x2F8C4 => array(0x647E), 0x2F8C5 => array(0x649D),
3275
+					0x2F8C6 => array(0x6477), 0x2F8C7 => array(0x3A6C), 0x2F8C8 => array(0x654F),
3276
+					0x2F8C9 => array(0x656C), 0x2F8CA => array(0x2300A), 0x2F8CB => array(0x65E3),
3277
+					0x2F8CC => array(0x66F8), 0x2F8CD => array(0x6649), 0x2F8CE => array(0x3B19),
3278
+					0x2F8CF => array(0x6691), 0x2F8D0 => array(0x3B08), 0x2F8D1 => array(0x3AE4),
3279
+					0x2F8D2 => array(0x5192), 0x2F8D3 => array(0x5195), 0x2F8D4 => array(0x6700),
3280
+					0x2F8D5 => array(0x669C), 0x2F8D6 => array(0x80AD), 0x2F8D7 => array(0x43D9),
3281
+					0x2F8D8 => array(0x6717), 0x2F8D9 => array(0x671B), 0x2F8DA => array(0x6721),
3282
+					0x2F8DB => array(0x675E), 0x2F8DC => array(0x6753), 0x2F8DD => array(0x233C3),
3283
+					0x2F8DE => array(0x3B49), 0x2F8DF => array(0x67FA), 0x2F8E0 => array(0x6785),
3284
+					0x2F8E1 => array(0x6852), 0x2F8E2 => array(0x6885), 0x2F8E3 => array(0x2346D),
3285
+					0x2F8E4 => array(0x688E), 0x2F8E5 => array(0x681F), 0x2F8E6 => array(0x6914),
3286
+					0x2F8E7 => array(0x3B9D), 0x2F8E8 => array(0x6942), 0x2F8E9 => array(0x69A3),
3287
+					0x2F8EA => array(0x69EA), 0x2F8EB => array(0x6AA8), 0x2F8EC => array(0x236A3),
3288
+					0x2F8ED => array(0x6ADB), 0x2F8EE => array(0x3C18), 0x2F8EF => array(0x6B21),
3289
+					0x2F8F0 => array(0x238A7), 0x2F8F1 => array(0x6B54), 0x2F8F2 => array(0x3C4E),
3290
+					0x2F8F3 => array(0x6B72), 0x2F8F4 => array(0x6B9F), 0x2F8F5 => array(0x6BBA),
3291
+					0x2F8F6 => array(0x6BBB), 0x2F8F7 => array(0x23A8D), 0x2F8F8 => array(0x21D0B),
3292
+					0x2F8F9 => array(0x23AFA), 0x2F8FA => array(0x6C4E), 0x2F8FB => array(0x23CBC),
3293
+					0x2F8FC => array(0x6CBF), 0x2F8FD => array(0x6CCD), 0x2F8FE => array(0x6C67),
3294
+					0x2F8FF => array(0x6D16), 0x2F900 => array(0x6D3E), 0x2F901 => array(0x6D77),
3295
+					0x2F902 => array(0x6D41), 0x2F903 => array(0x6D69), 0x2F904 => array(0x6D78),
3296
+					0x2F905 => array(0x6D85), 0x2F906 => array(0x23D1E), 0x2F907 => array(0x6D34),
3297
+					0x2F908 => array(0x6E2F), 0x2F909 => array(0x6E6E), 0x2F90A => array(0x3D33),
3298
+					0x2F90B => array(0x6ECB), 0x2F90C => array(0x6EC7), 0x2F90D => array(0x23ED1),
3299
+					0x2F90E => array(0x6DF9), 0x2F90F => array(0x6F6E), 0x2F910 => array(0x23F5E),
3300
+					0x2F911 => array(0x23F8E), 0x2F912 => array(0x6FC6), 0x2F913 => array(0x7039),
3301
+					0x2F914 => array(0x701E), 0x2F915 => array(0x701B), 0x2F916 => array(0x3D96),
3302
+					0x2F917 => array(0x704A), 0x2F918 => array(0x707D), 0x2F919 => array(0x7077),
3303
+					0x2F91A => array(0x70AD), 0x2F91B => array(0x20525), 0x2F91C => array(0x7145),
3304
+					0x2F91D => array(0x24263), 0x2F91E => array(0x719C), 0x2F920 => array(0x7228),
3305
+					0x2F921 => array(0x7235), 0x2F922 => array(0x7250), 0x2F923 => array(0x24608),
3306
+					0x2F924 => array(0x7280), 0x2F925 => array(0x7295), 0x2F926 => array(0x24735),
3307
+					0x2F927 => array(0x24814), 0x2F928 => array(0x737A), 0x2F929 => array(0x738B),
3308
+					0x2F92A => array(0x3EAC), 0x2F92B => array(0x73A5), 0x2F92C => array(0x3EB8),
3309
+					0x2F92D => array(0x3EB8), 0x2F92E => array(0x7447), 0x2F92F => array(0x745C),
3310
+					0x2F930 => array(0x7471), 0x2F931 => array(0x7485), 0x2F932 => array(0x74CA),
3311
+					0x2F933 => array(0x3F1B), 0x2F934 => array(0x7524), 0x2F935 => array(0x24C36),
3312
+					0x2F936 => array(0x753E), 0x2F937 => array(0x24C92), 0x2F938 => array(0x7570),
3313
+					0x2F939 => array(0x2219F), 0x2F93A => array(0x7610), 0x2F93B => array(0x24FA1),
3314
+					0x2F93C => array(0x24FB8), 0x2F93D => array(0x25044), 0x2F93E => array(0x3FFC),
3315
+					0x2F93F => array(0x4008), 0x2F940 => array(0x76F4), 0x2F941 => array(0x250F3),
3316
+					0x2F942 => array(0x250F2), 0x2F943 => array(0x25119), 0x2F944 => array(0x25133),
3317
+					0x2F945 => array(0x771E), 0x2F946 => array(0x771F), 0x2F947 => array(0x771F),
3318
+					0x2F948 => array(0x774A), 0x2F949 => array(0x4039), 0x2F94A => array(0x778B),
3319
+					0x2F94B => array(0x4046), 0x2F94C => array(0x4096), 0x2F94D => array(0x2541D),
3320
+					0x2F94E => array(0x784E), 0x2F94F => array(0x788C), 0x2F950 => array(0x78CC),
3321
+					0x2F951 => array(0x40E3), 0x2F952 => array(0x25626), 0x2F953 => array(0x7956),
3322
+					0x2F954 => array(0x2569A), 0x2F955 => array(0x256C5), 0x2F956 => array(0x798F),
3323
+					0x2F957 => array(0x79EB), 0x2F958 => array(0x412F), 0x2F959 => array(0x7A40),
3324
+					0x2F95A => array(0x7A4A), 0x2F95B => array(0x7A4F), 0x2F95C => array(0x2597C),
3325
+					0x2F95D => array(0x25AA7), 0x2F95E => array(0x25AA7), 0x2F960 => array(0x4202),
3326
+					0x2F961 => array(0x25BAB), 0x2F962 => array(0x7BC6), 0x2F963 => array(0x7BC9),
3327
+					0x2F964 => array(0x4227), 0x2F965 => array(0x25C80), 0x2F966 => array(0x7CD2),
3328
+					0x2F967 => array(0x42A0), 0x2F968 => array(0x7CE8), 0x2F969 => array(0x7CE3),
3329
+					0x2F96A => array(0x7D00), 0x2F96B => array(0x25F86), 0x2F96C => array(0x7D63),
3330
+					0x2F96D => array(0x4301), 0x2F96E => array(0x7DC7), 0x2F96F => array(0x7E02),
3331
+					0x2F970 => array(0x7E45), 0x2F971 => array(0x4334), 0x2F972 => array(0x26228),
3332
+					0x2F973 => array(0x26247), 0x2F974 => array(0x4359), 0x2F975 => array(0x262D9),
3333
+					0x2F976 => array(0x7F7A), 0x2F977 => array(0x2633E), 0x2F978 => array(0x7F95),
3334
+					0x2F979 => array(0x7FFA), 0x2F97A => array(0x8005), 0x2F97B => array(0x264DA),
3335
+					0x2F97C => array(0x26523), 0x2F97D => array(0x8060), 0x2F97E => array(0x265A8),
3336
+					0x2F97F => array(0x8070), 0x2F980 => array(0x2335F), 0x2F981 => array(0x43D5),
3337
+					0x2F982 => array(0x80B2), 0x2F983 => array(0x8103), 0x2F984 => array(0x440B),
3338
+					0x2F985 => array(0x813E), 0x2F986 => array(0x5AB5), 0x2F987 => array(0x267A7),
3339
+					0x2F988 => array(0x267B5), 0x2F989 => array(0x23393), 0x2F98A => array(0x2339C),
3340
+					0x2F98B => array(0x8201), 0x2F98C => array(0x8204), 0x2F98D => array(0x8F9E),
3341
+					0x2F98E => array(0x446B), 0x2F98F => array(0x8291), 0x2F990 => array(0x828B),
3342
+					0x2F991 => array(0x829D), 0x2F992 => array(0x52B3), 0x2F993 => array(0x82B1),
3343
+					0x2F994 => array(0x82B3), 0x2F995 => array(0x82BD), 0x2F996 => array(0x82E6),
3344
+					0x2F997 => array(0x26B3C), 0x2F998 => array(0x82E5), 0x2F999 => array(0x831D),
3345
+					0x2F99A => array(0x8363), 0x2F99B => array(0x83AD), 0x2F99C => array(0x8323),
3346
+					0x2F99D => array(0x83BD), 0x2F99E => array(0x83E7), 0x2F99F => array(0x8457),
3347
+					0x2F9A0 => array(0x8353), 0x2F9A1 => array(0x83CA), 0x2F9A2 => array(0x83CC),
3348
+					0x2F9A3 => array(0x83DC), 0x2F9A4 => array(0x26C36), 0x2F9A5 => array(0x26D6B),
3349
+					0x2F9A6 => array(0x26CD5), 0x2F9A7 => array(0x452B), 0x2F9A8 => array(0x84F1),
3350
+					0x2F9A9 => array(0x84F3), 0x2F9AA => array(0x8516), 0x2F9AB => array(0x273CA),
3351
+					0x2F9AC => array(0x8564), 0x2F9AD => array(0x26F2C), 0x2F9AE => array(0x455D),
3352
+					0x2F9AF => array(0x4561), 0x2F9B0 => array(0x26FB1), 0x2F9B1 => array(0x270D2),
3353
+					0x2F9B2 => array(0x456B), 0x2F9B3 => array(0x8650), 0x2F9B4 => array(0x865C),
3354
+					0x2F9B5 => array(0x8667), 0x2F9B6 => array(0x8669), 0x2F9B7 => array(0x86A9),
3355
+					0x2F9B8 => array(0x8688), 0x2F9B9 => array(0x870E), 0x2F9BA => array(0x86E2),
3356
+					0x2F9BB => array(0x8779), 0x2F9BC => array(0x8728), 0x2F9BD => array(0x876B),
3357
+					0x2F9BE => array(0x8786), 0x2F9C0 => array(0x87E1), 0x2F9C1 => array(0x8801),
3358
+					0x2F9C2 => array(0x45F9), 0x2F9C3 => array(0x8860), 0x2F9C4 => array(0x8863),
3359
+					0x2F9C5 => array(0x27667), 0x2F9C6 => array(0x88D7), 0x2F9C7 => array(0x88DE),
3360
+					0x2F9C8 => array(0x4635), 0x2F9C9 => array(0x88FA), 0x2F9CA => array(0x34BB),
3361
+					0x2F9CB => array(0x278AE), 0x2F9CC => array(0x27966), 0x2F9CD => array(0x46BE),
3362
+					0x2F9CE => array(0x46C7), 0x2F9CF => array(0x8AA0), 0x2F9D0 => array(0x8AED),
3363
+					0x2F9D1 => array(0x8B8A), 0x2F9D2 => array(0x8C55), 0x2F9D3 => array(0x27CA8),
3364
+					0x2F9D4 => array(0x8CAB), 0x2F9D5 => array(0x8CC1), 0x2F9D6 => array(0x8D1B),
3365
+					0x2F9D7 => array(0x8D77), 0x2F9D8 => array(0x27F2F), 0x2F9D9 => array(0x20804),
3366
+					0x2F9DA => array(0x8DCB), 0x2F9DB => array(0x8DBC), 0x2F9DC => array(0x8DF0),
3367
+					0x2F9DD => array(0x208DE), 0x2F9DE => array(0x8ED4), 0x2F9DF => array(0x8F38),
3368
+					0x2F9E0 => array(0x285D2), 0x2F9E1 => array(0x285ED), 0x2F9E2 => array(0x9094),
3369
+					0x2F9E3 => array(0x90F1), 0x2F9E4 => array(0x9111), 0x2F9E5 => array(0x2872E),
3370
+					0x2F9E6 => array(0x911B), 0x2F9E7 => array(0x9238), 0x2F9E8 => array(0x92D7),
3371
+					0x2F9E9 => array(0x92D8), 0x2F9EA => array(0x927C), 0x2F9EB => array(0x93F9),
3372
+					0x2F9EC => array(0x9415), 0x2F9ED => array(0x28BFA), 0x2F9EE => array(0x958B),
3373
+					0x2F9EF => array(0x4995), 0x2F9F0 => array(0x95B7), 0x2F9F1 => array(0x28D77),
3374
+					0x2F9F2 => array(0x49E6), 0x2F9F3 => array(0x96C3), 0x2F9F4 => array(0x5DB2),
3375
+					0x2F9F5 => array(0x9723), 0x2F9F6 => array(0x29145), 0x2F9F7 => array(0x2921A),
3376
+					0x2F9F8 => array(0x4A6E), 0x2F9F9 => array(0x4A76), 0x2F9FA => array(0x97E0),
3377
+					0x2F9FB => array(0x2940A), 0x2F9FC => array(0x4AB2), 0x2F9FD => array(0x29496),
3378
+					0x2F9FE => array(0x980B), 0x2F9FF => array(0x980B), 0x2FA00 => array(0x9829),
3379
+					0x2FA01 => array(0x295B6), 0x2FA02 => array(0x98E2), 0x2FA03 => array(0x4B33),
3380
+					0x2FA04 => array(0x9929), 0x2FA05 => array(0x99A7), 0x2FA06 => array(0x99C2),
3381
+					0x2FA07 => array(0x99FE), 0x2FA08 => array(0x4BCE), 0x2FA09 => array(0x29B30),
3382
+					0x2FA0A => array(0x9B12), 0x2FA0B => array(0x9C40), 0x2FA0C => array(0x9CFD),
3383
+					0x2FA0D => array(0x4CCE), 0x2FA0E => array(0x4CED), 0x2FA0F => array(0x9D67),
3384
+					0x2FA10 => array(0x2A0CE), 0x2FA11 => array(0x4CF8), 0x2FA12 => array(0x2A105),
3385
+					0x2FA13 => array(0x2A20E), 0x2FA14 => array(0x2A291), 0x2FA15 => array(0x9EBB),
3386
+					0x2FA16 => array(0x4D56), 0x2FA17 => array(0x9EF9), 0x2FA18 => array(0x9EFE),
3387
+					0x2FA19 => array(0x9F05), 0x2FA1A => array(0x9F0F), 0x2FA1B => array(0x9F16),
3388
+					0x2FA1C => array(0x9F3B), 0x2FA1D => array(0x2A600)
3389
+			),
3390
+			'norm_combcls' => array(0x334 => 1, 0x335 => 1, 0x336 => 1, 0x337 => 1,
3391
+					0x338 => 1, 0x93C => 7, 0x9BC => 7, 0xA3C => 7, 0xABC => 7,
3392
+					0xB3C => 7, 0xCBC => 7, 0x1037 => 7, 0x3099 => 8, 0x309A => 8,
3393
+					0x94D => 9, 0x9CD => 9, 0xA4D => 9, 0xACD => 9, 0xB4D => 9,
3394
+					0xBCD => 9, 0xC4D => 9, 0xCCD => 9, 0xD4D => 9, 0xDCA => 9,
3395
+					0xE3A => 9, 0xF84 => 9, 0x1039 => 9, 0x1714 => 9, 0x1734 => 9,
3396
+					0x17D2 => 9, 0x5B0 => 10, 0x5B1 => 11, 0x5B2 => 12, 0x5B3 => 13,
3397
+					0x5B4 => 14, 0x5B5 => 15, 0x5B6 => 16, 0x5B7 => 17, 0x5B8 => 18,
3398
+					0x5B9 => 19, 0x5BB => 20, 0x5Bc => 21, 0x5BD => 22, 0x5BF => 23,
3399
+					0x5C1 => 24, 0x5C2 => 25, 0xFB1E => 26, 0x64B => 27, 0x64C => 28,
3400
+					0x64D => 29, 0x64E => 30, 0x64F => 31, 0x650 => 32, 0x651 => 33,
3401
+					0x652 => 34, 0x670 => 35, 0x711 => 36, 0xC55 => 84, 0xC56 => 91,
3402
+					0xE38 => 103, 0xE39 => 103, 0xE48 => 107, 0xE49 => 107, 0xE4A => 107,
3403
+					0xE4B => 107, 0xEB8 => 118, 0xEB9 => 118, 0xEC8 => 122, 0xEC9 => 122,
3404
+					0xECA => 122, 0xECB => 122, 0xF71 => 129, 0xF72 => 130, 0xF7A => 130,
3405
+					0xF7B => 130, 0xF7C => 130, 0xF7D => 130, 0xF80 => 130, 0xF74 => 132,
3406
+					0x321 => 202, 0x322 => 202, 0x327 => 202, 0x328 => 202, 0x31B => 216,
3407
+					0xF39 => 216, 0x1D165 => 216, 0x1D166 => 216, 0x1D16E => 216, 0x1D16F => 216,
3408
+					0x1D170 => 216, 0x1D171 => 216, 0x1D172 => 216, 0x302A => 218, 0x316 => 220,
3409
+					0x317 => 220, 0x318 => 220, 0x319 => 220, 0x31C => 220, 0x31D => 220,
3410
+					0x31E => 220, 0x31F => 220, 0x320 => 220, 0x323 => 220, 0x324 => 220,
3411
+					0x325 => 220, 0x326 => 220, 0x329 => 220, 0x32A => 220, 0x32B => 220,
3412
+					0x32C => 220, 0x32D => 220, 0x32E => 220, 0x32F => 220, 0x330 => 220,
3413
+					0x331 => 220, 0x332 => 220, 0x333 => 220, 0x339 => 220, 0x33A => 220,
3414
+					0x33B => 220, 0x33C => 220, 0x347 => 220, 0x348 => 220, 0x349 => 220,
3415
+					0x34D => 220, 0x34E => 220, 0x353 => 220, 0x354 => 220, 0x355 => 220,
3416
+					0x356 => 220, 0x591 => 220, 0x596 => 220, 0x59B => 220, 0x5A3 => 220,
3417
+					0x5A4 => 220, 0x5A5 => 220, 0x5A6 => 220, 0x5A7 => 220, 0x5AA => 220,
3418
+					0x655 => 220, 0x656 => 220, 0x6E3 => 220, 0x6EA => 220, 0x6ED => 220,
3419
+					0x731 => 220, 0x734 => 220, 0x737 => 220, 0x738 => 220, 0x739 => 220,
3420
+					0x73B => 220, 0x73C => 220, 0x73E => 220, 0x742 => 220, 0x744 => 220,
3421
+					0x746 => 220, 0x748 => 220, 0x952 => 220, 0xF18 => 220, 0xF19 => 220,
3422
+					0xF35 => 220, 0xF37 => 220, 0xFC6 => 220, 0x193B => 220, 0x20E8 => 220,
3423
+					0x1D17B => 220, 0x1D17C => 220, 0x1D17D => 220, 0x1D17E => 220, 0x1D17F => 220,
3424
+					0x1D180 => 220, 0x1D181 => 220, 0x1D182 => 220, 0x1D18A => 220, 0x1D18B => 220,
3425
+					0x59A => 222, 0x5AD => 222, 0x1929 => 222, 0x302D => 222, 0x302E => 224,
3426
+					0x302F => 224, 0x1D16D => 226, 0x5AE => 228, 0x18A9 => 228, 0x302B => 228,
3427
+					0x300 => 230, 0x301 => 230, 0x302 => 230, 0x303 => 230, 0x304 => 230,
3428
+					0x305 => 230, 0x306 => 230, 0x307 => 230, 0x308 => 230, 0x309 => 230,
3429
+					0x30A => 230, 0x30B => 230, 0x30C => 230, 0x30D => 230, 0x30E => 230,
3430
+					0x30F => 230, 0x310 => 230, 0x311 => 230, 0x312 => 230, 0x313 => 230,
3431
+					0x314 => 230, 0x33D => 230, 0x33E => 230, 0x33F => 230, 0x340 => 230,
3432
+					0x341 => 230, 0x342 => 230, 0x343 => 230, 0x344 => 230, 0x346 => 230,
3433
+					0x34A => 230, 0x34B => 230, 0x34C => 230, 0x350 => 230, 0x351 => 230,
3434
+					0x352 => 230, 0x357 => 230, 0x363 => 230, 0x364 => 230, 0x365 => 230,
3435
+					0x366 => 230, 0x367 => 230, 0x368 => 230, 0x369 => 230, 0x36A => 230,
3436
+					0x36B => 230, 0x36C => 230, 0x36D => 230, 0x36E => 230, 0x36F => 230,
3437
+					0x483 => 230, 0x484 => 230, 0x485 => 230, 0x486 => 230, 0x592 => 230,
3438
+					0x593 => 230, 0x594 => 230, 0x595 => 230, 0x597 => 230, 0x598 => 230,
3439
+					0x599 => 230, 0x59C => 230, 0x59D => 230, 0x59E => 230, 0x59F => 230,
3440
+					0x5A0 => 230, 0x5A1 => 230, 0x5A8 => 230, 0x5A9 => 230, 0x5AB => 230,
3441
+					0x5AC => 230, 0x5AF => 230, 0x5C4 => 230, 0x610 => 230, 0x611 => 230,
3442
+					0x612 => 230, 0x613 => 230, 0x614 => 230, 0x615 => 230, 0x653 => 230,
3443
+					0x654 => 230, 0x657 => 230, 0x658 => 230, 0x6D6 => 230, 0x6D7 => 230,
3444
+					0x6D8 => 230, 0x6D9 => 230, 0x6DA => 230, 0x6DB => 230, 0x6DC => 230,
3445
+					0x6DF => 230, 0x6E0 => 230, 0x6E1 => 230, 0x6E2 => 230, 0x6E4 => 230,
3446
+					0x6E7 => 230, 0x6E8 => 230, 0x6EB => 230, 0x6EC => 230, 0x730 => 230,
3447
+					0x732 => 230, 0x733 => 230, 0x735 => 230, 0x736 => 230, 0x73A => 230,
3448
+					0x73D => 230, 0x73F => 230, 0x740 => 230, 0x741 => 230, 0x743 => 230,
3449
+					0x745 => 230, 0x747 => 230, 0x749 => 230, 0x74A => 230, 0x951 => 230,
3450
+					0x953 => 230, 0x954 => 230, 0xF82 => 230, 0xF83 => 230, 0xF86 => 230,
3451
+					0xF87 => 230, 0x170D => 230, 0x193A => 230, 0x20D0 => 230, 0x20D1 => 230,
3452
+					0x20D4 => 230, 0x20D5 => 230, 0x20D6 => 230, 0x20D7 => 230, 0x20DB => 230,
3453
+					0x20DC => 230, 0x20E1 => 230, 0x20E7 => 230, 0x20E9 => 230, 0xFE20 => 230,
3454
+					0xFE21 => 230, 0xFE22 => 230, 0xFE23 => 230, 0x1D185 => 230, 0x1D186 => 230,
3455
+					0x1D187 => 230, 0x1D189 => 230, 0x1D188 => 230, 0x1D1AA => 230, 0x1D1AB => 230,
3456
+					0x1D1AC => 230, 0x1D1AD => 230, 0x315 => 232, 0x31A => 232, 0x302C => 232,
3457
+					0x35F => 233, 0x362 => 233, 0x35D => 234, 0x35E => 234, 0x360 => 234,
3458
+					0x361 => 234, 0x345 => 240
3459
+			)
3460
+	);
3461 3461
 }
3462 3462
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +43 added lines, -46 removed lines patch added patch discarded remove patch
@@ -73,16 +73,16 @@  discard block
 block discarded – undo
73 73
     protected $_lcount = 19;
74 74
     protected $_vcount = 21;
75 75
     protected $_tcount = 28;
76
-    protected $_ncount = 588;   // _vcount * _tcount
76
+    protected $_ncount = 588; // _vcount * _tcount
77 77
     protected $_scount = 11172; // _lcount * _tcount * _vcount
78 78
     protected $_error = false;
79 79
     protected static $_mb_string_overload = null;
80 80
     // See {@link set_paramter()} for details of how to change the following
81 81
     // settings from within your script / application
82
-    protected $_api_encoding = 'utf8';   // Default input charset is UTF-8
83
-    protected $_allow_overlong = false;  // Overlong UTF-8 encodings are forbidden
84
-    protected $_strict_mode = false;     // Behave strict or not
85
-    protected $_idn_version = 2003;      // Can be either 2003 (old, default) or 2008
82
+    protected $_api_encoding = 'utf8'; // Default input charset is UTF-8
83
+    protected $_allow_overlong = false; // Overlong UTF-8 encodings are forbidden
84
+    protected $_strict_mode = false; // Behave strict or not
85
+    protected $_idn_version = 2003; // Can be either 2003 (old, default) or 2008
86 86
 
87 87
     /**
88 88
      * the constructor
@@ -140,7 +140,7 @@  discard block
 block discarded – undo
140 140
                             $this->_api_encoding = $v;
141 141
                             break;
142 142
                         default:
143
-                            $this->_error('Set Parameter: Unknown parameter ' . $v . ' for option ' . $k);
143
+                            $this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k);
144 144
                             return false;
145 145
                     }
146 146
                     break;
@@ -154,7 +154,7 @@  discard block
 block discarded – undo
154 154
                     if (in_array($v, array('2003', '2008'))) {
155 155
                         $this->_idn_version = $v;
156 156
                     } else {
157
-                        $this->_error('Set Parameter: Unknown parameter ' . $v . ' for option ' . $k);
157
+                        $this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k);
158 158
                     }
159 159
                     break;
160 160
                 case 'encode_german_sz': // Deprecated
@@ -165,7 +165,7 @@  discard block
 block discarded – undo
165 165
                     }
166 166
                     break;
167 167
                 default:
168
-                    $this->_error('Set Parameter: Unknown option ' . $k);
168
+                    $this->_error('Set Parameter: Unknown option '.$k);
169 169
                     return false;
170 170
             }
171 171
         }
@@ -188,7 +188,7 @@  discard block
 block discarded – undo
188 188
                 case 'ucs4_array':
189 189
                     break;
190 190
                 default:
191
-                    $this->_error('Unknown encoding ' . $one_time_encoding);
191
+                    $this->_error('Unknown encoding '.$one_time_encoding);
192 192
                     return false;
193 193
             }
194 194
         }
@@ -206,7 +206,7 @@  discard block
 block discarded – undo
206 206
             list ($email_pref, $input) = explode('@', $input, 2);
207 207
             $arr = explode('.', $input);
208 208
             foreach ($arr as $k => $v) {
209
-                if (preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $v)) {
209
+                if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) {
210 210
                     $conv = $this->_decode($v);
211 211
                     if ($conv) {
212 212
                         $arr[$k] = $conv;
@@ -216,7 +216,7 @@  discard block
 block discarded – undo
216 216
             $input = join('.', $arr);
217 217
             $arr = explode('.', $email_pref);
218 218
             foreach ($arr as $k => $v) {
219
-                if (preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $v)) {
219
+                if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) {
220 220
                     $conv = $this->_decode($v);
221 221
                     if ($conv) {
222 222
                         $arr[$k] = $conv;
@@ -224,7 +224,7 @@  discard block
 block discarded – undo
224 224
                 }
225 225
             }
226 226
             $email_pref = join('.', $arr);
227
-            $return = $email_pref . '@' . $input;
227
+            $return = $email_pref.'@'.$input;
228 228
         } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters)
229 229
             // No no in strict mode
230 230
             if ($this->_strict_mode) {
@@ -241,13 +241,13 @@  discard block
 block discarded – undo
241 241
                     }
242 242
                 }
243 243
                 $parsed['host'] = join('.', $arr);
244
-                $return = (empty($parsed['scheme']) ? '' : $parsed['scheme'] . (strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')).
245
-                        (empty($parsed['user']) ? '' : $parsed['user'] . (empty($parsed['pass']) ? '' : ':' . $parsed['pass']) . '@').
244
+                $return = (empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')).
245
+                        (empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@').
246 246
                         $parsed['host'].
247
-                        (empty($parsed['port']) ? '' : ':' . $parsed['port']).
247
+                        (empty($parsed['port']) ? '' : ':'.$parsed['port']).
248 248
                         (empty($parsed['path']) ? '' : $parsed['path']).
249
-                        (empty($parsed['query']) ? '' : '?' . $parsed['query']).
250
-                        (empty($parsed['fragment']) ? '' : '#' . $parsed['fragment']);
249
+                        (empty($parsed['query']) ? '' : '?'.$parsed['query']).
250
+                        (empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']);
251 251
             } else { // parse_url seems to have failed, try without it
252 252
                 $arr = explode('.', $input);
253 253
                 foreach ($arr as $k => $v) {
@@ -265,8 +265,8 @@  discard block
 block discarded – undo
265 265
         // The output is UTF-8 by default, other output formats need conversion here
266 266
         // If one time encoding is given, use this, else the objects property
267 267
         switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
268
-            case 'utf8':        return $return; // break;
269
-            case 'ucs4_string': return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return));  // break;
268
+            case 'utf8' : return $return; // break;
269
+            case 'ucs4_string': return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return)); // break;
270 270
             case 'ucs4_array':  return $this->_utf8_to_ucs4($return); // break;
271 271
             default:            $this->_error('Unsupported output format'); return false;
272 272
         }
@@ -283,15 +283,14 @@  discard block
 block discarded – undo
283 283
         // Forcing conversion of input to UCS4 array
284 284
         // If one time encoding is given, use this, else the objects property
285 285
         switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) {
286
-            case 'utf8':
287
-                $decoded = $this->_utf8_to_ucs4($decoded);
286
+            case 'utf8' : $decoded = $this->_utf8_to_ucs4($decoded);
288 287
                 break;
289 288
             case 'ucs4_string':
290 289
                 $decoded = $this->_ucs4_string_to_ucs4($decoded);
291 290
             case 'ucs4_array':
292 291
                 break;
293 292
             default:
294
-                $this->_error('Unsupported input format: ' . ($one_time_encoding ? $one_time_encoding : $this->_api_encoding));
293
+                $this->_error('Unsupported input format: '.($one_time_encoding ? $one_time_encoding : $this->_api_encoding));
295 294
                 return false;
296 295
         }
297 296
 
@@ -380,13 +379,13 @@  discard block
 block discarded – undo
380 379
             }
381 380
         }
382 381
         $parsed['host'] = join('.', $arr);
383
-        $return = (empty($parsed['scheme']) ? '' : $parsed['scheme'] . (strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')).
384
-                (empty($parsed['user']) ? '' : $parsed['user'] . (empty($parsed['pass']) ? '' : ':' . $parsed['pass']) . '@').
382
+        $return = (empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')).
383
+                (empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@').
385 384
                 $parsed['host'].
386
-                (empty($parsed['port']) ? '' : ':' . $parsed['port']).
385
+                (empty($parsed['port']) ? '' : ':'.$parsed['port']).
387 386
                 (empty($parsed['path']) ? '' : $parsed['path']).
388
-                (empty($parsed['query']) ? '' : '?' . $parsed['query']).
389
-                (empty($parsed['fragment']) ? '' : '#' . $parsed['fragment']);
387
+                (empty($parsed['query']) ? '' : '?'.$parsed['query']).
388
+                (empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']);
390 389
         return $return;
391 390
     }
392 391
 
@@ -409,11 +408,11 @@  discard block
 block discarded – undo
409 408
     {
410 409
         $decoded = array();
411 410
         // find the Punycode prefix
412
-        if (!preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $encoded)) {
411
+        if (!preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $encoded)) {
413 412
             $this->_error('This is not a punycode string');
414 413
             return false;
415 414
         }
416
-        $encode_test = preg_replace('!^' . preg_quote($this->_punycode_prefix, '!') . '!', '', $encoded);
415
+        $encode_test = preg_replace('!^'.preg_quote($this->_punycode_prefix, '!').'!', '', $encoded);
417 416
         // If nothing left after removing the prefix, it is hopeless
418 417
         if (!$encode_test) {
419 418
             $this->_error('The given encoded string was empty');
@@ -439,8 +438,7 @@  discard block
 block discarded – undo
439 438
             for ($old_idx = $idx, $w = 1, $k = $this->_base; 1; $k += $this->_base) {
440 439
                 $digit = $this->_decode_digit($encoded{$enco_idx++});
441 440
                 $idx += $digit * $w;
442
-                $t = ($k <= $bias) ? $this->_tmin :
443
-                        (($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias));
441
+                $t = ($k <= $bias) ? $this->_tmin : (($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias));
444 442
                 if ($digit < $t) {
445 443
                     break;
446 444
                 }
@@ -513,7 +511,7 @@  discard block
 block discarded – undo
513 511
             return $encoded; // All codepoints were basic ones
514 512
         }
515 513
         // Start with the prefix; copy it to output
516
-        $encoded = $this->_punycode_prefix . $encoded;
514
+        $encoded = $this->_punycode_prefix.$encoded;
517 515
         // If we have basic code points in output, add an hyphen to the end
518 516
         if ($codecount) {
519 517
             $encoded .= '-';
@@ -540,8 +538,7 @@  discard block
 block discarded – undo
540 538
                     $delta++;
541 539
                 } elseif ($decoded[$i] == $cur_code) {
542 540
                     for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) {
543
-                        $t = ($k <= $bias) ? $this->_tmin :
544
-                                (($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias);
541
+                        $t = ($k <= $bias) ? $this->_tmin : (($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias);
545 542
                         if ($q < $t) {
546 543
                             break;
547 544
                         }
@@ -628,12 +625,12 @@  discard block
 block discarded – undo
628 625
             }
629 626
             // Try to find prohibited input
630 627
             if (in_array($v, self::$NP['prohibit']) || in_array($v, self::$NP['general_prohibited'])) {
631
-                $this->_error('NAMEPREP: Prohibited input U+' . sprintf('%08X', $v));
628
+                $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v));
632 629
                 return false;
633 630
             }
634 631
             foreach (self::$NP['prohibit_ranges'] as $range) {
635 632
                 if ($range[0] <= $v && $v <= $range[1]) {
636
-                    $this->_error('NAMEPREP: Prohibited input U+' . sprintf('%08X', $v));
633
+                    $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v));
637 634
                     return false;
638 635
                 }
639 636
             }
@@ -869,7 +866,7 @@  discard block
 block discarded – undo
869 866
                 $output[$out_len] = $v;
870 867
                 ++$out_len;
871 868
                 if ('add' == $mode) {
872
-                    $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte ' . $k);
869
+                    $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
873 870
                     return false;
874 871
                 }
875 872
                 continue;
@@ -894,7 +891,7 @@  discard block
 block discarded – undo
894 891
                     $next_byte = 4;
895 892
                     $v = ($v - 252) << 30;
896 893
                 } else {
897
-                    $this->_error('This might be UTF-8, but I don\'t understand it at byte ' . $k);
894
+                    $this->_error('This might be UTF-8, but I don\'t understand it at byte '.$k);
898 895
                     return false;
899 896
                 }
900 897
                 if ('add' == $mode) {
@@ -907,7 +904,7 @@  discard block
 block discarded – undo
907 904
                 if (!$this->_allow_overlong && $test == 'range') {
908 905
                     $test = 'none';
909 906
                     if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) {
910
-                        $this->_error('Bogus UTF-8 character detected (out of legal range) at byte ' . $k);
907
+                        $this->_error('Bogus UTF-8 character detected (out of legal range) at byte '.$k);
911 908
                         return false;
912 909
                     }
913 910
                 }
@@ -916,7 +913,7 @@  discard block
 block discarded – undo
916 913
                     $output[($out_len - 1)] += $v;
917 914
                     --$next_byte;
918 915
                 } else {
919
-                    $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte ' . $k);
916
+                    $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
920 917
                     return false;
921 918
                 }
922 919
                 if ($next_byte < 0) {
@@ -940,13 +937,13 @@  discard block
 block discarded – undo
940 937
             if ($v < 128) { // 7bit are transferred literally
941 938
                 $output .= chr($v);
942 939
             } elseif ($v < (1 << 11)) { // 2 bytes
943
-                $output .= chr(192 + ($v >> 6)) . chr(128 + ($v & 63));
940
+                $output .= chr(192 + ($v >> 6)).chr(128 + ($v & 63));
944 941
             } elseif ($v < (1 << 16)) { // 3 bytes
945
-                $output .= chr(224 + ($v >> 12)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
942
+                $output .= chr(224 + ($v >> 12)).chr(128 + (($v >> 6) & 63)).chr(128 + ($v & 63));
946 943
             } elseif ($v < (1 << 21)) { // 4 bytes
947
-                $output .= chr(240 + ($v >> 18)) . chr(128 + (($v >> 12) & 63)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
944
+                $output .= chr(240 + ($v >> 18)).chr(128 + (($v >> 12) & 63)).chr(128 + (($v >> 6) & 63)).chr(128 + ($v & 63));
948 945
             } else {
949
-                $this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte ' . $k);
946
+                $this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte '.$k);
950 947
                 return false;
951 948
             }
952 949
         }
@@ -965,7 +962,7 @@  discard block
 block discarded – undo
965 962
         // Take array values and split output to 4 bytes per value
966 963
         // The bit mask is 255, which reads &11111111
967 964
         foreach ($input as $v) {
968
-            $output .= chr(($v >> 24) & 255) . chr(($v >> 16) & 255) . chr(($v >> 8) & 255) . chr($v & 255);
965
+            $output .= chr(($v >> 24) & 255).chr(($v >> 16) & 255).chr(($v >> 8) & 255).chr($v & 255);
969 966
         }
970 967
         return $output;
971 968
     }
@@ -995,7 +992,7 @@  discard block
 block discarded – undo
995 992
                 $out_len++;
996 993
                 $output[$out_len] = 0;
997 994
             }
998
-            $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) );
995
+            $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4)));
999 996
         }
1000 997
         return $output;
1001 998
     }
Please login to merge, or discard this patch.
libs/PEAR.1.9.5/HTTP/Request2/CookieJar.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -425,7 +425,7 @@
 block discarded – undo
425 425
      *
426 426
      * @param string $domain domain name
427 427
      *
428
-     * @return string|bool   registered domain, will return false if $domain is
428
+     * @return false|string   registered domain, will return false if $domain is
429 429
      *                       either invalid or a TLD itself
430 430
      */
431 431
     public static function getRegisteredDomain($domain)
Please login to merge, or discard this patch.
Indentation   +457 added lines, -457 removed lines patch added patch discarded remove patch
@@ -33,462 +33,462 @@
 block discarded – undo
33 33
  */
34 34
 class HTTP_Request2_CookieJar implements Serializable
35 35
 {
36
-    /**
37
-     * Array of stored cookies
38
-     *
39
-     * The array is indexed by domain, path and cookie name
40
-     *   .example.com
41
-     *     /
42
-     *       some_cookie => cookie data
43
-     *     /subdir
44
-     *       other_cookie => cookie data
45
-     *   .example.org
46
-     *     ...
47
-     *
48
-     * @var array
49
-     */
50
-    protected $cookies = array();
51
-
52
-    /**
53
-     * Whether session cookies should be serialized when serializing the jar
54
-     * @var bool
55
-     */
56
-    protected $serializeSession = false;
57
-
58
-    /**
59
-     * Whether Public Suffix List should be used for domain matching
60
-     * @var bool
61
-     */
62
-    protected $useList = true;
63
-
64
-    /**
65
-     * Array with Public Suffix List data
66
-     * @var  array
67
-     * @link http://publicsuffix.org/
68
-     */
69
-    protected static $psl = array();
70
-
71
-    /**
72
-     * Class constructor, sets various options
73
-     *
74
-     * @param bool $serializeSessionCookies Controls serializing session cookies,
75
-     *                                      see {@link serializeSessionCookies()}
76
-     * @param bool $usePublicSuffixList     Controls using Public Suffix List,
77
-     *                                      see {@link usePublicSuffixList()}
78
-     */
79
-    public function __construct(
80
-        $serializeSessionCookies = false, $usePublicSuffixList = true
81
-    ) {
82
-        $this->serializeSessionCookies($serializeSessionCookies);
83
-        $this->usePublicSuffixList($usePublicSuffixList);
84
-    }
85
-
86
-    /**
87
-     * Returns current time formatted in ISO-8601 at UTC timezone
88
-     *
89
-     * @return string
90
-     */
91
-    protected function now()
92
-    {
93
-        $dt = new DateTime();
94
-        $dt->setTimezone(new DateTimeZone('UTC'));
95
-        return $dt->format(DateTime::ISO8601);
96
-    }
97
-
98
-    /**
99
-     * Checks cookie array for correctness, possibly updating its 'domain', 'path' and 'expires' fields
100
-     *
101
-     * The checks are as follows:
102
-     *   - cookie array should contain 'name' and 'value' fields;
103
-     *   - name and value should not contain disallowed symbols;
104
-     *   - 'expires' should be either empty parseable by DateTime;
105
-     *   - 'domain' and 'path' should be either not empty or an URL where
106
-     *     cookie was set should be provided.
107
-     *   - if $setter is provided, then document at that URL should be allowed
108
-     *     to set a cookie for that 'domain'. If $setter is not provided,
109
-     *     then no domain checks will be made.
110
-     *
111
-     * 'expires' field will be converted to ISO8601 format from COOKIE format,
112
-     * 'domain' and 'path' will be set from setter URL if empty.
113
-     *
114
-     * @param array    $cookie cookie data, as returned by
115
-     *                         {@link HTTP_Request2_Response::getCookies()}
116
-     * @param Net_URL2 $setter URL of the document that sent Set-Cookie header
117
-     *
118
-     * @return   array    Updated cookie array
119
-     * @throws   HTTP_Request2_LogicException
120
-     * @throws   HTTP_Request2_MessageException
121
-     */
122
-    protected function checkAndUpdateFields(array $cookie, Net_URL2 $setter = null)
123
-    {
124
-        if ($missing = array_diff(array('name', 'value'), array_keys($cookie))) {
125
-            throw new HTTP_Request2_LogicException(
126
-                "Cookie array should contain 'name' and 'value' fields",
127
-                HTTP_Request2_Exception::MISSING_VALUE
128
-            );
129
-        }
130
-        if (preg_match(HTTP_Request2::REGEXP_INVALID_COOKIE, $cookie['name'])) {
131
-            throw new HTTP_Request2_LogicException(
132
-                "Invalid cookie name: '{$cookie['name']}'",
133
-                HTTP_Request2_Exception::INVALID_ARGUMENT
134
-            );
135
-        }
136
-        if (preg_match(HTTP_Request2::REGEXP_INVALID_COOKIE, $cookie['value'])) {
137
-            throw new HTTP_Request2_LogicException(
138
-                "Invalid cookie value: '{$cookie['value']}'",
139
-                HTTP_Request2_Exception::INVALID_ARGUMENT
140
-            );
141
-        }
142
-        $cookie += array('domain' => '', 'path' => '', 'expires' => null, 'secure' => false);
143
-
144
-        // Need ISO-8601 date @ UTC timezone
145
-        if (!empty($cookie['expires'])
146
-            && !preg_match('/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\+0000$/', $cookie['expires'])
147
-        ) {
148
-            try {
149
-                $dt = new DateTime($cookie['expires']);
150
-                $dt->setTimezone(new DateTimeZone('UTC'));
151
-                $cookie['expires'] = $dt->format(DateTime::ISO8601);
152
-            } catch (Exception $e) {
153
-                throw new HTTP_Request2_LogicException($e->getMessage());
154
-            }
155
-        }
156
-
157
-        if (empty($cookie['domain']) || empty($cookie['path'])) {
158
-            if (!$setter) {
159
-                throw new HTTP_Request2_LogicException(
160
-                    'Cookie misses domain and/or path component, cookie setter URL needed',
161
-                    HTTP_Request2_Exception::MISSING_VALUE
162
-                );
163
-            }
164
-            if (empty($cookie['domain'])) {
165
-                if ($host = $setter->getHost()) {
166
-                    $cookie['domain'] = $host;
167
-                } else {
168
-                    throw new HTTP_Request2_LogicException(
169
-                        'Setter URL does not contain host part, can\'t set cookie domain',
170
-                        HTTP_Request2_Exception::MISSING_VALUE
171
-                    );
172
-                }
173
-            }
174
-            if (empty($cookie['path'])) {
175
-                $path = $setter->getPath();
176
-                $cookie['path'] = empty($path)? '/': substr($path, 0, strrpos($path, '/') + 1);
177
-            }
178
-        }
179
-
180
-        if ($setter && !$this->domainMatch($setter->getHost(), $cookie['domain'])) {
181
-            throw new HTTP_Request2_MessageException(
182
-                "Domain " . $setter->getHost() . " cannot set cookies for "
183
-                . $cookie['domain']
184
-            );
185
-        }
186
-
187
-        return $cookie;
188
-    }
189
-
190
-    /**
191
-     * Stores a cookie in the jar
192
-     *
193
-     * @param array    $cookie cookie data, as returned by
194
-     *                         {@link HTTP_Request2_Response::getCookies()}
195
-     * @param Net_URL2 $setter URL of the document that sent Set-Cookie header
196
-     *
197
-     * @throws   HTTP_Request2_Exception
198
-     */
199
-    public function store(array $cookie, Net_URL2 $setter = null)
200
-    {
201
-        $cookie = $this->checkAndUpdateFields($cookie, $setter);
202
-
203
-        if (strlen($cookie['value'])
204
-            && (is_null($cookie['expires']) || $cookie['expires'] > $this->now())
205
-        ) {
206
-            if (!isset($this->cookies[$cookie['domain']])) {
207
-                $this->cookies[$cookie['domain']] = array();
208
-            }
209
-            if (!isset($this->cookies[$cookie['domain']][$cookie['path']])) {
210
-                $this->cookies[$cookie['domain']][$cookie['path']] = array();
211
-            }
212
-            $this->cookies[$cookie['domain']][$cookie['path']][$cookie['name']] = $cookie;
213
-
214
-        } elseif (isset($this->cookies[$cookie['domain']][$cookie['path']][$cookie['name']])) {
215
-            unset($this->cookies[$cookie['domain']][$cookie['path']][$cookie['name']]);
216
-        }
217
-    }
218
-
219
-    /**
220
-     * Adds cookies set in HTTP response to the jar
221
-     *
222
-     * @param HTTP_Request2_Response $response HTTP response message
223
-     * @param Net_URL2               $setter   original request URL, needed for
224
-     *                               setting default domain/path
225
-     */
226
-    public function addCookiesFromResponse(HTTP_Request2_Response $response, Net_URL2 $setter)
227
-    {
228
-        foreach ($response->getCookies() as $cookie) {
229
-            $this->store($cookie, $setter);
230
-        }
231
-    }
232
-
233
-    /**
234
-     * Returns all cookies matching a given request URL
235
-     *
236
-     * The following checks are made:
237
-     *   - cookie domain should match request host
238
-     *   - cookie path should be a prefix for request path
239
-     *   - 'secure' cookies will only be sent for HTTPS requests
240
-     *
241
-     * @param Net_URL2 $url      Request url
242
-     * @param bool     $asString Whether to return cookies as string for "Cookie: " header
243
-     *
244
-     * @return array|string Matching cookies
245
-     */
246
-    public function getMatching(Net_URL2 $url, $asString = false)
247
-    {
248
-        $host   = $url->getHost();
249
-        $path   = $url->getPath();
250
-        $secure = 0 == strcasecmp($url->getScheme(), 'https');
251
-
252
-        $matched = $ret = array();
253
-        foreach (array_keys($this->cookies) as $domain) {
254
-            if ($this->domainMatch($host, $domain)) {
255
-                foreach (array_keys($this->cookies[$domain]) as $cPath) {
256
-                    if (0 === strpos($path, $cPath)) {
257
-                        foreach ($this->cookies[$domain][$cPath] as $name => $cookie) {
258
-                            if (!$cookie['secure'] || $secure) {
259
-                                $matched[$name][strlen($cookie['path'])] = $cookie;
260
-                            }
261
-                        }
262
-                    }
263
-                }
264
-            }
265
-        }
266
-        foreach ($matched as $cookies) {
267
-            krsort($cookies);
268
-            $ret = array_merge($ret, $cookies);
269
-        }
270
-        if (!$asString) {
271
-            return $ret;
272
-        } else {
273
-            $str = '';
274
-            foreach ($ret as $c) {
275
-                $str .= (empty($str)? '': '; ') . $c['name'] . '=' . $c['value'];
276
-            }
277
-            return $str;
278
-        }
279
-    }
280
-
281
-    /**
282
-     * Returns all cookies stored in a jar
283
-     *
284
-     * @return array
285
-     */
286
-    public function getAll()
287
-    {
288
-        $cookies = array();
289
-        foreach (array_keys($this->cookies) as $domain) {
290
-            foreach (array_keys($this->cookies[$domain]) as $path) {
291
-                foreach ($this->cookies[$domain][$path] as $name => $cookie) {
292
-                    $cookies[] = $cookie;
293
-                }
294
-            }
295
-        }
296
-        return $cookies;
297
-    }
298
-
299
-    /**
300
-     * Sets whether session cookies should be serialized when serializing the jar
301
-     *
302
-     * @param boolean $serialize serialize?
303
-     */
304
-    public function serializeSessionCookies($serialize)
305
-    {
306
-        $this->serializeSession = (bool)$serialize;
307
-    }
308
-
309
-    /**
310
-     * Sets whether Public Suffix List should be used for restricting cookie-setting
311
-     *
312
-     * Without PSL {@link domainMatch()} will only prevent setting cookies for
313
-     * top-level domains like '.com' or '.org'. However, it will not prevent
314
-     * setting a cookie for '.co.uk' even though only third-level registrations
315
-     * are possible in .uk domain.
316
-     *
317
-     * With the List it is possible to find the highest level at which a domain
318
-     * may be registered for a particular top-level domain and consequently
319
-     * prevent cookies set for '.co.uk' or '.msk.ru'. The same list is used by
320
-     * Firefox, Chrome and Opera browsers to restrict cookie setting.
321
-     *
322
-     * Note that PSL is licensed differently to HTTP_Request2 package (refer to
323
-     * the license information in public-suffix-list.php), so you can disable
324
-     * its use if this is an issue for you.
325
-     *
326
-     * @param boolean $useList use the list?
327
-     *
328
-     * @link     http://publicsuffix.org/learn/
329
-     */
330
-    public function usePublicSuffixList($useList)
331
-    {
332
-        $this->useList = (bool)$useList;
333
-    }
334
-
335
-    /**
336
-     * Returns string representation of object
337
-     *
338
-     * @return string
339
-     *
340
-     * @see    Serializable::serialize()
341
-     */
342
-    public function serialize()
343
-    {
344
-        $cookies = $this->getAll();
345
-        if (!$this->serializeSession) {
346
-            for ($i = count($cookies) - 1; $i >= 0; $i--) {
347
-                if (empty($cookies[$i]['expires'])) {
348
-                    unset($cookies[$i]);
349
-                }
350
-            }
351
-        }
352
-        return serialize(array(
353
-            'cookies'          => $cookies,
354
-            'serializeSession' => $this->serializeSession,
355
-            'useList'          => $this->useList
356
-        ));
357
-    }
358
-
359
-    /**
360
-     * Constructs the object from serialized string
361
-     *
362
-     * @param string $serialized string representation
363
-     *
364
-     * @see   Serializable::unserialize()
365
-     */
366
-    public function unserialize($serialized)
367
-    {
368
-        $data = unserialize($serialized);
369
-        $now  = $this->now();
370
-        $this->serializeSessionCookies($data['serializeSession']);
371
-        $this->usePublicSuffixList($data['useList']);
372
-        foreach ($data['cookies'] as $cookie) {
373
-            if (!empty($cookie['expires']) && $cookie['expires'] <= $now) {
374
-                continue;
375
-            }
376
-            if (!isset($this->cookies[$cookie['domain']])) {
377
-                $this->cookies[$cookie['domain']] = array();
378
-            }
379
-            if (!isset($this->cookies[$cookie['domain']][$cookie['path']])) {
380
-                $this->cookies[$cookie['domain']][$cookie['path']] = array();
381
-            }
382
-            $this->cookies[$cookie['domain']][$cookie['path']][$cookie['name']] = $cookie;
383
-        }
384
-    }
385
-
386
-    /**
387
-     * Checks whether a cookie domain matches a request host.
388
-     *
389
-     * The method is used by {@link store()} to check for whether a document
390
-     * at given URL can set a cookie with a given domain attribute and by
391
-     * {@link getMatching()} to find cookies matching the request URL.
392
-     *
393
-     * @param string $requestHost  request host
394
-     * @param string $cookieDomain cookie domain
395
-     *
396
-     * @return   bool    match success
397
-     */
398
-    public function domainMatch($requestHost, $cookieDomain)
399
-    {
400
-        if ($requestHost == $cookieDomain) {
401
-            return true;
402
-        }
403
-        // IP address, we require exact match
404
-        if (preg_match('/^(?:\d{1,3}\.){3}\d{1,3}$/', $requestHost)) {
405
-            return false;
406
-        }
407
-        if ('.' != $cookieDomain[0]) {
408
-            $cookieDomain = '.' . $cookieDomain;
409
-        }
410
-        // prevents setting cookies for '.com' and similar domains
411
-        if (!$this->useList && substr_count($cookieDomain, '.') < 2
412
-            || $this->useList && !self::getRegisteredDomain($cookieDomain)
413
-        ) {
414
-            return false;
415
-        }
416
-        return substr('.' . $requestHost, -strlen($cookieDomain)) == $cookieDomain;
417
-    }
418
-
419
-    /**
420
-     * Removes subdomains to get the registered domain (the first after top-level)
421
-     *
422
-     * The method will check Public Suffix List to find out where top-level
423
-     * domain ends and registered domain starts. It will remove domain parts
424
-     * to the left of registered one.
425
-     *
426
-     * @param string $domain domain name
427
-     *
428
-     * @return string|bool   registered domain, will return false if $domain is
429
-     *                       either invalid or a TLD itself
430
-     */
431
-    public static function getRegisteredDomain($domain)
432
-    {
433
-        $domainParts = explode('.', ltrim($domain, '.'));
434
-
435
-        // load the list if needed
436
-        if (empty(self::$psl)) {
437
-            $path = '@data_dir@' . DIRECTORY_SEPARATOR . 'HTTP_Request2';
438
-            if (0 === strpos($path, '@' . 'data_dir@')) {
439
-                $path = realpath(
440
-                    dirname(__FILE__) . DIRECTORY_SEPARATOR . '..'
441
-                    . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'data'
442
-                );
443
-            }
444
-            self::$psl = include_once $path . DIRECTORY_SEPARATOR . 'public-suffix-list.php';
445
-        }
446
-
447
-        if (!($result = self::checkDomainsList($domainParts, self::$psl))) {
448
-            // known TLD, invalid domain name
449
-            return false;
450
-        }
451
-
452
-        // unknown TLD
453
-        if (!strpos($result, '.')) {
454
-            // fallback to checking that domain "has at least two dots"
455
-            if (2 > ($count = count($domainParts))) {
456
-                return false;
457
-            }
458
-            return $domainParts[$count - 2] . '.' . $domainParts[$count - 1];
459
-        }
460
-        return $result;
461
-    }
462
-
463
-    /**
464
-     * Recursive helper method for {@link getRegisteredDomain()}
465
-     *
466
-     * @param array $domainParts remaining domain parts
467
-     * @param mixed $listNode    node in {@link HTTP_Request2_CookieJar::$psl} to check
468
-     *
469
-     * @return string|null   concatenated domain parts, null in case of error
470
-     */
471
-    protected static function checkDomainsList(array $domainParts, $listNode)
472
-    {
473
-        $sub    = array_pop($domainParts);
474
-        $result = null;
475
-
476
-        if (!is_array($listNode) || is_null($sub)
477
-            || array_key_exists('!' . $sub, $listNode)
478
-        ) {
479
-            return $sub;
480
-
481
-        } elseif (array_key_exists($sub, $listNode)) {
482
-            $result = self::checkDomainsList($domainParts, $listNode[$sub]);
483
-
484
-        } elseif (array_key_exists('*', $listNode)) {
485
-            $result = self::checkDomainsList($domainParts, $listNode['*']);
486
-
487
-        } else {
488
-            return $sub;
489
-        }
490
-
491
-        return (strlen($result) > 0) ? ($result . '.' . $sub) : null;
492
-    }
36
+	/**
37
+	 * Array of stored cookies
38
+	 *
39
+	 * The array is indexed by domain, path and cookie name
40
+	 *   .example.com
41
+	 *     /
42
+	 *       some_cookie => cookie data
43
+	 *     /subdir
44
+	 *       other_cookie => cookie data
45
+	 *   .example.org
46
+	 *     ...
47
+	 *
48
+	 * @var array
49
+	 */
50
+	protected $cookies = array();
51
+
52
+	/**
53
+	 * Whether session cookies should be serialized when serializing the jar
54
+	 * @var bool
55
+	 */
56
+	protected $serializeSession = false;
57
+
58
+	/**
59
+	 * Whether Public Suffix List should be used for domain matching
60
+	 * @var bool
61
+	 */
62
+	protected $useList = true;
63
+
64
+	/**
65
+	 * Array with Public Suffix List data
66
+	 * @var  array
67
+	 * @link http://publicsuffix.org/
68
+	 */
69
+	protected static $psl = array();
70
+
71
+	/**
72
+	 * Class constructor, sets various options
73
+	 *
74
+	 * @param bool $serializeSessionCookies Controls serializing session cookies,
75
+	 *                                      see {@link serializeSessionCookies()}
76
+	 * @param bool $usePublicSuffixList     Controls using Public Suffix List,
77
+	 *                                      see {@link usePublicSuffixList()}
78
+	 */
79
+	public function __construct(
80
+		$serializeSessionCookies = false, $usePublicSuffixList = true
81
+	) {
82
+		$this->serializeSessionCookies($serializeSessionCookies);
83
+		$this->usePublicSuffixList($usePublicSuffixList);
84
+	}
85
+
86
+	/**
87
+	 * Returns current time formatted in ISO-8601 at UTC timezone
88
+	 *
89
+	 * @return string
90
+	 */
91
+	protected function now()
92
+	{
93
+		$dt = new DateTime();
94
+		$dt->setTimezone(new DateTimeZone('UTC'));
95
+		return $dt->format(DateTime::ISO8601);
96
+	}
97
+
98
+	/**
99
+	 * Checks cookie array for correctness, possibly updating its 'domain', 'path' and 'expires' fields
100
+	 *
101
+	 * The checks are as follows:
102
+	 *   - cookie array should contain 'name' and 'value' fields;
103
+	 *   - name and value should not contain disallowed symbols;
104
+	 *   - 'expires' should be either empty parseable by DateTime;
105
+	 *   - 'domain' and 'path' should be either not empty or an URL where
106
+	 *     cookie was set should be provided.
107
+	 *   - if $setter is provided, then document at that URL should be allowed
108
+	 *     to set a cookie for that 'domain'. If $setter is not provided,
109
+	 *     then no domain checks will be made.
110
+	 *
111
+	 * 'expires' field will be converted to ISO8601 format from COOKIE format,
112
+	 * 'domain' and 'path' will be set from setter URL if empty.
113
+	 *
114
+	 * @param array    $cookie cookie data, as returned by
115
+	 *                         {@link HTTP_Request2_Response::getCookies()}
116
+	 * @param Net_URL2 $setter URL of the document that sent Set-Cookie header
117
+	 *
118
+	 * @return   array    Updated cookie array
119
+	 * @throws   HTTP_Request2_LogicException
120
+	 * @throws   HTTP_Request2_MessageException
121
+	 */
122
+	protected function checkAndUpdateFields(array $cookie, Net_URL2 $setter = null)
123
+	{
124
+		if ($missing = array_diff(array('name', 'value'), array_keys($cookie))) {
125
+			throw new HTTP_Request2_LogicException(
126
+				"Cookie array should contain 'name' and 'value' fields",
127
+				HTTP_Request2_Exception::MISSING_VALUE
128
+			);
129
+		}
130
+		if (preg_match(HTTP_Request2::REGEXP_INVALID_COOKIE, $cookie['name'])) {
131
+			throw new HTTP_Request2_LogicException(
132
+				"Invalid cookie name: '{$cookie['name']}'",
133
+				HTTP_Request2_Exception::INVALID_ARGUMENT
134
+			);
135
+		}
136
+		if (preg_match(HTTP_Request2::REGEXP_INVALID_COOKIE, $cookie['value'])) {
137
+			throw new HTTP_Request2_LogicException(
138
+				"Invalid cookie value: '{$cookie['value']}'",
139
+				HTTP_Request2_Exception::INVALID_ARGUMENT
140
+			);
141
+		}
142
+		$cookie += array('domain' => '', 'path' => '', 'expires' => null, 'secure' => false);
143
+
144
+		// Need ISO-8601 date @ UTC timezone
145
+		if (!empty($cookie['expires'])
146
+			&& !preg_match('/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\+0000$/', $cookie['expires'])
147
+		) {
148
+			try {
149
+				$dt = new DateTime($cookie['expires']);
150
+				$dt->setTimezone(new DateTimeZone('UTC'));
151
+				$cookie['expires'] = $dt->format(DateTime::ISO8601);
152
+			} catch (Exception $e) {
153
+				throw new HTTP_Request2_LogicException($e->getMessage());
154
+			}
155
+		}
156
+
157
+		if (empty($cookie['domain']) || empty($cookie['path'])) {
158
+			if (!$setter) {
159
+				throw new HTTP_Request2_LogicException(
160
+					'Cookie misses domain and/or path component, cookie setter URL needed',
161
+					HTTP_Request2_Exception::MISSING_VALUE
162
+				);
163
+			}
164
+			if (empty($cookie['domain'])) {
165
+				if ($host = $setter->getHost()) {
166
+					$cookie['domain'] = $host;
167
+				} else {
168
+					throw new HTTP_Request2_LogicException(
169
+						'Setter URL does not contain host part, can\'t set cookie domain',
170
+						HTTP_Request2_Exception::MISSING_VALUE
171
+					);
172
+				}
173
+			}
174
+			if (empty($cookie['path'])) {
175
+				$path = $setter->getPath();
176
+				$cookie['path'] = empty($path)? '/': substr($path, 0, strrpos($path, '/') + 1);
177
+			}
178
+		}
179
+
180
+		if ($setter && !$this->domainMatch($setter->getHost(), $cookie['domain'])) {
181
+			throw new HTTP_Request2_MessageException(
182
+				"Domain " . $setter->getHost() . " cannot set cookies for "
183
+				. $cookie['domain']
184
+			);
185
+		}
186
+
187
+		return $cookie;
188
+	}
189
+
190
+	/**
191
+	 * Stores a cookie in the jar
192
+	 *
193
+	 * @param array    $cookie cookie data, as returned by
194
+	 *                         {@link HTTP_Request2_Response::getCookies()}
195
+	 * @param Net_URL2 $setter URL of the document that sent Set-Cookie header
196
+	 *
197
+	 * @throws   HTTP_Request2_Exception
198
+	 */
199
+	public function store(array $cookie, Net_URL2 $setter = null)
200
+	{
201
+		$cookie = $this->checkAndUpdateFields($cookie, $setter);
202
+
203
+		if (strlen($cookie['value'])
204
+			&& (is_null($cookie['expires']) || $cookie['expires'] > $this->now())
205
+		) {
206
+			if (!isset($this->cookies[$cookie['domain']])) {
207
+				$this->cookies[$cookie['domain']] = array();
208
+			}
209
+			if (!isset($this->cookies[$cookie['domain']][$cookie['path']])) {
210
+				$this->cookies[$cookie['domain']][$cookie['path']] = array();
211
+			}
212
+			$this->cookies[$cookie['domain']][$cookie['path']][$cookie['name']] = $cookie;
213
+
214
+		} elseif (isset($this->cookies[$cookie['domain']][$cookie['path']][$cookie['name']])) {
215
+			unset($this->cookies[$cookie['domain']][$cookie['path']][$cookie['name']]);
216
+		}
217
+	}
218
+
219
+	/**
220
+	 * Adds cookies set in HTTP response to the jar
221
+	 *
222
+	 * @param HTTP_Request2_Response $response HTTP response message
223
+	 * @param Net_URL2               $setter   original request URL, needed for
224
+	 *                               setting default domain/path
225
+	 */
226
+	public function addCookiesFromResponse(HTTP_Request2_Response $response, Net_URL2 $setter)
227
+	{
228
+		foreach ($response->getCookies() as $cookie) {
229
+			$this->store($cookie, $setter);
230
+		}
231
+	}
232
+
233
+	/**
234
+	 * Returns all cookies matching a given request URL
235
+	 *
236
+	 * The following checks are made:
237
+	 *   - cookie domain should match request host
238
+	 *   - cookie path should be a prefix for request path
239
+	 *   - 'secure' cookies will only be sent for HTTPS requests
240
+	 *
241
+	 * @param Net_URL2 $url      Request url
242
+	 * @param bool     $asString Whether to return cookies as string for "Cookie: " header
243
+	 *
244
+	 * @return array|string Matching cookies
245
+	 */
246
+	public function getMatching(Net_URL2 $url, $asString = false)
247
+	{
248
+		$host   = $url->getHost();
249
+		$path   = $url->getPath();
250
+		$secure = 0 == strcasecmp($url->getScheme(), 'https');
251
+
252
+		$matched = $ret = array();
253
+		foreach (array_keys($this->cookies) as $domain) {
254
+			if ($this->domainMatch($host, $domain)) {
255
+				foreach (array_keys($this->cookies[$domain]) as $cPath) {
256
+					if (0 === strpos($path, $cPath)) {
257
+						foreach ($this->cookies[$domain][$cPath] as $name => $cookie) {
258
+							if (!$cookie['secure'] || $secure) {
259
+								$matched[$name][strlen($cookie['path'])] = $cookie;
260
+							}
261
+						}
262
+					}
263
+				}
264
+			}
265
+		}
266
+		foreach ($matched as $cookies) {
267
+			krsort($cookies);
268
+			$ret = array_merge($ret, $cookies);
269
+		}
270
+		if (!$asString) {
271
+			return $ret;
272
+		} else {
273
+			$str = '';
274
+			foreach ($ret as $c) {
275
+				$str .= (empty($str)? '': '; ') . $c['name'] . '=' . $c['value'];
276
+			}
277
+			return $str;
278
+		}
279
+	}
280
+
281
+	/**
282
+	 * Returns all cookies stored in a jar
283
+	 *
284
+	 * @return array
285
+	 */
286
+	public function getAll()
287
+	{
288
+		$cookies = array();
289
+		foreach (array_keys($this->cookies) as $domain) {
290
+			foreach (array_keys($this->cookies[$domain]) as $path) {
291
+				foreach ($this->cookies[$domain][$path] as $name => $cookie) {
292
+					$cookies[] = $cookie;
293
+				}
294
+			}
295
+		}
296
+		return $cookies;
297
+	}
298
+
299
+	/**
300
+	 * Sets whether session cookies should be serialized when serializing the jar
301
+	 *
302
+	 * @param boolean $serialize serialize?
303
+	 */
304
+	public function serializeSessionCookies($serialize)
305
+	{
306
+		$this->serializeSession = (bool)$serialize;
307
+	}
308
+
309
+	/**
310
+	 * Sets whether Public Suffix List should be used for restricting cookie-setting
311
+	 *
312
+	 * Without PSL {@link domainMatch()} will only prevent setting cookies for
313
+	 * top-level domains like '.com' or '.org'. However, it will not prevent
314
+	 * setting a cookie for '.co.uk' even though only third-level registrations
315
+	 * are possible in .uk domain.
316
+	 *
317
+	 * With the List it is possible to find the highest level at which a domain
318
+	 * may be registered for a particular top-level domain and consequently
319
+	 * prevent cookies set for '.co.uk' or '.msk.ru'. The same list is used by
320
+	 * Firefox, Chrome and Opera browsers to restrict cookie setting.
321
+	 *
322
+	 * Note that PSL is licensed differently to HTTP_Request2 package (refer to
323
+	 * the license information in public-suffix-list.php), so you can disable
324
+	 * its use if this is an issue for you.
325
+	 *
326
+	 * @param boolean $useList use the list?
327
+	 *
328
+	 * @link     http://publicsuffix.org/learn/
329
+	 */
330
+	public function usePublicSuffixList($useList)
331
+	{
332
+		$this->useList = (bool)$useList;
333
+	}
334
+
335
+	/**
336
+	 * Returns string representation of object
337
+	 *
338
+	 * @return string
339
+	 *
340
+	 * @see    Serializable::serialize()
341
+	 */
342
+	public function serialize()
343
+	{
344
+		$cookies = $this->getAll();
345
+		if (!$this->serializeSession) {
346
+			for ($i = count($cookies) - 1; $i >= 0; $i--) {
347
+				if (empty($cookies[$i]['expires'])) {
348
+					unset($cookies[$i]);
349
+				}
350
+			}
351
+		}
352
+		return serialize(array(
353
+			'cookies'          => $cookies,
354
+			'serializeSession' => $this->serializeSession,
355
+			'useList'          => $this->useList
356
+		));
357
+	}
358
+
359
+	/**
360
+	 * Constructs the object from serialized string
361
+	 *
362
+	 * @param string $serialized string representation
363
+	 *
364
+	 * @see   Serializable::unserialize()
365
+	 */
366
+	public function unserialize($serialized)
367
+	{
368
+		$data = unserialize($serialized);
369
+		$now  = $this->now();
370
+		$this->serializeSessionCookies($data['serializeSession']);
371
+		$this->usePublicSuffixList($data['useList']);
372
+		foreach ($data['cookies'] as $cookie) {
373
+			if (!empty($cookie['expires']) && $cookie['expires'] <= $now) {
374
+				continue;
375
+			}
376
+			if (!isset($this->cookies[$cookie['domain']])) {
377
+				$this->cookies[$cookie['domain']] = array();
378
+			}
379
+			if (!isset($this->cookies[$cookie['domain']][$cookie['path']])) {
380
+				$this->cookies[$cookie['domain']][$cookie['path']] = array();
381
+			}
382
+			$this->cookies[$cookie['domain']][$cookie['path']][$cookie['name']] = $cookie;
383
+		}
384
+	}
385
+
386
+	/**
387
+	 * Checks whether a cookie domain matches a request host.
388
+	 *
389
+	 * The method is used by {@link store()} to check for whether a document
390
+	 * at given URL can set a cookie with a given domain attribute and by
391
+	 * {@link getMatching()} to find cookies matching the request URL.
392
+	 *
393
+	 * @param string $requestHost  request host
394
+	 * @param string $cookieDomain cookie domain
395
+	 *
396
+	 * @return   bool    match success
397
+	 */
398
+	public function domainMatch($requestHost, $cookieDomain)
399
+	{
400
+		if ($requestHost == $cookieDomain) {
401
+			return true;
402
+		}
403
+		// IP address, we require exact match
404
+		if (preg_match('/^(?:\d{1,3}\.){3}\d{1,3}$/', $requestHost)) {
405
+			return false;
406
+		}
407
+		if ('.' != $cookieDomain[0]) {
408
+			$cookieDomain = '.' . $cookieDomain;
409
+		}
410
+		// prevents setting cookies for '.com' and similar domains
411
+		if (!$this->useList && substr_count($cookieDomain, '.') < 2
412
+			|| $this->useList && !self::getRegisteredDomain($cookieDomain)
413
+		) {
414
+			return false;
415
+		}
416
+		return substr('.' . $requestHost, -strlen($cookieDomain)) == $cookieDomain;
417
+	}
418
+
419
+	/**
420
+	 * Removes subdomains to get the registered domain (the first after top-level)
421
+	 *
422
+	 * The method will check Public Suffix List to find out where top-level
423
+	 * domain ends and registered domain starts. It will remove domain parts
424
+	 * to the left of registered one.
425
+	 *
426
+	 * @param string $domain domain name
427
+	 *
428
+	 * @return string|bool   registered domain, will return false if $domain is
429
+	 *                       either invalid or a TLD itself
430
+	 */
431
+	public static function getRegisteredDomain($domain)
432
+	{
433
+		$domainParts = explode('.', ltrim($domain, '.'));
434
+
435
+		// load the list if needed
436
+		if (empty(self::$psl)) {
437
+			$path = '@data_dir@' . DIRECTORY_SEPARATOR . 'HTTP_Request2';
438
+			if (0 === strpos($path, '@' . 'data_dir@')) {
439
+				$path = realpath(
440
+					dirname(__FILE__) . DIRECTORY_SEPARATOR . '..'
441
+					. DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'data'
442
+				);
443
+			}
444
+			self::$psl = include_once $path . DIRECTORY_SEPARATOR . 'public-suffix-list.php';
445
+		}
446
+
447
+		if (!($result = self::checkDomainsList($domainParts, self::$psl))) {
448
+			// known TLD, invalid domain name
449
+			return false;
450
+		}
451
+
452
+		// unknown TLD
453
+		if (!strpos($result, '.')) {
454
+			// fallback to checking that domain "has at least two dots"
455
+			if (2 > ($count = count($domainParts))) {
456
+				return false;
457
+			}
458
+			return $domainParts[$count - 2] . '.' . $domainParts[$count - 1];
459
+		}
460
+		return $result;
461
+	}
462
+
463
+	/**
464
+	 * Recursive helper method for {@link getRegisteredDomain()}
465
+	 *
466
+	 * @param array $domainParts remaining domain parts
467
+	 * @param mixed $listNode    node in {@link HTTP_Request2_CookieJar::$psl} to check
468
+	 *
469
+	 * @return string|null   concatenated domain parts, null in case of error
470
+	 */
471
+	protected static function checkDomainsList(array $domainParts, $listNode)
472
+	{
473
+		$sub    = array_pop($domainParts);
474
+		$result = null;
475
+
476
+		if (!is_array($listNode) || is_null($sub)
477
+			|| array_key_exists('!' . $sub, $listNode)
478
+		) {
479
+			return $sub;
480
+
481
+		} elseif (array_key_exists($sub, $listNode)) {
482
+			$result = self::checkDomainsList($domainParts, $listNode[$sub]);
483
+
484
+		} elseif (array_key_exists('*', $listNode)) {
485
+			$result = self::checkDomainsList($domainParts, $listNode['*']);
486
+
487
+		} else {
488
+			return $sub;
489
+		}
490
+
491
+		return (strlen($result) > 0) ? ($result . '.' . $sub) : null;
492
+	}
493 493
 }
494 494
 ?>
495 495
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -173,13 +173,13 @@  discard block
 block discarded – undo
173 173
             }
174 174
             if (empty($cookie['path'])) {
175 175
                 $path = $setter->getPath();
176
-                $cookie['path'] = empty($path)? '/': substr($path, 0, strrpos($path, '/') + 1);
176
+                $cookie['path'] = empty($path) ? '/' : substr($path, 0, strrpos($path, '/') + 1);
177 177
             }
178 178
         }
179 179
 
180 180
         if ($setter && !$this->domainMatch($setter->getHost(), $cookie['domain'])) {
181 181
             throw new HTTP_Request2_MessageException(
182
-                "Domain " . $setter->getHost() . " cannot set cookies for "
182
+                "Domain ".$setter->getHost()." cannot set cookies for "
183 183
                 . $cookie['domain']
184 184
             );
185 185
         }
@@ -272,7 +272,7 @@  discard block
 block discarded – undo
272 272
         } else {
273 273
             $str = '';
274 274
             foreach ($ret as $c) {
275
-                $str .= (empty($str)? '': '; ') . $c['name'] . '=' . $c['value'];
275
+                $str .= (empty($str) ? '' : '; ').$c['name'].'='.$c['value'];
276 276
             }
277 277
             return $str;
278 278
         }
@@ -303,7 +303,7 @@  discard block
 block discarded – undo
303 303
      */
304 304
     public function serializeSessionCookies($serialize)
305 305
     {
306
-        $this->serializeSession = (bool)$serialize;
306
+        $this->serializeSession = (bool) $serialize;
307 307
     }
308 308
 
309 309
     /**
@@ -329,7 +329,7 @@  discard block
 block discarded – undo
329 329
      */
330 330
     public function usePublicSuffixList($useList)
331 331
     {
332
-        $this->useList = (bool)$useList;
332
+        $this->useList = (bool) $useList;
333 333
     }
334 334
 
335 335
     /**
@@ -405,7 +405,7 @@  discard block
 block discarded – undo
405 405
             return false;
406 406
         }
407 407
         if ('.' != $cookieDomain[0]) {
408
-            $cookieDomain = '.' . $cookieDomain;
408
+            $cookieDomain = '.'.$cookieDomain;
409 409
         }
410 410
         // prevents setting cookies for '.com' and similar domains
411 411
         if (!$this->useList && substr_count($cookieDomain, '.') < 2
@@ -413,7 +413,7 @@  discard block
 block discarded – undo
413 413
         ) {
414 414
             return false;
415 415
         }
416
-        return substr('.' . $requestHost, -strlen($cookieDomain)) == $cookieDomain;
416
+        return substr('.'.$requestHost, -strlen($cookieDomain)) == $cookieDomain;
417 417
     }
418 418
 
419 419
     /**
@@ -434,14 +434,14 @@  discard block
 block discarded – undo
434 434
 
435 435
         // load the list if needed
436 436
         if (empty(self::$psl)) {
437
-            $path = '@data_dir@' . DIRECTORY_SEPARATOR . 'HTTP_Request2';
438
-            if (0 === strpos($path, '@' . 'data_dir@')) {
437
+            $path = '@data_dir@'.DIRECTORY_SEPARATOR.'HTTP_Request2';
438
+            if (0 === strpos($path, '@'.'data_dir@')) {
439 439
                 $path = realpath(
440
-                    dirname(__FILE__) . DIRECTORY_SEPARATOR . '..'
441
-                    . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'data'
440
+                    dirname(__FILE__).DIRECTORY_SEPARATOR.'..'
441
+                    . DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'data'
442 442
                 );
443 443
             }
444
-            self::$psl = include_once $path . DIRECTORY_SEPARATOR . 'public-suffix-list.php';
444
+            self::$psl = include_once $path.DIRECTORY_SEPARATOR.'public-suffix-list.php';
445 445
         }
446 446
 
447 447
         if (!($result = self::checkDomainsList($domainParts, self::$psl))) {
@@ -455,7 +455,7 @@  discard block
 block discarded – undo
455 455
             if (2 > ($count = count($domainParts))) {
456 456
                 return false;
457 457
             }
458
-            return $domainParts[$count - 2] . '.' . $domainParts[$count - 1];
458
+            return $domainParts[$count - 2].'.'.$domainParts[$count - 1];
459 459
         }
460 460
         return $result;
461 461
     }
@@ -474,7 +474,7 @@  discard block
 block discarded – undo
474 474
         $result = null;
475 475
 
476 476
         if (!is_array($listNode) || is_null($sub)
477
-            || array_key_exists('!' . $sub, $listNode)
477
+            || array_key_exists('!'.$sub, $listNode)
478 478
         ) {
479 479
             return $sub;
480 480
 
@@ -488,7 +488,7 @@  discard block
 block discarded – undo
488 488
             return $sub;
489 489
         }
490 490
 
491
-        return (strlen($result) > 0) ? ($result . '.' . $sub) : null;
491
+        return (strlen($result) > 0) ? ($result.'.'.$sub) : null;
492 492
     }
493 493
 }
494 494
 ?>
495 495
\ No newline at end of file
Please login to merge, or discard this patch.
libs/PEAR.1.9.5/Net/URL2.php 3 patches
Doc Comments   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -229,7 +229,7 @@  discard block
 block discarded – undo
229 229
      * Returns the user part of the userinfo part (the part preceding the first
230 230
      *  ":"), or false if there is no userinfo part.
231 231
      *
232
-     * @return string|bool
232
+     * @return string|false
233 233
      */
234 234
     public function getUser()
235 235
     {
@@ -244,7 +244,7 @@  discard block
 block discarded – undo
244 244
      * contain "@" in front of the hostname) or the userinfo part does not
245 245
      * contain ":".
246 246
      *
247
-     * @return string|bool
247
+     * @return string|false
248 248
      */
249 249
     public function getPassword()
250 250
     {
@@ -341,7 +341,7 @@  discard block
 block discarded – undo
341 341
      * Returns the authority part, i.e. [ userinfo "@" ] host [ ":" port ], or
342 342
      * false if there is no authority.
343 343
      *
344
-     * @return string|bool
344
+     * @return false|string
345 345
      */
346 346
     public function getAuthority()
347 347
     {
@@ -874,7 +874,7 @@  discard block
 block discarded – undo
874 874
      * Returns an Net_URL2 instance representing an absolute URL relative to
875 875
      * this URL.
876 876
      *
877
-     * @param Net_URL2|string $reference relative URL
877
+     * @param Net_URL2 $reference relative URL
878 878
      *
879 879
      * @throws Exception
880 880
      * @return $this
@@ -1047,7 +1047,7 @@  discard block
 block discarded – undo
1047 1047
      * currently executing PHP script.
1048 1048
      *
1049 1049
      * @throws Exception
1050
-     * @return string
1050
+     * @return Net_URL2
1051 1051
      */
1052 1052
     public static function getCanonical()
1053 1053
     {
@@ -1106,7 +1106,7 @@  discard block
 block discarded – undo
1106 1106
      *
1107 1107
      * @param string $optionName The name of the option to retrieve
1108 1108
      *
1109
-     * @return mixed
1109
+     * @return string
1110 1110
      */
1111 1111
     public function getOption($optionName)
1112 1112
     {
Please login to merge, or discard this patch.
Indentation   +1160 added lines, -1160 removed lines patch added patch discarded remove patch
@@ -56,1164 +56,1164 @@
 block discarded – undo
56 56
  */
57 57
 class Net_URL2
58 58
 {
59
-    /**
60
-     * Do strict parsing in resolve() (see RFC 3986, section 5.2.2). Default
61
-     * is true.
62
-     */
63
-    const OPTION_STRICT = 'strict';
64
-
65
-    /**
66
-     * Represent arrays in query using PHP's [] notation. Default is true.
67
-     */
68
-    const OPTION_USE_BRACKETS = 'use_brackets';
69
-
70
-    /**
71
-     * Drop zero-based integer sequences in query using PHP's [] notation. Default
72
-     * is true.
73
-     */
74
-    const OPTION_DROP_SEQUENCE = 'drop_sequence';
75
-
76
-    /**
77
-     * URL-encode query variable keys. Default is true.
78
-     */
79
-    const OPTION_ENCODE_KEYS = 'encode_keys';
80
-
81
-    /**
82
-     * Query variable separators when parsing the query string. Every character
83
-     * is considered a separator. Default is "&".
84
-     */
85
-    const OPTION_SEPARATOR_INPUT = 'input_separator';
86
-
87
-    /**
88
-     * Query variable separator used when generating the query string. Default
89
-     * is "&".
90
-     */
91
-    const OPTION_SEPARATOR_OUTPUT = 'output_separator';
92
-
93
-    /**
94
-     * Default options corresponds to how PHP handles $_GET.
95
-     */
96
-    private $_options = array(
97
-        self::OPTION_STRICT           => true,
98
-        self::OPTION_USE_BRACKETS     => true,
99
-        self::OPTION_DROP_SEQUENCE    => true,
100
-        self::OPTION_ENCODE_KEYS      => true,
101
-        self::OPTION_SEPARATOR_INPUT  => '&',
102
-        self::OPTION_SEPARATOR_OUTPUT => '&',
103
-        );
104
-
105
-    /**
106
-     * @var  string|bool
107
-     */
108
-    private $_scheme = false;
109
-
110
-    /**
111
-     * @var  string|bool
112
-     */
113
-    private $_userinfo = false;
114
-
115
-    /**
116
-     * @var  string|bool
117
-     */
118
-    private $_host = false;
119
-
120
-    /**
121
-     * @var  string|bool
122
-     */
123
-    private $_port = false;
124
-
125
-    /**
126
-     * @var  string
127
-     */
128
-    private $_path = '';
129
-
130
-    /**
131
-     * @var  string|bool
132
-     */
133
-    private $_query = false;
134
-
135
-    /**
136
-     * @var  string|bool
137
-     */
138
-    private $_fragment = false;
139
-
140
-    /**
141
-     * Constructor.
142
-     *
143
-     * @param string $url     an absolute or relative URL
144
-     * @param array  $options an array of OPTION_xxx constants
145
-     *
146
-     * @uses   self::parseUrl()
147
-     */
148
-    public function __construct($url, array $options = array())
149
-    {
150
-        foreach ($options as $optionName => $value) {
151
-            if (array_key_exists($optionName, $this->_options)) {
152
-                $this->_options[$optionName] = $value;
153
-            }
154
-        }
155
-
156
-        $this->parseUrl($url);
157
-    }
158
-
159
-    /**
160
-     * Magic Setter.
161
-     *
162
-     * This method will magically set the value of a private variable ($var)
163
-     * with the value passed as the args
164
-     *
165
-     * @param string $var The private variable to set.
166
-     * @param mixed  $arg An argument of any type.
167
-     *
168
-     * @return void
169
-     */
170
-    public function __set($var, $arg)
171
-    {
172
-        $method = 'set' . $var;
173
-        if (method_exists($this, $method)) {
174
-            $this->$method($arg);
175
-        }
176
-    }
177
-
178
-    /**
179
-     * Magic Getter.
180
-     *
181
-     * This is the magic get method to retrieve the private variable
182
-     * that was set by either __set() or it's setter...
183
-     *
184
-     * @param string $var The property name to retrieve.
185
-     *
186
-     * @return mixed  $this->$var Either a boolean false if the
187
-     *                            property is not set or the value
188
-     *                            of the private property.
189
-     */
190
-    public function __get($var)
191
-    {
192
-        $method = 'get' . $var;
193
-        if (method_exists($this, $method)) {
194
-            return $this->$method();
195
-        }
196
-
197
-        return false;
198
-    }
199
-
200
-    /**
201
-     * Returns the scheme, e.g. "http" or "urn", or false if there is no
202
-     * scheme specified, i.e. if this is a relative URL.
203
-     *
204
-     * @return string|bool
205
-     */
206
-    public function getScheme()
207
-    {
208
-        return $this->_scheme;
209
-    }
210
-
211
-    /**
212
-     * Sets the scheme, e.g. "http" or "urn". Specify false if there is no
213
-     * scheme specified, i.e. if this is a relative URL.
214
-     *
215
-     * @param string|bool $scheme e.g. "http" or "urn", or false if there is no
216
-     *                            scheme specified, i.e. if this is a relative
217
-     *                            URL
218
-     *
219
-     * @return $this
220
-     * @see    getScheme
221
-     */
222
-    public function setScheme($scheme)
223
-    {
224
-        $this->_scheme = $scheme;
225
-        return $this;
226
-    }
227
-
228
-    /**
229
-     * Returns the user part of the userinfo part (the part preceding the first
230
-     *  ":"), or false if there is no userinfo part.
231
-     *
232
-     * @return string|bool
233
-     */
234
-    public function getUser()
235
-    {
236
-        return $this->_userinfo !== false
237
-            ? preg_replace('(:.*$)', '', $this->_userinfo)
238
-            : false;
239
-    }
240
-
241
-    /**
242
-     * Returns the password part of the userinfo part (the part after the first
243
-     *  ":"), or false if there is no userinfo part (i.e. the URL does not
244
-     * contain "@" in front of the hostname) or the userinfo part does not
245
-     * contain ":".
246
-     *
247
-     * @return string|bool
248
-     */
249
-    public function getPassword()
250
-    {
251
-        return $this->_userinfo !== false
252
-            ? substr(strstr($this->_userinfo, ':'), 1)
253
-            : false;
254
-    }
255
-
256
-    /**
257
-     * Returns the userinfo part, or false if there is none, i.e. if the
258
-     * authority part does not contain "@".
259
-     *
260
-     * @return string|bool
261
-     */
262
-    public function getUserinfo()
263
-    {
264
-        return $this->_userinfo;
265
-    }
266
-
267
-    /**
268
-     * Sets the userinfo part. If two arguments are passed, they are combined
269
-     * in the userinfo part as username ":" password.
270
-     *
271
-     * @param string|bool $userinfo userinfo or username
272
-     * @param string|bool $password optional password, or false
273
-     *
274
-     * @return $this
275
-     */
276
-    public function setUserinfo($userinfo, $password = false)
277
-    {
278
-        if ($password !== false) {
279
-            $userinfo .= ':' . $password;
280
-        }
281
-
282
-        if ($userinfo !== false) {
283
-            $userinfo = $this->_encodeData($userinfo);
284
-        }
285
-
286
-        $this->_userinfo = $userinfo;
287
-        return $this;
288
-    }
289
-
290
-    /**
291
-     * Returns the host part, or false if there is no authority part, e.g.
292
-     * relative URLs.
293
-     *
294
-     * @return string|bool a hostname, an IP address, or false
295
-     */
296
-    public function getHost()
297
-    {
298
-        return $this->_host;
299
-    }
300
-
301
-    /**
302
-     * Sets the host part. Specify false if there is no authority part, e.g.
303
-     * relative URLs.
304
-     *
305
-     * @param string|bool $host a hostname, an IP address, or false
306
-     *
307
-     * @return $this
308
-     */
309
-    public function setHost($host)
310
-    {
311
-        $this->_host = $host;
312
-        return $this;
313
-    }
314
-
315
-    /**
316
-     * Returns the port number, or false if there is no port number specified,
317
-     * i.e. if the default port is to be used.
318
-     *
319
-     * @return string|bool
320
-     */
321
-    public function getPort()
322
-    {
323
-        return $this->_port;
324
-    }
325
-
326
-    /**
327
-     * Sets the port number. Specify false if there is no port number specified,
328
-     * i.e. if the default port is to be used.
329
-     *
330
-     * @param string|bool $port a port number, or false
331
-     *
332
-     * @return $this
333
-     */
334
-    public function setPort($port)
335
-    {
336
-        $this->_port = $port;
337
-        return $this;
338
-    }
339
-
340
-    /**
341
-     * Returns the authority part, i.e. [ userinfo "@" ] host [ ":" port ], or
342
-     * false if there is no authority.
343
-     *
344
-     * @return string|bool
345
-     */
346
-    public function getAuthority()
347
-    {
348
-        if (false === $this->_host) {
349
-            return false;
350
-        }
351
-
352
-        $authority = '';
353
-
354
-        if (strlen($this->_userinfo)) {
355
-            $authority .= $this->_userinfo . '@';
356
-        }
357
-
358
-        $authority .= $this->_host;
359
-
360
-        if ($this->_port !== false) {
361
-            $authority .= ':' . $this->_port;
362
-        }
363
-
364
-        return $authority;
365
-    }
366
-
367
-    /**
368
-     * Sets the authority part, i.e. [ userinfo "@" ] host [ ":" port ]. Specify
369
-     * false if there is no authority.
370
-     *
371
-     * @param string|bool $authority a hostname or an IP address, possibly
372
-     *                                with userinfo prefixed and port number
373
-     *                                appended, e.g. "foo:[email protected]:81".
374
-     *
375
-     * @return $this
376
-     */
377
-    public function setAuthority($authority)
378
-    {
379
-        $this->_userinfo = false;
380
-        $this->_host     = false;
381
-        $this->_port     = false;
382
-
383
-        if ('' === $authority) {
384
-            $this->_host = $authority;
385
-            return $this;
386
-        }
387
-
388
-        if (!preg_match('(^(([^\@]*)\@)?(.+?)(:(\d*))?$)', $authority, $matches)) {
389
-            return $this;
390
-        }
391
-
392
-        if ($matches[1]) {
393
-            $this->_userinfo = $this->_encodeData($matches[2]);
394
-        }
395
-
396
-        $this->_host = $matches[3];
397
-
398
-        if (isset($matches[5]) && strlen($matches[5])) {
399
-            $this->_port = $matches[5];
400
-        }
401
-        return $this;
402
-    }
403
-
404
-    /**
405
-     * Returns the path part (possibly an empty string).
406
-     *
407
-     * @return string
408
-     */
409
-    public function getPath()
410
-    {
411
-        return $this->_path;
412
-    }
413
-
414
-    /**
415
-     * Sets the path part (possibly an empty string).
416
-     *
417
-     * @param string $path a path
418
-     *
419
-     * @return $this
420
-     */
421
-    public function setPath($path)
422
-    {
423
-        $this->_path = $path;
424
-        return $this;
425
-    }
426
-
427
-    /**
428
-     * Returns the query string (excluding the leading "?"), or false if "?"
429
-     * is not present in the URL.
430
-     *
431
-     * @return  string|bool
432
-     * @see     getQueryVariables
433
-     */
434
-    public function getQuery()
435
-    {
436
-        return $this->_query;
437
-    }
438
-
439
-    /**
440
-     * Sets the query string (excluding the leading "?"). Specify false if "?"
441
-     * is not present in the URL.
442
-     *
443
-     * @param string|bool $query a query string, e.g. "foo=1&bar=2"
444
-     *
445
-     * @return $this
446
-     * @see    setQueryVariables
447
-     */
448
-    public function setQuery($query)
449
-    {
450
-        $this->_query = $query;
451
-        return $this;
452
-    }
453
-
454
-    /**
455
-     * Returns the fragment name, or false if "#" is not present in the URL.
456
-     *
457
-     * @return string|bool
458
-     */
459
-    public function getFragment()
460
-    {
461
-        return $this->_fragment;
462
-    }
463
-
464
-    /**
465
-     * Sets the fragment name. Specify false if "#" is not present in the URL.
466
-     *
467
-     * @param string|bool $fragment a fragment excluding the leading "#", or
468
-     *                              false
469
-     *
470
-     * @return $this
471
-     */
472
-    public function setFragment($fragment)
473
-    {
474
-        $this->_fragment = $fragment;
475
-        return $this;
476
-    }
477
-
478
-    /**
479
-     * Returns the query string like an array as the variables would appear in
480
-     * $_GET in a PHP script. If the URL does not contain a "?", an empty array
481
-     * is returned.
482
-     *
483
-     * @return array
484
-     */
485
-    public function getQueryVariables()
486
-    {
487
-        $separator   = $this->getOption(self::OPTION_SEPARATOR_INPUT);
488
-        $encodeKeys  = $this->getOption(self::OPTION_ENCODE_KEYS);
489
-        $useBrackets = $this->getOption(self::OPTION_USE_BRACKETS);
490
-
491
-        $return  = array();
492
-
493
-        for ($part = strtok($this->_query, $separator);
494
-            strlen($part);
495
-            $part = strtok($separator)
496
-        ) {
497
-            list($key, $value) = explode('=', $part, 2) + array(1 => '');
498
-
499
-            if ($encodeKeys) {
500
-                $key = rawurldecode($key);
501
-            }
502
-            $value = rawurldecode($value);
503
-
504
-            if ($useBrackets) {
505
-                $return = $this->_queryArrayByKey($key, $value, $return);
506
-            } else {
507
-                if (isset($return[$key])) {
508
-                    $return[$key]  = (array) $return[$key];
509
-                    $return[$key][] = $value;
510
-                } else {
511
-                    $return[$key] = $value;
512
-                }
513
-            }
514
-        }
515
-
516
-        return $return;
517
-    }
518
-
519
-    /**
520
-     * Parse a single query key=value pair into an existing php array
521
-     *
522
-     * @param string $key   query-key
523
-     * @param string $value query-value
524
-     * @param array  $array of existing query variables (if any)
525
-     *
526
-     * @return mixed
527
-     */
528
-    private function _queryArrayByKey($key, $value, array $array = array())
529
-    {
530
-        if (!strlen($key)) {
531
-            return $array;
532
-        }
533
-
534
-        $offset = $this->_queryKeyBracketOffset($key);
535
-        if ($offset === false) {
536
-            $name = $key;
537
-        } else {
538
-            $name = substr($key, 0, $offset);
539
-        }
540
-
541
-        if (!strlen($name)) {
542
-            return $array;
543
-        }
544
-
545
-        if (!$offset) {
546
-            // named value
547
-            $array[$name] = $value;
548
-        } else {
549
-            // array
550
-            $brackets = substr($key, $offset);
551
-            if (!isset($array[$name])) {
552
-                $array[$name] = null;
553
-            }
554
-            $array[$name] = $this->_queryArrayByBrackets(
555
-                $brackets, $value, $array[$name]
556
-            );
557
-        }
558
-
559
-        return $array;
560
-    }
561
-
562
-    /**
563
-     * Parse a key-buffer to place value in array
564
-     *
565
-     * @param string $buffer to consume all keys from
566
-     * @param string $value  to be set/add
567
-     * @param array  $array  to traverse and set/add value in
568
-     *
569
-     * @throws Exception
570
-     * @return array
571
-     */
572
-    private function _queryArrayByBrackets($buffer, $value, array $array = null)
573
-    {
574
-        $entry = &$array;
575
-
576
-        for ($iteration = 0; strlen($buffer); $iteration++) {
577
-            $open = $this->_queryKeyBracketOffset($buffer);
578
-            if ($open !== 0) {
579
-                // Opening bracket [ must exist at offset 0, if not, there is
580
-                // no bracket to parse and the value dropped.
581
-                // if this happens in the first iteration, this is flawed, see
582
-                // as well the second exception below.
583
-                if ($iteration) {
584
-                    break;
585
-                }
586
-                // @codeCoverageIgnoreStart
587
-                throw new Exception(
588
-                    'Net_URL2 Internal Error: '. __METHOD__ .'(): ' .
589
-                    'Opening bracket [ must exist at offset 0'
590
-                );
591
-                // @codeCoverageIgnoreEnd
592
-            }
593
-
594
-            $close = strpos($buffer, ']', 1);
595
-            if (!$close) {
596
-                // this error condition should never be reached as this is a
597
-                // private method and bracket pairs are checked beforehand.
598
-                // See as well the first exception for the opening bracket.
599
-                // @codeCoverageIgnoreStart
600
-                throw new Exception(
601
-                    'Net_URL2 Internal Error: '. __METHOD__ .'(): ' .
602
-                    'Closing bracket ] must exist, not found'
603
-                );
604
-                // @codeCoverageIgnoreEnd
605
-            }
606
-
607
-            $index = substr($buffer, 1, $close - 1);
608
-            if (strlen($index)) {
609
-                $entry = &$entry[$index];
610
-            } else {
611
-                if (!is_array($entry)) {
612
-                    $entry = array();
613
-                }
614
-                $entry[] = &$new;
615
-                $entry = &$new;
616
-                unset($new);
617
-            }
618
-            $buffer = substr($buffer, $close + 1);
619
-        }
620
-
621
-        $entry = $value;
622
-
623
-        return $array;
624
-    }
625
-
626
-    /**
627
-     * Query-key has brackets ("...[]")
628
-     *
629
-     * @param string $key query-key
630
-     *
631
-     * @return bool|int offset of opening bracket, false if no brackets
632
-     */
633
-    private function _queryKeyBracketOffset($key)
634
-    {
635
-        if (false !== $open = strpos($key, '[')
636
-            and false === strpos($key, ']', $open + 1)
637
-        ) {
638
-            $open = false;
639
-        }
640
-
641
-        return $open;
642
-    }
643
-
644
-    /**
645
-     * Sets the query string to the specified variable in the query string.
646
-     *
647
-     * @param array $array (name => value) array
648
-     *
649
-     * @return $this
650
-     */
651
-    public function setQueryVariables(array $array)
652
-    {
653
-        if (!$array) {
654
-            $this->_query = false;
655
-        } else {
656
-            $this->_query = $this->buildQuery(
657
-                $array,
658
-                $this->getOption(self::OPTION_SEPARATOR_OUTPUT)
659
-            );
660
-        }
661
-        return $this;
662
-    }
663
-
664
-    /**
665
-     * Sets the specified variable in the query string.
666
-     *
667
-     * @param string $name  variable name
668
-     * @param mixed  $value variable value
669
-     *
670
-     * @return $this
671
-     */
672
-    public function setQueryVariable($name, $value)
673
-    {
674
-        $array = $this->getQueryVariables();
675
-        $array[$name] = $value;
676
-        $this->setQueryVariables($array);
677
-        return $this;
678
-    }
679
-
680
-    /**
681
-     * Removes the specified variable from the query string.
682
-     *
683
-     * @param string $name a query string variable, e.g. "foo" in "?foo=1"
684
-     *
685
-     * @return void
686
-     */
687
-    public function unsetQueryVariable($name)
688
-    {
689
-        $array = $this->getQueryVariables();
690
-        unset($array[$name]);
691
-        $this->setQueryVariables($array);
692
-    }
693
-
694
-    /**
695
-     * Returns a string representation of this URL.
696
-     *
697
-     * @return string
698
-     */
699
-    public function getURL()
700
-    {
701
-        // See RFC 3986, section 5.3
702
-        $url = '';
703
-
704
-        if ($this->_scheme !== false) {
705
-            $url .= $this->_scheme . ':';
706
-        }
707
-
708
-        $authority = $this->getAuthority();
709
-        if ($authority === false && strtolower($this->_scheme) === 'file') {
710
-            $authority = '';
711
-        }
712
-
713
-        $url .= $this->_buildAuthorityAndPath($authority, $this->_path);
714
-
715
-        if ($this->_query !== false) {
716
-            $url .= '?' . $this->_query;
717
-        }
718
-
719
-        if ($this->_fragment !== false) {
720
-            $url .= '#' . $this->_fragment;
721
-        }
722
-
723
-        return $url;
724
-    }
725
-
726
-    /**
727
-     * Put authority and path together, wrapping authority
728
-     * into proper separators/terminators.
729
-     *
730
-     * @param string|bool $authority authority
731
-     * @param string      $path      path
732
-     *
733
-     * @return string
734
-     */
735
-    private function _buildAuthorityAndPath($authority, $path)
736
-    {
737
-        if ($authority === false) {
738
-            return $path;
739
-        }
740
-
741
-        $terminator = ($path !== '' && $path[0] !== '/') ? '/' : '';
742
-
743
-        return '//' . $authority . $terminator . $path;
744
-    }
745
-
746
-    /**
747
-     * Returns a string representation of this URL.
748
-     *
749
-     * @return string
750
-     * @link https://php.net/language.oop5.magic#object.tostring
751
-     */
752
-    public function __toString()
753
-    {
754
-        return $this->getURL();
755
-    }
756
-
757
-    /**
758
-     * Returns a normalized string representation of this URL. This is useful
759
-     * for comparison of URLs.
760
-     *
761
-     * @return string
762
-     */
763
-    public function getNormalizedURL()
764
-    {
765
-        $url = clone $this;
766
-        $url->normalize();
767
-        return $url->getUrl();
768
-    }
769
-
770
-    /**
771
-     * Normalizes the URL
772
-     *
773
-     * See RFC 3986, Section 6.  Normalization and Comparison
774
-     *
775
-     * @link https://tools.ietf.org/html/rfc3986#section-6
776
-     *
777
-     * @return void
778
-     */
779
-    public function normalize()
780
-    {
781
-        // See RFC 3986, section 6
782
-
783
-        // Scheme is case-insensitive
784
-        if ($this->_scheme) {
785
-            $this->_scheme = strtolower($this->_scheme);
786
-        }
787
-
788
-        // Hostname is case-insensitive
789
-        if ($this->_host) {
790
-            $this->_host = strtolower($this->_host);
791
-        }
792
-
793
-        // Remove default port number for known schemes (RFC 3986, section 6.2.3)
794
-        if ('' === $this->_port
795
-            || $this->_port
796
-            && $this->_scheme
797
-            && $this->_port == getservbyname($this->_scheme, 'tcp')
798
-        ) {
799
-            $this->_port = false;
800
-        }
801
-
802
-        // Normalize case of %XX percentage-encodings (RFC 3986, section 6.2.2.1)
803
-        // Normalize percentage-encoded unreserved characters (section 6.2.2.2)
804
-        $fields = array(&$this->_userinfo, &$this->_host, &$this->_path,
805
-                        &$this->_query, &$this->_fragment);
806
-        foreach ($fields as &$field) {
807
-            if ($field !== false) {
808
-                $field = $this->_normalize("$field");
809
-            }
810
-        }
811
-        unset($field);
812
-
813
-        // Path segment normalization (RFC 3986, section 6.2.2.3)
814
-        $this->_path = self::removeDotSegments($this->_path);
815
-
816
-        // Scheme based normalization (RFC 3986, section 6.2.3)
817
-        if (false !== $this->_host && '' === $this->_path) {
818
-            $this->_path = '/';
819
-        }
820
-
821
-        // path should start with '/' if there is authority (section 3.3.)
822
-        if (strlen($this->getAuthority())
823
-            && strlen($this->_path)
824
-            && $this->_path[0] !== '/'
825
-        ) {
826
-            $this->_path = '/' . $this->_path;
827
-        }
828
-    }
829
-
830
-    /**
831
-     * Normalize case of %XX percentage-encodings (RFC 3986, section 6.2.2.1)
832
-     * Normalize percentage-encoded unreserved characters (section 6.2.2.2)
833
-     *
834
-     * @param string|array $mixed string or array of strings to normalize
835
-     *
836
-     * @return string|array
837
-     * @see normalize
838
-     * @see _normalizeCallback()
839
-     */
840
-    private function _normalize($mixed)
841
-    {
842
-        return preg_replace_callback(
843
-            '((?:%[0-9a-fA-Z]{2})+)', array($this, '_normalizeCallback'),
844
-            $mixed
845
-        );
846
-    }
847
-
848
-    /**
849
-     * Callback for _normalize() of %XX percentage-encodings
850
-     *
851
-     * @param array $matches as by preg_replace_callback
852
-     *
853
-     * @return string
854
-     * @see normalize
855
-     * @see _normalize
856
-     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
857
-     */
858
-    private function _normalizeCallback($matches)
859
-    {
860
-        return self::urlencode(urldecode($matches[0]));
861
-    }
862
-
863
-    /**
864
-     * Returns whether this instance represents an absolute URL.
865
-     *
866
-     * @return bool
867
-     */
868
-    public function isAbsolute()
869
-    {
870
-        return (bool) $this->_scheme;
871
-    }
872
-
873
-    /**
874
-     * Returns an Net_URL2 instance representing an absolute URL relative to
875
-     * this URL.
876
-     *
877
-     * @param Net_URL2|string $reference relative URL
878
-     *
879
-     * @throws Exception
880
-     * @return $this
881
-     */
882
-    public function resolve($reference)
883
-    {
884
-        if (!$reference instanceof Net_URL2) {
885
-            $reference = new self($reference);
886
-        }
887
-        if (!$reference->_isFragmentOnly() && !$this->isAbsolute()) {
888
-            throw new Exception(
889
-                'Base-URL must be absolute if reference is not fragment-only'
890
-            );
891
-        }
892
-
893
-        // A non-strict parser may ignore a scheme in the reference if it is
894
-        // identical to the base URI's scheme.
895
-        if (!$this->getOption(self::OPTION_STRICT)
896
-            && $reference->_scheme == $this->_scheme
897
-        ) {
898
-            $reference->_scheme = false;
899
-        }
900
-
901
-        $target = new self('');
902
-        if ($reference->_scheme !== false) {
903
-            $target->_scheme = $reference->_scheme;
904
-            $target->setAuthority($reference->getAuthority());
905
-            $target->_path  = self::removeDotSegments($reference->_path);
906
-            $target->_query = $reference->_query;
907
-        } else {
908
-            $authority = $reference->getAuthority();
909
-            if ($authority !== false) {
910
-                $target->setAuthority($authority);
911
-                $target->_path  = self::removeDotSegments($reference->_path);
912
-                $target->_query = $reference->_query;
913
-            } else {
914
-                if ($reference->_path == '') {
915
-                    $target->_path = $this->_path;
916
-                    if ($reference->_query !== false) {
917
-                        $target->_query = $reference->_query;
918
-                    } else {
919
-                        $target->_query = $this->_query;
920
-                    }
921
-                } else {
922
-                    if (substr($reference->_path, 0, 1) == '/') {
923
-                        $target->_path = self::removeDotSegments($reference->_path);
924
-                    } else {
925
-                        // Merge paths (RFC 3986, section 5.2.3)
926
-                        if ($this->_host !== false && $this->_path == '') {
927
-                            $target->_path = '/' . $reference->_path;
928
-                        } else {
929
-                            $i = strrpos($this->_path, '/');
930
-                            if ($i !== false) {
931
-                                $target->_path = substr($this->_path, 0, $i + 1);
932
-                            }
933
-                            $target->_path .= $reference->_path;
934
-                        }
935
-                        $target->_path = self::removeDotSegments($target->_path);
936
-                    }
937
-                    $target->_query = $reference->_query;
938
-                }
939
-                $target->setAuthority($this->getAuthority());
940
-            }
941
-            $target->_scheme = $this->_scheme;
942
-        }
943
-
944
-        $target->_fragment = $reference->_fragment;
945
-
946
-        return $target;
947
-    }
948
-
949
-    /**
950
-     * URL is fragment-only
951
-     *
952
-     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
953
-     * @return bool
954
-     */
955
-    private function _isFragmentOnly()
956
-    {
957
-        return (
958
-            $this->_fragment !== false
959
-            && $this->_query === false
960
-            && $this->_path === ''
961
-            && $this->_port === false
962
-            && $this->_host === false
963
-            && $this->_userinfo === false
964
-            && $this->_scheme === false
965
-        );
966
-    }
967
-
968
-    /**
969
-     * Removes dots as described in RFC 3986, section 5.2.4, e.g.
970
-     * "/foo/../bar/baz" => "/bar/baz"
971
-     *
972
-     * @param string $path a path
973
-     *
974
-     * @return string a path
975
-     */
976
-    public static function removeDotSegments($path)
977
-    {
978
-        $path = (string) $path;
979
-        $output = '';
980
-
981
-        // Make sure not to be trapped in an infinite loop due to a bug in this
982
-        // method
983
-        $loopLimit = 256;
984
-        $j = 0;
985
-        while ('' !== $path && $j++ < $loopLimit) {
986
-            if (substr($path, 0, 2) === './') {
987
-                // Step 2.A
988
-                $path = substr($path, 2);
989
-            } elseif (substr($path, 0, 3) === '../') {
990
-                // Step 2.A
991
-                $path = substr($path, 3);
992
-            } elseif (substr($path, 0, 3) === '/./' || $path === '/.') {
993
-                // Step 2.B
994
-                $path = '/' . substr($path, 3);
995
-            } elseif (substr($path, 0, 4) === '/../' || $path === '/..') {
996
-                // Step 2.C
997
-                $path   = '/' . substr($path, 4);
998
-                $i      = strrpos($output, '/');
999
-                $output = $i === false ? '' : substr($output, 0, $i);
1000
-            } elseif ($path === '.' || $path === '..') {
1001
-                // Step 2.D
1002
-                $path = '';
1003
-            } else {
1004
-                // Step 2.E
1005
-                $i = strpos($path, '/', $path[0] === '/');
1006
-                if ($i === false) {
1007
-                    $output .= $path;
1008
-                    $path = '';
1009
-                    break;
1010
-                }
1011
-                $output .= substr($path, 0, $i);
1012
-                $path = substr($path, $i);
1013
-            }
1014
-        }
1015
-
1016
-        if ($path !== '') {
1017
-            $message = sprintf(
1018
-                'Unable to remove dot segments; hit loop limit %d (left: %s)',
1019
-                $j, var_export($path, true)
1020
-            );
1021
-            trigger_error($message, E_USER_WARNING);
1022
-        }
1023
-
1024
-        return $output;
1025
-    }
1026
-
1027
-    /**
1028
-     * Percent-encodes all non-alphanumeric characters except these: _ . - ~
1029
-     * Similar to PHP's rawurlencode(), except that it also encodes ~ in PHP
1030
-     * 5.2.x and earlier.
1031
-     *
1032
-     * @param string $string string to encode
1033
-     *
1034
-     * @return string
1035
-     */
1036
-    public static function urlencode($string)
1037
-    {
1038
-        $encoded = rawurlencode($string);
1039
-
1040
-        // This is only necessary in PHP < 5.3.
1041
-        $encoded = str_replace('%7E', '~', $encoded);
1042
-        return $encoded;
1043
-    }
1044
-
1045
-    /**
1046
-     * Returns a Net_URL2 instance representing the canonical URL of the
1047
-     * currently executing PHP script.
1048
-     *
1049
-     * @throws Exception
1050
-     * @return string
1051
-     */
1052
-    public static function getCanonical()
1053
-    {
1054
-        if (!isset($_SERVER['REQUEST_METHOD'])) {
1055
-            // ALERT - no current URL
1056
-            throw new Exception('Script was not called through a webserver');
1057
-        }
1058
-
1059
-        // Begin with a relative URL
1060
-        $url = new self($_SERVER['PHP_SELF']);
1061
-        $url->_scheme = isset($_SERVER['HTTPS']) ? 'https' : 'http';
1062
-        $url->_host   = $_SERVER['SERVER_NAME'];
1063
-        $port = $_SERVER['SERVER_PORT'];
1064
-        if ($url->_scheme == 'http' && $port != 80
1065
-            || $url->_scheme == 'https' && $port != 443
1066
-        ) {
1067
-            $url->_port = $port;
1068
-        }
1069
-        return $url;
1070
-    }
1071
-
1072
-    /**
1073
-     * Returns the URL used to retrieve the current request.
1074
-     *
1075
-     * @return  string
1076
-     */
1077
-    public static function getRequestedURL()
1078
-    {
1079
-        return self::getRequested()->getUrl();
1080
-    }
1081
-
1082
-    /**
1083
-     * Returns a Net_URL2 instance representing the URL used to retrieve the
1084
-     * current request.
1085
-     *
1086
-     * @throws Exception
1087
-     * @return $this
1088
-     */
1089
-    public static function getRequested()
1090
-    {
1091
-        if (!isset($_SERVER['REQUEST_METHOD'])) {
1092
-            // ALERT - no current URL
1093
-            throw new Exception('Script was not called through a webserver');
1094
-        }
1095
-
1096
-        // Begin with a relative URL
1097
-        $url = new self($_SERVER['REQUEST_URI']);
1098
-        $url->_scheme = isset($_SERVER['HTTPS']) ? 'https' : 'http';
1099
-        // Set host and possibly port
1100
-        $url->setAuthority($_SERVER['HTTP_HOST']);
1101
-        return $url;
1102
-    }
1103
-
1104
-    /**
1105
-     * Returns the value of the specified option.
1106
-     *
1107
-     * @param string $optionName The name of the option to retrieve
1108
-     *
1109
-     * @return mixed
1110
-     */
1111
-    public function getOption($optionName)
1112
-    {
1113
-        return isset($this->_options[$optionName])
1114
-            ? $this->_options[$optionName] : false;
1115
-    }
1116
-
1117
-    /**
1118
-     * A simple version of http_build_query in userland. The encoded string is
1119
-     * percentage encoded according to RFC 3986.
1120
-     *
1121
-     * @param array  $data      An array, which has to be converted into
1122
-     *                          QUERY_STRING. Anything is possible.
1123
-     * @param string $separator Separator {@link self::OPTION_SEPARATOR_OUTPUT}
1124
-     * @param string $key       For stacked values (arrays in an array).
1125
-     *
1126
-     * @return string
1127
-     */
1128
-    protected function buildQuery(array $data, $separator, $key = null)
1129
-    {
1130
-        $query = array();
1131
-        $drop_names = (
1132
-            $this->_options[self::OPTION_DROP_SEQUENCE] === true
1133
-            && array_keys($data) === array_keys(array_values($data))
1134
-        );
1135
-        foreach ($data as $name => $value) {
1136
-            if ($this->getOption(self::OPTION_ENCODE_KEYS) === true) {
1137
-                $name = rawurlencode($name);
1138
-            }
1139
-            if ($key !== null) {
1140
-                if ($this->getOption(self::OPTION_USE_BRACKETS) === true) {
1141
-                    $drop_names && $name = '';
1142
-                    $name = $key . '[' . $name . ']';
1143
-                } else {
1144
-                    $name = $key;
1145
-                }
1146
-            }
1147
-            if (is_array($value)) {
1148
-                $query[] = $this->buildQuery($value, $separator, $name);
1149
-            } else {
1150
-                $query[] = $name . '=' . rawurlencode($value);
1151
-            }
1152
-        }
1153
-        return implode($separator, $query);
1154
-    }
1155
-
1156
-    /**
1157
-     * This method uses a regex to parse the url into the designated parts.
1158
-     *
1159
-     * @param string $url URL
1160
-     *
1161
-     * @return void
1162
-     * @uses   self::$_scheme, self::setAuthority(), self::$_path, self::$_query,
1163
-     *         self::$_fragment
1164
-     * @see    __construct
1165
-     */
1166
-    protected function parseUrl($url)
1167
-    {
1168
-        // The regular expression is copied verbatim from RFC 3986, appendix B.
1169
-        // The expression does not validate the URL but matches any string.
1170
-        preg_match(
1171
-            '(^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?)',
1172
-            $url, $matches
1173
-        );
1174
-
1175
-        // "path" is always present (possibly as an empty string); the rest
1176
-        // are optional.
1177
-        $this->_scheme   = !empty($matches[1]) ? $matches[2] : false;
1178
-        $this->setAuthority(!empty($matches[3]) ? $matches[4] : false);
1179
-        $this->_path     = $this->_encodeData($matches[5]);
1180
-        $this->_query    = !empty($matches[6])
1181
-                           ? $this->_encodeData($matches[7])
1182
-                           : false
1183
-            ;
1184
-        $this->_fragment = !empty($matches[8]) ? $matches[9] : false;
1185
-    }
1186
-
1187
-    /**
1188
-     * Encode characters that might have been forgotten to encode when passing
1189
-     * in an URL. Applied onto Userinfo, Path and Query.
1190
-     *
1191
-     * @param string $url URL
1192
-     *
1193
-     * @return string
1194
-     * @see parseUrl
1195
-     * @see setAuthority
1196
-     * @link https://pear.php.net/bugs/bug.php?id=20425
1197
-     */
1198
-    private function _encodeData($url)
1199
-    {
1200
-        return preg_replace_callback(
1201
-            '([\x-\x20\x22\x3C\x3E\x7F-\xFF]+)',
1202
-            array($this, '_encodeCallback'), $url
1203
-        );
1204
-    }
1205
-
1206
-    /**
1207
-     * callback for encoding character data
1208
-     *
1209
-     * @param array $matches Matches
1210
-     *
1211
-     * @return string
1212
-     * @see _encodeData
1213
-     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
1214
-     */
1215
-    private function _encodeCallback(array $matches)
1216
-    {
1217
-        return rawurlencode($matches[0]);
1218
-    }
59
+	/**
60
+	 * Do strict parsing in resolve() (see RFC 3986, section 5.2.2). Default
61
+	 * is true.
62
+	 */
63
+	const OPTION_STRICT = 'strict';
64
+
65
+	/**
66
+	 * Represent arrays in query using PHP's [] notation. Default is true.
67
+	 */
68
+	const OPTION_USE_BRACKETS = 'use_brackets';
69
+
70
+	/**
71
+	 * Drop zero-based integer sequences in query using PHP's [] notation. Default
72
+	 * is true.
73
+	 */
74
+	const OPTION_DROP_SEQUENCE = 'drop_sequence';
75
+
76
+	/**
77
+	 * URL-encode query variable keys. Default is true.
78
+	 */
79
+	const OPTION_ENCODE_KEYS = 'encode_keys';
80
+
81
+	/**
82
+	 * Query variable separators when parsing the query string. Every character
83
+	 * is considered a separator. Default is "&".
84
+	 */
85
+	const OPTION_SEPARATOR_INPUT = 'input_separator';
86
+
87
+	/**
88
+	 * Query variable separator used when generating the query string. Default
89
+	 * is "&".
90
+	 */
91
+	const OPTION_SEPARATOR_OUTPUT = 'output_separator';
92
+
93
+	/**
94
+	 * Default options corresponds to how PHP handles $_GET.
95
+	 */
96
+	private $_options = array(
97
+		self::OPTION_STRICT           => true,
98
+		self::OPTION_USE_BRACKETS     => true,
99
+		self::OPTION_DROP_SEQUENCE    => true,
100
+		self::OPTION_ENCODE_KEYS      => true,
101
+		self::OPTION_SEPARATOR_INPUT  => '&',
102
+		self::OPTION_SEPARATOR_OUTPUT => '&',
103
+		);
104
+
105
+	/**
106
+	 * @var  string|bool
107
+	 */
108
+	private $_scheme = false;
109
+
110
+	/**
111
+	 * @var  string|bool
112
+	 */
113
+	private $_userinfo = false;
114
+
115
+	/**
116
+	 * @var  string|bool
117
+	 */
118
+	private $_host = false;
119
+
120
+	/**
121
+	 * @var  string|bool
122
+	 */
123
+	private $_port = false;
124
+
125
+	/**
126
+	 * @var  string
127
+	 */
128
+	private $_path = '';
129
+
130
+	/**
131
+	 * @var  string|bool
132
+	 */
133
+	private $_query = false;
134
+
135
+	/**
136
+	 * @var  string|bool
137
+	 */
138
+	private $_fragment = false;
139
+
140
+	/**
141
+	 * Constructor.
142
+	 *
143
+	 * @param string $url     an absolute or relative URL
144
+	 * @param array  $options an array of OPTION_xxx constants
145
+	 *
146
+	 * @uses   self::parseUrl()
147
+	 */
148
+	public function __construct($url, array $options = array())
149
+	{
150
+		foreach ($options as $optionName => $value) {
151
+			if (array_key_exists($optionName, $this->_options)) {
152
+				$this->_options[$optionName] = $value;
153
+			}
154
+		}
155
+
156
+		$this->parseUrl($url);
157
+	}
158
+
159
+	/**
160
+	 * Magic Setter.
161
+	 *
162
+	 * This method will magically set the value of a private variable ($var)
163
+	 * with the value passed as the args
164
+	 *
165
+	 * @param string $var The private variable to set.
166
+	 * @param mixed  $arg An argument of any type.
167
+	 *
168
+	 * @return void
169
+	 */
170
+	public function __set($var, $arg)
171
+	{
172
+		$method = 'set' . $var;
173
+		if (method_exists($this, $method)) {
174
+			$this->$method($arg);
175
+		}
176
+	}
177
+
178
+	/**
179
+	 * Magic Getter.
180
+	 *
181
+	 * This is the magic get method to retrieve the private variable
182
+	 * that was set by either __set() or it's setter...
183
+	 *
184
+	 * @param string $var The property name to retrieve.
185
+	 *
186
+	 * @return mixed  $this->$var Either a boolean false if the
187
+	 *                            property is not set or the value
188
+	 *                            of the private property.
189
+	 */
190
+	public function __get($var)
191
+	{
192
+		$method = 'get' . $var;
193
+		if (method_exists($this, $method)) {
194
+			return $this->$method();
195
+		}
196
+
197
+		return false;
198
+	}
199
+
200
+	/**
201
+	 * Returns the scheme, e.g. "http" or "urn", or false if there is no
202
+	 * scheme specified, i.e. if this is a relative URL.
203
+	 *
204
+	 * @return string|bool
205
+	 */
206
+	public function getScheme()
207
+	{
208
+		return $this->_scheme;
209
+	}
210
+
211
+	/**
212
+	 * Sets the scheme, e.g. "http" or "urn". Specify false if there is no
213
+	 * scheme specified, i.e. if this is a relative URL.
214
+	 *
215
+	 * @param string|bool $scheme e.g. "http" or "urn", or false if there is no
216
+	 *                            scheme specified, i.e. if this is a relative
217
+	 *                            URL
218
+	 *
219
+	 * @return $this
220
+	 * @see    getScheme
221
+	 */
222
+	public function setScheme($scheme)
223
+	{
224
+		$this->_scheme = $scheme;
225
+		return $this;
226
+	}
227
+
228
+	/**
229
+	 * Returns the user part of the userinfo part (the part preceding the first
230
+	 *  ":"), or false if there is no userinfo part.
231
+	 *
232
+	 * @return string|bool
233
+	 */
234
+	public function getUser()
235
+	{
236
+		return $this->_userinfo !== false
237
+			? preg_replace('(:.*$)', '', $this->_userinfo)
238
+			: false;
239
+	}
240
+
241
+	/**
242
+	 * Returns the password part of the userinfo part (the part after the first
243
+	 *  ":"), or false if there is no userinfo part (i.e. the URL does not
244
+	 * contain "@" in front of the hostname) or the userinfo part does not
245
+	 * contain ":".
246
+	 *
247
+	 * @return string|bool
248
+	 */
249
+	public function getPassword()
250
+	{
251
+		return $this->_userinfo !== false
252
+			? substr(strstr($this->_userinfo, ':'), 1)
253
+			: false;
254
+	}
255
+
256
+	/**
257
+	 * Returns the userinfo part, or false if there is none, i.e. if the
258
+	 * authority part does not contain "@".
259
+	 *
260
+	 * @return string|bool
261
+	 */
262
+	public function getUserinfo()
263
+	{
264
+		return $this->_userinfo;
265
+	}
266
+
267
+	/**
268
+	 * Sets the userinfo part. If two arguments are passed, they are combined
269
+	 * in the userinfo part as username ":" password.
270
+	 *
271
+	 * @param string|bool $userinfo userinfo or username
272
+	 * @param string|bool $password optional password, or false
273
+	 *
274
+	 * @return $this
275
+	 */
276
+	public function setUserinfo($userinfo, $password = false)
277
+	{
278
+		if ($password !== false) {
279
+			$userinfo .= ':' . $password;
280
+		}
281
+
282
+		if ($userinfo !== false) {
283
+			$userinfo = $this->_encodeData($userinfo);
284
+		}
285
+
286
+		$this->_userinfo = $userinfo;
287
+		return $this;
288
+	}
289
+
290
+	/**
291
+	 * Returns the host part, or false if there is no authority part, e.g.
292
+	 * relative URLs.
293
+	 *
294
+	 * @return string|bool a hostname, an IP address, or false
295
+	 */
296
+	public function getHost()
297
+	{
298
+		return $this->_host;
299
+	}
300
+
301
+	/**
302
+	 * Sets the host part. Specify false if there is no authority part, e.g.
303
+	 * relative URLs.
304
+	 *
305
+	 * @param string|bool $host a hostname, an IP address, or false
306
+	 *
307
+	 * @return $this
308
+	 */
309
+	public function setHost($host)
310
+	{
311
+		$this->_host = $host;
312
+		return $this;
313
+	}
314
+
315
+	/**
316
+	 * Returns the port number, or false if there is no port number specified,
317
+	 * i.e. if the default port is to be used.
318
+	 *
319
+	 * @return string|bool
320
+	 */
321
+	public function getPort()
322
+	{
323
+		return $this->_port;
324
+	}
325
+
326
+	/**
327
+	 * Sets the port number. Specify false if there is no port number specified,
328
+	 * i.e. if the default port is to be used.
329
+	 *
330
+	 * @param string|bool $port a port number, or false
331
+	 *
332
+	 * @return $this
333
+	 */
334
+	public function setPort($port)
335
+	{
336
+		$this->_port = $port;
337
+		return $this;
338
+	}
339
+
340
+	/**
341
+	 * Returns the authority part, i.e. [ userinfo "@" ] host [ ":" port ], or
342
+	 * false if there is no authority.
343
+	 *
344
+	 * @return string|bool
345
+	 */
346
+	public function getAuthority()
347
+	{
348
+		if (false === $this->_host) {
349
+			return false;
350
+		}
351
+
352
+		$authority = '';
353
+
354
+		if (strlen($this->_userinfo)) {
355
+			$authority .= $this->_userinfo . '@';
356
+		}
357
+
358
+		$authority .= $this->_host;
359
+
360
+		if ($this->_port !== false) {
361
+			$authority .= ':' . $this->_port;
362
+		}
363
+
364
+		return $authority;
365
+	}
366
+
367
+	/**
368
+	 * Sets the authority part, i.e. [ userinfo "@" ] host [ ":" port ]. Specify
369
+	 * false if there is no authority.
370
+	 *
371
+	 * @param string|bool $authority a hostname or an IP address, possibly
372
+	 *                                with userinfo prefixed and port number
373
+	 *                                appended, e.g. "foo:[email protected]:81".
374
+	 *
375
+	 * @return $this
376
+	 */
377
+	public function setAuthority($authority)
378
+	{
379
+		$this->_userinfo = false;
380
+		$this->_host     = false;
381
+		$this->_port     = false;
382
+
383
+		if ('' === $authority) {
384
+			$this->_host = $authority;
385
+			return $this;
386
+		}
387
+
388
+		if (!preg_match('(^(([^\@]*)\@)?(.+?)(:(\d*))?$)', $authority, $matches)) {
389
+			return $this;
390
+		}
391
+
392
+		if ($matches[1]) {
393
+			$this->_userinfo = $this->_encodeData($matches[2]);
394
+		}
395
+
396
+		$this->_host = $matches[3];
397
+
398
+		if (isset($matches[5]) && strlen($matches[5])) {
399
+			$this->_port = $matches[5];
400
+		}
401
+		return $this;
402
+	}
403
+
404
+	/**
405
+	 * Returns the path part (possibly an empty string).
406
+	 *
407
+	 * @return string
408
+	 */
409
+	public function getPath()
410
+	{
411
+		return $this->_path;
412
+	}
413
+
414
+	/**
415
+	 * Sets the path part (possibly an empty string).
416
+	 *
417
+	 * @param string $path a path
418
+	 *
419
+	 * @return $this
420
+	 */
421
+	public function setPath($path)
422
+	{
423
+		$this->_path = $path;
424
+		return $this;
425
+	}
426
+
427
+	/**
428
+	 * Returns the query string (excluding the leading "?"), or false if "?"
429
+	 * is not present in the URL.
430
+	 *
431
+	 * @return  string|bool
432
+	 * @see     getQueryVariables
433
+	 */
434
+	public function getQuery()
435
+	{
436
+		return $this->_query;
437
+	}
438
+
439
+	/**
440
+	 * Sets the query string (excluding the leading "?"). Specify false if "?"
441
+	 * is not present in the URL.
442
+	 *
443
+	 * @param string|bool $query a query string, e.g. "foo=1&bar=2"
444
+	 *
445
+	 * @return $this
446
+	 * @see    setQueryVariables
447
+	 */
448
+	public function setQuery($query)
449
+	{
450
+		$this->_query = $query;
451
+		return $this;
452
+	}
453
+
454
+	/**
455
+	 * Returns the fragment name, or false if "#" is not present in the URL.
456
+	 *
457
+	 * @return string|bool
458
+	 */
459
+	public function getFragment()
460
+	{
461
+		return $this->_fragment;
462
+	}
463
+
464
+	/**
465
+	 * Sets the fragment name. Specify false if "#" is not present in the URL.
466
+	 *
467
+	 * @param string|bool $fragment a fragment excluding the leading "#", or
468
+	 *                              false
469
+	 *
470
+	 * @return $this
471
+	 */
472
+	public function setFragment($fragment)
473
+	{
474
+		$this->_fragment = $fragment;
475
+		return $this;
476
+	}
477
+
478
+	/**
479
+	 * Returns the query string like an array as the variables would appear in
480
+	 * $_GET in a PHP script. If the URL does not contain a "?", an empty array
481
+	 * is returned.
482
+	 *
483
+	 * @return array
484
+	 */
485
+	public function getQueryVariables()
486
+	{
487
+		$separator   = $this->getOption(self::OPTION_SEPARATOR_INPUT);
488
+		$encodeKeys  = $this->getOption(self::OPTION_ENCODE_KEYS);
489
+		$useBrackets = $this->getOption(self::OPTION_USE_BRACKETS);
490
+
491
+		$return  = array();
492
+
493
+		for ($part = strtok($this->_query, $separator);
494
+			strlen($part);
495
+			$part = strtok($separator)
496
+		) {
497
+			list($key, $value) = explode('=', $part, 2) + array(1 => '');
498
+
499
+			if ($encodeKeys) {
500
+				$key = rawurldecode($key);
501
+			}
502
+			$value = rawurldecode($value);
503
+
504
+			if ($useBrackets) {
505
+				$return = $this->_queryArrayByKey($key, $value, $return);
506
+			} else {
507
+				if (isset($return[$key])) {
508
+					$return[$key]  = (array) $return[$key];
509
+					$return[$key][] = $value;
510
+				} else {
511
+					$return[$key] = $value;
512
+				}
513
+			}
514
+		}
515
+
516
+		return $return;
517
+	}
518
+
519
+	/**
520
+	 * Parse a single query key=value pair into an existing php array
521
+	 *
522
+	 * @param string $key   query-key
523
+	 * @param string $value query-value
524
+	 * @param array  $array of existing query variables (if any)
525
+	 *
526
+	 * @return mixed
527
+	 */
528
+	private function _queryArrayByKey($key, $value, array $array = array())
529
+	{
530
+		if (!strlen($key)) {
531
+			return $array;
532
+		}
533
+
534
+		$offset = $this->_queryKeyBracketOffset($key);
535
+		if ($offset === false) {
536
+			$name = $key;
537
+		} else {
538
+			$name = substr($key, 0, $offset);
539
+		}
540
+
541
+		if (!strlen($name)) {
542
+			return $array;
543
+		}
544
+
545
+		if (!$offset) {
546
+			// named value
547
+			$array[$name] = $value;
548
+		} else {
549
+			// array
550
+			$brackets = substr($key, $offset);
551
+			if (!isset($array[$name])) {
552
+				$array[$name] = null;
553
+			}
554
+			$array[$name] = $this->_queryArrayByBrackets(
555
+				$brackets, $value, $array[$name]
556
+			);
557
+		}
558
+
559
+		return $array;
560
+	}
561
+
562
+	/**
563
+	 * Parse a key-buffer to place value in array
564
+	 *
565
+	 * @param string $buffer to consume all keys from
566
+	 * @param string $value  to be set/add
567
+	 * @param array  $array  to traverse and set/add value in
568
+	 *
569
+	 * @throws Exception
570
+	 * @return array
571
+	 */
572
+	private function _queryArrayByBrackets($buffer, $value, array $array = null)
573
+	{
574
+		$entry = &$array;
575
+
576
+		for ($iteration = 0; strlen($buffer); $iteration++) {
577
+			$open = $this->_queryKeyBracketOffset($buffer);
578
+			if ($open !== 0) {
579
+				// Opening bracket [ must exist at offset 0, if not, there is
580
+				// no bracket to parse and the value dropped.
581
+				// if this happens in the first iteration, this is flawed, see
582
+				// as well the second exception below.
583
+				if ($iteration) {
584
+					break;
585
+				}
586
+				// @codeCoverageIgnoreStart
587
+				throw new Exception(
588
+					'Net_URL2 Internal Error: '. __METHOD__ .'(): ' .
589
+					'Opening bracket [ must exist at offset 0'
590
+				);
591
+				// @codeCoverageIgnoreEnd
592
+			}
593
+
594
+			$close = strpos($buffer, ']', 1);
595
+			if (!$close) {
596
+				// this error condition should never be reached as this is a
597
+				// private method and bracket pairs are checked beforehand.
598
+				// See as well the first exception for the opening bracket.
599
+				// @codeCoverageIgnoreStart
600
+				throw new Exception(
601
+					'Net_URL2 Internal Error: '. __METHOD__ .'(): ' .
602
+					'Closing bracket ] must exist, not found'
603
+				);
604
+				// @codeCoverageIgnoreEnd
605
+			}
606
+
607
+			$index = substr($buffer, 1, $close - 1);
608
+			if (strlen($index)) {
609
+				$entry = &$entry[$index];
610
+			} else {
611
+				if (!is_array($entry)) {
612
+					$entry = array();
613
+				}
614
+				$entry[] = &$new;
615
+				$entry = &$new;
616
+				unset($new);
617
+			}
618
+			$buffer = substr($buffer, $close + 1);
619
+		}
620
+
621
+		$entry = $value;
622
+
623
+		return $array;
624
+	}
625
+
626
+	/**
627
+	 * Query-key has brackets ("...[]")
628
+	 *
629
+	 * @param string $key query-key
630
+	 *
631
+	 * @return bool|int offset of opening bracket, false if no brackets
632
+	 */
633
+	private function _queryKeyBracketOffset($key)
634
+	{
635
+		if (false !== $open = strpos($key, '[')
636
+			and false === strpos($key, ']', $open + 1)
637
+		) {
638
+			$open = false;
639
+		}
640
+
641
+		return $open;
642
+	}
643
+
644
+	/**
645
+	 * Sets the query string to the specified variable in the query string.
646
+	 *
647
+	 * @param array $array (name => value) array
648
+	 *
649
+	 * @return $this
650
+	 */
651
+	public function setQueryVariables(array $array)
652
+	{
653
+		if (!$array) {
654
+			$this->_query = false;
655
+		} else {
656
+			$this->_query = $this->buildQuery(
657
+				$array,
658
+				$this->getOption(self::OPTION_SEPARATOR_OUTPUT)
659
+			);
660
+		}
661
+		return $this;
662
+	}
663
+
664
+	/**
665
+	 * Sets the specified variable in the query string.
666
+	 *
667
+	 * @param string $name  variable name
668
+	 * @param mixed  $value variable value
669
+	 *
670
+	 * @return $this
671
+	 */
672
+	public function setQueryVariable($name, $value)
673
+	{
674
+		$array = $this->getQueryVariables();
675
+		$array[$name] = $value;
676
+		$this->setQueryVariables($array);
677
+		return $this;
678
+	}
679
+
680
+	/**
681
+	 * Removes the specified variable from the query string.
682
+	 *
683
+	 * @param string $name a query string variable, e.g. "foo" in "?foo=1"
684
+	 *
685
+	 * @return void
686
+	 */
687
+	public function unsetQueryVariable($name)
688
+	{
689
+		$array = $this->getQueryVariables();
690
+		unset($array[$name]);
691
+		$this->setQueryVariables($array);
692
+	}
693
+
694
+	/**
695
+	 * Returns a string representation of this URL.
696
+	 *
697
+	 * @return string
698
+	 */
699
+	public function getURL()
700
+	{
701
+		// See RFC 3986, section 5.3
702
+		$url = '';
703
+
704
+		if ($this->_scheme !== false) {
705
+			$url .= $this->_scheme . ':';
706
+		}
707
+
708
+		$authority = $this->getAuthority();
709
+		if ($authority === false && strtolower($this->_scheme) === 'file') {
710
+			$authority = '';
711
+		}
712
+
713
+		$url .= $this->_buildAuthorityAndPath($authority, $this->_path);
714
+
715
+		if ($this->_query !== false) {
716
+			$url .= '?' . $this->_query;
717
+		}
718
+
719
+		if ($this->_fragment !== false) {
720
+			$url .= '#' . $this->_fragment;
721
+		}
722
+
723
+		return $url;
724
+	}
725
+
726
+	/**
727
+	 * Put authority and path together, wrapping authority
728
+	 * into proper separators/terminators.
729
+	 *
730
+	 * @param string|bool $authority authority
731
+	 * @param string      $path      path
732
+	 *
733
+	 * @return string
734
+	 */
735
+	private function _buildAuthorityAndPath($authority, $path)
736
+	{
737
+		if ($authority === false) {
738
+			return $path;
739
+		}
740
+
741
+		$terminator = ($path !== '' && $path[0] !== '/') ? '/' : '';
742
+
743
+		return '//' . $authority . $terminator . $path;
744
+	}
745
+
746
+	/**
747
+	 * Returns a string representation of this URL.
748
+	 *
749
+	 * @return string
750
+	 * @link https://php.net/language.oop5.magic#object.tostring
751
+	 */
752
+	public function __toString()
753
+	{
754
+		return $this->getURL();
755
+	}
756
+
757
+	/**
758
+	 * Returns a normalized string representation of this URL. This is useful
759
+	 * for comparison of URLs.
760
+	 *
761
+	 * @return string
762
+	 */
763
+	public function getNormalizedURL()
764
+	{
765
+		$url = clone $this;
766
+		$url->normalize();
767
+		return $url->getUrl();
768
+	}
769
+
770
+	/**
771
+	 * Normalizes the URL
772
+	 *
773
+	 * See RFC 3986, Section 6.  Normalization and Comparison
774
+	 *
775
+	 * @link https://tools.ietf.org/html/rfc3986#section-6
776
+	 *
777
+	 * @return void
778
+	 */
779
+	public function normalize()
780
+	{
781
+		// See RFC 3986, section 6
782
+
783
+		// Scheme is case-insensitive
784
+		if ($this->_scheme) {
785
+			$this->_scheme = strtolower($this->_scheme);
786
+		}
787
+
788
+		// Hostname is case-insensitive
789
+		if ($this->_host) {
790
+			$this->_host = strtolower($this->_host);
791
+		}
792
+
793
+		// Remove default port number for known schemes (RFC 3986, section 6.2.3)
794
+		if ('' === $this->_port
795
+			|| $this->_port
796
+			&& $this->_scheme
797
+			&& $this->_port == getservbyname($this->_scheme, 'tcp')
798
+		) {
799
+			$this->_port = false;
800
+		}
801
+
802
+		// Normalize case of %XX percentage-encodings (RFC 3986, section 6.2.2.1)
803
+		// Normalize percentage-encoded unreserved characters (section 6.2.2.2)
804
+		$fields = array(&$this->_userinfo, &$this->_host, &$this->_path,
805
+						&$this->_query, &$this->_fragment);
806
+		foreach ($fields as &$field) {
807
+			if ($field !== false) {
808
+				$field = $this->_normalize("$field");
809
+			}
810
+		}
811
+		unset($field);
812
+
813
+		// Path segment normalization (RFC 3986, section 6.2.2.3)
814
+		$this->_path = self::removeDotSegments($this->_path);
815
+
816
+		// Scheme based normalization (RFC 3986, section 6.2.3)
817
+		if (false !== $this->_host && '' === $this->_path) {
818
+			$this->_path = '/';
819
+		}
820
+
821
+		// path should start with '/' if there is authority (section 3.3.)
822
+		if (strlen($this->getAuthority())
823
+			&& strlen($this->_path)
824
+			&& $this->_path[0] !== '/'
825
+		) {
826
+			$this->_path = '/' . $this->_path;
827
+		}
828
+	}
829
+
830
+	/**
831
+	 * Normalize case of %XX percentage-encodings (RFC 3986, section 6.2.2.1)
832
+	 * Normalize percentage-encoded unreserved characters (section 6.2.2.2)
833
+	 *
834
+	 * @param string|array $mixed string or array of strings to normalize
835
+	 *
836
+	 * @return string|array
837
+	 * @see normalize
838
+	 * @see _normalizeCallback()
839
+	 */
840
+	private function _normalize($mixed)
841
+	{
842
+		return preg_replace_callback(
843
+			'((?:%[0-9a-fA-Z]{2})+)', array($this, '_normalizeCallback'),
844
+			$mixed
845
+		);
846
+	}
847
+
848
+	/**
849
+	 * Callback for _normalize() of %XX percentage-encodings
850
+	 *
851
+	 * @param array $matches as by preg_replace_callback
852
+	 *
853
+	 * @return string
854
+	 * @see normalize
855
+	 * @see _normalize
856
+	 * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
857
+	 */
858
+	private function _normalizeCallback($matches)
859
+	{
860
+		return self::urlencode(urldecode($matches[0]));
861
+	}
862
+
863
+	/**
864
+	 * Returns whether this instance represents an absolute URL.
865
+	 *
866
+	 * @return bool
867
+	 */
868
+	public function isAbsolute()
869
+	{
870
+		return (bool) $this->_scheme;
871
+	}
872
+
873
+	/**
874
+	 * Returns an Net_URL2 instance representing an absolute URL relative to
875
+	 * this URL.
876
+	 *
877
+	 * @param Net_URL2|string $reference relative URL
878
+	 *
879
+	 * @throws Exception
880
+	 * @return $this
881
+	 */
882
+	public function resolve($reference)
883
+	{
884
+		if (!$reference instanceof Net_URL2) {
885
+			$reference = new self($reference);
886
+		}
887
+		if (!$reference->_isFragmentOnly() && !$this->isAbsolute()) {
888
+			throw new Exception(
889
+				'Base-URL must be absolute if reference is not fragment-only'
890
+			);
891
+		}
892
+
893
+		// A non-strict parser may ignore a scheme in the reference if it is
894
+		// identical to the base URI's scheme.
895
+		if (!$this->getOption(self::OPTION_STRICT)
896
+			&& $reference->_scheme == $this->_scheme
897
+		) {
898
+			$reference->_scheme = false;
899
+		}
900
+
901
+		$target = new self('');
902
+		if ($reference->_scheme !== false) {
903
+			$target->_scheme = $reference->_scheme;
904
+			$target->setAuthority($reference->getAuthority());
905
+			$target->_path  = self::removeDotSegments($reference->_path);
906
+			$target->_query = $reference->_query;
907
+		} else {
908
+			$authority = $reference->getAuthority();
909
+			if ($authority !== false) {
910
+				$target->setAuthority($authority);
911
+				$target->_path  = self::removeDotSegments($reference->_path);
912
+				$target->_query = $reference->_query;
913
+			} else {
914
+				if ($reference->_path == '') {
915
+					$target->_path = $this->_path;
916
+					if ($reference->_query !== false) {
917
+						$target->_query = $reference->_query;
918
+					} else {
919
+						$target->_query = $this->_query;
920
+					}
921
+				} else {
922
+					if (substr($reference->_path, 0, 1) == '/') {
923
+						$target->_path = self::removeDotSegments($reference->_path);
924
+					} else {
925
+						// Merge paths (RFC 3986, section 5.2.3)
926
+						if ($this->_host !== false && $this->_path == '') {
927
+							$target->_path = '/' . $reference->_path;
928
+						} else {
929
+							$i = strrpos($this->_path, '/');
930
+							if ($i !== false) {
931
+								$target->_path = substr($this->_path, 0, $i + 1);
932
+							}
933
+							$target->_path .= $reference->_path;
934
+						}
935
+						$target->_path = self::removeDotSegments($target->_path);
936
+					}
937
+					$target->_query = $reference->_query;
938
+				}
939
+				$target->setAuthority($this->getAuthority());
940
+			}
941
+			$target->_scheme = $this->_scheme;
942
+		}
943
+
944
+		$target->_fragment = $reference->_fragment;
945
+
946
+		return $target;
947
+	}
948
+
949
+	/**
950
+	 * URL is fragment-only
951
+	 *
952
+	 * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
953
+	 * @return bool
954
+	 */
955
+	private function _isFragmentOnly()
956
+	{
957
+		return (
958
+			$this->_fragment !== false
959
+			&& $this->_query === false
960
+			&& $this->_path === ''
961
+			&& $this->_port === false
962
+			&& $this->_host === false
963
+			&& $this->_userinfo === false
964
+			&& $this->_scheme === false
965
+		);
966
+	}
967
+
968
+	/**
969
+	 * Removes dots as described in RFC 3986, section 5.2.4, e.g.
970
+	 * "/foo/../bar/baz" => "/bar/baz"
971
+	 *
972
+	 * @param string $path a path
973
+	 *
974
+	 * @return string a path
975
+	 */
976
+	public static function removeDotSegments($path)
977
+	{
978
+		$path = (string) $path;
979
+		$output = '';
980
+
981
+		// Make sure not to be trapped in an infinite loop due to a bug in this
982
+		// method
983
+		$loopLimit = 256;
984
+		$j = 0;
985
+		while ('' !== $path && $j++ < $loopLimit) {
986
+			if (substr($path, 0, 2) === './') {
987
+				// Step 2.A
988
+				$path = substr($path, 2);
989
+			} elseif (substr($path, 0, 3) === '../') {
990
+				// Step 2.A
991
+				$path = substr($path, 3);
992
+			} elseif (substr($path, 0, 3) === '/./' || $path === '/.') {
993
+				// Step 2.B
994
+				$path = '/' . substr($path, 3);
995
+			} elseif (substr($path, 0, 4) === '/../' || $path === '/..') {
996
+				// Step 2.C
997
+				$path   = '/' . substr($path, 4);
998
+				$i      = strrpos($output, '/');
999
+				$output = $i === false ? '' : substr($output, 0, $i);
1000
+			} elseif ($path === '.' || $path === '..') {
1001
+				// Step 2.D
1002
+				$path = '';
1003
+			} else {
1004
+				// Step 2.E
1005
+				$i = strpos($path, '/', $path[0] === '/');
1006
+				if ($i === false) {
1007
+					$output .= $path;
1008
+					$path = '';
1009
+					break;
1010
+				}
1011
+				$output .= substr($path, 0, $i);
1012
+				$path = substr($path, $i);
1013
+			}
1014
+		}
1015
+
1016
+		if ($path !== '') {
1017
+			$message = sprintf(
1018
+				'Unable to remove dot segments; hit loop limit %d (left: %s)',
1019
+				$j, var_export($path, true)
1020
+			);
1021
+			trigger_error($message, E_USER_WARNING);
1022
+		}
1023
+
1024
+		return $output;
1025
+	}
1026
+
1027
+	/**
1028
+	 * Percent-encodes all non-alphanumeric characters except these: _ . - ~
1029
+	 * Similar to PHP's rawurlencode(), except that it also encodes ~ in PHP
1030
+	 * 5.2.x and earlier.
1031
+	 *
1032
+	 * @param string $string string to encode
1033
+	 *
1034
+	 * @return string
1035
+	 */
1036
+	public static function urlencode($string)
1037
+	{
1038
+		$encoded = rawurlencode($string);
1039
+
1040
+		// This is only necessary in PHP < 5.3.
1041
+		$encoded = str_replace('%7E', '~', $encoded);
1042
+		return $encoded;
1043
+	}
1044
+
1045
+	/**
1046
+	 * Returns a Net_URL2 instance representing the canonical URL of the
1047
+	 * currently executing PHP script.
1048
+	 *
1049
+	 * @throws Exception
1050
+	 * @return string
1051
+	 */
1052
+	public static function getCanonical()
1053
+	{
1054
+		if (!isset($_SERVER['REQUEST_METHOD'])) {
1055
+			// ALERT - no current URL
1056
+			throw new Exception('Script was not called through a webserver');
1057
+		}
1058
+
1059
+		// Begin with a relative URL
1060
+		$url = new self($_SERVER['PHP_SELF']);
1061
+		$url->_scheme = isset($_SERVER['HTTPS']) ? 'https' : 'http';
1062
+		$url->_host   = $_SERVER['SERVER_NAME'];
1063
+		$port = $_SERVER['SERVER_PORT'];
1064
+		if ($url->_scheme == 'http' && $port != 80
1065
+			|| $url->_scheme == 'https' && $port != 443
1066
+		) {
1067
+			$url->_port = $port;
1068
+		}
1069
+		return $url;
1070
+	}
1071
+
1072
+	/**
1073
+	 * Returns the URL used to retrieve the current request.
1074
+	 *
1075
+	 * @return  string
1076
+	 */
1077
+	public static function getRequestedURL()
1078
+	{
1079
+		return self::getRequested()->getUrl();
1080
+	}
1081
+
1082
+	/**
1083
+	 * Returns a Net_URL2 instance representing the URL used to retrieve the
1084
+	 * current request.
1085
+	 *
1086
+	 * @throws Exception
1087
+	 * @return $this
1088
+	 */
1089
+	public static function getRequested()
1090
+	{
1091
+		if (!isset($_SERVER['REQUEST_METHOD'])) {
1092
+			// ALERT - no current URL
1093
+			throw new Exception('Script was not called through a webserver');
1094
+		}
1095
+
1096
+		// Begin with a relative URL
1097
+		$url = new self($_SERVER['REQUEST_URI']);
1098
+		$url->_scheme = isset($_SERVER['HTTPS']) ? 'https' : 'http';
1099
+		// Set host and possibly port
1100
+		$url->setAuthority($_SERVER['HTTP_HOST']);
1101
+		return $url;
1102
+	}
1103
+
1104
+	/**
1105
+	 * Returns the value of the specified option.
1106
+	 *
1107
+	 * @param string $optionName The name of the option to retrieve
1108
+	 *
1109
+	 * @return mixed
1110
+	 */
1111
+	public function getOption($optionName)
1112
+	{
1113
+		return isset($this->_options[$optionName])
1114
+			? $this->_options[$optionName] : false;
1115
+	}
1116
+
1117
+	/**
1118
+	 * A simple version of http_build_query in userland. The encoded string is
1119
+	 * percentage encoded according to RFC 3986.
1120
+	 *
1121
+	 * @param array  $data      An array, which has to be converted into
1122
+	 *                          QUERY_STRING. Anything is possible.
1123
+	 * @param string $separator Separator {@link self::OPTION_SEPARATOR_OUTPUT}
1124
+	 * @param string $key       For stacked values (arrays in an array).
1125
+	 *
1126
+	 * @return string
1127
+	 */
1128
+	protected function buildQuery(array $data, $separator, $key = null)
1129
+	{
1130
+		$query = array();
1131
+		$drop_names = (
1132
+			$this->_options[self::OPTION_DROP_SEQUENCE] === true
1133
+			&& array_keys($data) === array_keys(array_values($data))
1134
+		);
1135
+		foreach ($data as $name => $value) {
1136
+			if ($this->getOption(self::OPTION_ENCODE_KEYS) === true) {
1137
+				$name = rawurlencode($name);
1138
+			}
1139
+			if ($key !== null) {
1140
+				if ($this->getOption(self::OPTION_USE_BRACKETS) === true) {
1141
+					$drop_names && $name = '';
1142
+					$name = $key . '[' . $name . ']';
1143
+				} else {
1144
+					$name = $key;
1145
+				}
1146
+			}
1147
+			if (is_array($value)) {
1148
+				$query[] = $this->buildQuery($value, $separator, $name);
1149
+			} else {
1150
+				$query[] = $name . '=' . rawurlencode($value);
1151
+			}
1152
+		}
1153
+		return implode($separator, $query);
1154
+	}
1155
+
1156
+	/**
1157
+	 * This method uses a regex to parse the url into the designated parts.
1158
+	 *
1159
+	 * @param string $url URL
1160
+	 *
1161
+	 * @return void
1162
+	 * @uses   self::$_scheme, self::setAuthority(), self::$_path, self::$_query,
1163
+	 *         self::$_fragment
1164
+	 * @see    __construct
1165
+	 */
1166
+	protected function parseUrl($url)
1167
+	{
1168
+		// The regular expression is copied verbatim from RFC 3986, appendix B.
1169
+		// The expression does not validate the URL but matches any string.
1170
+		preg_match(
1171
+			'(^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?)',
1172
+			$url, $matches
1173
+		);
1174
+
1175
+		// "path" is always present (possibly as an empty string); the rest
1176
+		// are optional.
1177
+		$this->_scheme   = !empty($matches[1]) ? $matches[2] : false;
1178
+		$this->setAuthority(!empty($matches[3]) ? $matches[4] : false);
1179
+		$this->_path     = $this->_encodeData($matches[5]);
1180
+		$this->_query    = !empty($matches[6])
1181
+						   ? $this->_encodeData($matches[7])
1182
+						   : false
1183
+			;
1184
+		$this->_fragment = !empty($matches[8]) ? $matches[9] : false;
1185
+	}
1186
+
1187
+	/**
1188
+	 * Encode characters that might have been forgotten to encode when passing
1189
+	 * in an URL. Applied onto Userinfo, Path and Query.
1190
+	 *
1191
+	 * @param string $url URL
1192
+	 *
1193
+	 * @return string
1194
+	 * @see parseUrl
1195
+	 * @see setAuthority
1196
+	 * @link https://pear.php.net/bugs/bug.php?id=20425
1197
+	 */
1198
+	private function _encodeData($url)
1199
+	{
1200
+		return preg_replace_callback(
1201
+			'([\x-\x20\x22\x3C\x3E\x7F-\xFF]+)',
1202
+			array($this, '_encodeCallback'), $url
1203
+		);
1204
+	}
1205
+
1206
+	/**
1207
+	 * callback for encoding character data
1208
+	 *
1209
+	 * @param array $matches Matches
1210
+	 *
1211
+	 * @return string
1212
+	 * @see _encodeData
1213
+	 * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
1214
+	 */
1215
+	private function _encodeCallback(array $matches)
1216
+	{
1217
+		return rawurlencode($matches[0]);
1218
+	}
1219 1219
 }
Please login to merge, or discard this patch.
Spacing   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -169,7 +169,7 @@  discard block
 block discarded – undo
169 169
      */
170 170
     public function __set($var, $arg)
171 171
     {
172
-        $method = 'set' . $var;
172
+        $method = 'set'.$var;
173 173
         if (method_exists($this, $method)) {
174 174
             $this->$method($arg);
175 175
         }
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
      */
190 190
     public function __get($var)
191 191
     {
192
-        $method = 'get' . $var;
192
+        $method = 'get'.$var;
193 193
         if (method_exists($this, $method)) {
194 194
             return $this->$method();
195 195
         }
@@ -276,7 +276,7 @@  discard block
 block discarded – undo
276 276
     public function setUserinfo($userinfo, $password = false)
277 277
     {
278 278
         if ($password !== false) {
279
-            $userinfo .= ':' . $password;
279
+            $userinfo .= ':'.$password;
280 280
         }
281 281
 
282 282
         if ($userinfo !== false) {
@@ -352,13 +352,13 @@  discard block
 block discarded – undo
352 352
         $authority = '';
353 353
 
354 354
         if (strlen($this->_userinfo)) {
355
-            $authority .= $this->_userinfo . '@';
355
+            $authority .= $this->_userinfo.'@';
356 356
         }
357 357
 
358 358
         $authority .= $this->_host;
359 359
 
360 360
         if ($this->_port !== false) {
361
-            $authority .= ':' . $this->_port;
361
+            $authority .= ':'.$this->_port;
362 362
         }
363 363
 
364 364
         return $authority;
@@ -488,7 +488,7 @@  discard block
 block discarded – undo
488 488
         $encodeKeys  = $this->getOption(self::OPTION_ENCODE_KEYS);
489 489
         $useBrackets = $this->getOption(self::OPTION_USE_BRACKETS);
490 490
 
491
-        $return  = array();
491
+        $return = array();
492 492
 
493 493
         for ($part = strtok($this->_query, $separator);
494 494
             strlen($part);
@@ -505,7 +505,7 @@  discard block
 block discarded – undo
505 505
                 $return = $this->_queryArrayByKey($key, $value, $return);
506 506
             } else {
507 507
                 if (isset($return[$key])) {
508
-                    $return[$key]  = (array) $return[$key];
508
+                    $return[$key] = (array) $return[$key];
509 509
                     $return[$key][] = $value;
510 510
                 } else {
511 511
                     $return[$key] = $value;
@@ -585,7 +585,7 @@  discard block
 block discarded – undo
585 585
                 }
586 586
                 // @codeCoverageIgnoreStart
587 587
                 throw new Exception(
588
-                    'Net_URL2 Internal Error: '. __METHOD__ .'(): ' .
588
+                    'Net_URL2 Internal Error: '.__METHOD__.'(): '.
589 589
                     'Opening bracket [ must exist at offset 0'
590 590
                 );
591 591
                 // @codeCoverageIgnoreEnd
@@ -598,7 +598,7 @@  discard block
 block discarded – undo
598 598
                 // See as well the first exception for the opening bracket.
599 599
                 // @codeCoverageIgnoreStart
600 600
                 throw new Exception(
601
-                    'Net_URL2 Internal Error: '. __METHOD__ .'(): ' .
601
+                    'Net_URL2 Internal Error: '.__METHOD__.'(): '.
602 602
                     'Closing bracket ] must exist, not found'
603 603
                 );
604 604
                 // @codeCoverageIgnoreEnd
@@ -702,7 +702,7 @@  discard block
 block discarded – undo
702 702
         $url = '';
703 703
 
704 704
         if ($this->_scheme !== false) {
705
-            $url .= $this->_scheme . ':';
705
+            $url .= $this->_scheme.':';
706 706
         }
707 707
 
708 708
         $authority = $this->getAuthority();
@@ -713,11 +713,11 @@  discard block
 block discarded – undo
713 713
         $url .= $this->_buildAuthorityAndPath($authority, $this->_path);
714 714
 
715 715
         if ($this->_query !== false) {
716
-            $url .= '?' . $this->_query;
716
+            $url .= '?'.$this->_query;
717 717
         }
718 718
 
719 719
         if ($this->_fragment !== false) {
720
-            $url .= '#' . $this->_fragment;
720
+            $url .= '#'.$this->_fragment;
721 721
         }
722 722
 
723 723
         return $url;
@@ -740,7 +740,7 @@  discard block
 block discarded – undo
740 740
 
741 741
         $terminator = ($path !== '' && $path[0] !== '/') ? '/' : '';
742 742
 
743
-        return '//' . $authority . $terminator . $path;
743
+        return '//'.$authority.$terminator.$path;
744 744
     }
745 745
 
746 746
     /**
@@ -823,7 +823,7 @@  discard block
 block discarded – undo
823 823
             && strlen($this->_path)
824 824
             && $this->_path[0] !== '/'
825 825
         ) {
826
-            $this->_path = '/' . $this->_path;
826
+            $this->_path = '/'.$this->_path;
827 827
         }
828 828
     }
829 829
 
@@ -924,7 +924,7 @@  discard block
 block discarded – undo
924 924
                     } else {
925 925
                         // Merge paths (RFC 3986, section 5.2.3)
926 926
                         if ($this->_host !== false && $this->_path == '') {
927
-                            $target->_path = '/' . $reference->_path;
927
+                            $target->_path = '/'.$reference->_path;
928 928
                         } else {
929 929
                             $i = strrpos($this->_path, '/');
930 930
                             if ($i !== false) {
@@ -991,10 +991,10 @@  discard block
 block discarded – undo
991 991
                 $path = substr($path, 3);
992 992
             } elseif (substr($path, 0, 3) === '/./' || $path === '/.') {
993 993
                 // Step 2.B
994
-                $path = '/' . substr($path, 3);
994
+                $path = '/'.substr($path, 3);
995 995
             } elseif (substr($path, 0, 4) === '/../' || $path === '/..') {
996 996
                 // Step 2.C
997
-                $path   = '/' . substr($path, 4);
997
+                $path   = '/'.substr($path, 4);
998 998
                 $i      = strrpos($output, '/');
999 999
                 $output = $i === false ? '' : substr($output, 0, $i);
1000 1000
             } elseif ($path === '.' || $path === '..') {
@@ -1139,7 +1139,7 @@  discard block
 block discarded – undo
1139 1139
             if ($key !== null) {
1140 1140
                 if ($this->getOption(self::OPTION_USE_BRACKETS) === true) {
1141 1141
                     $drop_names && $name = '';
1142
-                    $name = $key . '[' . $name . ']';
1142
+                    $name = $key.'['.$name.']';
1143 1143
                 } else {
1144 1144
                     $name = $key;
1145 1145
                 }
@@ -1147,7 +1147,7 @@  discard block
 block discarded – undo
1147 1147
             if (is_array($value)) {
1148 1148
                 $query[] = $this->buildQuery($value, $separator, $name);
1149 1149
             } else {
1150
-                $query[] = $name . '=' . rawurlencode($value);
1150
+                $query[] = $name.'='.rawurlencode($value);
1151 1151
             }
1152 1152
         }
1153 1153
         return implode($separator, $query);
Please login to merge, or discard this patch.