PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / trunk
Advanced Access Manager – Access Governance for WordPress vtrunk
6.8.4 6.8.5 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13 6.9.14 6.9.15 6.9.16 6.9.17 6.9.18 6.9.19 6.9.2 6.9.20 6.9.21 6.9.22 6.9.23 6.9.24 6.9.25 6.9.26 6.9.27 6.9.28 6.9.29 6.9.3 6.9.30 6.9.31 6.9.32 6.9.33 6.9.34 6.9.35 6.9.36 6.9.37 6.9.38 6.9.39 6.9.4 6.9.41 6.9.42 6.9.43 6.9.44 6.9.45 6.9.46 6.9.47 6.9.48 6.9.49 6.9.5 6.9.51 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.0-alpha.6 7.0.0-alpha.7 7.0.0-beta.1 7.0.0-rc1 7.0.0-rc2 7.0.0-rc3 7.0.1 7.0.10 7.0.11 7.0.2 7.0.3 7.0.4 7.0.5 7.0.6 7.0.7 7.0.8 7.0.9 7.1.0 7.1.1 trunk 3.0 4.0 4.0.1 4.1 4.2 4.3 4.4 4.4.1 4.5 4.6 4.6.1 4.6.2 4.7 4.7.1 4.7.2 4.7.5 4.7.6 4.8 4.8.1 4.9 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.5.1 4.9.5.2 5.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1 5.1.1 5.10 5.11 5.2 5.2.1 5.2.5 5.2.6 5.2.7 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.4 5.4.1 5.4.2 5.4.3 5.4.3.1 5.4.3.2 5.5 5.5.1 5.5.2 5.6 5.6.1 5.6.1.1 5.7 5.7.1 5.7.2 5.7.3 5.8 5.8.1 5.8.2 5.8.3 5.9 5.9.1 5.9.1.1 5.9.2 5.9.2.1 5.9.3 5.9.4 5.9.5 5.9.6 5.9.6.1 5.9.6.2 5.9.6.3 5.9.7 5.9.7.1 5.9.7.2 5.9.7.3 5.9.8 5.9.8.1 5.9.9 5.9.9.1 6.0.0 6.0.1 6.0.2 6.0.3 6.0.4 6.0.5 6.1.0 6.1.1 6.2.0 6.2.1 6.2.2 6.3.0 6.3.1 6.3.2 6.3.3 6.4.0 6.4.1 6.4.2 6.4.3 6.5.0 6.5.1 6.5.2 6.5.3 6.5.4 6.6.0 6.6.1 6.6.2 6.6.3 6.6.4 6.7.0 6.7.1 6.7.2 6.7.3 6.7.4 6.7.5 6.7.6 6.7.7 6.7.8 6.7.9 6.8.0 6.8.1 6.8.2 6.8.3
advanced-access-manager / vendor / matomo / device-detector / Parser / Device / AbstractDeviceParser.php
advanced-access-manager / vendor / matomo / device-detector / Parser / Device Last commit date
AbstractDeviceParser.php 1 year ago Camera.php 1 year ago CarBrowser.php 1 year ago Console.php 1 year ago HbbTv.php 1 year ago Mobile.php 1 year ago Notebook.php 1 year ago PortableMediaPlayer.php 1 year ago ShellTv.php 1 year ago
AbstractDeviceParser.php
2454 lines
1 <?php
2
3 /**
4 * Device Detector - The Universal Device Detection library for parsing User Agents
5 *
6 * @link https://matomo.org
7 *
8 * @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
9 */
10
11 declare(strict_types=1);
12
13 namespace DeviceDetector\Parser\Device;
14
15 use DeviceDetector\Parser\AbstractParser;
16
17 /**
18 * Class AbstractDeviceParser
19 *
20 * Abstract class for all device parsers
21 */
22 abstract class AbstractDeviceParser extends AbstractParser
23 {
24 /**
25 * @var ?int
26 */
27 protected $deviceType = null;
28
29 /**
30 * @var string
31 */
32 protected $model = '';
33
34 /**
35 * @var string
36 */
37 protected $brand = '';
38
39 public const DEVICE_TYPE_DESKTOP = 0;
40 public const DEVICE_TYPE_SMARTPHONE = 1;
41 public const DEVICE_TYPE_TABLET = 2;
42 public const DEVICE_TYPE_FEATURE_PHONE = 3;
43 public const DEVICE_TYPE_CONSOLE = 4;
44 public const DEVICE_TYPE_TV = 5; // including set top boxes, blu-ray players,...
45 public const DEVICE_TYPE_CAR_BROWSER = 6;
46 public const DEVICE_TYPE_SMART_DISPLAY = 7;
47 public const DEVICE_TYPE_CAMERA = 8;
48 public const DEVICE_TYPE_PORTABLE_MEDIA_PAYER = 9;
49 public const DEVICE_TYPE_PHABLET = 10;
50 public const DEVICE_TYPE_SMART_SPEAKER = 11;
51 public const DEVICE_TYPE_WEARABLE = 12; // including set watches, headsets
52 public const DEVICE_TYPE_PERIPHERAL = 13; // including portable terminal, portable projector
53
54 /**
55 * Detectable device types
56 *
57 * @var array
58 */
59 protected static $deviceTypes = [
60 'desktop' => self::DEVICE_TYPE_DESKTOP,
61 'smartphone' => self::DEVICE_TYPE_SMARTPHONE,
62 'tablet' => self::DEVICE_TYPE_TABLET,
63 'feature phone' => self::DEVICE_TYPE_FEATURE_PHONE,
64 'console' => self::DEVICE_TYPE_CONSOLE,
65 'tv' => self::DEVICE_TYPE_TV,
66 'car browser' => self::DEVICE_TYPE_CAR_BROWSER,
67 'smart display' => self::DEVICE_TYPE_SMART_DISPLAY,
68 'camera' => self::DEVICE_TYPE_CAMERA,
69 'portable media player' => self::DEVICE_TYPE_PORTABLE_MEDIA_PAYER,
70 'phablet' => self::DEVICE_TYPE_PHABLET,
71 'smart speaker' => self::DEVICE_TYPE_SMART_SPEAKER,
72 'wearable' => self::DEVICE_TYPE_WEARABLE,
73 'peripheral' => self::DEVICE_TYPE_PERIPHERAL,
74 ];
75
76 /**
77 * Known device brands
78 *
79 * Note: Before using a new brand in on of the regex files, it needs to be added here
80 *
81 * @var array
82 */
83 public static $deviceBrands = [
84 '5E' => '2E',
85 '5IV' => '5IVE',
86 '2F' => 'F2 Mobile',
87 '3Q' => '3Q',
88 'J7' => '7 Mobile',
89 '2Q' => '3GNET',
90 '4G' => '4Good',
91 '27' => '3GO',
92 '04' => '4ife',
93 '36' => '360',
94 '88' => '8848',
95 '10M' => '10moons',
96 '41' => 'A1',
97 'AK1' => 'A&K',
98 '00' => 'Accent',
99 'ACC' => 'Accesstyle',
100 'AE' => 'Ace',
101 'AC' => 'Acer',
102 'ACL' => 'Aceline',
103 'ACP' => 'Acepad',
104 '3K' => 'Acteck',
105 'ACT' => 'actiMirror',
106 'A9' => 'Advan',
107 'AD' => 'Advance',
108 'ADV' => 'Advantage Air',
109 '76' => 'Adronix',
110 'ADR' => 'Adreamer',
111 'AF' => 'AfriOne',
112 'FY' => 'AFFIX',
113 'A3' => 'AGM',
114 'AEE' => 'AEEZO',
115 'J0' => 'AG Mobile',
116 'AJI' => 'Ajib',
117 'AZ' => 'Ainol',
118 'AIR' => 'Airis',
119 'AI' => 'Airness',
120 'ARP' => 'Airpha',
121 'AT' => 'Airties',
122 '7U' => 'Airtel',
123 'AIT' => 'AirTouch',
124 'U0' => 'AIRON',
125 '0A' => 'AIS',
126 'AW' => 'Aiwa',
127 '85' => 'Aiuto',
128 'U7' => 'AIDATA',
129 'AL1' => 'AileTV',
130 'AK' => 'Akai',
131 'Q3' => 'AKIRA',
132 '1A' => 'Alba',
133 'AL' => 'Alcatel',
134 'AL0' => 'Alienware',
135 '20' => 'Alcor',
136 'XY' => 'Alps',
137 'XYA' => 'XY Auto',
138 'AAU' => 'AAUW',
139 '7L' => 'ALDI NORD',
140 '6L' => 'ALDI SÜD',
141 '3L' => 'Alfawise',
142 '4A' => 'Aligator',
143 'ALS' => 'All Star',
144 'AA' => 'AllCall',
145 '3A' => 'AllDocube',
146 'ALL' => 'allente',
147 'A2' => 'Allview',
148 'ALI' => 'ALLINmobile',
149 'A7' => 'Allwinner',
150 'ALP' => 'alpsmart',
151 'A1' => 'Altech UEC',
152 '66' => 'Altice',
153 'ALM' => 'Altimo',
154 'A5' => 'altron',
155 'ALB' => 'Altibox',
156 'ALT' => 'Altus',
157 'KN' => 'Amazon',
158 'AMZ' => 'Amazon Basics',
159 'AMA' => 'AMA',
160 'AG' => 'AMGOO',
161 '9A' => 'Amigoo',
162 'AO' => 'Amoi',
163 '3J' => 'Amino',
164 '54' => 'AMCV',
165 '60' => 'Andowl',
166 'ANX' => 'ANXONIT',
167 'ANL' => 'ANCEL',
168 'ANC' => 'ANBERNIC',
169 'AND' => 'andersson',
170 '6J' => 'Angelcare',
171 'ANG' => 'AngelTech',
172 '7A' => 'Anry',
173 'A0' => 'ANS',
174 '74' => 'Anker',
175 '3N' => 'Aoson',
176 'O8' => 'AOC',
177 'J2' => 'AOYODKG',
178 '55' => 'AOpen',
179 'RW' => 'Aoro',
180 '9Y' => 'Aocos',
181 'AOW' => 'Aocwei',
182 'AP' => 'Apple',
183 'APS' => 'ApoloSign',
184 'ARC' => 'Arçelik',
185 'AR' => 'Archos',
186 'AB' => 'Arian Space',
187 'ARI' => 'Arival',
188 'A6' => 'Ark',
189 '5A' => 'ArmPhone',
190 'AN' => 'Arnova',
191 'AS' => 'ARRIS',
192 'AQ' => 'Aspera',
193 'HJ' => 'Aquarius',
194 '40' => 'Artel',
195 '21' => 'Artizlee',
196 '59' => 'ArtLine',
197 '8A' => 'Asano',
198 '90' => 'Asanzo',
199 '1U' => 'Astro (UA)',
200 'AST' => 'astro (MY)',
201 'A4' => 'Ask',
202 'A8' => 'Assistant',
203 'ASS' => 'ASSE',
204 'AU' => 'Asus',
205 '6A' => 'AT&T',
206 'ATH' => 'Athesi',
207 'ATE' => 'Atlantic Electrics',
208 '5Q' => 'Atmaca Elektronik',
209 'YH' => 'ATMAN',
210 'ATM' => 'ATMPC',
211 '2A' => 'Atom',
212 'AT1' => 'Atozee',
213 'ATO' => 'ATOL',
214 'Z2' => 'Atvio',
215 'ATI' => 'Attila',
216 'ATU' => 'Atouch',
217 'AX' => 'Audiovox',
218 'AJ' => 'AURIS',
219 'YZ' => 'Autan',
220 'AUP' => 'AUPO',
221 'ZA' => 'Avenzo',
222 'AH' => 'AVH',
223 'AV' => 'Avvio',
224 'AVA' => 'Avaya',
225 'AXE' => 'AXEN',
226 'AY' => 'Axxion',
227 'AXX' => 'AXXA',
228 'AYA' => 'AYA',
229 'YR' => 'AYYA',
230 'XA' => 'Axioo',
231 'AM' => 'Azumi Mobile',
232 'AZE' => 'Azeyou',
233 'AZU' => 'Azupik',
234 'AZO' => 'AZOM',
235 'WW' => 'Awow',
236 'AWO' => 'AWOX',
237 'XU' => 'AUX',
238 'BAC' => 'Backcell',
239 'BFF' => 'BAFF',
240 'BO' => 'BangOlufsen',
241 'BN' => 'Barnes & Noble',
242 'BAR' => 'BARTEC',
243 'BAS' => 'BASE',
244 'BAU' => 'BAUHN',
245 'BB' => 'BBK',
246 '0B' => 'BB Mobile',
247 'B6' => 'BDF',
248 'QD' => 'BDQ',
249 '8Z' => 'BDsharing',
250 'BEF' => 'Beafon',
251 'BE' => 'Becker',
252 'B5' => 'Beeline',
253 'B0' => 'Beelink',
254 'BL' => 'Beetel',
255 'BEK' => 'Beko',
256 '2X' => 'Benco',
257 'BQ' => 'BenQ',
258 'BQL' => 'Bqeel',
259 'BS' => 'BenQ-Siemens',
260 '4Y' => 'Benzo',
261 'XJ' => 'Benesse',
262 'BEN' => 'BenWee',
263 'YB' => 'Beista',
264 'BY' => 'BS Mobile',
265 'BZ' => 'Bezkam',
266 'BEL' => 'Bell',
267 '9B' => 'Bellphone',
268 '63' => 'Beyond',
269 'BG' => 'BGH',
270 '6B' => 'Bigben',
271 'B8' => 'BIHEE',
272 '1B' => 'Billion',
273 'BA' => 'BilimLand',
274 'BIL' => 'Billow',
275 'BH' => 'BioRugged',
276 'BI' => 'Bird',
277 'BT' => 'Bitel',
278 'B7' => 'Bitmore',
279 'ZB' => 'Bittium',
280 'BIE' => 'Biegedy',
281 'BK' => 'Bkav',
282 '5B' => 'Black Bear',
283 'BLK' => 'Black Box',
284 'BF' => 'Black Fox',
285 'BPC' => 'Blackpcs',
286 'BLP' => 'Blackphone',
287 'BLT' => 'Blackton',
288 'B2' => 'Blackview',
289 '2Y' => 'b2m',
290 'BP' => 'Blaupunkt',
291 'BU' => 'Blu',
292 'BUS' => 'BluSlate',
293 'BUZ' => 'BuzzTV',
294 'B3' => 'Bluboo',
295 '2B' => 'Bluedot',
296 'BD' => 'Bluegood',
297 'LB' => 'Bluewave',
298 'J8' => 'Bluebird',
299 'BSS' => 'BlueSky',
300 '7B' => 'Blloc',
301 'UB' => 'Bleck',
302 'Q2' => 'Blow',
303 'BLI' => 'BLISS',
304 'BM' => 'Bmobile',
305 'Y5' => 'BMAX',
306 'BMX' => 'BMXC',
307 'B9' => 'Bobarry',
308 'B4' => 'bogo',
309 'BOL' => 'Bolva',
310 'BW' => 'Boway',
311 'BOO' => 'Boost',
312 'BOK' => 'Bookeen',
313 'BOT' => 'Botech',
314 'BX' => 'bq',
315 '8B' => 'Brandt',
316 'BRA' => 'BrandCode',
317 'BV' => 'Bravis',
318 'BRV' => 'BRAVE',
319 'BRG' => 'Brigmton',
320 'BR' => 'Brondi',
321 'XF' => 'BROR',
322 'BJ' => 'BrightSign',
323 'B1' => 'Bush',
324 '4Q' => 'Bundy',
325 'Y8' => 'Bubblegum',
326 'BMW' => 'BMW',
327 'BYJ' => 'BYJU\'S',
328 'BYY' => 'BYYBUO',
329 'BYD' => 'BYD',
330 'C9' => 'CAGI',
331 'CAD' => 'CADENA',
332 'CAI' => 'Caixun',
333 'CT' => 'Capitel',
334 'GRD' => 'G-Guard',
335 'G3' => 'CG Mobile',
336 '37' => 'CGV',
337 'CP' => 'Captiva',
338 'CPD' => 'CPDEVICE',
339 'CF' => 'Carrefour',
340 'CA1' => 'Carbon Mobile',
341 'CS' => 'Casio',
342 'R4' => 'Casper',
343 'CA' => 'Cat',
344 'BC' => 'Camfone',
345 'CJ' => 'Cavion',
346 'CNM' => 'Canaima',
347 'CAN' => 'Canal+',
348 '4D' => 'Canal Digital',
349 'CNG' => 'Canguro',
350 'CNT' => 'CCIT',
351 'CEC' => 'Cecotec',
352 'CEP' => 'CEPTER',
353 'CEI' => 'Ceibal',
354 '02' => 'Cell-C',
355 'CEL' => 'Cellacom',
356 '34' => 'CellAllure',
357 '7C' => 'Celcus',
358 'CE' => 'Celkon',
359 'CG' => 'Cellution',
360 '62' => 'Centric',
361 'CEN' => 'CENTEK',
362 'C2' => 'Changhong',
363 'CHA' => 'Chainway',
364 'CHG' => 'ChiliGreen',
365 'CH' => 'Cherry Mobile',
366 'C3' => 'China Mobile',
367 'U9' => 'China Telecom',
368 'CI' => 'Chico Mobile',
369 'CHC' => 'CHCNAV',
370 'CIA' => 'C Idea',
371 'CIP' => 'CipherLab',
372 'CIT' => 'Citycall',
373 '1C' => 'Chuwi',
374 'L8' => 'Clarmin',
375 '25' => 'Claresta',
376 'CLA' => 'CLAYTON',
377 'CLT' => 'Clovertek',
378 '1J' => 'Cloud',
379 'CD' => 'Cloudfone',
380 '6C' => 'Cloudpad',
381 'C0' => 'Clout',
382 'CN' => 'CnM',
383 'CY' => 'Coby Kyros',
384 'XC' => 'Cobalt',
385 'C6' => 'Comio',
386 'COM' => 'CommScope',
387 'CL' => 'Compal',
388 'CQ' => 'Compaq',
389 'C7' => 'ComTrade Tesla',
390 '7Z' => 'COMPUMAX',
391 'C8' => 'Concord',
392 'CC' => 'ConCorde',
393 'C5' => 'Condor',
394 'C5M' => 'C5 Mobile',
395 'COE' => 'Cogeco',
396 '4C' => 'Conquest',
397 'COG' => 'CONSUNG',
398 '3C' => 'Contixo',
399 '8C' => 'Connex',
400 '53' => 'Connectce',
401 'CON' => 'Conceptum',
402 'CED' => 'Continental Edison',
403 '9C' => 'Colors',
404 'COL' => 'COLORROOM',
405 'CAA' => 'coocaa',
406 'CO' => 'Coolpad',
407 'COO' => 'Coopers',
408 'CDE' => 'COOD-E',
409 '4R' => 'CORN',
410 '1O' => 'Cosmote',
411 'CW' => 'Cowon',
412 '75' => 'Covia',
413 'QG' => 'COYOTE',
414 'CKK' => 'CKK Mobile',
415 'YW' => 'ClearPHONE',
416 '33' => 'Clementoni',
417 'CR' => 'CreNova',
418 'CX' => 'Crescent',
419 'CRE' => 'Crestron',
420 'CK' => 'Cricket',
421 'CM' => 'Crius Mea',
422 'CMF' => 'CMF',
423 '0C' => 'Crony',
424 'C1' => 'Crosscall',
425 '4W' => 'Crown',
426 'CTR' => 'Ctroniq',
427 'CU' => 'Cube',
428 'CB' => 'CUBOT',
429 'CUI' => 'Cuiud',
430 'CUL' => 'Cultraview',
431 'CV' => 'CVTE',
432 'CWO' => 'Cwowdefu',
433 'CX0' => 'CX',
434 'C4' => 'Cyrus',
435 'D5' => 'Daewoo',
436 'DA' => 'Danew',
437 'DAN' => 'Dany',
438 'DA1' => 'DangcapHD',
439 'DAR' => 'Daria',
440 'DT' => 'Datang',
441 'D7' => 'Datawind',
442 '7D' => 'Datamini',
443 '6D' => 'Datalogic',
444 'D1' => 'Datsun',
445 'DZ' => 'Dazen',
446 'DAS' => 'DASS',
447 'DAW' => 'Dawlance',
448 'DB' => 'Dbtel',
449 'DBP' => 'DbPhone',
450 'DCO' => 'Dcode',
451 'DL' => 'Dell',
452 'DL0' => 'DL',
453 'DE' => 'Denver',
454 'DS' => 'Desay',
455 'DSD' => 'DSDevices',
456 'DSI' => 'DSIC',
457 'DW' => 'DeWalt',
458 'DX' => 'DEXP',
459 'DEY' => 'DEYI',
460 'DEN' => 'Denali',
461 'DEA' => 'DEALDIG',
462 'DNK' => 'Denka',
463 '8D' => 'DF',
464 'DGT' => 'DGTEC',
465 'DG' => 'Dialog',
466 'DIA' => 'DIALN',
467 'DI' => 'Dicam',
468 'D4' => 'Digi',
469 'D3' => 'Digicel',
470 'DDG' => 'Digidragon',
471 'DH' => 'Digihome',
472 'DD' => 'Digiland',
473 'DIJ' => 'DIJITSU',
474 'DIG' => 'Digit4G',
475 'DIC' => 'DIGICOM',
476 'Q0' => 'DIGIFORS',
477 'DIK' => 'DIKOM',
478 'DQ' => 'DISH',
479 'DIS' => 'Disney',
480 '9D' => 'Ditecma',
481 'D2' => 'Digma',
482 '1D' => 'Diva',
483 'DIV' => 'DiverMax',
484 'D6' => 'Divisat',
485 'DIO' => 'DIORA',
486 'DIF' => 'Diofox',
487 'X6' => 'DIXON',
488 'DIM' => 'DIMO',
489 '5D' => 'DING DING',
490 'DIN' => 'Dinax',
491 'DNA' => 'Dinalink',
492 'DM' => 'DMM',
493 'DMO' => 'DMOAO',
494 'DN' => 'DNS',
495 'DC' => 'DoCoMo',
496 'DF' => 'Doffler',
497 'D9' => 'Dolamee',
498 'DO' => 'Doogee',
499 'D0' => 'Doopro',
500 'DV' => 'Doov',
501 'DOM' => 'Dom.ru',
502 'DP' => 'Dopod',
503 'DPA' => 'DPA',
504 'JQ' => 'Doppio',
505 'DR' => 'Doro',
506 'DOR' => 'Dora',
507 'ZD' => 'DORLAND',
508 'DRO' => 'Droidlogic',
509 'D8' => 'Droxio',
510 'DJ' => 'Dragon Touch',
511 'DRA' => 'DRAGON',
512 'DY' => 'Dreamgate',
513 'DRE' => 'DreamTab',
514 'DR1' => 'DreamStar',
515 'DTA' => 'Dtac',
516 'DU' => 'Dune HD',
517 'DUO' => 'DuoTV',
518 'UD' => 'DUNNS Mobile',
519 'DUU' => 'Duubee',
520 'DUR' => 'Durabook',
521 'DUD' => 'DUDU AUTO',
522 'DYO' => 'Dyon',
523 'DYM' => 'Dykemann',
524 'DTE' => 'D-Tech',
525 'DLI' => 'D-Link',
526 'ENO' => 'eNOVA',
527 'IN2' => 'iNOVA',
528 'IN3' => 'inovo',
529 'INH' => 'Inhon',
530 'IND' => 'Indurama',
531 'EB' => 'E-Boda',
532 'EJ' => 'Engel',
533 'ENA' => 'ENACOM',
534 'END' => 'ENDURO',
535 'ENI' => 'ENIE',
536 '2E' => 'E-Ceros',
537 'E8' => 'E-tel',
538 'ETH' => 'E-TACHI',
539 'EAS' => 'EAS Electric',
540 'EP' => 'Easypix',
541 'EQ' => 'Eagle',
542 'EGS' => 'EagleSoar',
543 'EA' => 'EBEST',
544 'YC' => 'EBEN',
545 'E4' => 'Echo Mobiles',
546 'EQ1' => 'Equator',
547 'ES' => 'ECS',
548 '35' => 'ECON',
549 'ECC' => 'ECOO',
550 'ZZ' => 'ecom',
551 'ECS' => 'EcoStar',
552 'EDE' => 'Edenwood',
553 'E6' => 'EE',
554 'GW' => 'EGL',
555 'EGO' => 'EGOTEK',
556 'EFT' => 'EFT',
557 'EK' => 'EKO',
558 'EY' => 'Einstein',
559 'EM' => 'Eks Mobility',
560 'UE' => 'Ematic',
561 'EMR' => 'Emporia',
562 '4K' => 'EKT',
563 'EKI' => 'EKINOX',
564 '7E' => 'ELARI',
565 '03' => 'Electroneum',
566 'Z8' => 'ELECTRONIA',
567 'ELG' => 'ELE-GATE',
568 'EL1' => 'Elecson',
569 'ELK' => 'Elektroland',
570 'L0' => 'Element',
571 'EG' => 'Elenberg',
572 'EL' => 'Elephone',
573 'JE' => 'Elekta',
574 'ELE' => 'Elevate',
575 'ELS' => 'Elista',
576 'ELT' => 'elit',
577 '4E' => 'Eltex',
578 'ELM' => 'Elong Mobile',
579 'ED' => 'Energizer',
580 'E1' => 'Energy Sistem',
581 '3E' => 'Enot',
582 'ENT' => 'Entity',
583 'ENV' => 'Envizen',
584 '8E' => 'Epik One',
585 'EPK' => 'Epic',
586 'XP' => 'Epson',
587 'EPH' => 'Ephone',
588 'E7' => 'Ergo',
589 'EC' => 'Ericsson',
590 '05' => 'Erisson',
591 'ER' => 'Ericy',
592 'EE' => 'Essential',
593 'E2' => 'Essentielb',
594 '6E' => 'eSTAR',
595 'ETO' => 'ETOE',
596 'EN' => 'Eton',
597 'ET' => 'eTouch',
598 '1E' => 'Etuline',
599 'EHL' => 'Ehlel',
600 'EU' => 'Eurostar',
601 '4J' => 'Eurocase',
602 'EUR' => 'EUROLUX',
603 'EUD' => 'Eudora',
604 'E9' => 'Evercoss',
605 'EV' => 'Evertek',
606 'EVE' => 'Everest',
607 'EV1' => 'Everex',
608 'EVR' => 'Everis',
609 'EVF' => 'Everfine',
610 'E3' => 'Evolio',
611 'EO' => 'Evolveo',
612 '0Q' => 'Evoo',
613 '5U' => 'EVPAD',
614 'EVV' => 'evvoli',
615 'E0' => 'EvroMedia',
616 'XE' => 'ExMobile',
617 '4Z' => 'Exmart',
618 'EH' => 'EXO',
619 'EX' => 'Explay',
620 'EXP' => 'Express LUCK',
621 'E5' => 'Extrem',
622 'EXL' => 'ExtraLink',
623 'EF' => 'EXCEED',
624 'QE' => 'EWIS',
625 'EI' => 'Ezio',
626 'EZ' => 'Ezze',
627 'UF' => 'EYU',
628 'EYE' => 'Eyemoo',
629 'UE1' => 'UE',
630 '5F' => 'F150',
631 'FPS' => 'F+',
632 'F6' => 'Facebook',
633 'FAC' => 'Facetel',
634 'FA1' => 'Facime',
635 'FA' => 'Fairphone',
636 'FM' => 'Famoco',
637 'FAM' => 'Famous',
638 '17' => 'FarEasTone',
639 '9R' => 'FaRao Pro',
640 'FAR' => 'Farassoo',
641 'FB' => 'Fantec',
642 'FE' => 'Fengxiang',
643 'FEN' => 'Fenoti',
644 'F7' => 'Fero',
645 '67' => 'FEONAL',
646 'FI' => 'FiGO',
647 'J9' => 'FiGi',
648 'FIG' => 'Figgers',
649 'F9' => 'FiiO',
650 'F1' => 'FinePower',
651 'FX' => 'Finlux',
652 'F3' => 'FireFly Mobile',
653 'F8' => 'FISE',
654 'FIS' => 'Fision',
655 'FIT' => 'FITCO',
656 'FLM' => 'Filimo',
657 'FIL' => 'FILIX',
658 'FIN' => 'FINIX',
659 'FL' => 'Fly',
660 'QC' => 'FLYCAT',
661 'FLY' => 'FLYCOAY',
662 'FLU' => 'Fluo',
663 'FN' => 'FNB',
664 'FOB' => 'Fobem',
665 'FD' => 'Fondi',
666 '0F' => 'Fourel',
667 '44' => 'Four Mobile',
668 'F0' => 'Fonos',
669 'F0N' => 'FONTEL',
670 'F2' => 'FORME',
671 'FRM' => 'Formovie',
672 'F5' => 'Formuler',
673 'FR' => 'Forstar',
674 'RF' => 'Fortis',
675 'FRT' => 'FortuneShip',
676 'FO' => 'Foxconn',
677 'FOD' => 'FoxxD',
678 'FJ' => 'FOODO',
679 'FOS' => 'FOSSiBOT',
680 'FRE' => 'free',
681 'FT' => 'Freetel',
682 'FTH' => 'FRESH',
683 'FEY' => 'FreeYond',
684 'FRU' => 'Frunsi',
685 'F4' => 'F&U',
686 '1F' => 'FMT',
687 'FPT' => 'FPT',
688 'FG' => 'Fuego',
689 'FUJ' => 'FUJICOM',
690 'FU' => 'Fujitsu',
691 '4F' => 'Funai',
692 '5J' => 'Fusion5',
693 'FF' => 'Future Mobile Technology',
694 'FFF' => 'FFF SmartLife',
695 'FW' => 'FNF',
696 'FXT' => 'Fxtec',
697 'GT' => 'G-TiDE',
698 'G9' => 'G-Touch',
699 'GFO' => 'Gfone',
700 'GTM' => 'GTMEDIA',
701 'GTX' => 'GTX',
702 'GDL' => 'GDL',
703 '0G' => 'GFive',
704 'GM' => 'Garmin-Asus',
705 'GA' => 'Gateway',
706 '99' => 'Galaxy Innovations',
707 'GA1' => 'Galactic',
708 'GAT' => 'Galatec',
709 'GAM' => 'Gamma',
710 'GAZ' => 'Gazer',
711 'GAL' => 'Gazal',
712 'GEA' => 'Geanee',
713 'GEN' => 'Geant',
714 'GD' => 'Gemini',
715 'GN' => 'General Mobile',
716 '2G' => 'Genesis',
717 'GEP' => 'Geo Phone',
718 'G2' => 'GEOFOX',
719 'GE' => 'Geotel',
720 'Q4' => 'Geotex',
721 'GEO' => 'GEOZON',
722 'GNO' => 'Getnord',
723 'GER' => 'Gear Mobile',
724 'GH' => 'Ghia',
725 '2C' => 'Ghong',
726 'GJ' => 'Ghost',
727 'GG' => 'Gigabyte',
728 'GS' => 'Gigaset',
729 'GZ' => 'Ginzzu',
730 '1G' => 'Gini',
731 'GI' => 'Gionee',
732 'GIR' => 'GIRASOLE',
733 'G4' => 'Globex',
734 'GLB' => 'Globmall',
735 'GME' => 'GlocalMe',
736 '38' => 'GLONYX',
737 'U6' => 'Glofiish',
738 'GLO' => 'Glory Star',
739 'GNE' => 'GN Electronics',
740 'G7' => 'GoGEN',
741 'GC' => 'GOCLEVER',
742 '5G' => 'Gocomma',
743 'GB' => 'Gol Mobile',
744 'GL' => 'Goly',
745 'GOL' => 'GoldMaster',
746 'GOS' => 'GoldStar',
747 'GOB' => 'GOLDBERG',
748 'GX' => 'GLX',
749 'G5' => 'Gome',
750 'G1' => 'GoMobile',
751 'GO' => 'Google',
752 'G0' => 'Goophone',
753 '6G' => 'Gooweel',
754 'GOO' => 'GOODTEL',
755 'GO1' => 'GOtv',
756 'GPL' => 'G-PLUS',
757 '8G' => 'Gplus',
758 'GR' => 'Gradiente',
759 'GRE' => 'Graetz',
760 'GP' => 'Grape',
761 'G6' => 'Gree',
762 'GRA' => 'Great Asia',
763 '3G' => 'Greentel',
764 'GRO' => 'Green Orange',
765 'GRL' => 'Green Lion',
766 'GR1' => 'GroBerwert',
767 'GF' => 'Gretel',
768 '82' => 'Gresso',
769 'GRB' => 'Grünberg',
770 'GU' => 'Grundig',
771 'GV' => 'Gtel',
772 'CUO' => 'Guophone',
773 'CUD' => 'CUD',
774 'GVC' => 'GVC Pro',
775 'H13' => 'H133',
776 '9Z' => 'H96',
777 'HF' => 'Hafury',
778 '9F' => 'HAOVM',
779 'HAQ' => 'HAOQIN',
780 'HA' => 'Haier',
781 'HEC' => 'HEC',
782 'XH' => 'Haipai',
783 'XHU' => 'Haixu',
784 'HAN' => 'Handheld',
785 'HE' => 'HannSpree',
786 'HNS' => 'Hanseatic',
787 'HA2' => 'Hanson',
788 'HK' => 'Hardkernel',
789 'HAR' => 'Harper',
790 'HA1' => 'Hartens',
791 'HS' => 'Hasee',
792 '8H' => 'Hamlet',
793 'HAM' => 'Hammer',
794 'HAT' => 'Hathway',
795 'HAV' => 'HAVIT',
796 'HEM' => 'Hemilton',
797 'H6' => 'Helio',
798 'HQ' => 'HERO',
799 'ZH' => 'Hezire',
800 'HEX' => 'HexaByte',
801 'HEW' => 'HeadWolf',
802 'HEI' => 'Heimat',
803 'HL' => 'Hi-Level',
804 '3H' => 'Hi',
805 'HIB' => 'Hiberg',
806 'HBY' => 'HiBy',
807 'HIH' => 'HiHi',
808 'HIK' => 'HiKing',
809 'H2' => 'Highscreen',
810 'Q1' => 'High Q',
811 'HI1' => 'HIGH1ONE',
812 'HIG' => 'HiGrace',
813 '1H' => 'Hipstreet',
814 'HIR' => 'Hiremco',
815 'HI' => 'Hisense',
816 'HIP' => 'HIPER',
817 'HC' => 'Hitachi',
818 'H8' => 'Hitech',
819 'W3' => 'HiMax',
820 '8X' => 'Hi Nova',
821 'HLL' => 'HLLO',
822 'HKC' => 'HKC',
823 'HMD' => 'HMD',
824 '8W' => 'HKPro',
825 'HOF' => 'HOFER',
826 'HOC' => 'hoco',
827 'H1' => 'Hoffmann',
828 'HOM' => 'Homatics',
829 'H0' => 'Hometech',
830 'HLB' => 'HOLLEBERG',
831 'HM' => 'Homtom',
832 'HM1' => 'HOMII',
833 'HOP' => 'Hopeland',
834 'HZ' => 'Hoozo',
835 'HOR' => 'Horion',
836 'H7' => 'Horizon',
837 '4H' => 'Horizont',
838 'HO' => 'Hosin',
839 'H3' => 'Hotel',
840 'HV' => 'Hotwav',
841 'U8' => 'Hot Pepper',
842 'HOT' => 'HOTACK',
843 'JH' => 'HOTREALS',
844 'HW' => 'How',
845 'WH' => 'Honeywell',
846 'HON' => 'HongTop',
847 'HOG' => 'HONKUAHG',
848 'HP' => 'HP',
849 'HDC' => 'HDC',
850 'HT' => 'HTC',
851 'QZ' => 'Huagan',
852 'HD' => 'Huadoo',
853 'HG' => 'Huavi',
854 'HU' => 'Huawei',
855 'HX' => 'Humax',
856 'HUM' => 'Humanware',
857 'HME' => 'HUMElab',
858 'HR' => 'Hurricane',
859 'H5' => 'Huskee',
860 'HUG' => 'Hugerock',
861 'HY' => 'Hyrican',
862 'HN' => 'Hyundai',
863 '7H' => 'Hyve',
864 'HYT' => 'Hytera',
865 'HYK' => 'Hykker',
866 'HYA' => 'Hyatta',
867 'IKL' => 'I KALL',
868 '3I' => 'i-Cherry',
869 'IJ' => 'i-Joy',
870 'IM' => 'i-mate',
871 'IO' => 'i-mobile',
872 'INN' => 'I-INN',
873 'IPL' => 'I-Plus',
874 'OF' => 'iOutdoor',
875 'IB' => 'iBall',
876 'IY' => 'iBerry',
877 '7I' => 'iBrit',
878 'IBO' => 'ibowin',
879 'I2' => 'IconBIT',
880 'ING' => 'Icone Gold',
881 'IC' => 'iDroid',
882 'IDI' => 'iDino',
883 '6Z' => 'iData',
884 'IDC' => 'IDC',
885 'IG' => 'iGet',
886 'IHL' => 'iHome Life',
887 'IH' => 'iHunt',
888 'IA' => 'Ikea',
889 'IYO' => 'iYou',
890 '8I' => 'IKU Mobile',
891 '2K' => 'IKI Mobile',
892 'IK' => 'iKoMo',
893 '58' => 'iKon',
894 '588' => 'iKonia',
895 'I7' => 'iLA',
896 '2I' => 'iLife',
897 '1I' => 'iMars',
898 'IMI' => 'iMI',
899 'U4' => 'iMan',
900 'ILE' => 'iLepo',
901 'IL' => 'IMO Mobile',
902 'IMA' => 'Imaq',
903 'IM1' => 'Imose',
904 'I3' => 'Impression',
905 'FC' => 'INCAR',
906 '2H' => 'Inch',
907 '6I' => 'Inco',
908 'INK' => 'Inka',
909 'IW' => 'iNew',
910 'IF' => 'Infinix',
911 'INF' => 'Infiniton',
912 'IPR' => 'InfinityPro',
913 'I0' => 'InFocus',
914 'IN1' => 'InFone',
915 'II' => 'Inkti',
916 'MIR' => 'Infomir',
917 '81' => 'InfoKit',
918 'I5' => 'InnJoo',
919 '26' => 'Innos',
920 'IN' => 'Innostream',
921 'I4' => 'Inoi',
922 'INO' => 'iNo Mobile',
923 'IQ' => 'INQ',
924 'QN' => 'iQ&T',
925 'IS' => 'Insignia',
926 'YI' => 'INSYS',
927 'IT' => 'Intek',
928 'INT' => 'Intel',
929 'IX' => 'Intex',
930 'IV' => 'Inverto',
931 '32' => 'Invens',
932 '4I' => 'Invin',
933 'IFT' => 'iFIT',
934 'INA' => 'iNavi',
935 'I1' => 'iOcean',
936 'IMU' => 'iMuz',
937 'IP' => 'iPro',
938 'X9' => 'iPEGTOP',
939 '8Q' => 'IQM',
940 'Q8' => 'IRA',
941 'I6' => 'Irbis',
942 '5I' => 'Iris',
943 'IRE' => 'iReplace',
944 'IR' => 'iRola',
945 'IU' => 'iRulu',
946 'IRO' => 'iRobot',
947 '9I' => 'iSWAG',
948 '9J' => 'iSafe Mobile',
949 'IST' => 'iStar',
950 '86' => 'IT',
951 'IZ' => 'iTel',
952 '0I' => 'iTruck',
953 'I8' => 'iVA',
954 'IE' => 'iView',
955 '0J' => 'iVooMi',
956 'UI' => 'ivvi',
957 'QW' => 'iWaylink',
958 'I9' => 'iZotron',
959 'IXT' => 'iXTech',
960 'IOT' => 'IOTWE',
961 'JA' => 'JAY-Tech',
962 'JAM' => 'Jambo',
963 'KJ' => 'Jiake',
964 'JD' => 'Jedi',
965 'JEE' => 'Jeep',
966 'J6' => 'Jeka',
967 'JF' => 'JFone',
968 'JI' => 'Jiayu',
969 'JG' => 'Jinga',
970 'JIN' => 'Jin Tu',
971 'JX' => 'Jio',
972 'VJ' => 'Jivi',
973 'JK' => 'JKL',
974 'JR1' => 'JREN',
975 'JO' => 'Jolla',
976 'JP' => 'Joy',
977 'JOY' => 'JoySurf',
978 'UJ' => 'Juniper Systems',
979 'J5' => 'Just5',
980 'JUS' => 'JUSYEA',
981 '7J' => 'Jumper',
982 'JPA' => 'JPay',
983 'JV' => 'JVC',
984 'JXD' => 'JXD',
985 'JS' => 'Jesy',
986 'KT' => 'K-Touch',
987 'KLT' => 'K-Lite',
988 'K4' => 'Kaan',
989 'K7' => 'Kaiomy',
990 'KL' => 'Kalley',
991 'K6' => 'Kanji',
992 'KA' => 'Karbonn',
993 'K5' => 'KATV1',
994 'KAP' => 'Kapsys',
995 'K0' => 'Kata',
996 'KZ' => 'Kazam',
997 '9K' => 'Kazuna',
998 'KD' => 'KDDI',
999 'KHA' => 'Khadas',
1000 'KS' => 'Kempler & Strauss',
1001 'K3' => 'Keneksi',
1002 'KHI' => 'KENSHI',
1003 'KNW' => 'KENWOOD',
1004 'KX' => 'Kenxinda',
1005 'KEN' => 'Kenbo',
1006 'KND' => 'Kendo',
1007 'KZG' => 'KZG',
1008 'K1' => 'Kiano',
1009 'KID' => 'kidiby',
1010 '5W' => 'Kingbox',
1011 'KI' => 'Kingsun',
1012 'KIS' => 'Kinstone',
1013 'KF' => 'KINGZONE',
1014 'KIN' => 'Kingstar',
1015 '46' => 'Kiowa',
1016 'KV' => 'Kivi',
1017 '64' => 'Kvant',
1018 'KVA' => 'KVADRA',
1019 '0K' => 'Klipad',
1020 'KNM' => 'KN Mobile',
1021 'KC' => 'Kocaso',
1022 'KK' => 'Kodak',
1023 'KG' => 'Kogan',
1024 'KGT' => 'KGTEL',
1025 'KM' => 'Komu',
1026 'KMC' => 'KMC',
1027 'KO' => 'Konka',
1028 'KW' => 'Konrow',
1029 'KB' => 'Koobee',
1030 '7K' => 'Koolnee',
1031 'K9' => 'Kooper',
1032 'KP' => 'KOPO',
1033 'KR' => 'Koridy',
1034 'XK' => 'Koslam',
1035 'K2' => 'KRONO',
1036 'KRX' => 'Korax',
1037 'KE' => 'Krüger&Matz',
1038 '5K' => 'KREZ',
1039 'WK' => 'KRIP',
1040 'KRA' => 'Kraft',
1041 'KH' => 'KT-Tech',
1042 'KTC' => 'KTC',
1043 'Z6' => 'KUBO',
1044 'KUG' => 'KuGou',
1045 'K8' => 'Kuliao',
1046 '8K' => 'Kult',
1047 'KU' => 'Kumai',
1048 '6K' => 'Kurio',
1049 'KYD' => 'Kydos',
1050 'KY' => 'Kyocera',
1051 'KQ' => 'Kyowon',
1052 '1K' => 'Kzen',
1053 'LQ' => 'LAIQ',
1054 'L6' => 'Land Rover',
1055 'L2' => 'Landvo',
1056 'LA' => 'Lanix',
1057 'LA1' => 'Lanin',
1058 'LK' => 'Lark',
1059 'Z3' => 'Laurus',
1060 'LEC' => 'Lectrus',
1061 'LAS' => 'Laser',
1062 'LV' => 'Lava',
1063 'LVI' => 'Lville',
1064 'LC' => 'LCT',
1065 'L5' => 'Leagoo',
1066 'U3' => 'Leben',
1067 'LEB' => 'LeBest',
1068 'LD' => 'Ledstar',
1069 'LEE' => 'Leelbox',
1070 'L1' => 'LeEco',
1071 '4B' => 'Leff',
1072 'LEG' => 'Legend',
1073 'L4' => 'Lemhoov',
1074 'W9' => 'LEMFO',
1075 'LEM' => 'Lemco',
1076 'LN' => 'Lenco',
1077 'LE' => 'Lenovo',
1078 'LT' => 'Leotec',
1079 'LP' => 'Le Pan',
1080 'ZJ' => 'Leke',
1081 'L7' => 'Lephone',
1082 'LZ' => 'Lesia',
1083 'L3' => 'Lexand',
1084 'LX' => 'Lexibook',
1085 'LG' => 'LG',
1086 '39' => 'Liberton',
1087 '5L' => 'Linsar',
1088 'LIN' => 'Linsay',
1089 'LF' => 'Lifemaxx',
1090 'LI' => 'Lingwin',
1091 'LIB' => 'Lingbo',
1092 'LIM' => 'Lime',
1093 'LJ' => 'L-Max',
1094 'LW' => 'Linnex',
1095 'JJ' => 'Listo',
1096 'LNM' => 'LNMBBS',
1097 'LO' => 'Loewe',
1098 'LNG' => 'LongTV',
1099 'YL' => 'Loview',
1100 'LOV' => 'Lovme',
1101 'LGN' => 'LOGAN',
1102 '1L' => 'Logic',
1103 'LH' => 'Logic Instrument',
1104 'LM' => 'Logicom',
1105 'LOG' => 'Logik',
1106 'LGT' => 'Logitech',
1107 'GY' => 'LOKMAT',
1108 'LPX' => 'LPX-G',
1109 '0L' => 'Lumigon',
1110 'LU' => 'Lumus',
1111 'LUM' => 'Lumitel',
1112 'L9' => 'Luna',
1113 'LNN' => 'LUNNEN',
1114 'LUO' => 'LUO',
1115 'LR' => 'Luxor',
1116 'LY' => 'LYF',
1117 'LL' => 'Leader Phone',
1118 'LTL' => 'LYOTECH LABS',
1119 'QL' => 'LT Mobile',
1120 'LW1' => 'LW',
1121 'MQ' => 'M.T.T.',
1122 'MN' => 'M4tel',
1123 'XM' => 'Macoox',
1124 '92' => 'MAC AUDIO',
1125 'MJ' => 'Majestic',
1126 'FQ' => 'Mafe',
1127 'MAG' => 'MAG',
1128 'MA2' => 'MAGCH',
1129 '6Y' => 'Magicsee',
1130 'MA4' => 'Magenta',
1131 '23' => 'Magnus',
1132 'NH' => 'Manhattan',
1133 'MAN' => 'Mango',
1134 '5M' => 'Mann',
1135 'MA' => 'Manta Multimedia',
1136 'Z0' => 'Mantra',
1137 'J4' => 'Mara',
1138 'MAR' => 'Marshal',
1139 '8Y' => 'Massgo',
1140 'MA1' => 'Mascom',
1141 '2M' => 'Masstel',
1142 '3X' => 'Mastertech',
1143 'MAS' => 'Master-G',
1144 '50' => 'Matrix',
1145 'MAT' => 'Matco Tools',
1146 '7M' => 'Maxcom',
1147 '7M1' => 'Maxfone',
1148 'ZM' => 'Maximus',
1149 '6X' => 'Maxtron',
1150 '0D' => 'MAXVI',
1151 'MAX' => 'Maxwell',
1152 'XZ' => 'MAXX',
1153 'MW' => 'Maxwest',
1154 'M0' => 'Maze',
1155 'YM' => 'Maze Speed',
1156 '87' => 'Malata',
1157 'MAU' => 'Maunfeld',
1158 'MCL' => 'McLaut',
1159 '28' => 'MBOX',
1160 'FK' => 'MBI',
1161 'MBK' => 'MBK',
1162 '3D' => 'MDC Store',
1163 '1Y' => 'MDTV',
1164 '09' => 'meanIT',
1165 'M3' => 'Mecer',
1166 'M3M' => 'M3 Mobile',
1167 '0M' => 'Mecool',
1168 'MEC' => 'MECHEN',
1169 'MEM' => 'MeMobile',
1170 'MC' => 'Mediacom',
1171 'MD' => 'Medion',
1172 'M2' => 'MEEG',
1173 'MEG' => 'MEGA VISION',
1174 'MCA' => 'Megacable',
1175 'MP' => 'MegaFon',
1176 'MGX' => 'MEGAMAX',
1177 'X0' => 'mPhone',
1178 '3M' => 'Meitu',
1179 'M1' => 'Meizu',
1180 '0E' => 'Melrose',
1181 'MU' => 'Memup',
1182 'ME' => 'Metz',
1183 'MEO' => 'MEO',
1184 'MX' => 'MEU',
1185 'MES' => 'MESWAO',
1186 'MI' => 'MicroMax',
1187 'MIP' => 'mipo',
1188 'MS' => 'Microsoft',
1189 '6Q' => 'Microtech',
1190 'MIG' => 'Mightier',
1191 '1X' => 'Minix',
1192 'OM' => 'Mintt',
1193 'MIN' => 'Mint',
1194 'MO' => 'Mio',
1195 'MOD' => 'Moondrop',
1196 'MOR' => 'MORTAL',
1197 'X7' => 'Mione',
1198 'M7' => 'Miray',
1199 'MIT' => 'Mitchell & Brown',
1200 '8M' => 'Mito',
1201 'MT' => 'Mitsubishi',
1202 '0Y' => 'Mitsui',
1203 'M5' => 'MIXC',
1204 '2D' => 'MIVO',
1205 '1Z' => 'MiXzo',
1206 'MIW' => 'MIWANG',
1207 'ML' => 'MLLED',
1208 'LS' => 'MLS',
1209 'MLA' => 'MLAB',
1210 '5H' => 'MMI',
1211 '4M' => 'Mobicel',
1212 'M6' => 'Mobiistar',
1213 'MOK' => 'Mobile Kingdom',
1214 'MH' => 'Mobiola',
1215 'MB' => 'Mobistel',
1216 'ID' => 'MobiIoT',
1217 '6W' => 'MobiWire',
1218 '9M' => 'Mobo',
1219 'MOB' => 'Mobell',
1220 'MVO' => 'Mobvoi',
1221 'M4' => 'Modecom',
1222 'MEP' => 'Mode Mobile',
1223 'MF' => 'Mofut',
1224 'MR' => 'Motorola',
1225 'MTS' => 'Motorola Solutions',
1226 'MIV' => 'Motiv',
1227 'MV' => 'Movic',
1228 'MOV' => 'Movitel',
1229 'MO1' => 'MOVISUN',
1230 'MOS' => 'Mosimosi',
1231 'MOX' => 'Moxee',
1232 'MM' => 'Mpman',
1233 'MZ' => 'MSI',
1234 '3R' => 'MStar',
1235 'M9' => 'MTC',
1236 'N4' => 'MTN',
1237 '72' => 'M-Tech',
1238 '9H' => 'M-Horse',
1239 'MKP' => 'M-KOPA',
1240 'MLB' => 'multibox',
1241 '1R' => 'Multilaser',
1242 'MPS' => 'MultiPOS',
1243 'MLT' => 'MULTYNET',
1244 '1M' => 'MYFON',
1245 'MY1' => 'myPhone (PL)',
1246 'MY' => 'MyPhone (PH)',
1247 '51' => 'Myros',
1248 'M8' => 'Myria',
1249 '6M' => 'Mystery',
1250 '3T' => 'MyTab',
1251 'MG' => 'MyWigo',
1252 'J3' => 'Mymaga',
1253 'MYM' => 'MyMobile',
1254 '07' => 'MyGica',
1255 'MYG' => 'MygPad',
1256 'MWA' => 'MwalimuPlus',
1257 'NEO' => 'neoCore',
1258 'NER' => 'Neoregent',
1259 '08' => 'Nabi',
1260 'N7' => 'National',
1261 'NC' => 'Navcity',
1262 '6N' => 'Navitech',
1263 '7V' => 'Navitel',
1264 'N3' => 'Navon',
1265 '7R' => 'NavRoad',
1266 'NAB' => 'NABO',
1267 'NAS' => 'NASCO',
1268 'NP' => 'Naomi Phone',
1269 'NAN' => 'Nanho',
1270 'NE' => 'NEC',
1271 'NDP' => 'Nedaphone',
1272 '8N' => 'Necnot',
1273 'NF' => 'Neffos',
1274 '9X' => 'Neo',
1275 'NEK' => 'NEKO',
1276 '1N' => 'Neomi',
1277 '7Q' => 'Neon IQ',
1278 '8F' => 'Neolix',
1279 'NES' => 'Nesons',
1280 'NET' => 'NetBox',
1281 'NWT' => 'NETWIT',
1282 'NA' => 'Netgear',
1283 'NEM' => 'Netmak',
1284 'NU' => 'NeuImage',
1285 'NEU' => 'NeuTab',
1286 'NEV' => 'NEVIR',
1287 'NW' => 'Newgen',
1288 'N9' => 'Newland',
1289 '0N' => 'Newman',
1290 'NS' => 'NewsMy',
1291 'ND' => 'Newsday',
1292 'HB' => 'New Balance',
1293 'BRI' => 'New Bridge',
1294 'NEW' => 'Newal',
1295 'XB' => 'NEXBOX',
1296 'NX' => 'Nexian',
1297 '7X' => 'Nexa',
1298 '7XR' => 'Nexar',
1299 'N8' => 'NEXON',
1300 'N2' => 'Nextbit',
1301 'NT' => 'NextBook',
1302 'NTT' => 'NTT West',
1303 '4N' => 'NextTab',
1304 'NEX' => 'NEXT',
1305 'NST' => 'Next & NextStar',
1306 'NJO' => 'nJoy',
1307 'NG' => 'NGM',
1308 'NZ' => 'NG Optics',
1309 'NZP' => 'NGpon',
1310 'NN' => 'Nikon',
1311 'NIL' => 'NILAIT',
1312 'NI' => 'Nintendo',
1313 'NIN' => 'NINETEC',
1314 'NI1' => 'NINETOLOGY',
1315 'N5' => 'NOA',
1316 'N1' => 'Noain',
1317 'N6' => 'Nobby',
1318 'NOC' => 'Novacom',
1319 'NOS' => 'NoviSea',
1320 'NO2' => 'NOVIS',
1321 'NOV' => 'Novey',
1322 'NO1' => 'NOVO',
1323 '57' => 'Nubia',
1324 'JN' => 'NOBUX',
1325 'NB' => 'Noblex',
1326 'OG' => 'NOGA',
1327 'NK' => 'Nokia',
1328 'NM' => 'Nomi',
1329 '2N' => 'Nomu',
1330 '6H' => 'Noontec',
1331 'NR' => 'Nordmende',
1332 'NRD' => 'Nordfrost',
1333 'NOR' => 'NORMANDE',
1334 '7N' => 'NorthTech',
1335 'NOT' => 'Nothing',
1336 '5N' => 'Nos',
1337 'NO' => 'Nous',
1338 'NQ' => 'Novex',
1339 'NOD' => 'noDROPOUT',
1340 'NJ' => 'NuAns',
1341 'NL' => 'NUU Mobile',
1342 'N0' => 'Nuvo',
1343 'NUV' => 'NuVision',
1344 'NV' => 'Nvidia',
1345 'NY' => 'NYX Mobile',
1346 'NON' => 'N-one',
1347 'O3' => 'O+',
1348 'OT' => 'O2',
1349 'O7' => 'Oale',
1350 'OC' => 'OASYS',
1351 'OB' => 'Obi',
1352 'OBR' => 'Ober',
1353 'OQ' => 'Meta',
1354 'O1' => 'Odys',
1355 'ODP' => 'Odotpad',
1356 'O9' => 'ok.',
1357 'OKA' => 'Okapi',
1358 'OA' => 'Okapia',
1359 'OKI' => 'Oking',
1360 'OLA' => 'Olax',
1361 'OLK' => 'Olkya',
1362 'OLY' => 'Olympia',
1363 'OCE' => 'OCEANIC',
1364 'OLT' => 'OLTO',
1365 'OJ' => 'Ookee',
1366 'OD' => 'Onda',
1367 'ON' => 'OnePlus',
1368 'ONC' => 'OneClick',
1369 'ONL' => 'OneLern',
1370 'OAN' => 'Oangcc',
1371 'OX' => 'Onix',
1372 'OIN' => 'Onida',
1373 '3O' => 'ONYX BOOX',
1374 'O4' => 'ONN',
1375 '9Q' => 'Onkyo',
1376 'ONV' => 'ONVO',
1377 'OOR' => 'Ooredoo',
1378 '2O' => 'OpelMobile',
1379 'OH' => 'Openbox',
1380 '7Y' => 'Obabox',
1381 'OP' => 'OPPO',
1382 'OO' => 'Opsson',
1383 'OPT' => 'Optoma',
1384 'OPH' => 'Ophone',
1385 'OR' => 'Orange',
1386 'ORP' => 'Orange Pi',
1387 'ORA' => 'Orava',
1388 'O5' => 'Orbic',
1389 'Y6' => 'Orbita',
1390 'ORB' => 'Orbsmart',
1391 'OS' => 'Ordissimo',
1392 '8O' => 'Orion',
1393 'OTT' => 'OTTO',
1394 'OK' => 'Ouki',
1395 '0O' => 'OINOM',
1396 'OIL' => 'Oilsky',
1397 'QK' => 'OKWU',
1398 'QQ' => 'OMIX',
1399 '56' => 'OKSI',
1400 'OE' => 'Oukitel',
1401 'OU' => 'OUYA',
1402 'JB' => 'OUJIA',
1403 'OV' => 'Overmax',
1404 '30' => 'Ovvi',
1405 'O2' => 'Owwo',
1406 'OSC' => 'OSCAL',
1407 'OXT' => 'OX TAB',
1408 'OY' => 'Oysters',
1409 'QF' => 'OYSIN',
1410 'O6' => 'Oyyu',
1411 'OZ' => 'OzoneHD',
1412 'OLL' => 'Ollee',
1413 '7P' => 'P-UP',
1414 'PRA' => 'Pacific Research Alliance',
1415 'PAG' => 'PAGRAER',
1416 'PAD' => 'Padpro',
1417 'YP' => 'Paladin',
1418 'PM' => 'Palm',
1419 'PN' => 'Panacom',
1420 'PA' => 'Panasonic',
1421 'PNV' => 'Panavox',
1422 'PT' => 'Pantech',
1423 'PAN' => 'Pano',
1424 'PND' => 'Panodic',
1425 'PA1' => 'Panoramic',
1426 'PLT' => 'Platoon',
1427 'PLD' => 'PLDT',
1428 '94' => 'Packard Bell',
1429 'H9' => 'Parrot Mobile',
1430 'PAR' => 'Partner Mobile',
1431 'PAP' => 'PAPYRE',
1432 'PB' => 'PCBOX',
1433 'PCS' => 'PC Smart',
1434 'PC' => 'PCD',
1435 'PD' => 'PCD Argentina',
1436 'PE' => 'PEAQ',
1437 'PEN' => 'Penta',
1438 'PG' => 'Pentagram',
1439 'PQ' => 'Pendoo',
1440 '93' => 'Perfeo',
1441 '8J' => 'Pelitt',
1442 '1P' => 'Phicomm',
1443 '4P' => 'Philco',
1444 'PH' => 'Philips',
1445 '5P' => 'Phonemax',
1446 'PO' => 'phoneOne',
1447 'PI' => 'Pioneer',
1448 'PIC' => 'Pioneer Computers',
1449 'PJ' => 'PiPO',
1450 '8P' => 'Pixelphone',
1451 '9O' => 'Pixela',
1452 'PX' => 'Pixus',
1453 'PIX' => 'PIXPRO',
1454 'QP' => 'Pico',
1455 'PIR' => 'PIRANHA',
1456 'PIN' => 'PINE',
1457 '9P' => 'Planet Computers',
1458 'PLA' => 'Play Now',
1459 'PY' => 'Ployer',
1460 'P4' => 'Plum',
1461 'PLU' => 'PlusStyle',
1462 '22' => 'Pluzz',
1463 'P8' => 'PocketBook',
1464 '0P' => 'POCO',
1465 'FH' => 'Point Mobile',
1466 'PV' => 'Point of View',
1467 'PVB' => 'PVBox',
1468 'PL' => 'Polaroid',
1469 'Q6' => 'Polar',
1470 '97' => 'PolarLine',
1471 'PP' => 'PolyPad',
1472 'P5' => 'Polytron',
1473 'P2' => 'Pomp',
1474 'P0' => 'Poppox',
1475 '0X' => 'POPTEL',
1476 'PS' => 'Positivo',
1477 '3P' => 'Positivo BGH',
1478 '3F' => 'Porsche',
1479 'PRT' => 'Portfolio',
1480 'PPD' => 'PPDS',
1481 'P3' => 'PPTV',
1482 'FP' => 'Premio',
1483 'PR1' => 'Premier',
1484 'PR' => 'Prestigio',
1485 'P9' => 'Primepad',
1486 'PRM' => 'PRIME',
1487 '6P' => 'Primux',
1488 '2P' => 'Prixton',
1489 'PRI' => 'Pritom',
1490 'PRP' => 'PRISM+',
1491 'PF' => 'PROFiLO',
1492 'P6' => 'Proline',
1493 '5O' => 'Prology',
1494 'P1' => 'ProScan',
1495 'PRO' => 'PROSONIC',
1496 'P7' => 'Protruly',
1497 'R0' => 'ProVision',
1498 '7O' => 'Polestar',
1499 'PU' => 'PULID',
1500 'UP' => 'Purism',
1501 'PUN' => 'Punos',
1502 'QFX' => 'QFX',
1503 'Q7' => 'Q-Box',
1504 'QH' => 'Q-Touch',
1505 'QB' => 'Q.Bell',
1506 'QI' => 'Qilive',
1507 'QIN' => 'QIN',
1508 'QIW' => 'Qiuwoky',
1509 'QM' => 'QMobile',
1510 'QT' => 'Qtek',
1511 'Q9' => 'QTECH',
1512 'QA' => 'Quantum',
1513 'QUE' => 'Quest',
1514 'QUA' => 'Quatro',
1515 'QU' => 'Quechua',
1516 'QUI' => 'Quipus',
1517 'QO' => 'Qumo',
1518 'UQ' => 'Qubo',
1519 'QUP' => 'Qupi',
1520 'YQ' => 'QLink',
1521 'QY' => 'Qnet Mobile',
1522 'WJ' => 'Qware',
1523 'QWT' => 'QWATT',
1524 'R2' => 'R-TV',
1525 'R3D' => 'R3Di',
1526 'RA' => 'Ramos',
1527 '0R' => 'Raspberry',
1528 'R9' => 'Ravoz',
1529 'RZ' => 'Razer',
1530 'RAZ' => 'RAZZ',
1531 '95' => 'Rakuten',
1532 'RAY' => 'Raylandz',
1533 'RC' => 'RCA Tablets',
1534 'RCT' => 'RCT',
1535 '2R' => 'Reach',
1536 'RLX' => 'Realix',
1537 'REL' => 'RelNAT',
1538 'RE4' => 'Relndoo',
1539 'RB' => 'Readboy',
1540 'RE' => 'Realme',
1541 'RE1' => 'Redbean',
1542 'R8' => 'RED',
1543 'RDX' => 'RED-X',
1544 'REW' => 'Redway',
1545 '6F' => 'Redfox',
1546 'RE2' => 'RedLine',
1547 'RD' => 'Reeder',
1548 'Z9' => 'REGAL',
1549 'RH' => 'Remdun',
1550 'RP' => 'Revo',
1551 'REV' => 'Revomovil',
1552 '8R' => 'Retroid Pocket',
1553 'REN' => 'Renova',
1554 'RE3' => 'RENSO',
1555 'REP' => 'rephone',
1556 'RHI' => 'Rhino',
1557 'RIC' => 'Ricoh',
1558 'RI' => 'Rikomagic',
1559 'RM' => 'RIM',
1560 'RN' => 'Rinno',
1561 'RNB' => 'Ringing Bells',
1562 'RX' => 'Ritmix',
1563 'R7' => 'Ritzviva',
1564 'RV' => 'Riviera',
1565 '6R' => 'Rivo',
1566 'RIZ' => 'Rizzen',
1567 'RR' => 'Roadrover',
1568 'QR' => 'ROADMAX',
1569 'ROH' => 'ROCH',
1570 'ROC' => 'Roam Cat',
1571 'ROT' => 'Rocket',
1572 'R1' => 'Rokit',
1573 'ROI' => 'ROiK',
1574 'RK' => 'Roku',
1575 'R3' => 'Rombica',
1576 'RUA' => 'Romsat',
1577 'R5' => 'Ross&Moor',
1578 'RO' => 'Rover',
1579 'R6' => 'RoverPad',
1580 'RQ' => 'RoyQueen',
1581 'RJ' => 'Royole',
1582 'RT' => 'RT Project',
1583 'RTK' => 'RTK',
1584 'RG' => 'RugGear',
1585 'RUG' => 'Ruggex',
1586 'RUT' => 'RuggeTech',
1587 'RU' => 'Runbo',
1588 'RUP' => 'Rupa',
1589 'RL' => 'Ruio',
1590 'RY' => 'Ryte',
1591 'X5' => 'Saba',
1592 '8L' => 'S-TELL',
1593 '8L1' => 'S-Color',
1594 '4O' => 'S2Tel',
1595 '89' => 'Seatel',
1596 'SEW' => 'Sewoo',
1597 'SE1' => 'SEEWO',
1598 'SEN' => 'SENNA',
1599 'SER' => 'SERVO',
1600 'Y7' => 'Saiet',
1601 'SLF' => 'SAILF',
1602 'X1' => 'Safaricom',
1603 'SG' => 'Sagem',
1604 'SAG' => 'Sagemcom',
1605 '4L' => 'Salora',
1606 'SA' => 'Samsung',
1607 'SAT' => 'Samtech',
1608 'SAM' => 'Samtron',
1609 'SAB' => 'Sambox',
1610 'SNA' => 'SNAMI',
1611 'S0' => 'Sanei',
1612 '12' => 'Sansui',
1613 'SAK' => 'Sankey',
1614 'SQ' => 'Santin',
1615 'SY' => 'Sanyo',
1616 'SAN' => 'SANY',
1617 'S9' => 'Savio',
1618 'Y4' => 'TCL SCBC',
1619 'SCH' => 'SCHAUB LORENZ',
1620 'CZ' => 'Schneider',
1621 'SHO' => 'SCHONTECH',
1622 'SCO' => 'Scosmos',
1623 'SC1' => 'Scoole',
1624 'ZG' => 'Schok',
1625 'G8' => 'SEG',
1626 'SEX' => 'SEHMAX',
1627 'SD' => 'Sega',
1628 '0U' => 'Selecline',
1629 '9G' => 'Selenga',
1630 'SV' => 'Selevision',
1631 'SL' => 'Selfix',
1632 '0S' => 'SEMP TCL',
1633 'S1' => 'Sencor',
1634 'SNM' => 'Sencrom',
1635 'SN' => 'Sendo',
1636 '01' => 'Senkatel',
1637 'S6' => 'Senseit',
1638 'EW' => 'Senwa',
1639 '24' => 'Seeken',
1640 'SEB' => 'SEBBE',
1641 '61' => 'Seuic',
1642 'SX' => 'SFR',
1643 'SGI' => 'SGIN',
1644 'SH' => 'Sharp',
1645 'JU' => 'Shanling',
1646 '7S' => 'Shift Phones',
1647 '78' => 'Shivaki',
1648 'RS' => 'Shtrikh-M',
1649 '3S' => 'Shuttle',
1650 '13' => 'Sico',
1651 'SI' => 'Siemens',
1652 '1S' => 'Sigma',
1653 '70' => 'Silelis',
1654 'SJ' => 'Silent Circle',
1655 'SIL' => 'Silva Schneider',
1656 '10' => 'Simbans',
1657 '98' => 'Simply',
1658 'SIM' => 'simfer',
1659 '52' => 'Singtech',
1660 'SIN' => 'SINGER',
1661 '31' => 'Siragon',
1662 'SIS' => 'Siswoo',
1663 '83' => 'Sirin Labs',
1664 '5Z' => 'SK Broadband',
1665 'GK' => 'SKG',
1666 'SW' => 'Sky',
1667 'SK' => 'Skyworth',
1668 'SKY' => 'Skyline',
1669 'SK1' => 'SkyStream',
1670 'SKT' => 'Skytech',
1671 'SKK' => 'SKK Mobile',
1672 '14' => 'Smadl',
1673 '19' => 'Smailo',
1674 'SR' => 'Smart Electronic',
1675 'SMA' => 'Smart Kassel',
1676 'STE' => 'Smart Tech',
1677 '49' => 'Smart',
1678 '47' => 'SmartBook',
1679 '3B' => 'Smartab',
1680 '80' => 'SMARTEC',
1681 'SM1' => 'Smartex',
1682 'SC' => 'Smartfren',
1683 'S7' => 'Smartisan',
1684 'SMU' => 'SMUX',
1685 'SMT' => 'SMT Telecom',
1686 'JR' => 'Sylvania',
1687 'SYH' => 'SYH',
1688 '3Y' => 'Smarty',
1689 'HH' => 'Smooth Mobile',
1690 '1Q' => 'Smotreshka',
1691 'SF' => 'Softbank',
1692 '9L' => 'SOLE',
1693 'JL' => 'SOLO',
1694 'SOS' => 'SOSH',
1695 'SOD' => 'Soda',
1696 'SOL' => 'Solas',
1697 '16' => 'Solone',
1698 'OI' => 'Sonim',
1699 'SVE' => 'Sveon',
1700 'SO' => 'Sony',
1701 'SE' => 'Sony Ericsson',
1702 'X2' => 'Soundmax',
1703 'SUL' => 'SoulLink',
1704 '8S' => 'Soyes',
1705 '77' => 'SONOS',
1706 '68' => 'Soho Style',
1707 'SOB' => 'SobieTech',
1708 'SOW' => 'SOWLY',
1709 'PK' => 'Spark',
1710 'SPX' => 'Sparx',
1711 'FS' => 'SPC',
1712 '6S' => 'Spectrum',
1713 '43' => 'Spectralink',
1714 'SP' => 'Spice',
1715 'SPD' => 'Spider',
1716 '84' => 'Sprint',
1717 'SPU' => 'SPURT',
1718 'QS' => 'SQOOL',
1719 'S4' => 'Star',
1720 'OL' => 'Starlight',
1721 'STA' => 'Star-Light',
1722 '18' => 'Starmobile',
1723 '2S' => 'Starway',
1724 '45' => 'Starwind',
1725 'SB' => 'STF Mobile',
1726 'S8' => 'STK',
1727 'GQ' => 'STG Telecom',
1728 'S2' => 'Stonex',
1729 'ST' => 'Storex',
1730 'STR' => 'Stream',
1731 '71' => 'StrawBerry',
1732 '96' => 'STRONG',
1733 '69' => 'Stylo',
1734 'STI' => 'Stilevs',
1735 '9S' => 'Sugar',
1736 'SUR' => 'Surge',
1737 'SUF' => 'Surfans',
1738 '06' => 'Subor',
1739 'SUT' => 'SULPICE TV',
1740 'SZ' => 'Sumvision',
1741 '0H' => 'Sunstech',
1742 'S3' => 'SunVan',
1743 '5S' => 'Sunvell',
1744 '5Y' => 'Sunny',
1745 'W8' => 'SUNWIND',
1746 'SBX' => 'SuperBOX',
1747 'SBM' => 'Supermax',
1748 'SBR' => 'Sber',
1749 'SGE' => 'Super General',
1750 'SU' => 'SuperSonic',
1751 '79' => 'SuperTab',
1752 'STV' => 'SuperTV',
1753 'S5' => 'Supra',
1754 'SUP' => 'Supraim',
1755 'ZS' => 'Suzuki',
1756 '2J' => 'Sunmi',
1757 'SUN' => 'Sunmax',
1758 '0W' => 'Swipe',
1759 'SWI' => 'Switel',
1760 'SS' => 'SWISSMOBILITY',
1761 '1W' => 'Swisstone',
1762 'SWO' => 'SWOFY',
1763 'SSK' => 'SSKY',
1764 'SYC' => 'Syco',
1765 'SM' => 'Symphony',
1766 '4S' => 'Syrox',
1767 'SYS' => 'System76',
1768 'TM' => 'T-Mobile',
1769 'T96' => 'T96',
1770 'TAD' => 'TADAAM',
1771 'TK' => 'Takara',
1772 '73' => 'Tambo',
1773 '9N' => 'Tanix',
1774 'U5' => 'Taiga System',
1775 'TAL' => 'Talius',
1776 '7G' => 'TAG Tech',
1777 'TLB' => 'TALBERG',
1778 'TAU' => 'TAUBE',
1779 'T5' => 'TB Touch',
1780 'TC' => 'TCL',
1781 'T0' => 'TD Systems',
1782 'YY' => 'TD Tech',
1783 'H4' => 'Technicolor',
1784 'TEA' => 'TeachTouch',
1785 'Z5' => 'Technika',
1786 'TE1' => 'TechSmart',
1787 'TX' => 'TechniSat',
1788 'TT' => 'TechnoTrend',
1789 'TTS' => 'TECHNOSAT',
1790 'TM1' => 'Temigereev',
1791 'TP' => 'TechPad',
1792 'TPS' => 'TPS',
1793 '9E' => 'Techwood',
1794 '7F' => 'Technopc',
1795 'TCH' => 'Techstorm',
1796 'T7' => 'Teclast',
1797 'TB' => 'Tecno Mobile',
1798 'TEC' => 'TecToy',
1799 '91' => 'TEENO',
1800 'TLK' => 'Telkom',
1801 '2L' => 'Tele2',
1802 'TL' => 'Telefunken',
1803 'TG' => 'Telego',
1804 'T2' => 'Telenor',
1805 'TE' => 'Telit',
1806 '65' => 'Telia',
1807 'TLY' => 'Telly',
1808 'TEL' => 'Telma',
1809 'PW' => 'Telpo',
1810 'TLS' => 'TeloSystems',
1811 'TER' => 'Teracube',
1812 'TD' => 'Tesco',
1813 'TA' => 'Tesla',
1814 '9T' => 'Tetratab',
1815 'TET' => 'TETC',
1816 'TZ' => 'teXet',
1817 '29' => 'Teknosa',
1818 'JZ' => 'TJC',
1819 'TJD' => 'TJD',
1820 'JC' => 'TENPLUS',
1821 'T4' => 'ThL',
1822 'TN' => 'Thomson',
1823 'O0' => 'Thuraya',
1824 'TI' => 'TIANYU',
1825 'JY' => 'Tigers',
1826 '8T' => 'Time2',
1827 'TQ' => 'Timovi',
1828 'TIM' => 'TIMvision',
1829 '2T' => 'Tinai',
1830 'TF' => 'Tinmo',
1831 'TH' => 'TiPhone',
1832 'YV' => 'TiVo',
1833 'TIV' => 'Tivax',
1834 'TIB' => 'Tibuta',
1835 'Y3' => 'TOKYO',
1836 'TOX' => 'TOX',
1837 'T1' => 'Tolino',
1838 '0T' => 'Tone',
1839 'TY' => 'Tooky',
1840 'TYD' => 'TYD',
1841 'TOO' => 'TOOGO',
1842 'TPT' => 'Top-Tech',
1843 'T9' => 'Top House',
1844 'DK' => 'Topelotek',
1845 '42' => 'Topway',
1846 'TO' => 'Toplux',
1847 'TOD' => 'TOPDON',
1848 'TOP' => 'TopDevice',
1849 'TO2' => 'TOPSHOWS',
1850 '7T' => 'Torex',
1851 'TOR' => 'Torque',
1852 'TRN' => 'TORNADO',
1853 '6O' => 'TOSCIDO',
1854 'TO1' => 'Topsion',
1855 'TS' => 'Toshiba',
1856 'T8' => 'Touchmate',
1857 'TOU' => 'Touch Plus',
1858 '5R' => 'Transpeed',
1859 'T6' => 'TrekStor',
1860 'TRP' => 'Trecfone',
1861 'T3' => 'Trevi',
1862 'TRI' => 'TriaPlay',
1863 'TJ' => 'Trifone',
1864 'Q5' => 'Trident',
1865 'TRB' => 'Trimble',
1866 '4T' => 'Tronsmart',
1867 '11' => 'True',
1868 'JT' => 'True Slim',
1869 'J1' => 'Trio',
1870 'TRC' => 'Tricolor',
1871 'THT' => 'Tsinghua Tongfang',
1872 '5C' => 'TTEC',
1873 'TTF' => 'TTfone',
1874 'TTK' => 'TTK-TV',
1875 'TU' => 'Tunisie Telecom',
1876 '1T' => 'Turbo',
1877 'TR' => 'Turbo-X',
1878 '5X' => 'TurboPad',
1879 '5T' => 'TurboKids',
1880 'UR' => 'Turkcell',
1881 '4U' => 'TuCEL',
1882 'TUV' => 'Tuvio',
1883 'TUC' => 'TUCSON',
1884 '2U' => 'Türk Telekom',
1885 'TV' => 'TVC',
1886 'TVP' => 'TV+',
1887 'TW' => 'TWM',
1888 'Z1' => 'TWZ',
1889 '6T' => 'Twoe',
1890 'TWN' => 'TwinMOS',
1891 '15' => 'Tymes',
1892 'UC' => 'U.S. Cellular',
1893 'UD1' => 'UD',
1894 'UGI' => 'UGINE',
1895 'UG' => 'Ugoos',
1896 'U1' => 'Uhans',
1897 'UH' => 'Uhappy',
1898 'UL' => 'Ulefone',
1899 'UA' => 'Umax',
1900 'UM' => 'UMIDIGI',
1901 'UM2' => 'Umiio',
1902 'UNT' => 'Unitech',
1903 'UZ' => 'Unihertz',
1904 '3Z' => 'UZ Mobile',
1905 'UX' => 'Unimax',
1906 'UNQ' => 'Uniqcell',
1907 'US' => 'Uniscope',
1908 'UNI' => 'Unistrong',
1909 'U2' => 'UNIWA',
1910 'UND' => 'Uniden',
1911 'UNE' => 'UNITED',
1912 'UGR' => 'United Group',
1913 'UO' => 'Unnecto',
1914 'UNN' => 'Unnion Technologies',
1915 'UNP' => 'UnoPhone',
1916 'UU' => 'Unonu',
1917 'UN' => 'Unowhy',
1918 'UY' => 'UNNO',
1919 'UOO' => 'UOOGOU',
1920 'UNB' => 'Unblock Tech',
1921 'UK' => 'UTOK',
1922 '3U' => 'IUNI',
1923 'UT' => 'UTStarcom',
1924 '6U' => 'UTime',
1925 '9U' => 'Urovo',
1926 'UW' => 'U-Magic',
1927 '5V' => 'VAIO',
1928 'WV' => 'VAVA',
1929 'VA' => 'Vastking',
1930 'VP' => 'Vargo',
1931 'VC' => 'Vankyo',
1932 'VAL' => 'VALEM',
1933 'VA2' => 'VALE',
1934 'VAT' => 'VALTECH',
1935 'VAN' => 'VANGUARD',
1936 'VAW' => 'VANWIN',
1937 'VB' => 'VC',
1938 'VEI' => 'Veidoo',
1939 'VN' => 'Venso',
1940 'VNP' => 'VNPT Technology',
1941 'VEN' => 'Venstar',
1942 'UV' => 'Venturer',
1943 'VQ' => 'Vega',
1944 'WC' => 'VEON',
1945 '4V' => 'Verico',
1946 'V4' => 'Verizon',
1947 'VR' => 'Vernee',
1948 'VX' => 'Vertex',
1949 'VE' => 'Vertu',
1950 'VET' => 'VETAS',
1951 'VL' => 'Verykool',
1952 'QV' => 'Verssed',
1953 'VER' => 'Versus',
1954 'V8' => 'Vesta',
1955 'VEK' => 'Vekta',
1956 'VT' => 'Vestel',
1957 '48' => 'Vexia',
1958 'V6' => 'VGO TEL',
1959 'QJ' => 'VDVD',
1960 'VIC' => 'Victurio',
1961 'VD' => 'Videocon',
1962 'VW' => 'Videoweb',
1963 'VS' => 'ViewSonic',
1964 'VIE' => 'Viendo',
1965 'VIK' => 'VIKUSHA',
1966 'V7' => 'Vinga',
1967 'V7T' => 'V7',
1968 'V3' => 'Vinsoc',
1969 'XD' => 'Vinabox',
1970 'FV' => 'Vios',
1971 '0V' => 'Vipro',
1972 'ZV' => 'Virzo',
1973 'VIP' => 'Viper',
1974 'VI' => 'Vitelcom',
1975 'VIB' => 'ViBox',
1976 '8V' => 'Viumee',
1977 'V5' => 'Vivax',
1978 'VIV' => 'VIVIMAGE',
1979 'VI2' => 'VIVIBright',
1980 'VV' => 'Vivo',
1981 '6V' => 'VIWA',
1982 'VII' => 'VIIPOO',
1983 'VID' => 'VIDA',
1984 'VZ' => 'Vizio',
1985 'VIZ' => 'Vizmo',
1986 'VIT' => 'Vityaz',
1987 '9V' => 'Vision Touch',
1988 'VIS' => 'Vision Technology',
1989 'VST' => 'Visitech',
1990 'VIL' => 'Visual Land',
1991 'VI1' => 'VILLAON',
1992 'VIM' => 'VIMOQ',
1993 'VK' => 'VK Mobile',
1994 'JM' => 'v-mobile',
1995 'VHO' => 'V-HOPE',
1996 'VHM' => 'V-HOME',
1997 'VGE' => 'V-Gen',
1998 'V0' => 'VKworld',
1999 'VM' => 'Vodacom',
2000 'VOC' => 'VOCAL',
2001 'VF' => 'Vodafone',
2002 '7W' => 'VOGA',
2003 'V2' => 'Vonino',
2004 '1V' => 'Vontar',
2005 'VG' => 'Vorago',
2006 '2V' => 'Vorke',
2007 '8U' => 'Vorcom',
2008 'JW' => 'Vortex',
2009 'VRX' => 'VORTEX (RO)',
2010 'VOR' => 'Vormor',
2011 'V1' => 'Voto',
2012 'Z7' => 'VOX',
2013 'VO' => 'Voxtel',
2014 'VY' => 'Voyo',
2015 'VOL' => 'Völfen',
2016 'VO1' => 'Volt',
2017 'VOP' => 'Volla',
2018 'V02' => 'VOLIA',
2019 'VH' => 'Vsmart',
2020 'V9' => 'Vsun',
2021 'VU' => 'Vulcan',
2022 '3V' => 'VVETIME',
2023 'ZC' => 'VUCATIMES',
2024 'VO2' => 'VOLKANO',
2025 'VUE' => 'Vue Micro',
2026 'WAK' => 'Walker',
2027 'WA' => 'Walton',
2028 'WAF' => 'WAF',
2029 'WAO' => 'W&O',
2030 'WLT' => 'Waltham',
2031 'WAL' => 'Waltter',
2032 'WAI' => 'Wainyok',
2033 'WHI' => 'White Mobile',
2034 'WHO' => 'Whoop',
2035 'WBL' => 'We. by Loewe.',
2036 'WCP' => 'WeChip',
2037 'WM' => 'Weimei',
2038 'WM1' => 'Weiimi',
2039 'WE' => 'WellcoM',
2040 'W6' => 'WELLINGTON',
2041 'WD' => 'Western Digital',
2042 'WST' => 'Weston',
2043 'WT' => 'Westpoint',
2044 'WAN' => 'Wanmukang',
2045 'WA1' => 'WANSA',
2046 'WY' => 'Wexler',
2047 '3W' => 'WE',
2048 'WEC' => 'Wecool',
2049 'WEE' => 'Weelikeit',
2050 'WP' => 'Wieppo',
2051 'W2' => 'Wigor',
2052 'WI' => 'Wiko',
2053 'WF' => 'Wileyfox',
2054 'WLR' => 'WildRed',
2055 'WS' => 'Winds',
2056 'WN' => 'Wink',
2057 '9W' => 'Winmax',
2058 'W5' => 'Winnovo',
2059 'WU' => 'Wintouch',
2060 'WIS' => 'Winstar',
2061 'W0' => 'Wiseasy',
2062 '2W' => 'Wizz',
2063 'W4' => 'WIWA',
2064 'WIZ' => 'WizarPos',
2065 'WL' => 'Wolder',
2066 'WG' => 'Wolfgang',
2067 'WQ' => 'Wolki',
2068 'WON' => 'WONDER',
2069 'WO' => 'Wonu',
2070 'W1' => 'Woo',
2071 'WR' => 'Wortmann',
2072 'WX' => 'Woxter',
2073 'WOZ' => 'WOZIFAN',
2074 'XQ' => 'X-AGE',
2075 'XEL' => 'XElectron',
2076 'X3' => 'X-BO',
2077 'XBI' => 'XB',
2078 'XMO' => 'X-Mobile',
2079 'XT' => 'X-TIGI',
2080 'XV' => 'X-View',
2081 'X4' => 'X.Vision',
2082 'X88' => 'X88',
2083 'X96' => 'X96',
2084 '96Q' => 'X96Q',
2085 'A95' => 'A95X',
2086 'XG' => 'Xgody',
2087 'XGE' => 'XGEM',
2088 'QX' => 'XGIMI',
2089 'XL' => 'Xiaolajiao',
2090 'XI' => 'Xiaomi',
2091 'XW' => 'Xiaodu',
2092 'XN' => 'Xion',
2093 'XO' => 'Xolo',
2094 'XR' => 'Xoro',
2095 'XPP' => 'XPPen',
2096 'XRL' => 'XREAL',
2097 'XS' => 'Xshitou',
2098 'XSM' => 'Xsmart',
2099 '4X' => 'Xtouch',
2100 'X8' => 'Xtratech',
2101 'XCR' => 'Xcruiser',
2102 'XCO' => 'XCOM',
2103 'XCL' => 'Xcell',
2104 'XWA' => 'Xwave',
2105 'YD' => 'Yandex',
2106 'YA' => 'Yarvik',
2107 'Y2' => 'Yes',
2108 'YES' => 'Yestel',
2109 'YE' => 'Yezz',
2110 'YG' => 'YEPEN',
2111 'YEL' => 'YELLYOUTH',
2112 'YK' => 'Yoka TV',
2113 'YO' => 'Yota',
2114 'YOU' => 'Youin',
2115 'YO1' => 'Youwei',
2116 'YOO' => 'Yooz',
2117 'YT' => 'Ytone',
2118 'Y9' => 'YOTOPT',
2119 'Y1' => 'Yu',
2120 'YF' => 'YU Fly',
2121 'Y0' => 'YUHO',
2122 'YN' => 'Yuno',
2123 'YUN' => 'YUNDOO',
2124 'YUS' => 'YunSong',
2125 'YUM' => 'YUMKEM',
2126 'YU' => 'Yuandao',
2127 'YS' => 'Yusun',
2128 'YJ' => 'YASIN',
2129 'YX' => 'Yxtel',
2130 '0Z' => 'Zatec',
2131 '2Z' => 'Zaith',
2132 'ZAM' => 'Zamolxe',
2133 'ZZB' => 'ZZB',
2134 'ZEA' => 'Zealot',
2135 'PZ' => 'Zebra',
2136 'ZE1' => 'Zeblaze',
2137 'ZE' => 'Zeemi',
2138 'WZ' => 'Zeeker',
2139 'ZN' => 'Zen',
2140 'ZK' => 'Zenek',
2141 'ZL' => 'Zentality',
2142 'ZF' => 'Zfiner',
2143 'ZI' => 'Zidoo',
2144 'FZ' => 'ZIFRO',
2145 'ZIF' => 'ZIFFLER',
2146 'ZIO' => 'ZIOVO',
2147 'ZX' => 'Ziox',
2148 'ZIK' => 'ZIK',
2149 'ZKI' => 'Z-Kai',
2150 'ZIG' => 'Zigo',
2151 'ZIN' => 'Zinox',
2152 'ZO' => 'Zonda',
2153 'ZW' => 'Zonko',
2154 'ZP' => 'Zopo',
2155 'ZOO' => 'ZoomSmart',
2156 'ZO1' => 'Zoom',
2157 'ZT' => 'ZTE',
2158 'ZU' => 'Zuum',
2159 'ZY' => 'Zync',
2160 'ZR' => 'Zyrex',
2161 'ZQ' => 'ZYQ',
2162 'Z4' => 'ZH&K',
2163 'OW' => 'öwn',
2164 'WBF' => 'Webfleet',
2165 'WSS' => 'WS',
2166 // legacy brands, might be removed in future versions
2167 'WB' => 'Web TV',
2168 'XX' => 'Unknown',
2169 ];
2170
2171 /**
2172 * Mapping formFactor types to parser device types
2173 * (not sort array the array priority result device type)
2174 * @var array
2175 */
2176 protected static $clientHintFormFactorsMapping = [
2177 'automotive' => self::DEVICE_TYPE_CAR_BROWSER,
2178 'xr' => self::DEVICE_TYPE_WEARABLE,
2179 'watch' => self::DEVICE_TYPE_WEARABLE,
2180 'mobile' => self::DEVICE_TYPE_SMARTPHONE,
2181 'tablet' => self::DEVICE_TYPE_TABLET,
2182 'desktop' => self::DEVICE_TYPE_DESKTOP,
2183 'eink' => self::DEVICE_TYPE_TABLET,
2184 ];
2185
2186 /**
2187 * Returns the device type represented by one of the DEVICE_TYPE_* constants
2188 *
2189 * @return int|null
2190 */
2191 public function getDeviceType(): ?int
2192 {
2193 return $this->deviceType;
2194 }
2195
2196 /**
2197 * Returns available device types
2198 *
2199 * @see $deviceTypes
2200 *
2201 * @return array
2202 */
2203 public static function getAvailableDeviceTypes(): array
2204 {
2205 return self::$deviceTypes;
2206 }
2207
2208 /**
2209 * Returns names of all available device types
2210 *
2211 * @return array
2212 */
2213 public static function getAvailableDeviceTypeNames(): array
2214 {
2215 return \array_keys(self::$deviceTypes);
2216 }
2217
2218 /**
2219 * Returns the name of the given device type
2220 *
2221 * @param int $deviceType one of the DEVICE_TYPE_* constants
2222 *
2223 * @return string
2224 */
2225 public static function getDeviceName(int $deviceType): string
2226 {
2227 $deviceName = \array_search($deviceType, self::$deviceTypes);
2228
2229 if (\is_string($deviceName)) {
2230 return $deviceName;
2231 }
2232
2233 return '';
2234 }
2235
2236 /**
2237 * Returns the detected device model
2238 *
2239 * @return string
2240 */
2241 public function getModel(): string
2242 {
2243 return $this->model;
2244 }
2245
2246 /**
2247 * Returns the detected device brand
2248 *
2249 * @return string
2250 */
2251 public function getBrand(): string
2252 {
2253 return $this->brand;
2254 }
2255
2256 /**
2257 * Returns the full brand name for the given short name
2258 *
2259 * @param string $brandId short brand name
2260 *
2261 * @return string
2262 */
2263 public static function getFullName(string $brandId): string
2264 {
2265 if (\array_key_exists($brandId, self::$deviceBrands)) {
2266 return self::$deviceBrands[$brandId];
2267 }
2268
2269 return '';
2270 }
2271
2272 /**
2273 * Returns the brand short code for the given name
2274 *
2275 * @param string $brand brand name
2276 *
2277 * @return string
2278 *
2279 * @deprecated since 4.0 - short codes might be removed in next major release
2280 */
2281 public static function getShortCode(string $brand): string
2282 {
2283 return (string) \array_search($brand, self::$deviceBrands) ?: '';
2284 }
2285
2286 /**
2287 * Sets the useragent to be parsed
2288 *
2289 * @param string $userAgent
2290 */
2291 public function setUserAgent(string $userAgent): void
2292 {
2293 $this->reset();
2294 parent::setUserAgent($userAgent);
2295 }
2296
2297 /**
2298 * @inheritdoc
2299 */
2300 public function parse(): ?array
2301 {
2302 $resultClientHint = $this->parseClientHints();
2303 $deviceModel = $resultClientHint['model'] ?? '';
2304
2305 $this->restoreUserAgentFromClientHints();
2306
2307 if ('' === $deviceModel && $this->hasUserAgentClientHintsFragment()) {
2308 return $this->getResult();
2309 }
2310
2311 if ('' === $deviceModel && $this->hasDesktopFragment()) {
2312 return $this->getResult();
2313 }
2314
2315 $brand = '';
2316 $regexes = $this->getRegexes();
2317
2318 foreach ($regexes as $brand => $regex) {
2319 $matches = $this->matchUserAgent($regex['regex']);
2320
2321 if ($matches) {
2322 break;
2323 }
2324 }
2325
2326 if (empty($matches)) {
2327 $this->deviceType = $resultClientHint['deviceType'] ?? null;
2328
2329 return $resultClientHint;
2330 }
2331
2332 if ('Unknown' !== $brand) {
2333 if (!\in_array($brand, self::$deviceBrands)) {
2334 // This Exception should never be thrown. If so a defined brand name is missing in $deviceBrands
2335 throw new \Exception(\sprintf(
2336 "The brand with name '%s' should be listed in deviceBrands array. Tried to parse user agent: %s",
2337 $brand,
2338 $this->userAgent
2339 )); // @codeCoverageIgnore
2340 }
2341
2342 $this->brand = (string) $brand;
2343 }
2344
2345 if (isset($regex['device']) && \array_key_exists($regex['device'], self::$deviceTypes)) {
2346 $this->deviceType = self::$deviceTypes[$regex['device']];
2347 }
2348
2349 $this->model = '';
2350
2351 if (isset($regex['model'])) {
2352 $this->model = $this->buildModel($regex['model'], $matches);
2353 }
2354
2355 if (isset($regex['models'])) {
2356 $modelRegex = '';
2357
2358 foreach ($regex['models'] as $modelRegex) {
2359 $modelMatches = $this->matchUserAgent($modelRegex['regex']);
2360
2361 if ($modelMatches) {
2362 break;
2363 }
2364 }
2365
2366 if (empty($modelMatches)) {
2367 return $this->getResult();
2368 }
2369
2370 $this->model = $this->buildModel($modelRegex['model'], $modelMatches);
2371
2372 if (isset($modelRegex['brand']) && \in_array($modelRegex['brand'], self::$deviceBrands)) {
2373 $this->brand = (string) $modelRegex['brand'];
2374 }
2375
2376 if (isset($modelRegex['device']) && \array_key_exists($modelRegex['device'], self::$deviceTypes)) {
2377 $this->deviceType = self::$deviceTypes[$modelRegex['device']];
2378 }
2379 }
2380
2381 return $this->getResult();
2382 }
2383
2384 /**
2385 * @param string $model
2386 * @param array $matches
2387 *
2388 * @return string
2389 */
2390 protected function buildModel(string $model, array $matches): string
2391 {
2392 $model = $this->buildByMatch($model, $matches);
2393
2394 $model = \str_replace('_', ' ', $model);
2395
2396 $model = \preg_replace('/ TD$/i', '', $model);
2397
2398 if ('Build' === $model || empty($model)) {
2399 return '';
2400 }
2401
2402 return \trim($model);
2403 }
2404
2405 /**
2406 * @return array|null
2407 */
2408 protected function parseClientHints(): ?array
2409 {
2410 if ($this->clientHints && $this->clientHints->getModel()) {
2411 $detectedDeviceType = null;
2412 $formFactors = $this->clientHints->getFormFactors();
2413
2414 foreach (self::$clientHintFormFactorsMapping as $formFactor => $deviceType) {
2415 if (\in_array($formFactor, $formFactors)) {
2416 $detectedDeviceType = $deviceType;
2417
2418 break;
2419 }
2420 }
2421
2422 return [
2423 'deviceType' => $detectedDeviceType,
2424 'model' => $this->clientHints->getModel(),
2425 'brand' => '',
2426 ];
2427 }
2428
2429 return null;
2430 }
2431
2432 /**
2433 * Resets the stored values
2434 */
2435 protected function reset(): void
2436 {
2437 $this->deviceType = null;
2438 $this->model = '';
2439 $this->brand = '';
2440 }
2441
2442 /**
2443 * @return array
2444 */
2445 protected function getResult(): array
2446 {
2447 return [
2448 'deviceType' => $this->deviceType,
2449 'model' => $this->model,
2450 'brand' => $this->brand,
2451 ];
2452 }
2453 }
2454