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