###############
# Device Detector - The Universal Device Detection library for parsing User Agents
#
# @link https://matomo.org
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
###############

# Ace or ACE France (www.acemobile.fr)
Ace:
  regex: '(?:BUZZ [123]|CLEVER 1|URBAN 1(?: Pro)?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'BUZZ ([12]) Lite'
      model: 'Buzz $1 Lite'
    - regex: 'BUZZ ([123]) Plus'
      model: 'Buzz $1 Plus'
    - regex: 'BUZZ ([123])'
      model: 'Buzz $1'
    - regex: 'CLEVER 1'
      model: 'Clever 1'
    - regex: 'URBAN 1 Pro'
      model: 'Urban 1 Pro'
    - regex: 'URBAN 1'
      model: 'Urban 1'

'Tunisie Telecom':
  regex: 'StarTrail TT(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'StarTrail by TT'

# SFR or SFR Mobile
SFR:
  regex: 'StarShine|StarTrail|STARADDICT|StarText|StarNaute|StarXtrem|StarTab|(?:Android 8(?:[\d.]*);(?: [\w-]+;)? (?:AURA (?:PLUS|ULTRA)|AURA))(?: Build|[;)])'
  device: 'smartphone'
  models:
    - regex: 'StarXtrem II(?:[);/ ]|$)'
      model: 'StarXtrem 2'
    - regex: 'StarXtrem ?([3-6])(?:[);/ ]|$)'
      model: 'StarXtrem $1'
    - regex: 'StarXtrem(?:[);/ ]|$)'
      model: 'StarXtrem' # ZTE
    - regex: 'StarTrail III(?:[);/ ]|$)'
      model: 'StarTrail 3'
    - regex: 'StarTrail II(?:[);/ ]|$)'
      model: 'StarTrail 2' # Huawei Ascend Y200
    - regex: 'StarTrail[ _]?([1-9])[ _]([34])G(?:[);/ ]|$)' # ZTE
      model: 'StarTrail $1 $2G'
    - regex: 'StarTrail[ _]?([1-9])(?:[);/ ]|$)'
      model: 'StarTrail $1'
    - regex: 'StarTrail(?:[);/ ]|$)'
      model: 'StarTrail' # ZTE
    - regex: 'AURA PLUS(?:[);/ ]|$)'
      model: 'Aura Plus'
    - regex: 'aura ULTRA(?:[);/ ]|$)'
      model: 'Aura Ultra'
    - regex: 'AURA(?:[);/ ]|$)'
      model: 'Aura'

    - regex: 'StarShine II(?:[);/ ]|$)'
      model: 'StarShine 2' # ZTE
    - regex: 'StarShine III(?:[);/ ]|$)'
      model: 'StarShine 3'
    - regex: 'StarShine(?:[);/ ]|$)'
      model: 'StarShine' # Huawei U8180
    - regex: 'STARADDICT 6(?:[);/ ]|$)' # Hisense Altice StarAddict 6
      model: 'StarAddict 6'
    - regex: 'STARADDICT 4(?:[);/ ]|$)'
      model: 'StarAddict 4'
    - regex: 'STARADDICT III(?:[);/ ]|$)'
      model: 'StarAddict 3' # Coolpad 8861U
    - regex: 'STARADDICT II Plus(?:[);/ ]|$)'
      model: 'StarAddict 2 Plus' # ZTE Grand X
    - regex: 'STARADDICT II(?:[);/ ]|$)'
      model: 'StarAddict 2' # Alcatel One Touch 995
    - regex: 'STARADDICT(?:[);/ ]|$)'
      model: 'StarAddict' # ZTE
    - regex: 'StarText II(?:[);/ ]|$)'
      model: 'StarText 2' # ZTE
    - regex: 'StarText(?:[);/ ]|$)'
      model: 'StarText' # ZTE
    - regex: 'StarNaute II(?:[);/ ]|$)'
      model: 'StarNaute 2' # ZTE
    - regex: 'STARNAUTE ?([1-4])(?:[);/ ]|$)'
      model: 'StarNaute $1'
    - regex: 'StarNaute(?:[);/ ]|$)'
      model: 'StarNaute' # ZTE Amigo
    - regex: 'StarTab'
      model: 'StarTab'
      device: 'tablet'

    - regex: '((?:StarShine|StarTrail|STARADDICT|StarText|StarNaute|StarXtrem)[^;/]*) Build'
      model: '$1'

# Adronix
Adronix:
  regex: 'Adronix[ _]?(?:MT[0-9]+|X1001|Mini ?Tab ?7 ?3G)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'Adronix ?Mini ?Tab ?7 ?3G'
      model: 'Mini Tab 7 3G'
    - regex: 'Adronix[ _]?(MT[0-9]+|X1001)(?:[);/ ]|$)'
      model: '$1'

# Cherry Mobile (cherrymobile.com)
'Cherry Mobile':
  regex: 'Cherry|Superion[_ ](?:S2|Radar Deluxe|S1 DTV|S1 Plus DTV|Tab Pro)|Flare([ _])?(2.[01]|2X|4|A[123]|J[1235678]|P[13]|S[4-8]|X2|Y[3567]|S[ _]Play|HD|LITE|XL|X_V[23]|Y3s|Tab|INFINITY)(?:[ _](?:Pro|Plus|Max|LTE))?|Fusion Aura 3s|Radar Deluxe 2|Desire R[678]|Desire_R[67]_Lite|Fusion Bolt|Omega[_ ](?:Icon 2|Icon Lite 2|lite[_ ][43][Cs]?|HD [45]|HD_Duo|X)|Spin Max 2|Selfie_Two|Flare X Lite|Flare_5|Android 1.*Aqua S9|Omega_HD_4|MAIA PAD PLUS|COSMOS THREE| Revel 3G'
  device: 'smartphone'
  models:
    - regex: '(Flare2X|Aqua S9(?: (?:Max|Lite|Pro))?)'
      model: '$1'
    - regex: 'Flare[_ ]HD[_ ]([345])'
      model: 'Flare HD $1'
    - regex: 'Flare_HD_MAX'
      model: 'Flare HD Max'
    - regex: 'FLARE LITE'
      model: 'Flare Lite'
    - regex: 'Flare[ _]S[ _]Play'
      model: 'Flare S Play'
    - regex: 'Flare (2\.[01])'
      model: 'Flare $1'
    - regex: 'Flare[_ ]J([2356])S'
      model: 'Flare J$1s'

    - regex: 'Flare_([A-Z]\d+)_Prime'
      model: 'Flare $1 Prime'
    - regex: 'Flare_([A-Z]\d+)_Deluxe'
      model: 'Flare $1 Deluxe'
    - regex: 'Flare[_ ]([A-Z]\d+)[_ ]Power'
      model: 'Flare $1 Power'
    - regex: 'Flare[_ ]([A-Z]\d+)[_ ]Pro'
      model: 'Flare $1 Pro'
    - regex: 'Flare[_ ]([A-Z]\d+)[_ ]Lite'
      model: 'Flare $1 Lite'
    - regex: 'Flare[_ ]([A-Z]\d+)[_ ]Plus'
      model: 'Flare $1 Plus'
    - regex: 'Flare XL Plus'
      model: 'Flare XL Plus'
    - regex: 'Flare ?J3 ?Plus'
      model: 'Flare J3 Plus'
    - regex: 'Flare X Lite'
      model: 'Flare X Lite'
    - regex: 'Cherry[_ ]X740'
      model: 'Flare A5'
    - regex: 'Flare[ _]X[_ ]V([23])'
      model: 'Flare X V$1'
    - regex: 'Flare[ _]XL[_ ]?2'
      model: 'Flare XL 2'
    - regex: 'Flare[ _]([A-Z]\d+)[ _]mini'
      model: 'Flare $1 Mini'
    - regex: 'Flare_J2_2018'
      model: 'Flare J2 (2018)'
    - regex: 'Flare S4 Max LTE'
      model: 'Flare S4 Max LTE'
    - regex: 'Flare[_ ]([A-Z]\d+)[_ ]Max'
      model: 'Flare $1 Max'
    - regex: 'FlareS5LiteDTV'
      model: 'Flare S5 Lite DTV'
    - regex: 'Flare[_ ]J2[_ ]DTV'
      model: 'Flare S2 DTV'
    - regex: 'Flare[_ ]INFINITY'
      model: 'Flare Infinity'
    - regex: 'Flare[_ ]Lite[_ ]3S'
      model: 'Flare Lite S3'
    - regex: 'Flare(?:[ _])?(A1_Roam|A[123]|J8 LTE|J1s|J[1235678]|P[13]|S[4-8]|X2|Y3s|Y7_LTE|Y[3567]|[45])'
      model: 'Flare $1'
    - regex: 'OMEGA[ _]HD[ _]([45])'
      model: 'Omega HD $1'
    - regex: 'Omega_HD_Duo'
      model: 'Omega HD Duo'
    - regex: 'Omega Icon Lite 2'
      model: 'Omega Icon Lite 2'
    - regex: 'Omega Icon 2'
      model: 'Omega Icon 2'
    - regex: 'Omega[_ ]Lite[_ ](3[Cs]|4)'
      model: 'Omega Lite $1'
    - regex: 'Omega[_ ]X'
      model: 'Omega X'
    - regex: 'Spin Max 2'
      model: 'Spin Max 2'
    - regex: 'Selfie_Two'
      model: 'Selfie Two'
    - regex: 'Desire[ _]R(\d)[ _]Lite'
      model: 'Desire R$1 Lite'
    - regex: 'Desire R6 plus'
      model: 'Desire R6 Plus'
    - regex: 'Desire R6'
      model: 'Desire R6'
    - regex: 'Desire Eye'
      model: 'Desire Eye'
    - regex: 'COSMOS THREE'
      model: 'Cosmos 3'
    - regex: 'Revel 3G'
      model: 'Revel 3G'
    - regex: 'Radar Deluxe 2'
      model: 'Superion Radar Deluxe 2'
      device: 'tablet'
    - regex: 'Superion_S2_Plus'
      model: 'Superion S2 Plus'
      device: 'tablet'
    - regex: 'Superion S1 Plus DTV'
      model: 'Superion S1 Plus DTV'
      device: 'tablet'
    - regex: 'Superion Tab Pro'
      model: 'Superion Tab Pro'
      device: 'tablet'
    - regex: 'Flare Tab Pro V(\d)'
      device: 'tablet'
      model: 'Flare Tab Pro V$1'
    - regex: 'Fusion Aura 3s'
      device: 'tablet'
      model: 'Fusion Aura 3S'
    - regex: 'MAIA PAD PLUS'
      device: 'tablet'
      model: 'Maia Pad Plus'

    - regex: '(Fusion Bolt|Flare Tab Pro|Flare Tab|Superion[_ ](?:S2|Radar Deluxe|S1 DTV))'
      model: '$1'
      device: 'tablet'

    - regex: 'Cherry(?:[ _]?Mobile)?[ _]?([^/;]+)(?: Build|[);])'
      model: '$1'

# HTC (htc.com)
HTC:
  regex: 'HTC|Sprint (?:APA|ATP)|ADR(?!910L)[a-z0-9]+|NexusHD2|Amaze[ _]4G(?:[);/ ]|$)|(Desire|Sensation|Evo ?3D|IncredibleS|Wildfire|Butterfly)[ _]?([^;/)]+)(?: Build|\))|(Amaze[ _]4G|(?<!BLU LIFE |ZOPO )One ?[XELSV\+]+)(?:[);/ ]|$)|SPV E6[05]0|(One M8|One Mini 2|X525a|PG86100|PC36100|XV6975|PJ83100|2PYB2|2PS64|2PZC5|0PJA10|0PJA2|HTV33|0PM92|0PCV1|601HT|0PAJ5|HTL2[23]|HTV3[12]|2PQ93|X2-HT|EXODUS 1|ISW13HT|710C|U Ultra|2Q8L10000)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    # explicit smartphone models
    - regex: '(?:2PZF1|U Ultra)(?:[);/ ]|$)'
      model: 'U Ultra'
    - regex: 'HTC[_ ](?:U-2u|U Play|2PZM3)(?:[);/ ]|$)'
      model: 'U Play'
    - regex: 'HTC[_ ]U-1[wu](?:[);/ ]|$)'
      model: 'U Ultra'
    - regex: '(?:U11 plus|(?:HTC_)?2Q4D[12]00)(?:[);/ ]|$)'
      model: 'U11 Plus'
    - regex: 'HTC (?:U12\+|2Q55[13]00)(?:[);/ ]|$)'
      model: 'U12 Plus'
    - regex: 'U(1[12]) life(?:[);/ ]|$)'
      model: 'U$1 Life'
    - regex: '(?:U11 Eyes|2Q4R100)(?:[);/ ]|$)'
      model: 'U11 Eyes'
    - regex: 'XV6975(?:[);/ ]|$)'
      model: 'Imagio'
    - regex: 'PG86100(?:[);/ ]|$)'
      model: 'Evo 3G'
    - regex: 'PC36100(?:[);/ ]|$)'
      model: 'Evo 4G'
    - regex: '(?:HTC[_ ])?(?:HTV33|601HT|2PZC100|2PZC5|U-3[uw])(?:[);/ ]|$)'
      model: 'U11'
    - regex: '(?:HTC_)?(?:801e|802[wdt]|PN071)'
      model: 'One'
    - regex: 'PJ83100(?:[);/ ]|$)'
      model: 'One X'
    - regex: 'HTC[_ ]PO582(?:[);/ ]|$)'
      model: 'One Mini'
    - regex: '(?:HTC_?)?(?:One[ _]?Mini[ _]?2|M8MINx)(?:[);/ ]|$)'
      model: 'One Mini 2'
    - regex: 'X2-HT(?:[);/ ]|$)'
      model: 'One X2'
    - regex: 'HTC 2PXH3(?:[);/ ]|$)'
      model: 'One X10'
    - regex: 'ISW13HT(?:[);/ ]|$)'
      model: 'J'
    - regex: 'HTL22(?:[);/ ]|$)'
      model: 'J One'
    - regex: '(?:HTL23|HTV31)(?:[);/ ]|$)'
      model: 'J Butterfly'
    - regex: 'HTCButterflys901s(?:[);/ ]|$)'
      model: 'Butterfly S'
    - regex: 'One M9_Prime Camera Edition'
      model: 'One M9 Prime Camera Edition'
    - regex: '(?:HTC[_ ])?(?:M9pw|One M9 ?PLUS)(?:[);/ ]|$)'
      model: 'One M9 Plus'
    - regex: '(?:HTC[_ ]M9u|0PJA2|0PJA10|HTC One M9|HTC6535LVW)(?:[);/ ]|$)'
      model: 'One M9'
    - regex: 'One[ _](X9|[EM]8) dual sim(?:[);/ ]|$)'
      model: 'One $1 Dual SIM'
    - regex: 'Desire[ _](.+) dual sim(?:[);/ ]|$)'
      model: 'Desire $1 Dual SIM'
    - regex: 'HTC(?: One m7|6500LVW|PN071)(?:[);/ ]|$)'
      model: 'One M7'
    - regex: '(?:One M8|HTC6525LVW|HTC[_ ]M8[xd]|HTC[_ ]0P6B|HTCOneM8)(?:[);/ ]|$)'
      model: 'One M8'
    - regex: 'HTC ?One ?M8 ?Eye(?:[);/ ]|$)'
      model: 'One M8 Eye'
    - regex: '(?:HTC_)?(?:0PAJ5|M8Sx)(?:[);/ ]|$)'
      model: 'One E8'
    - regex: 'HTC[_ ]E9x(?:[);/ ]|$)'
      model: 'One E9'
    - regex: 'HTC[_ ]E9pw(?:[);/ ]|$)'
      model: 'One E9 Plus'
    - regex: 'HTC_S9u(?:[);/ ]|$)'
      model: 'One S9'
    - regex: 'HTC6515LVW(?:[);/ ]|$)'
      model: 'One Remix'
    - regex: 'X525a(?:[);/ ]|$)'
      model: 'One X+'
    - regex: '(?:2PQ9(?:3|10)|HTC[_ ]A9u)(?:[);/ ]|$)'
      model: 'One A9'
    - regex: 'ADR6300'
      model: 'Droid Incredible'
    - regex: 'HTC6435LVW'
      model: 'Droid DNA'
    - regex: 'ADR6400L'
      model: 'ThunderBolt'
    - regex: 'ADR6410LRA'
      model: 'Droid Incredible 3'
    - regex: 'SPV E600'
      model: 'Excalibur'
    - regex: 'SPV E650'
      model: 'Vox'
    - regex: '2PYB2'
      model: 'Bolt'
    - regex: '2PS64|HTC6545LVW|HTC[_ ]M10h'
      model: '10'
    - regex: '(710C)(?:[);/ ]|$)'
      model: 'Desire $1'
    - regex: '0PM92(?:[);/ ]|$)'
      model: 'Desire 626S'
    - regex: '(?:HTC_)?0PCV[12](?:[);/ ]|$)'
      model: 'Desire 510'
    - regex: 'HTC ?D160LVW(?:PP)?(?:[);/ ]|$)'
      model: 'Desire 530'
    - regex: 'HTC[_ ]D310n(?:[);/ ]|$)'
      model: 'Desire 310'
    - regex: 'HTC[_ ]v01(?:[);/ ]|$)'
      model: 'Desire 320'
    - regex: '608t(?:[);/ ]|$)'
      model: 'Desire 608t'
    - regex: 'HTC_(?:0P9O2|D610x)(?:[);/ ]|$)'
      model: 'Desire 610'
    - regex: 'HTC[_ ]?(0P4E[12])(?:[);/ ]|$)'
      model: 'Desire 601'
    - regex: 'HTC_?D620h(?:[);/ ]|$)'
      model: 'Desire 620'
    - regex: 'HTC[_ ]?(?:D626ph|D200LVWPP)(?:[);/ ]|$)'
      model: 'Desire 626'
    - regex: 'HTC_?(?:0P9C2|D816[xd]?)(?:[);/ ]|$)'
      model: 'Desire 816'
    - regex: 'HTC_?D526h(?:[);/ ]|$)'
      model: 'Desire 526'
    - regex: '2Q8L10000(?:[);/ ]|$)'
      model: 'Desire 19s'
    - regex: 'Desire620G(?:[);/ ]|$)'
      model: 'Desire 620G Dual SIM'
    - regex: 'EXODUS 1(?:[);/ ]|$)'
      model: 'Exodus 1'
    - regex: 'HTC 2Q7A100(?:[);/ ]|$)'
      model: 'U19e'
    - regex: 'HTC Desire 10 compact(?:[);/ ]|$)'
      model: 'Desire 10 Compact'
    - regex: 'HTC_D10i(?:[);/ ]|$)'
      model: 'Desire 10 Pro'
    - regex: 'HTC[ _](?:10[ _]evo|M10f)(?:[);/ ]|$)'
      model: '10 Evo'
    - regex: 'HTC Desire (.+) pro 5G(?:[);/ ]|$)'
      model: 'Desire $1 Pro 5G'
    - regex: 'HTC Desire (.+) pro(?:[);/ ]|$)'
      model: 'Desire $1 Pro'
    - regex: 'Desire 10 lifestyle(?:[);/ ]|$)'
      model: 'Desire 10 Life Style'

    - regex: 'NexusHD2' # custom rom for hd2
      model: 'HD2'
    - regex: 'HTC[ _-]P715a'
      device: 'tablet'
      model: 'P715a'
    - regex: 'HTC[ _-]Flyer Build'
      device: 'tablet'
      model: 'Flyer'
    - regex: 'HTC[ _-](A103)'
      device: 'tablet'
      model: '$1'
    - regex: 'HTC[ _-]Flyer[ _\-]([\w]{1,5})'
      device: 'tablet'
      model: 'Flyer $1'
    - regex: 'HTC(?:[ _-])?(?:One[ _\-]max|6600LVW|0P3P7)(?:[);/ ]|$)'
      device: 'phablet'
      model: 'One Max'
    - regex: 'HTC[ _]([^/;]+) [0-9]+(?:\.[0-9]+)+ Build'
      model: '$1'
    - regex: 'HTC[ _]([^/;]+) Build'
      model: '$1'
    - regex: 'HTC[ _]([a-z0-9]+[ _\-]?(?:[a-z0-9_+\-])*)'
      model: '$1'
    - regex: 'USCCHTC(\d+)'
      model: '$1'
    - regex: 'Sprint (ATP.*) Build'
      device: 'tablet'
      model: '$1 (Sprint)'
    - regex: 'Sprint (APA.*) Build'
      model: '$1 (Sprint)'
    - regex: '(?:HTC-)?HTC(?:[\-/ ])?([a-z0-9\-_]+)'
      model: '$1'
    - regex: 'HTC;(?: )?([a-z0-9 ]+)'
      model: '$1'
    - regex: 'Wildfire (E2?) plus'
      model: 'Wildfire $1 Plus'
    - regex: '(Desire|Sensation|Evo ?3D|IncredibleS|Wildfire|Butterfly)[ _]?([^;/)]+)(?: Build|\))'
      model: '$1 $2'
    - regex: '(Amaze[ _]4G|One ?[XELSV\+]*) Build'
      model: '$1'
    - regex: '(ADR[^;/]+) Build'
      model: '$1'
    - regex: '(ADR[a-z0-9]+)'
      model: '$1'
    - regex: 'HTV32(?:[);/ ]|$)'
      model: '10'

# microsoft
Microsoft:
  regex: 'KIN\.(One|Two)|RM-(?:1010|1031|106[57]|107[23467]|1089|109[02]|1096|1099|1109|111[348]|1127|1141|115[24]|994)|Microsoft; Lumia|Lumia (?:1530|1320|950|850|650|640|550|535|435)|Corporation/Surface|Surface Duo|Surface 3'
  device: 'smartphone'
  models:
    - regex: 'KIN\.(One|Two)'
      device: 'feature phone'
      model: 'Kin $1'

    - regex: 'RM-1099|Lumia 430'
      model: 'Lumia 430'
    - regex: 'RM-1114|Lumia 435'
      model: 'Lumia 435'
    - regex: 'RM-1031|Lumia 532'
      model: 'Lumia 532'
    - regex: 'Lumia 535 Dual SIM'
      model: 'Lumia 535 Dual SIM'
    - regex: 'RM-109[02]|RM-1089|Lumia 535'
      model: 'Lumia 535'
    - regex: 'RM-1141|Lumia 540'
      model: 'Lumia 540'
    - regex: 'RM-1127|Lumia 550'
      model: 'Lumia 550'
    - regex: 'RM-1010'
      model: 'Lumia 638'
    - regex: 'Lumia 640 XL LTE'
      model: 'Lumia 640 XL LTE'
      device: 'phablet'
    - regex: 'RM-106[57]|RM-1096|Lumia 640 XL'
      model: 'Lumia 640 XL'
      device: 'phablet'
    - regex: 'Lumia 640 LTE Dual SIM'
      model: 'Lumia 640 LTE Dual SIM'
    - regex: 'Lumia 640 LTE'
      model: 'Lumia 640 LTE'
    - regex: 'Lumia 640 Dual SIM'
      model: 'Lumia 640 Dual SIM'
    - regex: 'RM-1109|RM-1113|RM-107[23467]|Lumia 640'
      model: 'Lumia 640'
    - regex: 'RM-1154|Lumia 650'
      model: 'Lumia 650'
    - regex: 'RM-1152'
      model: 'Lumia 650 SS'
    - regex: 'Lumia 850'
      model: 'Lumia 850'
    - regex: 'Lumia 950 XL Dual SIM'
      model: 'Lumia 950 XL Dual SIM'
      device: 'phablet'
    - regex: 'Lumia 950 XL'
      model: 'Lumia 950 XL'
      device: 'phablet'
    - regex: 'Lumia 950 Dual SIM'
      model: 'Lumia 950 Dual SIM'
    - regex: 'Lumia 950|RM-1118'
      model: 'Lumia 950'
    - regex: 'RM-994|Lumia 1320'
      model: 'Lumia 1320'
    - regex: 'Lumia 1530'
      model: 'Lumia 1530'
    - regex: 'Surface Book 3'
      device: 'desktop'
      model: 'Surface Book 3'
    - regex: 'Surface Pro( [34])?'
      device: 'desktop'
      model: 'Surface Pro$1'

    - regex: 'Surface Duo 2'
      device: 'tablet'
      model: 'Surface Duo 2'
    - regex: 'Surface Duo'
      device: 'tablet'
      model: 'Surface Duo'
    - regex: 'Surface 3'
      device: 'tablet'
      model: 'Surface 3'

    - regex: 'Microsoft; Lumia ([^;/)]+)(?:[;/)]|$)'
      model: 'Lumia $1'

# NOKIA (www.nokia.com)
Nokia:
  regex: 'Nokia(?!Browser|Webview|; GT-I8750)|Lumia|Maemo RX|portalmmm/2\.0 N7|portalmmm/2\.0 NK|nok[0-9]+|Symbian.*\s([a-z0-9]+)$|RX-51 N900|TA-[0-9]{4}|N(?:1374|1530|15[012])DL|ARM; 909'
  device: 'smartphone'
  models:
    # Nokia branded phones by HMD Global
    - regex: 'TA-10(07|23|29|35)'
      model: '2'
    - regex: 'TA-10(20|28|32|38)'
      model: '3'
    - regex: 'TA-10(24|27|44|53)'
      model: '5'
    - regex: 'TA-10(00|03|21|25|33|39|54)'
      model: '6'
    - regex: 'TA-1041'
      model: '7'
    - regex: 'TA-10(04|12|52)'
      model: '8'
    - regex: 'Nokia 8 Sirocco'
      model: '8 Sirocco'
    - regex: 'Nokia 7 plus'
      model: '7 plus'
    - regex: 'Nokia 6\.1 Plus'
      model: '6.1 Plus'
    - regex: 'Nokia 5\.1 Plus'
      model: '5.1 Plus'
    - regex: 'Nokia 3\.1 Plus'
      model: '3.1 Plus'
    - regex: 'Nokia 1 Plus'
      model: '1 Plus'
    - regex: 'Nokia 2 V(?:[);/ ]|$)'
      model: '2 V Tella'
    - regex: 'Nokia 8 V 5G UW'
      model: '8V 5G UW'
    # Nokia phones
    - regex: 'N152DL'
      model: 'C100'
    - regex: 'N151DL'
      model: 'C200'
    - regex: 'N150DL'
      model: 'G100'
    - regex: 'N1374DL'
      model: 'G300 5G'
    - regex: 'N1530DL'
      model: 'G400 5G'
    - regex: 'Nokia ?X2DS'
      model: 'X2 Dual'
    - regex: 'RX-51 N900'
      model: 'N900'
    - regex: '(?: )?(Nokia500|nokiaasha500(?:dualsim)?)(?: Build|[_);/])'
      model: 'Asha 500'
    - regex: 'Nokia5130c(?:-2)?'
      model: '5130 XpressMusic'
    - regex: 'Nokia5230'
      model: 'Nuron'
    - regex: 'Nokia5233'
      model: '5233'
    - regex: 'Nokia5800d-1'
      model: '5800 XpressMusic'
    - regex: 'Nokia6210Navigator'
      model: 'Navigator'
    - regex: 'Nokia8800e?'
      model: 'Sapphire Arte'
    - regex: 'NOKIA-RH-17'
      model: '2280'
    - regex: 'NOKIA-RH-27'
      model: '6225'
    - regex: 'NOKIA-RH-34'
      model: '6585'
    - regex: 'NOKIA-RH-48'
      model: '3105'
    - regex: 'NOKIA-RM-11'
      model: '3205'
    - regex: 'Nokia808 PureView'
      model: '808 PureView'
    - regex: 'Nokia ?([0-9]{4})c(?:-)?'
      model: '$1 Classic'
    - regex: 'Nokia ?([0-9]{4})s(?:-)?'
      model: '$1 Slide'
    - regex: 'Nokia ?([0-9]{4})'
      model: '$1'
    - regex: '(?: )?Nokia([235][0-9]{2})(?: Build|[_);/])'
      model: 'Asha $1'
    - regex: 'Nokia([CEX]-?[0-9]{1,2}i?)-[0-9]{1,2}u?(?: Build|[_);/])'
      model: '$1'

    - regex: 'Nokia;? 520T'
      model: 'Lumia 520T'
    - regex: 'RM-91[45]'
      model: 'Lumia 520'
    - regex: 'RM-997|Nokia 526'
      model: 'Lumia 526'
    - regex: 'RM-846'
      model: 'Lumia 620'
    - regex: 'RM-97[68]'
      model: 'Lumia 630'
    - regex: 'RM-97[45]'
      model: 'Lumia 635'
    - regex: 'RM-1027'
      model: 'Lumia 636'
    - regex: 'NOKIA;? 710'
      model: 'Lumia 710'
    - regex: 'Nokia;? 720T'
      model: 'Lumia 720T'
    - regex: 'RM-885'
      model: 'Lumia 720'
    - regex: 'Lumia 730'
      model: 'Lumia 730'
    - regex: 'RM-103[89]'
      model: 'Lumia 735'
    - regex: 'Nokia;? 800C'
      model: 'Lumia 800C'
    - regex: 'Nokia;? 800'
      model: 'Lumia 800'
    - regex: 'Nokia 820'
      model: 'Lumia 820'
    - regex: 'RM-984'
      model: 'Lumia 830'
    - regex: 'Nokia;? 900'
      model: 'Lumia 900'
    - regex: '(RM-82[12]|Nokia;? 920)(?: Build|[_);/])'
      model: 'Lumia 920'
    - regex: '(RM-89[23]|RM-910|Nokia;? 925)(?: Build|[a_);/])'
      model: 'Lumia 925'
    - regex: 'Lumia 929'
      model: 'Lumia Icon'
    - regex: 'RM-1045'
      model: 'Lumia 930'
    - regex: '(ARM; 909|NOKIA;? 909|NOKIA; id300)(?: Build|[_);/])'
      model: 'Lumia 1020'
    - regex: 'NOKIA;? 1520\.1'
      model: 'Lumia 1520.1'

    - regex: 'Nokia T20'
      device: 'tablet'
      model: 'T20'

    - regex: 'Nokia ([A-Za-z0-9\. ]+)(?: Build|\))'
      model: '$1'

    - regex: 'Nokia(N[0-9]+)'
      model: '$1'
    - regex: 'Nokia-([a-z0-9]+)'
      model: 'N$1'
    - regex: 'NOKIA; (?!Qt;)([a-z0-9\- ]+)'
      model: '$1'
    - regex: 'NOKIA[ _]?([a-z0-9\-]+)'
      model: '$1'
    - regex: 'NOKIA/([a-z0-9 ]+)'
      model: '$1'
    - regex: '(Lumia [a-z0-9\-]+ XL)'
      device: 'phablet'
      model: '$1'
    - regex: '(Lumia [a-z0-9\-]+)'
      model: '$1'
    - regex: 'Maemo RX-51 ([a-z0-9]+)'
      model: '$1'
    - regex: 'Maemo RX-34'
      model: 'N800'
    - regex: 'NokiaInternal|Nokia-WAP-Toolkit|Nokia-MIT-Browser|Nokia Mobile|Nokia Browser|Nokia/Series'
      model: ''
    - regex: 'portalmmm/2\.0 (N7[37]|NK[a-z0-9]+)'
      model: '$1'
    - regex: 'nok([0-9]+)'
      model: '$1'
    - regex: 'Symbian.*\s([a-z0-9]+)$'
      device: 'feature phone'
      model: '$1'

# CnM
CnM:
  regex: 'CnM'
  device: 'tablet'
  models:
    - regex: 'CnM[ \-](?:Touchpad|TP)[ \-]([0-9\.]+)'
      model: 'Touchpad $1'

# RIM/BlackBerry
RIM:
  regex: 'BB10;|BlackBerry|rim[0-9]+|PlayBook|STV100-[1234]|STH100-[12]|BBA100-[12]|BBB100-[1234567]|BBD100-[126]|BB[EF]100-[123456789]|BB[CGH]100-1'
  device: 'smartphone'
  models:
    - regex: 'BBA100-[12]'
      model: 'BlackBerry DTEK60'
    - regex: 'BBB100-[1234567]'
      model: 'KEYone'
    - regex: 'BBC100-1'
      model: 'Aurora'
    - regex: 'BBD100-[126]'
      model: 'Motion'
    - regex: 'BBE100-[123456789]'
      model: 'KEY2 LE'
    - regex: 'BBF100-[1234567]'
      model: 'KEY2'
    - regex: 'BBF100-8'
      model: 'KEY2 Silver'
    - regex: 'BBF100-9'
      model: 'KEY2 Black'
    - regex: 'BBG100-1'
      model: 'Evolve'
    - regex: 'BBH100-1'
      model: 'Evolve X'
    - regex: '(?:BlackBerry )?(9000|9790)'
      model: 'Bold $1'
    - regex: 'STV100-[1234]'
      model: 'BlackBerry Priv'
    - regex: 'STH100-[12]'
      model: 'BlackBerry DTEK50'
    - regex: 'BB10; ([a-z0-9\- ]+)\)'
      model: 'BlackBerry $1'
    - regex: 'PlayBook.+RIM Tablet OS'
      model: 'BlackBerry Playbook'
      device: 'tablet'
    - regex: 'BlackBerry(?: )?([a-z0-9]+)'
      model: 'BlackBerry $1'
    - regex: 'rim([0-9]+)'
      model: 'BlackBerry $1'
    - regex: '9300'
      model: 'Curve 3G 9300'
    - regex: '(8520|8530|9220|9320|9360)'
      model: 'Curve $1'
    - regex: '9630'
      model: 'Tour 9630'
    - regex: '9720'
      model: '9720'
    - regex: '(9800|9860)'
      model: 'Torch $1'
    - regex: 'BlackBerry'
      model: 'BlackBerry'

# Ghia or GHIA (www.ghia.com.mx)
Ghia:
  regex: 'GHIA|QS702|SVEGLIO[ _][QH]1|VECTOR10\.1|GTKIDS7[BVR]?|(?:A7_WF|GTA7WF|VENUS7|TREO_TAB8G?|VECTOR_SLIM|GTAB718|GTABPND|GTABKIDS|GTVR10S|AXIS7_SLIM|AXIS7_LED)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'SVEGLIO[ _]([QH]1)'
      model: 'Sveglio $1'
    - regex: 'QS702'
      model: 'QS702'
    - regex: 'GHIA_ZEUS_3G'
      model: 'Zeus 3G'
    - regex: 'GHIA[ _](L1)'
      model: '$1'
    - regex: 'VECTOR_SLIM'
      device: 'tablet'
      model: 'Vector Slim'
    - regex: 'GHIA_AXIS7P'
      model: 'Axis 7P'
      device: 'tablet'
    - regex: 'AXIS7_SLIM'
      model: 'Axis 7 Slim'
      device: 'tablet'
    - regex: 'AXIS7_LED'
      model: 'Axis 7 LED'
      device: 'tablet'
    - regex: 'GHIA_AXIS7_3G'
      model: 'Axis 7 3G'
      device: 'tablet'
    - regex: 'GHIA_AXIS7'
      model: 'Axis 7'
      device: 'tablet'
    - regex: 'A7_WF'
      model: 'A7 WiFi'
      device: 'tablet'
    - regex: 'VECTOR10\.1'
      model: 'Vector 10.1"'
      device: 'tablet'
    - regex: 'GTA7WF'
      device: 'tablet'
      model: 'A7 ROJA'
    - regex: 'TREO_TAB8G'
      device: 'tablet'
      model: 'TREO TAB8G'
    - regex: 'GTKIDS7[ABVR]?|GTABKIDS'
      device: 'tablet'
      model: 'GT KIDS 7'
    - regex: 'GTVR10S'
      device: 'tablet'
      model: 'Vector 10.1" Slim'
    - regex: 'GTABPND'
      device: 'tablet'
      model: 'Kids Panda'
    - regex: 'VENUS7'
      device: 'tablet'
      model: 'VENUS 7'
    - regex: 'GHIA[ _]?(47458|VECTOR_3G)'
      device: 'tablet'
      model: '$1'
    - regex: '(GTAB718)'
      device: 'tablet'
      model: '$1'

# PALM
Palm:
  regex: '(?:Pre|Pixi)/(\d+)\.(\d+)|Palm|Treo|Xiino|PVG100(?:E_RU|E)?(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '((?:Pre|Pixi))/(\d+\.\d+)'
      model: '$1 $2'
    - regex: 'Palm(?:[ \-])?((?!OS|Source|scape)[a-z0-9]+)'
      model: '$1'
    - regex: 'Treo([a-z0-9]+)'
      model: 'Treo $1'
    - regex: 'Tungsten'
      model: 'Tungsten'
    - regex: 'PVG100'
      model: 'Pepito'
    - regex: 'Xiino|Palmscape' # Browser for Palm OS only
      model: ''

# Compaq
Compaq:
  regex: '(?:CT101|CT1085_32GB)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(CT1085)_32GB'
      model: '$1'
    - regex: '(CT101)'
      model: '$1'

# HP or Hewlett-Packard
HP:
  regex: 'Hewlett-Packard|HP/HP|HP Chromebook|HP EliteBook 820|TouchPad/\d+\.\d+|hp-tablet|HP ?iPAQ|webOS.*P160U|HP (?:Pro )?Slate|Slate 21|HP [78]|HP 10 Plus|Compaq [7|8]|HP; [^;/)]+|cm_tenderloin'
  device: 'smartphone'
  models:
    - regex: 'HP Slate 6 Voice Tab'
      model: 'Slate 6 VoiceTab'
      device: 'phablet'

    - regex: 'HP 10 Plus'
      model: '10 Plus'
      device: 'tablet'

    - regex: 'HP ([78][^)/;]*)(?: Build|\))'
      model: 'Slate $1'
      device: 'tablet'
    - regex: 'Slate 21'
      model: 'Slate 21'
      device: 'tablet'
    - regex: 'cm_tenderloin'
      model: 'Touch 9.7" WiFi'
      device: 'tablet'

    - regex: 'Compaq ([78][^/;]*) Build'
      model: 'Compaq $1'
      device: 'tablet'
    - regex: 'HP Pro Slate 8'
      model: 'Pro Slate 8'
      device: 'tablet'
    - regex: 'HP Slate ?(.+) Build'
      model: 'Slate $1'
      device: 'tablet'
    - regex: 'HP Slate ?([0-9]+)'
      model: 'Slate $1'
      device: 'tablet'
    - regex: 'TouchPad/(\d+\.\d+)|hp-tablet'
      model: 'TouchPad'
      device: 'tablet'
    - regex: 'HP; ([^;/)]+)'
      model: '$1'
    - regex: 'HP ?iPAQ ?([a-z0-9]+)'
      model: 'iPAQ $1'
    - regex: 'webOS.*(P160U)'
      model: 'Veer'

    - regex: 'HP ProBook (6560b)'
      device: 'desktop'
      model: 'ProBook $1'
    - regex: 'Chromebook (11 G5|x360 11 G1 EE|13 G1|x2)'
      device: 'desktop'
      model: 'Chromebook $1'
    - regex: 'HP EliteBook 820 G2'
      device: 'desktop'
      model: 'EliteBook 820 G2'
    - regex: 'Z240 Tower Workstation'
      device: 'desktop'
      model: 'Z240 Tower Workstation'

# TiPhone
TiPhone:
  regex: 'TiPhone ?([a-z0-9]+)'
  device: 'smartphone'
  model: '$1'

# TiVo (https://www.tivo.com/)
TiVo:
  regex: 'TIVO[ ,]'
  device: 'tv'
  models:
    - regex: 'STREAM 4K'
      model: 'Stream 4K'
    - regex: 'TCD8F6000'
      model: 'TCD8F6000'

# Apple
Apple:
  regex: '(?:iTunes-)?Apple[ _]?TV|Apple/|(?:Apple-|iTunes-)?(?<!like )(?:iPad|iPhone)|iPh(?:[0-9]|1[0-4]),[0-9]|CFNetwork|HomePod|AirPlay|Watch ?OS|Watch1,[12]|MDCR_Mac|ICRU_iP(?:ad|hone)|Mac OS X[,;]|macOS,'
  models:
    - regex: 'HomePod'
      device: 'smart speaker'
      model: 'HomePod'
    - regex: 'AirPlay'
      device: 'smart speaker'
      model: ''

      # specific wearable devices
    - regex: 'Watch1,1'
      device: 'wearable'
      model: 'Watch 38mm'
    - regex: 'Watch1,2'
      device: 'wearable'
      model: 'Watch 42mm'
    - regex: 'Watch2,6'
      device: 'wearable'
      model: 'Watch Series 1 38mm'
    - regex: 'Watch2,7'
      device: 'wearable'
      model: 'Watch Series 1 42mm'
    - regex: 'Watch2,3'
      device: 'wearable'
      model: 'Watch Series 2 38mm'
    - regex: 'Watch2,4'
      device: 'wearable'
      model: 'Watch Series 2 42mm'
    - regex: 'Watch3,[13]'
      device: 'wearable'
      model: 'Watch Series 3 38mm'
    - regex: 'Watch3,[24]'
      device: 'wearable'
      model: 'Watch Series 3 42mm'
    - regex: 'Watch5,(?:9|11)'
      device: 'wearable'
      model: 'Watch SE 40mm'
    - regex: 'Watch5,1[02]'
      device: 'wearable'
      model: 'Watch SE 44mm'
    - regex: 'Watch([456]),[13]'
      device: 'wearable'
      model: 'Watch Series $1 40mm'
    - regex: 'Watch([456]),[24]'
      device: 'wearable'
      model: 'Watch Series $1 44mm'
    - regex: 'Watch6,[68]'
      device: 'wearable'
      model: 'Watch Series 7 41mm'
    - regex: 'Watch6,[79]'
      device: 'wearable'
      model: 'Watch Series 7 45mm'
    - regex: 'Watch'
      device: 'wearable'
      model: 'Watch'

      # specific desktop devices
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacPro1(?:%2C|,)1'
      device: 'desktop'
      model: 'Mac Pro (2006)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacPro2(?:%2C|,)1'
      device: 'desktop'
      model: 'Mac Pro (2007)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacPro3(?:%2C|,)1'
      device: 'desktop'
      model: 'Mac Pro (2008)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacPro4(?:%2C|,)1'
      device: 'desktop'
      model: 'Mac Pro (2009)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacPro5(?:%2C|,)1'
      device: 'desktop'
      model: 'Mac Pro (2010-2012)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac5(?:%2C|,)1'
      device: 'desktop'
      model: 'iMac (2006)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac5(?:%2C|,)2'
      device: 'desktop'
      model: 'iMac 17" (2006)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac6(?:%2C|,)1'
      device: 'desktop'
      model: 'iMac 24" (2006)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac7(?:%2C|,)1'
      device: 'desktop'
      model: 'iMac (2007)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac8(?:%2C|,)1'
      device: 'desktop'
      model: 'iMac (2008)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac9(?:%2C|,)1'
      device: 'desktop'
      model: 'iMac (2009)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac10(?:%2C|,)1'
      device: 'desktop'
      model: 'iMac (2009)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac11(?:%2C|,)1'
      device: 'desktop'
      model: 'iMac 27" (2009)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac11(?:%2C|,)2'
      device: 'desktop'
      model: 'iMac 21.5" (2010)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac11(?:%2C|,)3'
      device: 'desktop'
      model: 'iMac 27" (2010)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac12(?:%2C|,)1'
      device: 'desktop'
      model: 'iMac 21.5" (2011)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac12(?:%2C|,)2'
      device: 'desktop'
      model: 'iMac 27" (2011)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac13(?:%2C|,)1'
      device: 'desktop'
      model: 'iMac 21.5" (2012-2013)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac13(?:%2C|,)2'
      device: 'desktop'
      model: 'iMac 27" (2012)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac14(?:%2C|,)[13]'
      device: 'desktop'
      model: 'iMac 21.5" (2013)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac14(?:%2C|,)2'
      device: 'desktop'
      model: 'iMac 27" (2013)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac14(?:%2C|,)4'
      device: 'desktop'
      model: 'iMac 21.5" (2014)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac17(?:%2C|,)1'
      device: 'desktop'
      model: 'iMac 27" (2015)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac18(?:%2C|,)[12]'
      device: 'desktop'
      model: 'iMac 21.5" (2017)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac18(?:%2C|,)3'
      device: 'desktop'
      model: 'iMac 27" (2017)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac19(?:%2C|,)1'
      device: 'desktop'
      model: 'iMac 27" (2019)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac19(?:%2C|,)2'
      device: 'desktop'
      model: 'iMac 21.5" (2019)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac20(?:%2C|,)[12]'
      device: 'desktop'
      model: 'iMac 27" (2020)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMac21(?:%2C|,)[12]'
      device: 'desktop'
      model: 'iMac 24" (2021)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iMacPro1(?:%2C|,)1'
      device: 'desktop'
      model: 'iMac Pro 27" (2017)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBook1(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook 13" (2006)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBook2(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook 13" (2006-2007)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBook3(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook 13" (2007)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBook[45](?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook 13" (2008)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBook5(?:%2C|,)2'
      device: 'desktop'
      model: 'MacBook 13" (2009)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBook6(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook 13" (2009)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBook7(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook 13" (2010)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBook8(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook 12" (2015)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBook9(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook 12" (2016)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir1(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Air 13" (2008)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir2(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Air (2009)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir3(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Air 11" (2010)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir3(?:%2C|,)2'
      device: 'desktop'
      model: 'MacBook Air 13" (2010)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir4(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Air 11" (2011)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir4(?:%2C|,)2'
      device: 'desktop'
      model: 'MacBook Air 13" (2011)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir5(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Air 11" (2012)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir5(?:%2C|,)2'
      device: 'desktop'
      model: 'MacBook Air 13" (2012)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir6(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Air 11" (2013-2014)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir6(?:%2C|,)2'
      device: 'desktop'
      model: 'MacBook Air 13" (2013-2014)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir7(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Air 11" (2015)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir7(?:%2C|,)2'
      device: 'desktop'
      model: 'MacBook Air 13" (2015-2017)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir8(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Air 13" (2018)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir8(?:%2C|,)2'
      device: 'desktop'
      model: 'MacBook Air 13" (2019)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir9(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Air 13" (2020)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookAir10(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Air 13" (2020)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro1(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Pro 15" (2006)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro1(?:%2C|,)2'
      device: 'desktop'
      model: 'MacBook Pro 17" (2006)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro2(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Pro 17" (2007)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro2(?:%2C|,)2'
      device: 'desktop'
      model: 'MacBook Pro 15" (2007)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro[34](?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Pro (2008)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro5(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Pro 15" (2008)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro5(?:%2C|,)2'
      device: 'desktop'
      model: 'MacBook Pro 17" (2009)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro5(?:%2C|,)[34]'
      device: 'desktop'
      model: 'MacBook Pro 15" (2009)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro5(?:%2C|,)5'
      device: 'desktop'
      model: 'MacBook Pro 13" (2009)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro6(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Pro 17" (2010)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro6(?:%2C|,)2'
      device: 'desktop'
      model: 'MacBook Pro 15" (2010)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro7(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Pro 13" (2010)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro8(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Pro 13" (2011)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro8(?:%2C|,)2'
      device: 'desktop'
      model: 'MacBook Pro 15" (2011)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro8(?:%2C|,)3'
      device: 'desktop'
      model: 'MacBook Pro 17" (2011)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro9(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Pro 15" (2012)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro9(?:%2C|,)2'
      device: 'desktop'
      model: 'MacBook Pro 13" (2012)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro10(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Pro 15" (2012-2013)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro10(?:%2C|,)2'
      device: 'desktop'
      model: 'MacBook Pro 13" (2012-2013)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro11(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Pro 13" (2013-2014)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro11(?:%2C|,)[23]'
      device: 'desktop'
      model: 'MacBook Pro 15" (2013-2014)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro11(?:%2C|,)[45]'
      device: 'desktop'
      model: 'MacBook Pro 15" (2015)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro12(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Pro 13" (2015)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro13(?:%2C|,)[12]'
      device: 'desktop'
      model: 'MacBook Pro 13" (2016)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro13(?:%2C|,)3'
      device: 'desktop'
      model: 'MacBook Pro 15" (2016)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro14(?:%2C|,)[12]'
      device: 'desktop'
      model: 'MacBook Pro 13" (2017)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro14(?:%2C|,)3'
      device: 'desktop'
      model: 'MacBook Pro 15" (2017)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro15(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Pro 15" (2018-2019)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro15(?:%2C|,)2'
      device: 'desktop'
      model: 'MacBook Pro 13" (2018-2019)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro15(?:%2C|,)3'
      device: 'desktop'
      model: 'MacBook Pro 15" (2019)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro15(?:%2C|,)4'
      device: 'desktop'
      model: 'MacBook Pro 13" (2019)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro16(?:%2C|,)[14]'
      device: 'desktop'
      model: 'MacBook Pro 16" (2019)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro16(?:%2C|,)[23]'
      device: 'desktop'
      model: 'MacBook Pro 13" (2020)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro17(?:%2C|,)1'
      device: 'desktop'
      model: 'MacBook Pro 13" (2020)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro18(?:%2C|,)[12]'
      device: 'desktop'
      model: 'MacBook Pro 16" (2021)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?MacBookPro18(?:%2C|,)[34]'
      device: 'desktop'
      model: 'MacBook Pro 14" (2021)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?Macmini1(?:%2C|,)1'
      device: 'desktop'
      model: 'Mac Mini (2006)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?Macmini2(?:%2C|,)1'
      device: 'desktop'
      model: 'Mac Mini (2007)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?Macmini3(?:%2C|,)1'
      device: 'desktop'
      model: 'Mac Mini (2009)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?Macmini4(?:%2C|,)1'
      device: 'desktop'
      model: 'Mac Mini (2010)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?Macmini5(?:%2C|,)[123]'
      device: 'desktop'
      model: 'Mac Mini (2011)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?Macmini6(?:%2C|,)[12]'
      device: 'desktop'
      model: 'Mac Mini (2012)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?Macmini7(?:%2C|,)1'
      device: 'desktop'
      model: 'Mac Mini (2014)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?Macmini8(?:%2C|,)1'
      device: 'desktop'
      model: 'Mac Mini (2018)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?Macmini9(?:%2C|,)1'
      device: 'desktop'
      model: 'Mac Mini (2020)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?PowerMac7(?:%2C|,)2'
      device: 'desktop'
      model: 'Power Macintosh G5 (2003)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?PowerMac7(?:%2C|,)3'
      device: 'desktop'
      model: 'Power Macintosh G5 (2004-2005)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?PowerMac8(?:%2C|,)2'
      device: 'desktop'
      model: 'iMac G5 (2005)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?PowerMac10(?:%2C|,)1'
      device: 'desktop'
      model: 'Mac Mini G4 (2005)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?PowerMac12(?:%2C|,)1'
      device: 'desktop'
      model: 'iMac G5 (2005)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?PowerBook5(?:%2C|,)6'
      device: 'desktop'
      model: 'PowerBook G4 (2005)'
    - regex: '(?:MDCR_|ICRU_|Apple-)?PowerBook6(?:%2C|,)7'
      device: 'desktop'
      model: 'iBook G4 (2005)'

    # specific smartphone devices
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?1[C,_]1'
      model: 'iPhone'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?1[C,_]2'
      model: 'iPhone 3G'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?2[C,_]1| 3GS\)$'
      model: 'iPhone 3GS'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?3[C,_][123]'
      model: 'iPhone 4'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?4[C,_]1|1C2%254enohPi| 4S\)$'
      model: 'iPhone 4S'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?5[C,_][12]| 5\)$'
      model: 'iPhone 5'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?5[C,_][34]'
      model: 'iPhone 5C'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?6[C,_][12]| 5S\)$'
      model: 'iPhone 5S'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?7[C,_]1|1C2%257enohPi| 6PLUS\)$'
      model: 'iPhone 6 Plus'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?7[C,_]2| 6\)$'
      model: 'iPhone 6'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?8[C,_]2| 6SPLUS\)$'
      model: 'iPhone 6s Plus'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?8[C,_]1|iPhone[ /]6s| 6S\)$'
      model: 'iPhone 6s'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?8[C,_]4| SE\)$'
      model: 'iPhone SE'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?9[C,_][13]|iphone7 | 7\)$'
      model: 'iPhone 7'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?9[C,_][24]| 7PLUS\)$'
      model: 'iPhone 7 Plus'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?10[C,_][14]| 8\)$'
      model: 'iPhone 8'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?10[C,_][25]| 8PLUS\)$'
      model: 'iPhone 8 Plus'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?10[C,_][36]|iPhone X| X\)$'
      model: 'iPhone X'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?11[C,_]2| XS\)$'
      model: 'iPhone XS'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?11[C,_][46]|iPhoneXSMax| XSMAX\)$'
      model: 'iPhone XS Max'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?11[C,_]8| XR\)$'
      model: 'iPhone XR'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?12[C,_]1|iPhone 11| 11\)$'
      model: 'iPhone 11'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?12[C,_]3| 11PRO\)$'
      model: 'iPhone 11 Pro'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?12[C,_]5| 11PROMAX\)$|iPhone_11_Pro_Max'
      model: 'iPhone 11 Pro Max'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?12[C,_]8| SE2\)$'
      model: 'iPhone SE (2020)'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?13[C,_]1| 12MINI\)$'
      model: 'iPhone 12 Mini'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?13[C,_]2| 12\)$'
      model: 'iPhone 12'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?13[C,_]3| 12PRO\)$'
      model: 'iPhone 12 Pro'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?13[C,_]4| 12PROMAX\)$'
      model: 'iPhone 12 Pro Max'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?14[C,_]2| 13PRO\)$'
      model: 'iPhone 13 Pro'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?14[C,_]3| 13PROMAX\)$'
      model: 'iPhone 13 Pro Max'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?14[C,_]4| 13MINI\)$'
      model: 'iPhone 13 Mini'
      device: 'smartphone'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?14[C,_]5| 13\)$'
      model: 'iPhone 13'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?14[C,_]6'
      model: 'iPhone SE (2022)'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?14[C,_]8| 14PLUS\)$'
      model: 'iPhone 14 Plus'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?15[C,_]2| 14PRO\)$'
      model: 'iPhone 14 Pro'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?15[C,_]3| 14PROMAX\)$'
      model: 'iPhone 14 Pro Max'
      device: 'phablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPh(?:one)?14[C,_]7| 14\)$'
      model: 'iPhone 14'
      device: 'phablet'

    # specific tablet devices
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad1[C,_]1'
      model: 'iPad'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad2[C,_][1-4]'
      model: 'iPad 2'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad2[C,_][567]'
      model: 'iPad Mini'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad3[C,_][123]'
      model: 'iPad 3'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad3[C,_][456]'
      model: 'iPad 4'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad4[C,_][123]'
      model: 'iPad Air'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad4[C,_][456]'
      model: 'iPad Mini 2'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad4[C,_][789]'
      model: 'iPad Mini 3'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad5[C,_][12]'
      model: 'iPad Mini 4'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad5[C,_][34]'
      model: 'iPad Air 2'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad6[C,_][34]'
      model: 'iPad Pro 9.7'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad6[C,_][78]'
      model: 'iPad Pro 12.9'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad6[C,_](?:11|12)'
      model: 'iPad 5 9.7'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad7[C,_][12](?:[\]);/ ]|$)'
      model: 'iPad Pro 2 12.9'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad7[C,_][34](?:[\]);/ ]|$)'
      model: 'iPad Pro 10.5'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad7[C,_][56](?:[\]);/ ]|$)'
      model: 'iPad 6 9.7'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad7[C,_](?:11|12)(?:[\]);/ ]|$)'
      model: 'iPad 7 10.2'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad8[C,_](?:9|10)'
      model: 'iPad Pro 2 11"'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad13[C,_]4'
      model: 'iPad Pro 3 11" WiFi'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad13[C,_][5-7]'
      model: 'iPad Pro 3 11"'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad8[C,_]1[12]'
      model: 'iPad Pro 4 12.9"'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad8[C,_][1-4]'
      model: 'iPad Pro 3 11.0'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad8[C,_][5-8]'
      model: 'iPad Pro 3 12.9'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad11[C,_][12]'
      model: 'iPad Mini 5'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad11[C,_][34]'
      model: 'iPad Air 3'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad11[C,_][67]'
      model: 'iPad 8 10.2"'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad12[C,_]1'
      model: 'iPad 9 10.2" WiFi'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad12[C,_]2'
      model: 'iPad 9 10.2"'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad13[C,_]8'
      model: 'iPad Pro 5 12.9" WiFi'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad13[C,_](?:9|10|11)'
      model: 'iPad Pro 5 12.9"'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad13[C,_]16'
      model: 'iPad Air 5 WiFi'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad13[C,_]17'
      model: 'iPad Air 5'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad13[C,_]1'
      model: 'iPad Air 4 WiFi'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad13[C,_]2'
      model: 'iPad Air 4'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad14[C,_]1'
      model: 'iPad Mini 6 WiFi'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad14[C,_]2'
      model: 'iPad Mini 6'
      device: 'tablet'

    - regex: 'Apple-?TV2[C,_]1'
      model: 'Apple TV 2'
      device: 'tv'
    - regex: 'Apple-?TV3[C,_][12]'
      model: 'Apple TV 3'
      device: 'tv'
    - regex: 'Apple-?TV5[C,_]3'
      model: 'Apple TV 4'
      device: 'tv'
    - regex: 'Apple-?TV6[C,_]2'
      model: 'Apple TV 4K'
      device: 'tv'
    - regex: 'Apple-?TV11[C,_]1'
      model: 'Apple TV 4K (2021)'
      device: 'tv'

    - regex: '(?:iTunes-)?Apple[ _]?TV'
      model: 'Apple TV'
      device: 'tv'
    - regex: 'iTunes-iPad/[0-9]+(?:\.[0-9]+)* \(([^;]+);'
      model: 'iPad $1'
      device: 'tablet'
    - regex: '(?:MDCR_|ICRU_|Apple-)?iPad'
      model: 'iPad'
      device: 'tablet'
    - regex: 'iTunes-iPhone/[0-9]+(?:\.[0-9]+)* \(([^;]+);'
      model: 'iPhone $1'
      device: 'smartphone'
    - regex: '(?:Apple-)?iPhone ?(3GS?|4S?|5[CS]?|6(:? Plus)?)?'
      model: 'iPhone $1'
      device: 'smartphone'

# micromax
MicroMax:
  regex: '(?:MicroMax[ \-\_]?[a-z0-9]+|Q327)|4560MMX|P70221|(?:YU(?:5012|5040|5530)|AQ5001(?: Canvas Power)?|Android 4(?:[\d.]*);(?: [\w-]+;)? A240|Android 8(?:[\d.]*);(?: [\w-]+;)? B5Pro|N8216|N8301|IN_2b|IN_Note1|ione note)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'AQ5001 Canvas Power'
      model: 'Canvas Power'
    - regex: 'AQ5001'
      model: 'Canvas Juice 2'
    - regex: 'A240(?:[);/ ]|$)'
      model: 'Canvas Doodle 2'
    - regex: 'A107(?:[);/ ]|$)'
      model: 'Canvas Fire 4'
    - regex: 'Q465(?:[);/ ]|$)'
      model: 'Canvas Juice 4'
    - regex: 'E451(?:[);/ ]|$)'
      model: 'Canvas Pulse'
    - regex: '4560MMX(?:[);/ ]|$)'
      model: '4560MMX'
    - regex: 'IN_2b(?:[);/ ]|$)'
      model: 'IN 2B'
    - regex: 'E6523(?:[);/ ]|$)'
      model: 'IN 1B'
    - regex: 'AQ4502(?:[);/ ]|$)'
      model: 'Canvas A1'
    - regex: 'E453(?:[);/ ]|$)'
      model: 'Canvas Evok Note'
    - regex: 'E481(?:[);/ ]|$)'
      model: 'Canvas 5'
    - regex: 'Q462(?:[);/ ]|$)'
      model: 'Canvas 5 Lite'
    - regex: 'P70221(?:[);/ ]|$)'
      model: 'Canvas Tab'
      device: 'tablet'
    - regex: 'Q(3[25]7|30[13]|326|354|338|3[03]01)(?:[);/ ]|$)'
      model: 'Bolt Q$1'
    - regex: 'Q417'
      model: 'Canvas Mega'
    - regex: 'Q350R'
      model: 'Canvas Magnus 2 Plus'
    - regex: 'Q480'
      model: 'Canvas Space 2'
    - regex: 'Q380'
      model: 'Canvas Spark'
    - regex: 'Q351'
      model: 'Canvas Spark 2 Pro'
    - regex: 'Q350'
      model: 'Canvas Spark 2 Plus'
    - regex: 'Q349'
      model: 'Canvas Selfie 4'
    - regex: 'Q402\+'
      model: 'Bolt Pace'
    - regex: 'Q409'
      model: 'Spark 4G (2017)'
    - regex: 'Q415'
      model: 'Canvas Pace'
    - regex: 'Q340'
      model: 'Selfie 2'
    - regex: 'YU5040(?:[);/ ]|$)'
      model: 'YU Yureka YU5040'
    - regex: 'YU5012(?:[);/ ]|$)'
      model: 'Yunique 2 Plus'
    - regex: 'YU5530(?:[);/ ]|$)'
      model: 'YU Yureka S YU5530'
    - regex: 'Q424'
      model: 'Bolt Selfie'
    - regex: 'Q4101'
      model: 'Bolt Warrior 1 Plus'
    - regex: 'Q352'
      model: 'Bolt Supreme 4'
    - regex: '(?:Micromax_)?(Q333|S302|Q324)'
      model: 'Bolt $1'
    - regex: 'Q306'
      model: 'Bolt Prime 3G'
    - regex: 'Q402 ?Plus'
      model: 'Bharat 2 Plus'
    - regex: 'Q426'
      model: 'Canvas Mega 2'
    - regex: 'N8216'
      model: 'Infinity N11'
    - regex: 'N8301'
      model: 'Infinity N12'
    - regex: 'Micromax[_ ]HS3(?:[);/ ]|$)'
      model: 'Canvas Infinity Pro'
    - regex: 'Micromax[_ ]HS2(?:[);/ ]|$)'
      model: 'Canvas Infinity'
    - regex: 'Micromax[_ ]HS1(?:[);/ ]|$)'
      model: 'Canvas Infinity Lite'
    - regex: 'Q440Plus(?:[);/ ]|$)'
      model: 'Q440 Plus'
    - regex: 'Micromax[_ ]Q353P(?:[);/ ]|$)'
      model: 'Q353 Plus'
    - regex: 'Q452(?:[);/ ]|$)'
      model: 'Spark 4G Prime'
    - regex: 'Q4601(?:[);/ ]|$)'
      model: 'Selfie 2 Note'
    - regex: 'Q421(?:[);/ ]|$)'
      model: 'Canvas Magnus HD'
    - regex: 'E313(?:[);/ ]|$)'
      model: 'Canvas Xpress 2'
    - regex: 'Q413(?:[);/ ]|$)'
      model: 'Canvas Xpress'
    - regex: 'Q4251(?:[);/ ]|$)'
      model: 'Vdeo 4'
    - regex: 'Micromax C1A(?:[);/ ]|$)'
      model: 'Canvas 1 (2018)'
    - regex: 'C2APLS(?:[);/ ]|$)'
      model: 'Canvas 2 Plus'
    - regex: 'Bharat[ _](\d)[ _]Pro(?:[);/ ]|$)'
      model: 'Bharat $1 Pro'
    - regex: 'Bharat[ _](\d)[ _]Plus(?:[);/ ]|$)'
      model: 'Bharat $1 Plus'
    - regex: 'Bharat (\d)(?:[);/ ]|$)'
      model: 'Bharat $1'
    - regex: 'ione note(?:[);/ ]|$)'
      model: 'iOne Note'
    - regex: 'IN_Note1(?:[);/ ]|$)'
      model: 'IN Note 1'
    - regex: 'E7533(?:[);/ ]|$)'
      model: 'IN 1b'
    - regex: 'B5Pro(?:[);/ ]|$)'
      model: 'B5 Pro'
    - regex: 'MicroMax(?:[ _-])?(P681|P802)(?:[);/ ]|$)'
      model: 'Canvas Tab $1'

    - regex: 'MicroMax(?:[ _-])?(X291|X246|X252|X458|X312)'
      model: '$1'
      device: 'feature phone'

    - regex: 'MicroMax(?:[ _-])?(P[a-z0-9]+)'
      model: '$1'
      device: 'tablet'
    - regex: 'MicroMax(?:[ _-])?([a-z0-9]+)'
      model: '$1'

# 3Q
3Q:
  regex: 'AC0731B|AC1024C|AC7803C|BC9710AM|EL72B|LC0720C|LC0723B|LC0725B|LC0804B|LC0808B|LC0809B|LC0810C|LC0816C|LC0901D|LC1016C|MT0724B|MT0729[BD]|MT0811B|OC1020A|RC07(?:09B|10B|18C|19H|2[16]B|22C|27H|34H|43H)|RC0817C|RC1018C|RC1019G|RC1025F|RC1301C|RC780[24]F|RC9711B|RC9712C|RC9716B|RC9717B|RC9724C|RC9726C|RC9727F|RC9730C|RC9731C|TS0807B|TS1013B|VM0711A|VM1017A|RC0813C|QS9719D|QS9718C|QS9715F|QS1023H|QS0815C|QS0730C|QS0728C|QS0717D|QS0716D|QS0715C|MT7801C|TS9708B|AC0732C|MT0739D|MT0812E|(?:3Q_)?ER71B'
  device: 'tablet'
  models:
    - regex: 'MT0724B|LC0901D|LC0816C|LC0810C|LC0809B|LC0808B|LC0804B|LC0725B|LC0723B'
      model: 'Qoo! P-Pad'
    - regex: 'VM1017A|TS1013B|TS0807B|RC9731C|RC9730C|RC9727F|RC9726C|RC9724C|RC9717B|RC9716B|RC9712C|RC9711B|RC1301C|RC1025F|RC1019G|RC1018C|RC0817C|RC0813C|RC0743H|RC0734H|RC0726B|RC0722C|RC0721B|RC0719H|RC0718C|RC0710B|RC0709B|QS9715F|QS1023H|QS0815C|QS0730C|QS0728C|QS0717D|QS0716D|QS0715C|MT0811B|MT0739D|MT0729[BD]|LC1016C|LC0720C|BC9710AM|AC1024C|AC0731B'
      model: 'Qoo! Q-Pad'
    - regex: 'MT7801C|QS9718C|QS9719D|VM0711A|OC1020A'
      model: 'Qoo! Surf'
    - regex: 'TS9708B'
      model: 'Surf TS1009B'
    - regex: 'AC7803C|AC0732C|RC0727H'
      model: 'Qoo! Lite'
    - regex: 'MT0812E|RC7802F'
      model: 'Qoo! Meta'
    - regex: 'EL72B|(?:3Q_)?ER71B'
      model: 'Qoo! Q-Book'
    - regex: '(RC7804F)'
      model: 'Qoo! Glaze'

# 4Good
4Good:
  regex: '4Good[ _]|S450m [43]G|S555m 4G|S501m 3G|T700i_3G|People (?:G503|G410|GT300)|Light (?:A10[34]|B100|AT300)|Light_AT200'
  device: 'smartphone'
  models:
    - regex: '(T700i|T100m|T70[34]m)[_ ]?3G'
      model: '$1 3G'
      device: 'tablet'
    - regex: 'Light[_ ](AT[23]00)'
      model: 'Light $1'
      device: 'tablet'
    - regex: 'People (GT300|AT100)'
      model: 'People $1'
      device: 'tablet'
    - regex: 'S555m[_ ]4G'
      model: 'People'
    - regex: '(S(?:450m|501m)[_ ][43]G|Light (?:A10[34]|B100)|People (?:G503|G410))'
      model: '$1'
    - regex: 'KIDS S45'
      model: 'Kids S45'
    - regex: '4Good[ _]([^);/]+)(?: Build|[);])'
      model: '$1'

# Acteck
Acteck:
  regex: 'BLECK'
  device: 'tablet'
  model: 'Bleck'

# Alba
Alba:
  regex: 'Alba ?(?:7Q|10Q|57|4|10 TABLET|(?:[78]|10)(?:Nou|Pie))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Alba 57'
      model: '5.7'
    - regex: 'Alba (4)'
      model: '$1'
    - regex: '10 TABLET'
      device: 'tablet'
      model: '10 Tablet'
    - regex: 'Alba((?:[78]|10)(?:Nou|Pie)|7Q|10Q)'
      device: 'tablet'
      model: '$1'

# AllCall
AllCall:
  regex: 'AllCall_|Heat[34]|(?:Rio_X|S5500)(?:[);/ ]|$)|Hot ?[125][^;/]+ Build'
  device: 'smartphone'
  models:
    - regex: 'AllCall_(Alpha|Atom|Bro|Madrid)'
      model: '$1'
    - regex: 'AllCall_S1_X'
      model: 'S1 X'
    - regex: 'AllCall_S1'
      model: 'S1'
    - regex: 'AllCall_RIO_S'
      model: 'Rio S'
    - regex: 'AllCall_RIO_PRO'
      model: 'Rio Pro'
    - regex: 'AllCall_RIO'
      model: 'Rio'
    - regex: 'Heat([34])'
      model: 'Heat $1'
    - regex: 'Rio_X(?:[);/ ]|$)'
      model: 'Rio X'
    - regex: '(S5500)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Hot ?([125][^;/]+) Build'
      model: 'Hot $1'

# Bravis
Bravis:
  regex: 'Bravis[ _]|A501 Bright|A552 JOY Max|A504 Trace|A505 JOY Plus|A503 Joy|NB(?:106M|10[1-8]|751|7[145]|8[57]1|76)|NP101|NB961|NP 104 3G|B501|N1-570 Space|Atlas A551|A511 Harmony|A512 Harmony Pro|A510_Jeans_4G|A509_Jeans|N1_550_Cruiser|N1_551 Gloss'
  device: 'smartphone'
  models:
    - regex: 'A501 BRIGHT'
      model: 'A501 Bright'
    - regex: 'Bravis[_ ]X500'
      model: 'Trace Pro'
    - regex: 'Bravis[_ ]A506'
      model: 'Crystal'
    - regex: 'Bravis[_ ]A553'
      model: 'Discovery'
    - regex: 'BRAVIS[ _]TAU'
      model: 'Tau'
    - regex: 'BRAVIS[ _]DELTA'
      model: 'Delta'
    - regex: 'BRAVIS[ _]TREND'
      model: 'Trend'
    - regex: 'B501'
      model: 'Easy'
    - regex: 'N1-570'
      model: 'Space'
    - regex: 'BRAVIS[ ]A554'
      model: 'A554 Grand'
    - regex: 'BRAVIS[ ]S500'
      model: 'S500 Diamond'
    - regex: 'A505 JOY Plus'
      model: 'A505 Joy Plus'
    - regex: 'A552 JOY Max'
      model: 'A552 Joy Max'
    - regex: 'Atlas A551'
      model: 'A551 Atlas'
    - regex: 'A503 Joy'
      model: 'A503 Joy'
    - regex: 'A504 Trace'
      model: 'A504 Trace'
    - regex: 'A512 Harmony Pro'
      model: 'A512 Harmony Pro'
    - regex: 'A511 Harmony'
      model: 'A511 Harmony'
    - regex: 'A510_Jeans_4G'
      model: 'A510 Jeans 4G'
    - regex: 'A509_Jeans'
      model: 'A509 Jeans'
    - regex: 'BRAVIS NEO'
      model: 'A401 Neo'
    - regex: 'N1_550_Cruiser'
      model: 'N1-550 Cruiser'
    - regex: 'N1_551 Gloss'
      model: 'N1-551 Gloss'
    - regex: 'BRAVIS OMEGA'
      model: 'Omega'
    - regex: 'BRAVIS BIZ'
      model: 'Biz'
    - regex: 'BRAVIS POWER'
      model: 'Power'
    - regex: 'BRAVIS[ _]SPARK'
      model: 'Spark'

    - regex: 'BRAVIS[ _]SLIM[ _]3G'
      model: 'Slim 3G'
      device: 'tablet'
    - regex: 'NP 104 3G'
      model: 'NP104 3G'
      device: 'tablet'
    - regex: 'BRAVIS NP 103'
      model: 'NP103'
      device: 'tablet'
    - regex: 'BRAVIS NP 844'
      model: 'NP844'
      device: 'tablet'

    - regex: 'Bravis[_ ]([^;\)]+) Build'
      model: '$1'
    - regex: '(NB(?:106M|10[1-8]|75[134]|7[145]|8[57]1|76)|NP101|NB961)'
      model: '$1'
      device: 'tablet'

# Brigmton
Brigmton:
  regex: 'BTPC-'
  device: 'smartphone'
  models:
    - regex: 'BTPC-1022QC3G-TV'
      model: 'BTPC-1022QC3G-TV'
      device: 'tablet'

# Acer (acer.com)
Acer:
  regex: 'acer|ACTAB|TravelMate|(?<!Satellite |ZTE BLADE |ImSmart |ERGO |X-Style Tab )(?<!Optima 7 )a(?:101|110|2[10]0|211|50[10]|51[10]|70[10])(?:[);/ ]|$)|Android.*V3[67]0(?:[);/ ]|$)|Android.*Z1[23456]0 Build|Android.*Z5\d{2} Build|Android.*T0[234678] Build|Android 5(?:[\d.]*);(?: [\w-]+;)? S59|Android.*S55(?! Nova)(?:[);/ ]|$)|(?:A1-(713(HD)?|7[23]4|830|841|840(?:FHD)?|81[01])|A3-A[1-5][01]|B1-(7[1235-9][01](HD)?|7[23]3|7A0|8[1235]0|A71|860A)|TPA60W|B3-(A[125]0|A3[02]|A40FHD)|E39)(?:[);/ ]|$)|S5[12]0 Build|(DA[0-9]+HQ?L|Aspire (?:V5-121|XC-704G|V5-573G|4349)|Chromebook 14 \(CB3-431\)|Predator G9-793|GT-810|B1-870|B3-A20B|B3-A4[02]|B3-A50FHD|ET-108-11A|AC?TAB(?:721E?|821|1021(?:E|_A)|1022)|A3-A20FHD|E380)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    # smart displays
    - regex: 'DA220HQL(?:[);/ ]|$)'
      model: 'DA220HQL'
      device: 'smart display'
    - regex: 'DA241HL(?:[);/ ]|$)'
      model: 'DA241HL'
      device: 'smart display'
    - regex: '(DA[0-9]+HQ?L)(?:[);/ ]|$)'
      model: '$1'
      device: 'smart display'

    # explicit tablet models
    - regex: 'A1-81[01]'
      model: 'Iconia A'
      device: 'tablet'
    - regex: 'ATAB(102[12]|721)E'
      model: 'ATAB$1E'
      device: 'tablet'
    - regex: 'ACTAB1021(?:_A)?'
      model: 'ACTAB1021'
      device: 'tablet'
    - regex: 'ACTAB(821|1022)'
      model: 'ACTAB$1'
      device: 'tablet'
    - regex: 'ET-108-11A'
      model: 'Enduro T1'
      device: 'tablet'
    - regex: 'TPA60W'
      model: 'TPA60W'
      device: 'tablet'
    - regex: 'A1-84(1|0(?:FHD)?)'
      model: 'Iconia Tab 8'
      device: 'tablet'
    - regex: 'A1-713(HD)?'
      model: 'Iconia Tab 7'
      device: 'tablet'
    - regex: 'A1-830'
      model: 'Iconia A1'
      device: 'tablet'
    - regex: 'A1-7[23]4'
      model: 'Iconia Talk S'
      device: 'tablet'
    - regex: 'A3-A20FHD'
      device: 'tablet'
      model: 'Iconia A3 FHD'
    - regex: 'A3-A[12][01]'
      model: 'Iconia A3'
      device: 'tablet'
    - regex: 'A3-A[345]0'
      model: 'Iconia Tab 10'
      device: 'tablet'
    - regex: 'B1-7(?:[5-9]0|30HD|A0)'
      model: 'Iconia One 7'
      device: 'tablet'
    - regex: 'B1-7[123][01]|B1-A71'
      model: 'Iconia B1'
      device: 'tablet'
    - regex: 'B1-7[23]3'
      model: 'Iconia Talk 7'
      device: 'tablet'
    - regex: 'B1-8[123567]0'
      model: 'Iconia One 8'
      device: 'tablet'
    - regex: 'B3-A([125]0|3[02]|[45]0FHD|4[02])'
      model: 'Iconia One 10'
      device: 'tablet'
    - regex: 'A101'
      model: 'Vangogh'
      device: 'tablet'
    - regex: 'A200'
      model: 'Picasso E'
      device: 'tablet'
    - regex: 'A50[01]'
      model: 'Picasso'
      device: 'tablet'
    - regex: 'Acer One 7 4G'
      model: 'One 7 4G'
      device: 'tablet'
    - regex: 'Acer One 7'
      model: 'One 7'
      device: 'tablet'
    - regex: 'GT-810'
      model: 'Predator 8'
      device: 'tablet'
    - regex: '(ACTAB721)'
      model: '$1'
      device: 'tablet'
    - regex: 'Acer_one_8_T2'
      model: 'One 8 T2'
      device: 'tablet'
    - regex: 'One 8 T4-82L'
      model: 'One 8 T4-82L'
      device: 'tablet'

    # explicit smartphone models
    - regex: 'E39(?:[);/ ]|$)'
      model: 'Liquid E700'
    - regex: 'E310(?:[);/ ]|$)'
      model: 'Liquid Mini'
    - regex: 'E320(?:-orange)?(?:[);/ ]|$)'
      model: 'Liquid Express'
    - regex: 'Android.*V360(?:[);/ ]|$)'
      model: 'Liquid E1 Duo'
    - regex: 'Android.*V370(?:[);/ ]|$)'
      model: 'Liquid E2 Duo'
    - regex: 'E380(?:[);/ ]|$)'
      model: 'Liquid E3'
    - regex: 'S510(?:[);/ ]|$)'
      model: 'Liquid S1'
    - regex: 'S520(?:[);/ ]|$)'
      model: 'Liquid S2'
    - regex: '(?:Acer_)?P400(?:[);/ ]|$)'
      model: 'neoTouch P400'
    - regex: '(?:Acer_)?P300(?:[);/ ]|$)'
      model: 'neoTouch P300'
    - regex: '(?:Acer_)?S200(?:[);/ ]|$)'
      model: 'neoTouch S200'
    - regex: '(?:Acer_)?E100(?:[);/ ]|$)'
      model: 'beTouch E100'
    - regex: 'Android.*Z1([234])0(?:[);/ ]|$)'
      model: 'Liquid Z$1'
    - regex: 'Android.*Z110(?:[);/ ]|$)'
      model: 'Liquid Z110'
    - regex: 'Android.*Z150(?:[);/ ]|$)'
      model: 'Liquid Z5 Duo'
    - regex: 'Android.*Z160(?:[);/ ]|$)'
      model: 'Liquid Z4 Duo'
    - regex: 'Android.*Z(5\d{2})(?:[);/ ]|$)'
      model: 'Liquid Z$1'
    - regex: 'Android.*S57(?:[);/ ]|$)'
      model: 'Liquid Jade Z'
    - regex: 'Android.*T02(?:[);/ ]|$)'
      model: 'Liquid Z530'
    - regex: 'Android.*T03(?:[);/ ]|$)'
      model: 'Liquid Z630'
    - regex: 'Android.*T04(?:[);/ ]|$)'
      model: 'Liquid Z630S'
    - regex: 'Android.*T06(?:[);/ ]|$)'
      model: 'Liquid Zest'
    - regex: 'Android.*T07(?:[);/ ]|$)'
      model: 'Liquid Zest 4G'
    - regex: 'Android.*T08(?:[);/ ]|$)'
      model: 'Liquid Zest Plus'
    - regex: 'TM01(?:[);/ ]|$)'
      model: 'Liquid M330'
    - regex: 'M220(?:[);/ ]|$)'
      model: 'Liquid M220'
    - regex: 'AcerTD600'
      model: 'TD600'
    - regex: 'Android.*S55(?:[);/ ]|$)'
      model: 'Liquid Jade'
    - regex: ' S59(?:[);/ ]|$)'
      model: 'Liquid X2'

    # desktop models
    - regex: '(?:Acer )?(Chromebook R1[13])'
      model: '$1'
      device: 'desktop'
    - regex: 'TravelMate Spin (B118-G2-R)'
      model: 'TravelMate Spin $1'
      device: 'desktop'
    - regex: 'TravelMate (P653-M|5760G|8371)'
      model: 'TravelMate $1'
      device: 'desktop'
    - regex: '(?:Acer )?(Chromebook 1[45])'
      model: '$1'
      device: 'desktop'
    - regex: '(Aspire (?:V5-121|XC-704G|V5-573G|A515-51G|4349))'
      model: '$1'
      device: 'desktop'
    - regex: '(Predator G9-793|Aspire E5-511)'
      model: '$1'
      device: 'desktop'

    - regex: 'Acer; ?([^;\(\)/]+)'
      model: '$1'
    - regex: 'Acer(?! ?inc)[ _\-]?([^;\(\)/]+)[();/ ]'
      model: '$1'
    - regex: 'acer[\-_]([a-z0-9]+)'
      model: '$1'
    - regex: 'a(101|110|2[10]0|211|50[10]|51[10]|70[10])(?:[);/ ]|$)'
      model: 'Iconia Tab A$1'
      device: 'tablet'

# Advan or advan digital
Advan:
  regex: '(?:ADVAN (?:M4|S40|T5C)|i7U|S45E|S50H|I7D|i55[KD]|i4U|S7D|S4Z|i5[KE]|S5E[ _]NXT|S5J\+|S4\+|1011|E1C_3G)(?:[);/ ]|$)| (?:E1C Pro|5505|5202|50(?:[46]1|5[89]|62)|600[24]|6201|Android [56].*; (?:i5C|i7A)|i5G)(?: Build|[;)])'
  device: 'smartphone'
  models:
    - regex: 'ADVAN M4'
      model: 'M4'
    - regex: 'ADVAN S40'
      model: 'S40'
    - regex: 'i7U'
      model: 'I Lite i7U'
    - regex: 'S5E[ _]NXT'
      model: 'S5E NXT'
    - regex: 'i(55[KD]|5[KE])'
      model: 'I$1'
    - regex: 'i4U'
      model: 'I4U'
    - regex: ' 5505(?:[);/ ]|$)'
      model: 'NASA Plus'
    - regex: ' 5202(?:[);/ ]|$)'
      model: 'NASA'
    - regex: ' 6201(?: Build|[;)])'
      model: 'G5'
    - regex: ' i5G(?: Build|[;)])'
      model: 'S50 4G'
    - regex: ' 6004(?: Build|[;)])'
      model: 'G2 Pro'
    - regex: ' 6002(?: Build|[;)])'
      model: 'G3 Pro'
    - regex: '(S45E|50[46]1|505[89]|5062|S50H|I7D|S7D|S4Z|S5J\+|S4\+|i5C)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'E1C_3G'
      device: 'tablet'
      model: 'E1C 3G'
    - regex: 'E1C Pro'
      device: 'tablet'
      model: 'E1C Pro'
    - regex: '(T5C|i7A)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: 'ADVAN 1011(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Sketsa 2'

# Advance (advanceperu.com)
Advance:
  regex: 'Hollogram|(?:HL(?:4[79]36|6246|5576|5585|[56]575|5[67]67|6577|6256|7257|9000)|IntroTr3544|Pr(?:61(?:4[56]|50)|60[27]0|5[69]50)|Tr3845|SP[345]701)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    # explicit table models
    - regex: 'IntroTr3544|Tr3845'
      model: 'Intro'
      device: 'tablet'
    - regex: 'SP([345]701)'
      model: 'SmartPad SP$1'
      device: 'tablet'
    - regex: 'Pr(61(?:4[56]|50)|60[27]0|5[69]50)'
      model: 'Prime PR$1'
      device: 'tablet'
    # explicit smartphone models
    - regex: 'HL(4[79]36|6246|[56]575|5576|5585|5[67]67|6577|6256|7257|9000)'
      model: 'Hollogram HL$1'
    - regex: 'Hollogram ([^;/)]+)(?: Build|[;)])'
      model: 'Hollogram $1'

# AGM (agm.tel or www.agmmobile.com)
AGM:
  regex: 'AGM[ _]([^/;)]+)(?: Build|[;)])|AG[_ ]Go[_-]Tab|(?:Flair(?! \w\d)|(?<!STX )Ultra 2|Freedom Access)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'AG[_ ]Go[_-]Tab[_ ]Access(_2)?(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Go Tab Access$1'
    - regex: '(Flair|Ultra 2|Freedom Access)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'AGM A9(?:[);/ ]|$)'
      model: 'A9'
    - regex: 'AGM_H3(?:[);/ ]|$)'
      model: 'H3'
    - regex: 'AGM_H5_PRO(?:[);/ ]|$)'
      model: 'H5 Pro'
    - regex: 'AGM[ _]([^/;)]+)(?: Build|[;)])'
      model: '$1'

# Airis
Airis:
  regex: 'AIRIS'
  device: 'smartphone'
  models:
    - regex: 'TM50QZ(?:[);/ ]|$)'
      model: 'TM50QZ'

# Airness
Airness:
  regex: 'AIRNESS-([\w]+)'
  device: 'feature phone'
  model: '$1'

# Airpha
Airpha:
  regex: '(?:Halo3_Pro|Halo4 Pro)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Halo([34])[ _]Pro'
      model: 'Halo$1 Pro'

# Aiwa (aiwa.mx eu-aiwa.com)
Aiwa:
  regex: '(?:AW790|M300(?! 4G)|AWM(?:53[39]|50[19]|561|999)|AW500|Android 7(?:[\d.]*);(?: [\w-]+;)? Z9 PLUS|JA2-SMP0601)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'AW790(?:[);/ ]|$)'
      model: 'AW790'
    - regex: 'Z9 PLUS'
      model: 'Z9 Plus'
    - regex: 'AW500(?:[);/ ]|$)'
      model: 'AW500'
    - regex: 'AWM(53[39]|50[19]|561|999)(?:[);/ ]|$)'
      model: 'AWM$1'
    - regex: '(JA2-SMP0601)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'M300(?:[);/ ]|$)'
      model: 'M300'
      device: 'phablet'

# Akai
Akai:
  regex: 'AKAI,|Akai[ _-]|Eco[ _]E2|Glory[ _](?:G[1235]|L[123]|O[125])|(?:TAB-[79]8[03]0Q?|X[56] METAL|AKTB-703MZ|FZ70[13]|X5_PRO|X3[_ ]PRO[_ ]SLIM)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'TAB-([79]8[03]0Q?)'
      device: 'tablet'
      model: 'TAB $1'
    - regex: 'AKTB-703MZ'
      device: 'tablet'
      model: 'AKTB-703MZ'
    - regex: '(FZ70[13])'
      device: 'tablet'
      model: '$1'

    - regex: 'X([56]) METAL'
      model: 'iLike X$1 Metal'
    - regex: 'X3[_ ]PRO[_ ]SLIM'
      model: 'iLike X3 Pro Slim'
    - regex: 'X5_PRO'
      model: 'iLike X5 Pro'
    - regex: 'Glory[ _](G[1235]|L[123]|O[125])'
      model: 'Glory $1'
    - regex: 'Eco[ _]E2'
      model: 'Eco E2'
    - regex: 'Akai[ _-]([^;/)]+)(?: Build|[;)])'
      model: '$1'

    - regex: 'AKAI,(AK3219NF)'
      device: 'tv'
      model: '$1'
    - regex: 'Si2157LG32'
      device: 'tv'
      model: ''

# Arian
Arian Space:
  regex: 'Arian Space'
  device: 'tablet'
  models:
    - regex: '100 ST1004PG'
      model: '100'
    - regex: '80 SS8003PG'
      model: '80'
    - regex: '71 ST7002PG'
      model: '71'
    - regex: '70 ST7001RW'
      model: '70'

# Alcatel (alcatelmobile.com)
Alcatel:
  regex: 'Alcatel|Alc(?!or )[a-z0-9]+|One[ _]?Touch|idol[3X]|TIMXL|(?:(?:4003[AJ]|4009[ADEFIKMSX]|4013[DEJKMX]|4014[ADEKMX]|4015[ADNTX]|4016[ADX]|4017[ADEFSX]|4018[ADEFMX]|4024[DEX]|4027[ADNX]|4028[AEJS]|4032[ADEX]|4034[ADEFGLTX]|4035[ADXY]|4045[ADELX]|4047[ADFGNX]|4049[DEGMX]|4060[SW]|4063F|4065F|4087U|4114E|5001[ADJTU]|5002[ABDEFHJLMRSUWX]|5003[ADGU]|5006[ADG]|5007[AGUOS]|5008[ADTUY]|5009[AD]|5010[DEGSUX]|5011A|5012[DFG]|5015[ADEX]|5016[AJX]|5017[ABDEOX]|5019D|5022[DEX]|5023[EF]|5024[ADFIJ]|5025[DEG]|5026[ADJ]|5027B|5028[ADY]|5029[ADEFY]|5030[ADEFJMU]|5031[ADGJ]|5032[OW]|5033(?:[DFTXY]R|[EFM]P|[ADEFGJMOQSTXY])|5034D|5036D|5038[ADEX]|5039[DY]|5041[CD]|5042[ADEFGTWX]|5044[ADGIKOPSTY]|5045[ADFGIJTXY]|5046[ADGIJSTUY]|5047[DIUY]|5048[AIUY]|5049[EGSWZ]|5050[ASXY]|5051[ADEJMTWX]|5052[ADY]|5053[ADKY]|5054[ADNSTWX]|5056[ADEGIJMNTUWX]|5057M|5058[AIJY]|5059[ADIJSTXYZ]|5060[ADJ]|5061[AKU]|5065[ADNWX]|5070D|5080[ADFQUX]|5085[ABCDGHIJNOQY]|5086[ADY]|5090[AIY]|5095[IKY]|5098[OS]|5099[ADIUY]|5116J|5145A|6002[AD]|6016[ADEX]|6025[ADH]|6027A|6036[AXY]|6037[BKY]|6039[AHJKSY]|6042D|6043[AD]|6044D|6045[BFIKOXY]|6050[AFY]|6055[ABDHIKPUYZ]|6056[ADH]|6058[ADX]|6060[SXC]|6062W|6070K|7040[ADEFKRT]|7041[DX]|7042A|7043[AEKY]|7044[AX]|7045Y|7048[ASWX]|7053D|7055A|7070X|7071[ADX]|8030Y|8050[DEGX]|8063|8088[MQX]|8094[MTX]|9001[DIX]|9002X|9003[AX]|9005X|9007[ATX]|9008[ADIJNTUX]|9009[AG]|9010X|9013[ATX]|9020A|9022X|9024O|9026X|9027[FQTWX]|9029[ZW]|9032[TWXZ]|9203A|9309X|A(?:46[46]BG|57[04]BL|576CC|621BL|50[13]DL|57[17]VL)|I213|I216[AX]|(?<!\.)80(?:[89]2|84|91|6[78]|5[124567]))(?:_(?:EEA|RU|TR))?|P3[36]0X|AM-H200)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '4087U'
      model: '1SE Light'
    - regex: '5022[EDX]|5070D'
      model: 'One Touch Pop Star'
    - regex: '6044D'
      model: 'One Touch Pop Up'
    - regex: '4015[ATX]|4016A'
      model: 'One Touch Pop C1'
    - regex: '4015[DN]|4016[DX]'
      model: 'One Touch Pop C1 Dual SIM'
    - regex: '4032[AX]'
      model: 'One Touch Pop C2'
    - regex: '4032[DE]'
      model: 'One Touch Pop C2 Dual SIM'
    - regex: '5036D'
      model: 'One Touch Pop C5 Dual SIM'
    - regex: '7040[AFK]|7041X|7042A'
      model: 'One Touch Pop C7'
    - regex: '7040[DE]|7041D'
      model: 'One Touch Pop C7 Dual SIM'
    - regex: '4018[ADEFMX]'
      model: 'One Touch Pop D1'
    - regex: '4035[ADXY]'
      model: 'One Touch Pop D3'
    - regex: '5038[ADEX]'
      model: 'One Touch Pop D5'
    - regex: '4045[AXL]'
      model: 'One Touch Pop 2 4"'
    - regex: '4045[DE]'
      model: 'One Touch Pop 2 4" Dual SIM'
    - regex: '5042[AFGWX]'
      model: 'One Touch Pop 2 4.5"'
    - regex: '5042[DE]'
      model: 'One Touch Pop 2 4.5" Dual SIM'
    - regex: '7043[AY]|7044[AX]'
      model: 'One Touch Pop 2 5"'
    - regex: '7043[EK]'
      model: 'One Touch Pop 2 5" Dual SIM'
    - regex: '50[16]5X'
      model: 'One Touch Pop 3'
    - regex: '5015[AE]|5016[AJ]|5065[ADWX]|5116J'
      model: 'One Touch Pop 3 5"'
    - regex: '5025[DEG]|5054[ADSTX]'
      model: 'One Touch Pop 3 5.5"'
    - regex: '5015D'
      model: 'One Touch Pop 3 Dual SIM'
    - regex: '5051[AEJMTWX]'
      model: 'One Touch Pop 4'
    - regex: '5051D'
      model: 'One Touch Pop 4 Dual SIM'
    - regex: '5095[IKY]'
      model: 'One Touch Pop 4S'
    - regex: '5056[ADEGJMTUX]'
      model: 'One Touch Pop 4+'
    - regex: '7070X'
      model: 'One Touch Pop 4 6"'
    - regex: '5057M'
      model: 'One Touch Pop Mirage'
    - regex: '5050[ASXY]'
      model: 'One Touch Pop S3'
    - regex: '7045Y'
      model: 'One Touch Pop S7'
    - regex: '6037[BKY]'
      model: 'One Touch Idol 2'
    - regex: '5042T'
      model: 'One Touch Astro'
    - regex: 'IdolX 6040'
      model: 'One Touch Idol X'
    - regex: '5027B'
      model: 'One Touch Dawn'
    - regex: '7071[ADX]'
      model: 'A7 XL'
    - regex: '5002[ABDEHJLMSUWX]'
      model: '1B (2020)'
    - regex: '5031[ADGJ]'
      model: '1B (2022)'
    - regex: '(?:Alcatel_)?5008R'
      model: 'Onyx'
    - regex: '(?:Alcatel_)?5002R'
      model: 'Volta'
    - regex: '4034T'
      model: '1E'
    - regex: '5002F'
      model: '1A (2020)'
    - regex: '4063F'
      model: '1L Plus'
    - regex: '4065F'
      model: '1L Pro'
    - regex: '5034D|6056[ADH]'
      model: '3L'
    - regex: 'A576CC'
      model: 'Kora A576CC'
    - regex: '7040[RT]'
      model: 'One Touch Fierce 2'
    - regex: '5056[NW]'
      model: 'One Touch Fierce 4'
    - regex: '5054N'
      model: 'One Touch Fierce XL'
    - regex: '6042D'
      model: 'One Touch Flash'
    - regex: '6016[AX]'
      model: 'One Touch Idol 2 mini'
    - regex: '6016[DE]'
      model: 'One Touch Idol 2 mini Dual SIM'
    - regex: '6036[AXY]'
      model: 'One Touch Idol 2 mini S'
    - regex: '6050[AFY]'
      model: 'One Touch Idol 2S'
    - regex: '6039[AHJKYS]|idol3'
      model: 'One Touch Idol 3'
    - regex: '6045[BFIKOYX]|AM-H200'
      model: 'One Touch Idol 3 5.5"'
    - regex: '6055[ABDHIKPUYZ]'
      model: 'One Touch Idol 4'
    - regex: '6070K'
      model: 'One Touch Idol 4S'
    - regex: '6058[ADX]'
      model: 'One Touch Idol 5'
    - regex: '6060[SX]'
      model: 'One Touch Idol 5S'
    - regex: '(?:Alcatel_)?6060C'
      model: 'One Touch Idol 5'
    - regex: '6043[AD]'
      model: 'One Touch Idol X+'
    - regex: '8030Y'
      model: 'One Touch Hero 2'
    - regex: '7055A'
      model: 'One Touch Hero 2C'
    - regex: '7053D'
      model: 'One Touch X1'
    - regex: '5065N'
      model: 'TRU'
    - regex: 'A574BL'
      model: 'Raven'
    - regex: 'A577VL'
      model: 'Zip'
    - regex: 'A466BG'
      model: 'Pixi Unite'
    - regex: '5056I'
      model: 'One Touch Optus X Smart'
    - regex: 'A570BL'
      model: 'One Touch Pixi Avion LTE'
    - regex: 'A571VL'
      model: 'One Touch Pixi Avion 4G LTE'
    - regex: '4024[DEX]'
      model: 'One Touch Pixi First'
    - regex: 'A464BG'
      model: 'One Touch Pixi Glitz'
    - regex: 'A621BL'
      model: 'One Touch Pixi Glory'
    - regex: '4014D'
      model: 'One Touch Pixi 2'
    - regex: '4009[AFIKMSX]'
      model: 'One Touch Pixi 3 3.5"'
    - regex: '4009[DE]'
      model: 'One Touch Pixi 3 3.5" Dual SIM'
    - regex: '4003[AJ]|4013[DEJKMX]|4014[AEKMX]|4114E'
      model: 'One Touch Pixi 3 4"'
    - regex: '4027[ADNX]|4028[AEJS]|5019D'
      model: 'One Touch Pixi 3 4.5"'
    - regex: '5017[ABDEOX]'
      model: 'One Touch Pixi 3 4.5" 4G'
    - regex: '9002X'
      model: 'One Touch Pixi 3 7"'
      device: 'phablet'
    - regex: '9007A'
      model: 'One Touch Pixi 3 7"'
      device: 'tablet'
    - regex: '9007[TX]'
      model: 'One Touch Pixi 3 7" 4G'
      device: 'tablet'
    - regex: '(?:9009G|9013[AT])'
      model: '1T'
      device: 'tablet'
    - regex: '(?!<\.)808[24](?:_(?:EEA|RU|TR))?(?:[);/ ]|$)'
      model: '1T 10'
      device: 'tablet'
    - regex: '(?!<\.)8092(?:_(?:EEA|RU|TR))?(?:[);/ ]|$)'
      model: '1T 10 Smart'
      device: 'tablet'
    - regex: '(?!<\.)8091(?:_(?:EEA|RU|TR))?(?:[);/ ]|$)'
      model: '1T 10 WiFi'
      device: 'tablet'
    - regex: '(?!<\.)8052(?:_(?:EEA|RU|TR))?(?:[);/ ]|$)'
      model: 'TEKE Mini'
      device: 'tablet'
    - regex: '(?!<\.)8051(?:_(?:EEA|RU|TR))?(?:[);/ ]|$)'
      model: 'Smart Tab 7" WiFi'
      device: 'tablet'
    - regex: '(?!<\.)805[4567](?:_(?:EEA|RU|TR))?(?:[);/ ]|$)'
      model: 'One Touch Pixi 3 7" WiFi'
      device: 'tablet'
    - regex: '9009A'
      model: '1T 7'
      device: 'tablet'
    - regex: '9309X'
      model: '1T 7" (2021)'
      device: 'tablet'
    - regex: '(?:(?!<\.)806[78]|9013X)(?:_(?:EEA|RU))?(?:[);/ ]|$)'
      model: '1T 7.0"'
      device: 'tablet'
    - regex: '9022X'
      model: 'One Touch Pixi 3 8"'
      device: 'phablet'
    - regex: '9010X'
      model: 'One Touch Pixi 3 10"'
      device: 'tablet'
    - regex: '4017[ADEFSX]'
      model: 'One Touch Pixi 4 3.5"'
    - regex: '4034[ADEFGXL]'
      model: 'One Touch Pixi 4 4"'
    - regex: '4060[SW]'
      model: 'One Touch Pixi 4 4.5"'
    - regex: '5023[EF]'
      model: 'One Touch Pixi 4 Plus Power'
    - regex: '5010[DEGSUX]'
      model: 'One Touch Pixi 4 5" 3G'
    - regex: '5041D'
      model: 'One Touch Pixi 4 5.0"'
    - regex: '5012[DFG]'
      model: 'One Touch Pixi 4 5.5" 3G'
    - regex: '5045[ADFGIJTXY]|5145A'
      model: 'One Touch Pixi 4 5" 4G'
    - regex: '5098O'
      model: 'One Touch Pixi Theatre'
    - regex: 'A501DL'
      model: 'A1'
    - regex: 'A503DL'
      model: 'A1X'
    - regex: '(?:Alcatel_)?5004R'
      model: 'Axel'
    - regex: '5046[ADIJTUY]'
      model: 'A3'
    - regex: '5011A|5049[EG]'
      model: 'A3 Plus'
    - regex: '9008[ADIJNTUX]'
      model: 'A3 XL'
    - regex: '9203A'
      model: 'A3 7" 3G'
      device: 'tablet'
    - regex: '(?:9027[QFTWX]|9032[TX])'
      model: '3T 8.0"'
      device: 'tablet'
    - regex: '9026X'
      model: 'A3 10"'
      device: 'tablet'
    - regex: '5085[BQ]'
      model: 'A5'
    - regex: '5085[ADHIJY]'
      model: 'A5 LED'
    - regex: '5085N'
      model: 'A5 Max LED'
    - regex: '5090[AIY]'
      model: 'A7'
    - regex: '5046[GS]'
      model: 'A30'
    - regex: '5049S'
      model: 'A30 Plus'
    - regex: '5049Z'
      model: 'A30 Fierce'
    - regex: '5085[GO]'
      model: 'A50'
    - regex: '5048[AYUI]'
      model: '3X (2019)'
    - regex: '5049W'
      model: 'Revvl'
    - regex: '8050[GX]'
      model: 'One Touch Pixi 4 6" 3G'
    - regex: '8050[ED]'
      model: 'One Touch Pixi 4 6" 3G Dual SIM'
    - regex: '5098S|9001[DIX]'
      model: 'One Touch Pixi 4 6" 4G'
    - regex: '9003[AX]'
      model: 'One Touch Pixi 4 7" 3G'
      device: 'tablet'
    - regex: '8063'
      model: 'One Touch Pixi 4 7" WiFi'
      device: 'tablet'
    - regex: '9024O'
      model: 'One Touch Pixi 5'
      device: 'tablet'
    - regex: 'I216[AX]'
      model: 'One Touch Pixi 7'
      device: 'tablet'
    - regex: 'I213'
      model: 'One Touch Pixi 7'
      device: 'tablet'
    - regex: '9005X'
      model: 'One Touch Pixi 8'
      device: 'tablet'
    - regex: 'P320X'
      model: 'One Touch POP 8'
      device: 'tablet'
    - regex: 'P310X'
      model: 'One Touch POP 7'
      device: 'tablet'
    - regex: 'P330X'
      model: 'One Touch POP 7S'
      device: 'tablet'
    - regex: '9020A'
      model: 'One Touch Trek HD'
      device: 'tablet'
    - regex: '7048[ASWX]'
      model: 'One Touch Go Play'
    - regex: '(?:Alcatel-)?OT-802'
      model: 'Wave'
    - regex: 'ALCATEL_ONE_TOUCH_768T'
      model: 'Island'
    - regex: '(?:TRIBE_)?3075A'
      model: 'One Touch Tribe'
    - regex: 'ALCATEL_one_touch_585'
      model: 'One Touch 585'
    - regex: 'ALCATEL_ONE_TOUCH_838'
      model: 'One Touch 838'
    - regex: 'ALCATEL_one_touch_813d'
      model: 'One Touch 813D'
    - regex: 'ALCATEL_one_touch_813'
      model: 'One Touch 813'
    - regex: 'OT871A'
      model: 'One Touch 871A'
    - regex: 'P360X'
      model: 'One Touch Pop 10'
    - regex: '(?:Alcatel[ _])?One[ _]?Touch[ _]((?:T[0-9]+|TAB[^/;]+|EVO[78](?:HD)?)) Build'
      device: 'tablet'
      model: 'One Touch $1'
    - regex: '(?:Alcatel[ _])?One[ _]?Touch([^/;]*) Build'
      model: 'One Touch$1'
    - regex: '(?:Alcatel[ _])?One[ _]?Touch([^/;\)]*)\)'
      model: 'One Touch$1'
    - regex: '5080[ADFQUX]'
      model: 'Shine Lite'
    - regex: 'TIMXL'
      model: 'TIM XL'
    - regex: '5085C'
      model: 'PulseMix'
    - regex: '4049[DEGMX]'
      model: 'U3'
    - regex: '5044[ADIKOPTY]'
      model: 'U5'
    - regex: '4047[DFXN]'
      model: 'U5 3G'
    - regex: '5047[DIUY]'
      model: 'U5 HD'
    - regex: '4047G'
      model: 'U5 Lite'
    - regex: '4047A'
      model: 'U5 Plus'
    - regex: '4044[CV]'
      model: 'Quick Flip'
    - regex: '4044O'
      model: 'Cingular Flip 2'
    - regex: '(?:Alcatel)?4044[MNT]'
      model: 'Go Flip'
    - regex: '5044[GS]'
      model: 'U50'
    - regex: '5033[DFTXY]R(?:[);/ ]|$)'
      model: '1 (2021)'
    - regex: '5033MP(?:[);/ ]|$)'
      model: '1 Ultra'
    - regex: '5033(?:[ADJEFGMOTXYQS]|[EF]P)(?:_(?:EEA|RU|TR))?(?:[);/ ]|$)'
      model: '1'
    - regex: '5009[AD]'
      model: '1C'
    - regex: '5008[ADUYT]'
      model: '1X (2019)'
    - regex: '5007[AGUS]'
      model: '1V (2020)'
    - regex: '6002[AD]'
      model: '1V (2021)'
    - regex: '5003[ADGU]'
      model: '1C (2019)'
    - regex: '5006[ADG]'
      model: '3C (2019)'
    - regex: '5024[ADFIJ]|5028Y|6025[ADH]'
      model: '1S'
    - regex: '(?:5028[AD]|5007O)'
      model: '1S (2020)'
    - regex: '5030E'
      model: '1SP (2020)'
    - regex: '5030[ADFJMU]'
      model: '1SE (2020)'
    - regex: '5001[ADJTU]'
      model: '1V'
    - regex: '5059[ADJXYZIT]'
      model: '1X'
    - regex: '5059S'
      model: 'Avalon V'
    - regex: '5060[ADJ]'
      model: '5V'
      device: 'phablet'
    - regex: '5052[ADY]|5053[ADKY]'
      model: '3'
    - regex: '5029E'
      model: '3 (2020)'
    - regex: '5029[ADFY]'
      model: '3L (2020)'
    - regex: '5032[OW]|5099[ADYUI]'
      model: '3V'
    - regex: '5026[ADJ]'
      model: '3C'
    - regex: '6027A'
      model: '3H Plus'
    - regex: '5039[DY]'
      model: '3L'
      device: 'phablet'
    - regex: '5058[AIJY]'
      model: '3X'
    - regex: '5061[AKU]'
      model: '3X (2020)'
    - regex: '5086[ADY]'
      model: '5'
    - regex: '6062W'
      model: '7'
    - regex: '8088[XQM]'
      model: '3T 10"'
      device: 'tablet'
    - regex: '8094[MTX]'
      model: '3T 10.1"'
      device: 'tablet'
    - regex: '9029[ZW]'
      model: 'Joy Tab'
      device: 'tablet'
    - regex: '9032[WZ]'
      model: 'Joy Tab 2'
      device: 'tablet'
    - regex: 'Alcatel UP'
      model: ''
    - regex: '(?:ALCATEL_)?A383G'
      model: 'Big Easy Plus'
    - regex: '5041C'
      model: 'TETRA'
    - regex: 'ALCATEL([^/;]+) Build'
      model: '$1'
    - regex: 'ALCATEL[ \-]?([^/;\)]+)'
      model: '$1'
    - regex: 'ALCATEL_([^/;\)]+)'
      model: '$1'
    - regex: 'Alc([a-z0-9]+)'
      model: '$1'

# Allview (allviewmobile.com)
Allview:
  regex: 'Allview|A4You|H1003_LTE_PRO|A5_(?:Easy(?:_TM)?|Ready(?:_TM)?|Quad|Quad_Plus_TM)|A[5-9]_Lite|A5Smiley|A6_Duo|A10_Lite_(?:2019|2GB)|A10_(?:Plus|Max)|AX2_Frenzy|AX4Nano|AX5NanoQ|AX50(?:[23]|1Q)|C6_Duo|E[23]_Living|E[23]_(?:Jump|Sign)|E4_Lite|M9_Connect|P(?:43_Easy|[5689]_Energy|6_Energy_Lite|[68]_Energy_Mini(?:_TM)?|(41|[4568])_eMagic(?:_TM)?|[589](?:_)?Life(?:_TM)?|[567]_Lite(?:_TM)?|6_plus|[45678]_Pro|7_Seon|10_Life|10_Max|10_Style|7_Xtreme|6_Qmax|4_Quad)|V(?:[1345]_Viper|1_Viper_I|2_Viper_(?:[EISX]|X_plus|Xe))|X4_Soul_Vision|X(?:[1-46]_Soul_Xtreme|[1-5]_Soul|3_Soul_Lite|[2-6]_Soul_Mini(?:_TM)?|4_Soul_Mini_S(?:_TM)?|[2-58]_Soul_Style(?:_TM)?|2_Soul_Style_Plus|2_Twin)|Viva_(?:H801|100[13]G|(?:H100[124]|H701|H802)_LTE|C701|i701G|803G)|VivaH(?:10|[78])|X7_Soul_Style|X[78]_Soul_Pro|Viva_(?:Home|i7G)|H1004_LTE'
  device: 'smartphone'
  models:
    - regex: 'A4You'
      model: 'A4 You'
    - regex: 'AX2_Frenzy'
      model: 'AX2 Frenzy'
      device: 'tablet'
    - regex: 'AX5NanoQ'
      model: 'AX5 Nano Q'
      device: 'tablet'
    - regex: 'C6_Duo'
      model: 'C6 Duo'
    - regex: 'E([23])_Living'
      model: 'E$1 Living'
    - regex: 'E([23])_Jump'
      model: 'E$1 Jump'
    - regex: 'E3_Sign'
      model: 'E3 Sign'
    - regex: 'E4_Lite'
      model: 'E4 Lite'
    - regex: 'M9_Connect'
      model: 'M9 Connect'
    - regex: 'P43_Easy'
      model: 'P43 Easy'
    - regex: 'P(41|[4568])_eMagic(?:_TM)?'
      model: 'P$1 eMagic'
    - regex: 'P([567])_Lite(?:_TM)?'
      model: 'P$1 Lite'
    - regex: 'P6_plus'
      model: 'P6 Plus'
    - regex: 'P6_Qmax'
      model: 'P6 Qmax'
    - regex: 'P([45678])_Pro'
      model: 'P$1 Pro'
    - regex: 'P4_Quad'
      model: 'P4 Quad'
    - regex: 'P9_Energy_Lite_2017'
      model: 'P9 Energy Lite (2017)'
    - regex: 'P9_Energy_S'
      model: 'P9 Energy S'
    - regex: 'P([69])_Energy_Lite'
      model: 'P$1 Energy Lite'
    - regex: 'P8_Energy_PRO'
      model: 'P8 Energy Pro'
    - regex: 'P([689])_Energy_mini(?:_TM)?'
      model: 'P$1 Energy Mini'
    - regex: 'P([5689])_Energy'
      model: 'P$1 Energy'
    - regex: 'P7_Seon'
      model: 'P7 Seon'
    - regex: 'P7_Xtreme'
      model: 'P7 Xtreme'
    - regex: 'P([589])(?:_)?Life(?:_TM)?'
      model: 'P$1 Life'
    - regex: 'P10_Life'
      model: 'P10 Life'
    - regex: 'P10_Max'
      model: 'P10 Max'
    - regex: 'P10_Style'
      model: 'P10 Style'
    - regex: 'V([12])_Viper_I4G(?:_TM)?'
      model: 'V$1 Viper I 4G'
    - regex: 'V1_Viper_I'
      model: 'V1 Viper I'
    - regex: 'V4_Viper_PRO'
      model: 'V4 Viper Pro'
    - regex: 'V([1345])_Viper'
      model: 'V$1 Viper'
    - regex: 'V2_Viper_X_plus'
      model: 'V2 Viper X Plus'
    - regex: 'V2_Viper_(E|I|S|X(?:e)?)'
      model: 'V2 Viper $1'
    - regex: 'X4_Soul_Vision'
      model: 'X4 Soul Vision'
    - regex: 'X7_Soul_Style'
      model: 'X7 Soul Style'
    - regex: 'X8_Soul_Pro'
      model: 'X8 Soul Pro'
    - regex: 'X([1246])_Soul_Xtreme'
      model: 'X$1 Soul Xtreme'
    - regex: 'X4_Soul_Infinity_(L|N|S|Z)'
      model: 'X4 Soul Infinity $1'
    - regex: 'X([34])_Soul_Lite'
      model: 'X$1 Soul Lite'
    - regex: 'X4_Soul_Mini_S(?:_TM)?'
      model: 'X4 Soul Mini S'
    - regex: 'X([23456])_Soul_Mini(?:_TM)?'
      model: 'X$1 Soul Mini'
    - regex: 'X3_Soul_PLUS'
      model: 'X3 Soul Plus'
    - regex: 'X([357])_Soul_Pro'
      model: 'X$1 Soul Pro'
    - regex: 'X2_Soul_Style_Plus'
      model: 'X2 Soul Style Plus'
    - regex: 'X([23458])_Soul_Style(?:_TM)?'
      model: 'X$1 Soul Style'
    - regex: 'X([12345])_Soul'
      model: 'X$1 Soul'
    - regex: 'X2_Twin'
      model: 'X2 Twin'
    - regex: 'A5_Easy(?:_TM)?'
      model: 'A5 Easy'
    - regex: 'A([56789])_Lite'
      model: 'A$1 Lite'
    - regex: 'A5_Ready(?:_TM)?'
      model: 'A5 Ready'
    - regex: 'A5Smiley'
      model: 'A5 Smiley'
    - regex: 'A5_Quad_Plus_TM'
      model: 'A5 Quad Plus'
    - regex: 'A5_Quad'
      model: 'A5 Quad'
    - regex: 'A6_Duo'
      model: 'A6 Duo'
    - regex: 'A10_Lite_2019'
      model: 'A10 Lite (2019)'
    - regex: 'A10_Lite_2GB'
      model: 'A10 Lite'
    - regex: 'A10_Plus'
      model: 'A10 Plus'
    - regex: 'A10_Max'
      model: 'A10 Max'
    - regex: 'Impera S'
      model: 'Impera S'
    - regex: 'ALLVIEW P4i'
      model: 'AllDro P4'
    - regex: 'Allview_P2'
      model: 'AllDro'

    - regex: 'Viva_(i7G)'
      device: 'tablet'
      model: 'Viva $1'

    - regex: 'Viva_Home'
      device: 'tv'
      model: 'Viva Home'

    # explicit tablet models
    - regex: 'AllviewCityPlus'
      device: 'tablet'
      model: 'City Plus'
    - regex: 'AllviewCity'
      device: 'tablet'
      model: 'City'
    - regex: 'AllviewAX2Frenzy'
      device: 'tablet'
      model: 'AX2 Frenzy'
    - regex: 'Allview2SpeedDuo'
      device: 'tablet'
      model: 'Alldro 2 Speed Duo'
    - regex: 'Allview3SpeedQuad'
      device: 'tablet'
      model: 'Alldro 3 Speed Quad'
    - regex: ' H1003_LTE_PRO([13])'
      device: 'tablet'
      model: 'Viva H1003 LTE Pro $1'
    - regex: 'H1003_LTE_PRO'
      device: 'tablet'
      model: 'Viva H1003 LTE Pro'
    - regex: 'Viva_1003G_Lite'
      device: 'tablet'
      model: 'Viva 1003G Lite'
    - regex: 'H1004_LTE'
      device: 'tablet'
      model: 'Viva H1004 LTE'
    - regex: 'Viva[_ ]?H([78]|10)[_ ]?LTE'
      device: 'tablet'
      model: 'Viva H$1 LTE'
    - regex: 'Viva_?((?:H80[12]|H100[12]|H701)_LTE|C701|i701G|803G|H10|H7|H801|100[13]G)'
      device: 'tablet'
      model: 'Viva $1'
    - regex: 'ALLVIEW ?SPEEDI'
      device: 'tablet'
      model: 'Speed I'
    - regex: 'ALLVIEW ?SPEED'
      device: 'tablet'
      model: 'Speed'
    - regex: 'ALLVIEWSPEED'
      device: 'tablet'
      model: 'Speed'
    - regex: 'AX4Nano[_ ]plus'
      device: 'tablet'
      model: 'AX4 Nano Plus'
    - regex: 'AX4Nano'
      device: 'tablet'
      model: 'AX4 Nano'
    - regex: 'ALLVIEW_TX1_Quasar'
      device: 'tablet'
      model: 'TX1 Quasar'
    - regex: 'AX(50[23]|501Q)'
      device: 'tablet'
      model: 'AX$1'

    - regex: 'Allview[ _-]([^;/]+) Build'
      model: '$1'
    - regex: 'Allview[ _-]([^;/]+)(?:[;/)]|$)'
      model: '$1'

# Allwinner
Allwinner:
  regex: '(?:QUAD-CORE (?:T3 p1|A64 p3|A33 y3|T3 K2001M|T3 k2001o|T3 k2001-nwd)|ZY-07B|UltraOcta-T8|OCTA-CORE T8|OCTOPUS-CORE T8|QUAD-CORE T3 p3|QuadCore-R16)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'QUAD-CORE A64 p3'
      model: 'A64 QUAD-CORE p3'
    - regex: 'QUAD-CORE A33 y3'
      model: 'A33 QUAD-CORE y3'
    - regex: 'ZY-07B'
      model: 'ZY-07B'
    - regex: 'UltraOcta-T8'
      device: 'car browser'
      model: 'Ultra Octa T8'
    - regex: 'QUAD-CORE T3 K2001o'
      device: 'car browser'
      model: 'QUAD-CORE T3 K2001O'
    - regex: 'QUAD-CORE T3 K(2001M?)'
      device: 'car browser'
      model: 'QUAD-CORE T3 K$1'
    - regex: 'QUAD-CORE T3 p([13])'
      device: 'car browser'
      model: 'QUAD-CORE T3 P$1'
    - regex: 'OCTA-CORE T8'
      device: 'car browser'
      model: 'OCTA-CORE T8'
    - regex: 'OCTOPUS-CORE T8'
      device: 'car browser'
      model: 'OCTOPUS-CORE T8'
    - regex: 'QuadCore-R16'
      device: 'car browser'
      model: 'QUAD-CORE R16'

# altron
altron:
  regex: '(AL-555|GI-626|OB[_-](?:421|728|627))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'AL-555'
      model: 'AL-555'
    - regex: 'OB[_-](421|728|627)'
      model: 'OB-$1'
    - regex: 'GI-626'
      device: 'phablet'
      model: 'GI-626'

# AMGOO (amgoo.com)
AMGOO:
  regex: 'AM(350|355|40[257]|41[025]|450|50[689]|52[037]|51[58]|53[05])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'AM350'
      model: 'Jack Pro'
    - regex: 'AM(355|407)'
      model: 'Tigo'
    - regex: 'AM402'
      model: 'Pronto'
    - regex: 'AM410'
      model: 'Unico'
    - regex: 'AM450'
      model: 'Swift'
    - regex: 'AM508'
      model: 'Fuego'
    - regex: 'AM509'
      model: 'Uno'
    - regex: 'AM515'
      model: 'D1'
    - regex: 'AM518'
      model: 'C1'
    - regex: 'AM520'
      model: 'Pro'
    - regex: 'AM523'
      model: 'Plus'
    - regex: 'AM527'
      model: 'Geo'
    - regex: 'AM530'
      model: 'A1'
    - regex: 'AM535'
      model: 'P1'
    - regex: 'AM([0-9]{3})'
      model: 'AM$1'

# Amoi or ami (amimobile.tech)
Amoi:
  regex: 'Amoi|(?:A862W|Clever[ -]?(?:Gem S52|Gleam S45|Pad P7|Wave S50|Touch S46|JOY S40|Lite S41))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    # explicit smartphone tablets
    - regex: 'Clever Pad P7'
      model: 'Clever Pad P7'
    # explicit smartphone models
    - regex: 'A862W'
      model: 'A862W'
    - regex: 'CLEVER JOY S40'
      model: 'Clever Joy S40'
    - regex: 'Clever[ -]?(Gleam S45|Gem S52|Wave S50|Touch S46|Lite S41)'
      model: 'Clever $1'
    # explicit feature models
    - regex: 'Amoi[-_ /](CA6)'
      device: 'feature phone'
      model: '$1'

    - regex: 'Amoi[-_ /]([a-z0-9]+)'
      model: '$1'
    - regex: 'Amoisonic-([a-z0-9]+)'
      model: '$1'

# Ainol
Ainol:
  regex: 'Numy|novo[0-9]|Novo 10 Hero|AX10PRO|NUMY3GAX9|NOVO10 Spark|Aurora-II|Rainbow(?:II)? 3G'
  device: 'tablet'
  models:
    - regex: 'Numy 3G AX1'
      model: 'Novo 7 Numy AX1 3G'
    - regex: 'Numy[_ ]?3G[_ ]?Sword'
      model: 'Numy 3G Sword'
    - regex: 'NOVO10 Spark'
      model: 'Novo 10 Spark'
    - regex: 'AX10PRO'
      model: 'Numy AX10 Pro'
    - regex: 'Numy_3G_AX3'
      model: 'Numy AX3 Sword'
    - regex: 'Numy3GTalos'
      model: 'Numy 3G Talos'
    - regex: 'Numy_3G_BW1'
      model: 'Numy 3G Talos 2'
    - regex: 'NUMY3GAX9(?:[);/ ]|$)'
      model: 'Numy 3G AX9'
    - regex: 'Numy3G_AX10(?:[);/ ]|$)'
      model: 'Numy 3G AX10'
    - regex: '(Novo 10 Hero QuadCore)'
      model: '$1'
    - regex: 'RainbowII 3G'
      model: 'Numy Rainbow-II'
    - regex: 'Rainbow 3G'
      model: 'Numy Rainbow'
    - regex: 'Aurora-II'
      model: 'Novo 7 Aurora II'
    - regex: 'Novo7Fire'
      model: 'Novo 7 Fire'
    - regex: 'Novo7 ?Flame(?:[);/ ]|$)'
      model: 'Novo 7 Flame'
    - regex: 'NOVO7(?:[);/ ]|$)'
      model: 'Novo 7'
    - regex: 'Numy[ _]([^;/]+) Build'
      model: 'Numy $1'
    - regex: 'Novo([0-9]+)[ \-]([^;/]+) Build'
      model: 'Novo $1 $2'

# Archos (www.archos.com)
Archos:
  regex: '(?:YL-)?Archos|(?:A50TI|AC101BHE|AC50BHE|AC45NE|Logic Instrument Fieldbook F1B|X67 5G)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Archos (Oxygen (?:63|57|68XL))(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Logic Instrument Fieldbook F1B'
      model: 'Logic Instrument Fieldbook F1B'
    - regex: 'Archos 55 diamond Selfie'
      model: '55 Diamond Selfie'
    - regex: 'A50TI(?:[);/ ]|$)'
      model: '50 Titanium 4G'
    - regex: '40C TIv2'
      model: '40c Titanium v2'
    - regex: '45B Titanium'
      model: '45b Titanium'
    - regex: 'AC45NE(?:[);/ ]|$)'
      model: '45 Neon'
    - regex: 'X67 5G(?:[);/ ]|$)'
      model: 'X67 5G'
    - regex: 'Archos ?5(?:[);/ ]|$)'
      device: 'tablet'
      model: '5'
    - regex: 'AC101BHE(?:[);/ ]|$)'
      device: 'tablet'
      model: '101B Helium 4G'
    - regex: 'T96 WIFI'
      device: 'tablet'
      model: 'T96 WiFi'
    - regex: 'AC50BHE(?:[);/ ]|$)'
      model: '50B Helium 4G'
    - regex: 'Archos 80 Oxygen(?:[);/ ]|$)'
      device: 'tablet'
      model: '80 Oxygen'
    - regex: 'Archos 101 Oxygen(?:[);/ ]|$)'
      device: 'tablet'
      model: '101 Oxygen 4G'
    - regex: 'Archos Access 70 3G(?:[);/ ]|$)'
      device: 'tablet'
      model: '70 Access 3G'
    - regex: 'Archos Oxygen 101S ARDOIZ(?:[);/ ]|$)'
      device: 'tablet'
      model: '101s Oxygen Ardoiz'
    - regex: 'Archos Oxygen 101S(?:[);/ ]|$)'
      device: 'tablet'
      model: '101s Oxygen'
    - regex: 'Archos T ?101 4G(?:[);/ ]|$)'
      device: 'tablet'
      model: 'T101 4G'
    - regex: 'Archos Core (101) 3G Ultra'
      device: 'tablet'
      model: 'Core $1 3G Ultra'
    - regex: 'Archos Core (70|101) 3G'
      device: 'tablet'
      model: 'Core $1 3G'
    - regex: 'Archos Hello 7(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Hello 7'
    - regex: 'Archos Sense 101 X(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Sense 101 X'
    - regex: '(?:YL-)?Archos ([^/;]*(?:PAD)[^/;]*) Build'
      device: 'tablet'
      model: '$1'
    - regex: 'Archos ((?:[789]|10)[0-9]?[a-z]* ?(?:G9|Access|Magnus|G10|Helium|Titanium|Copper|Cobalt|Platini?um|Xenon|Carbon|Neon|XS|IT)[^/);]*)(?: Build|[;)])'
      device: 'tablet'
      model: '$1'
    - regex: '(?:YL-)?Archos ([^/);]+)(?: Build|[;)])'
      model: '$1'

# Axxion
Axxion:
  regex: 'Axxion ATAB-[0-9]+(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'Axxion ATAB-([0-9]+)(?:[);/ ]|$)'
      model: 'ATAB-$1'

# Meu
MEU:
  regex: 'MEU ([a-z0-9]+) Build'
  device: 'smartphone'
  model: '$1'

# Arnova
Arnova:
  regex: 'arnova|ARCHM901|AN7CG2|AN7IG3|AN7G2(DTE|I)?|AN7[BCDFH]?G3|A80KSC|AN8G2|AN8[BC]?G3|AN9G2I?|AN9G3|A101[BC](?!M)|AN10G2|AN10BG2(DT|I)?|AN10BG3(DT)?|AN10[CD]G3'
  device: 'tablet'
  models:
    # explicit tablet models
    - regex: 'ARCHM901'
      model: 'M901'
    - regex: 'AN7CG2'
      model: '7c G2'
    - regex: 'AN7G2I|AN7G2|AN7G2DTE'
      model: '7 G2'
    - regex: 'AN7G3'
      model: '7 G3'
    - regex: 'AN7IG3'
      model: '7i G3'
    - regex: 'AN7BG3'
      model: '7b G3'
    - regex: 'AN7CG3'
      model: '7c G3'
    - regex: 'AN7DG3-CP'
      model: 'Childpad'
    - regex: 'AN7DG3'
      model: '7d G3'
    - regex: 'AN7FG3'
      model: '7f G3'
    - regex: 'AN7HG3'
      model: '7h G3'
    - regex: 'A80KSC'
      model: '8'
    - regex: 'AN8G2'
      model: '8 G2'
    - regex: 'AN8G3'
      model: '8 G3'
    - regex: 'AN8BG3'
      model: '8b G3'
    - regex: 'AN8CG3'
      model: '8c G3'
    - regex: 'AN9G2I'
      model: '9i G2'
    - regex: 'AN9G2'
      model: '9 G2'
    - regex: 'AN9G3'
      model: '9 G3'
    - regex: 'A101B2|A101C|AN10G2'
      model: '10 G2'
    - regex: 'A101B'
      model: '10'
    - regex: 'AN10BG2|AN10BG2DT|AN10BG2I'
      model: '10b G2'
    - regex: 'AN10BG3|AN10BG3DT|AN10BG3-LZ'
      model: '10b G3'
    - regex: 'AN10CG3'
      model: '10c G3'
    - regex: 'AN10DG3'
      model: '10d G3'
    - regex: 'ARNOVA 90G3'
      model: '90 G3'
    - regex: 'ARNOVA 90 G4'
      model: '90 G4'
    - regex: 'ARNOVA 97G4'
      model: '97 G4'
    - regex: 'ARNOVA 101 G4'
      model: '101 G4'

    - regex: 'Arnova ([^/;]*) Build'
      model: '$1'

# ARRIS
ARRIS:
  regex: 'ARRIS'
  device: 'tv'
  models:
    - regex: 'ARRIS[,;] ([^),;/]+)'
      model: '$1'

# Ask
Ask:
  regex: 'ASK[ _]'
  device: 'smartphone'
  models:
    - regex: 'ASK[ _]791SP[ _]3G'
      model: '791SP 3G'
      device: 'tablet'
    - regex: 'ASK[_ ]([^/;]*) Build'
      model: '$1'

# ANS
ANS:
  regex: 'ANS/|UL40 Build'
  device: 'smartphone'
  models:
    - regex: 'UL40 Build'
      model: 'UL40'
    - regex: 'ANS/L51'
      model: 'L51'

# AOC (https://www.aoc.com/)
AOC:
  regex: 'AOC,|(?:Q10107L-ME)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: '(Q10107L-ME)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: '(LE(?:32|43)S5970(?:s)?-20|LE55U7970-30|LE43S5977-20|U60856)'
      model: '$1'

# Assistant
Assistant:
  regex: '(AS[-_](?:50[123]|543[1-6]|44[12]1|541[12]|54[23]1|6431|[46]01L)|AP-(?:109|115G|721N|753G|7[25]7G|10[68]|107G|110N|941|719))[;/)_ ]'
  device: 'smartphone'
  models:
    - regex: 'AS[-_]401L(?:[);/ ]|$)'
      model: 'Asper'
    - regex: 'AS-5432(?:[);/ ]|$)'
      model: 'Agio'
    - regex: 'AS[-_](?:5434|501)(?:[);/ ]|$)'
      model: 'Club'
    - regex: 'AS_601L(?:[);/ ]|$)'
      model: 'AS-601L'
    - regex: 'AS-5433 Secret(?:[);/ ]|$)'
      model: 'Secret'
    - regex: 'AS-5433(?:[);/ ]|$)'
      model: 'Max Secret'
    - regex: 'AS-5421(?:[);/ ]|$)'
      model: 'Surf'
    - regex: 'AS-44[12]1(?:[);/ ]|$)'
      model: 'Unami'
    - regex: 'AS-5431(?:[);/ ]|$)'
      model: 'Prima'
    - regex: 'AS-502(?:[);/ ]|$)'
      model: 'Shot'
    - regex: 'AS-503(?:[);/ ]|$)'
      model: 'Target'
    - regex: 'AS-5435(?:[);/ ]|$)'
      model: 'Shine'
    - regex: 'AS-5436[ _]'
      model: 'Grid'
    - regex: 'AS-6431(?:[);/ ]|$)'
      model: 'Rider'
    - regex: 'AS-5411[_ ]'
      model: 'Max Ritm'
    - regex: 'AS-5412 Max(?:[);/ ]|$)'
      model: 'AS-5412 Max'
    - regex: 'AP-721N(?:[);/ ]|$)'
      model: 'AP-721N Force'
      device: 'tablet'
    - regex: 'AP-941(?:[);/ ]|$)'
      model: 'AP-941'
      device: 'tablet'
    - regex: 'AP-108(?:[);/ ]|$)'
      model: 'Cetus'
      device: 'tablet'
    - regex: 'AP-106(?:[);/ ]|$)'
      model: 'AP-106 Force'
      device: 'tablet'
    - regex: '(AP-(?:109|115G|7[25]7G|753G|107G|110N|719))(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'

    - regex: '(AS-(?:\d+))(?:[);/ ]|$)'
      model: '$1'

# Ark (Ark Electronic Technology)
Ark:
  regex: '(ARK[_ -])?Benefit[_ -]([^/;]*)(?: Build|\))|Impulse[ _]P[12]|(?:EDGE A5HD|Elf_S8|ICON (R40\+|R45)|Wizard_[12]|UKOZI U[56]|L925)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:ARK[_ -])?Benefit[_ -]([^/;]*)(?: Build|\))'
      model: 'Benefit $1'
    - regex: 'Impulse[ _]P1\+'
      model: 'Impulse P1 Plus'
    - regex: 'Impulse[ _](P[12])'
      model: 'Impulse $1'
    - regex: 'EDGE (A5HD)'
      model: 'Edge $1'
    - regex: 'ICON (R40\+|R45)'
      model: 'Icon $1'
    - regex: 'Wizard_([12])'
      model: 'Wizard $1'
    - regex: 'Elf_S8(?:[);/ ]|$)'
      model: 'Elf S8'
    - regex: 'UKOZI U([56])(?:[);/ ]|$)'
      model: 'Ukozi U$1'
    - regex: 'L925(?:[);/ ]|$)'
      model: 'Hercls L925'

# Garmin-Asus
Garmin-Asus:
  regex: 'Garmin-Asus|Garminfone'
  device: 'smartphone'
  models:
    - regex: 'Garminfone[ \-_]([^;/]*)Build'
      model: 'Garminfone $1'
    - regex: 'Garmin-Asus[ \-_]([^;/]+)Build'
      model: '$1'
    - regex: 'Garmin-Asus[ \-_]([^;/]+)[\)/]'
      model: '$1'

# Asus
Asus:
  regex: 'Asus(?! Update)|Transformer|ZenFone Max|MeMOPad 10|TF300T|Slider SL101|PadFone|ME302(?:C|KL)|ME301T|ME371MG|ME17(?:1|2V|3X)|(?:K0[01][0-9a-z]|(?:P(?:00[128ACIL]|01[MTVWYZ]|01MA|01T_1|02[13478])(?: Build|\))|X015D|X018D|X003|X00[7ABT]D|Z00D|Z00[MTY]D|Z01[7FGHKMR]D)|K01[579N]|AST21)(?:[);/ ]|$)|G55[023]KL|ZB(631|602|633|55[135]|50[01])KL|ZC(55[134]|520|600)KL|ZA550KL|ZE(5[02]0|620|55[2345])KL|ZD55[23]KL|ZS6(?:61|7[02136])KS|ZS(6[0236]0|55[10])KL|ZS590KS|ZB(500KG|601KL)|MeMo Pad FHD 10 LTE|Z00[SV]D|P01Y_S|Zenfone 5Z?|AOSP on Duma|Tinker Board(?: S)?|TX201LA'
  device: 'smartphone'
  models:
    # explicit tablet models
    - regex: 'XPad 10 ?LTE(?:[);/ ]|$)'
      model: 'XPad 10 LTE'
      device: 'tablet'
    - regex: 'ME171(?:[);/ ]|$)'
      model: 'Eee Pad MeMO 171'
      device: 'tablet'
    - regex: 'ASUS Z906(?:[);/ ]|$)'
      model: 'Z906 10.1"'
      device: 'tablet'
    - regex: 'ME172V'
      model: 'MeMO Pad'
      device: 'tablet'
    - regex: 'ME302C(?:[);/ ]|$)'
      model: 'MeMO Pad FHD 10'
      device: 'tablet'
    - regex: '(?:ME302KL|MeMOPad 10FHD LTE|MeMo Pad FHD 10 LTE|AOSP on Duma)(?:[);/ ]|$)'
      model: 'MeMO Pad FHD 10 LTE'
      device: 'tablet'
    - regex: 'ME301T(?:[);/ ]|$)'
      model: 'MeMO Pad Smart 10'
      device: 'tablet'
    - regex: 'Z101 Prime(?:[);/ ]|$)'
      model: 'Z101 Prime'
      device: 'tablet'
    - regex: 'Z101(?:[);/ ]|$)'
      model: 'Z101'
      device: 'tablet'
    - regex: 'X Pad 10 LTE(?:[);/ ]|$)'
      model: 'X Pad 10 LTE'
      device: 'tablet'
    - regex: '(?:K01[3A7]|K007|K00R)(?:[);/ ]|$)|MeMO Pad 7'
      model: 'MeMO Pad 7'
      device: 'tablet'
    - regex: 'K01E(?:[);/ ]|$)'
      model: 'MeMO Pad 10 ME103K'
      device: 'tablet'
    - regex: 'K00U|ME173X(?:[);/ ]|$)'
      model: 'MeMO Pad HD 7'
      device: 'tablet'
    - regex: '(?:K01[15]|K00L|AST21)(?:[);/ ]|$)'
      model: 'MeMO Pad 8'
      device: 'tablet'
    - regex: 'K014(?:[);/ ]|$)'
      model: 'MeMO Pad 8.9'
      device: 'tablet'
    - regex: 'K00S(?:[);/ ]|$)'
      model: 'MeMO Pad HD 7 Dual SIM'
      device: 'tablet'
    - regex: 'K00F(?:[);/ ]|$)'
      model: 'MeMO Pad 10'
      device: 'tablet'
    - regex: 'K00C(?:[);/ ]|$)'
      model: 'Transformer Pad TF701T'
      device: 'tablet'
    - regex: 'K010(?:[);/ ]|$)'
      model: 'Transformer Pad TF103C'
      device: 'tablet'
    - regex: 'K018(?:[);/ ]|$)'
      model: 'Transformer Pad TF103CG'
      device: 'tablet'
    - regex: 'TF300T(?:[);/ ]|$)'
      model: 'Transformer Pad TF300T'
      device: 'tablet'
    - regex: 'K01B(?:[);/ ]|$)'
      model: 'Transformer Pad TF303K'
      device: 'tablet'
    - regex: 'TX201LA(?:[);/ ]|$)'
      model: 'Transformer Book Trio'
      device: 'tablet'
    - regex: 'Slider SL101'
      model: 'Eee Pad Slider SL101'
      device: 'tablet'
    - regex: 'P01[YZ](?:_S)?'
      model: 'ZenPad C 7.0'
      device: 'tablet'
    - regex: 'P008 Build'
      model: 'ZenPad Z8'
      device: 'tablet'
    - regex: 'P001'
      model: 'ZenPad Z10'
      device: 'tablet'
    - regex: '(?:ASUS_)?P00J'
      model: 'ZenPad Z8s'
      device: 'tablet'
    - regex: 'P01[VW]|P002'
      model: 'ZenPad 7.0'
      device: 'tablet'
    - regex: '(?:P024|P00A)(?:[);/ ]|$)'
      model: 'ZenPad 8.0'
      device: 'tablet'
    - regex: 'P01MA?(?:[);/ ]|$)'
      model: 'ZenPad S 8.0'
      device: 'tablet'
    - regex: 'ASUS_(w706)(?:[);/ ]|$)'
      model: '$1'
      device: 'tablet'
    - regex: 'P027'
      model: 'ZenPad 3S 10'
      device: 'tablet'
    - regex: '(?:ASUS_)?P00I'
      model: 'ZenPad 3S 10 LTE'
      device: 'tablet'
    - regex: '(?:ASUS_)?P00C|P02[138]|P00L|P01T_1'
      model: 'ZenPad 10'
      device: 'tablet'
    - regex: 'ASUS Tablet P1801-T'
      model: 'Transformer AiO P1801 18.4"'
      device: 'tablet'
    - regex: 'ASUS TAB A8'
      model: 'TAB A8'
      device: 'tablet'

    # explicit phablet models
    - regex: 'ME371MG(?:[);/ ]|$)'
      model: 'Fonepad'
      device: 'phablet'
    - regex: 'K00G(?:[);/ ]|$)'
      model: 'Fonepad Note 6'
      device: 'phablet'
    - regex: '(?:K01[2N9]|K00E)(?:[);/ ]|$)'
      model: 'Fonepad 7'
      device: 'phablet'
    - regex: 'K00Z(?:[);/ ]|$)'
      model: 'Fonepad 7 Dual SIM'
      device: 'phablet'
    - regex: 'K016(?:[);/ ]|$)'
      model: 'Fonepad 8'
      device: 'phablet'

    # explicit smartphone models
    - regex: '(?:ASUS_)?A001D|ZB634KL'
      model: 'ZenFone Max Shot'
    - regex: '(?:ASUS_)?T00N'
      model: 'PadFone S'
    - regex: '(?:ASUS_)?T00[CE]'
      model: 'PadFone Mini'
    - regex: '(?:ASUS[-_])?T00T'
      model: 'PadFone X Mini'
    - regex: 'PadFone T008'
      model: 'PadFone E'
    - regex: 'PadFone T004'
      model: 'PadFone Infinity'
    - regex: '(?:ASUS_)?A002(A)?'
      model: 'ZenFone AR'
    - regex: '(?:ASUS_)?(?:I006D|ZS590KS)'
      model: 'ZenFone 8'
    - regex: '(?:ASUS_)?(?:I004D|ZS672KS)'
      model: 'ZenFone 8 Flip'
    - regex: '(?:ASUS_)?(?:AI2202)'
      model: 'ZenFone 9'
    - regex: '(?:ASUS_)?A006'
      model: 'ZenFone V'
    - regex: '(?:ASUS_)?A009'
      model: 'ZenFone V Live'
    - regex: '(?:ASUS_)?Z007'
      model: 'ZenFone C'
    - regex: '(?:ASUS_)?(X00P[SD]|ZB555KL)'
      model: 'ZenFone Max M1'
    - regex: '(?:ASUS_)?(?:ZB60[12]KL)|ZenFone Max Pro M1'
      model: 'ZenFone Max Pro M1'
    - regex: '(?:ASUS[_-])?(X01([AB]D)|ZB633KL)(?:[);/ ]|$)'
      model: 'ZenFone Max M2'
    - regex: '(?:ASUS_)?(?:Z00[AD]|Z008D|Z008|Z00AD[AB]?|ZE551ML)'
      model: 'ZenFone 2'
    - regex: '(?:ASUS_)?(?:ZenFone 2E)'
      model: 'ZenFone 2E'
    - regex: '(?:ASUS_)?(?:A007|Z00YD|ZA550KL|ZB553KL|ZB501KL)(?:[);/ ]|$)'
      model: 'ZenFone Live'
    - regex: '(?:ASUS_)?(?:X00RD|G552KL)'
      model: 'ZenFone Live L1'
    - regex: 'G553KL'
      model: 'ZenFone Lite L1'
    - regex: '(?:ASUS_)?(?:Z00[ERLMTW]D|Z011D|ZE500KL)'
      model: 'ZenFone 2 Laser'
    - regex: '(?:ASUS_)?(?:T00[IQ1]|Z01KD)'
      model: 'ZenFone 4'
    - regex: '(?:ASUS_)?T00P'
      model: 'ZenFone 5 LTE'
    - regex: '(?:ASUS_)?(?:T00K|X017DA|X017D|ZC600KL)'
      model: 'ZenFone 5 Lite'
    - regex: '(?:ASUS_)?(?:Z01RD|ZS620KL)|Zenfone 5Z'
      model: 'ZenFone 5Z'
    - regex: '(?:ASUS_)?(?:T00[JF]|X00QD|X00QSA|ZE620KL)|Zenfone 5'
      model: 'ZenFone 5'
    - regex: '(?:ASUS_)?(?:T00G|Z002|ZS630KL|I01WD[X]?)'
      model: 'ZenFone 6'
    - regex: '(?:ASUS_)?ZS671KS'
      model: 'ZenFone 7 Pro'
    - regex: '(?:ASUS_)?(?:ZS670KS|I002D)(?:[);/ ]|$)'
      model: 'ZenFone 7'
    - regex: '(?:ASUS_)?Z010D'
      model: 'ZenFone Max'
    - regex: '(?:ASUS_)?X018D'
      model: 'ZenFone Max Plus M1'
    - regex: '(?:ASUS_)?X00TD?'
      model: 'ZenFone Max Pro M1'
    - regex: '(?:ASUS_)?(?:X01BDA|ZB631KL|Zenfone Max Pro M2)'
      model: 'ZenFone Max Pro M2'
    - regex: '(?:ASUS_)?X014D'
      model: 'ZenFone Go Plus'
    - regex: '(?:ASUS_)?(L001|X00[7AB]D|X009[DB][DA]|X009D|Z00[SV]D|ZB500K[LG]|ZB551KL)'
      model: 'ZenFone Go'
    - regex: '(?:ASUS_)?(?:G550KL|X013DB)'
      model: 'ZenFone Go TV'
    - regex: '(?:ASUS_)?X013D'
      model: 'ZenFone Go Life'
    - regex: '(?:ASUS_)?Z00[SV]D' #ZC500TG
      model: 'ZenFone Go'
    - regex: '(?:ASUS_)?(X00[23])'
      model: 'ZenFone Pegasus'
    - regex: '(?:ASUS_)?X005'
      model: 'ZenFone Pegasus 5000'
    - regex: '(?:ASUS_)?X550'
      model: 'ZenFone Pegasus 2 Plus'
    - regex: '(?:ASUS_)?(X00GD)'
      model: 'ZenFone Pegasus 3S Max'
    - regex: '(?:ASUS_)?(?:X00D[DS]|X008D)|ZC553KL'
      model: 'ZenFone 3 Max'
    - regex: '(?:ASUS_)?(X008)'
      model: 'ZenFone 3 Pegasus'
    - regex: '(?:ASUS_)?(ZE553KL|Z01HDA?)'
      model: 'ZenFone 3 Zoom'
    - regex: '(?:ASUS_)?ZS550KL'
      model: 'ZenFone 3 Deluxe'
    - regex: '(?:ASUS_)?Z00UD'
      model: 'ZenFone Selfie'
    - regex: '(?:ASUS_)?(Z016[DS]|Z01FD)'
      model: 'ZenFone 3 Deluxe'
    - regex: '(?:ASUS_)?Z(?:017DA|E520KL|E552KL|017D|012(?:DC?|S))'
      model: 'ZenFone 3'
    - regex: '(?:ASUS_)?Z01B[DS]|ZC551KL'
      model: 'ZenFone 3 Laser'
    - regex: '(?:ASUS_)?A001'
      model: 'ZenFone 3 Ultra'
    - regex: '(?:ASUS_)?(?:ZD552KL|Z01MDA?)(?:[);/ ]|$)'
      model: 'ZenFone 4 Selfie Pro'
    - regex: '(?:ASUS_)?(?:X00LDA|ZD553KL)'
      model: 'ZenFone 4 Selfie'
    - regex: '(?:ASUS_)?(?:X00LD|Z01KS|Z01KDA|ZE554KL)'
      model: 'ZenFone 4'
    - regex: '(?:ASUS_)?X00(?:[HIK]D|IS)|ZC554KL|ZC520KL'
      model: 'ZenFone 4 Max'
    - regex: '(?:ASUS_)?X015D'
      model: 'ZenFone 4 Max Plus'
    - regex: '(?:ASUS_)?(:?Z01G[DS]|ZS551KL)'
      model: 'ZenFone 4 Pro'
    - regex: '(?:ASUS_)?Z00XS'
      model: 'ZenFone Zoom'
    - regex: '(?:ASUS_)?(?:Z01QD|ZS600KL)'
      model: 'ROG Phone'
    - regex: '(?:ASUS_)?(?:I001D[ABCE]?|ZS660KL)'
      model: 'ROG Phone 2'
    - regex: '(?:ASUS_)?(?:I003DD?|ZS661KS)'
      model: 'ROG Phone 3'
    - regex: '(?:ASUS_)?(?:I005D[AC]?|ZS67[36]KS|ROG Phone 5)'
      model: 'ROG Phone 5'
    - regex: '(?:ASUS_)?(?:AI2201)'
      model: 'ROG Phone 6'
    - regex: '(?:ASUS_)?(?:AI2203)'
      model: 'ROG Phone 6D'

    # desktop detections
    - regex: 'ZN220IC'
      device: 'desktop'
      model: 'Zen AiO ZN220IC'

    # peripheral detections
    - regex: 'Tinker Board( S)?'
      device: 'peripheral'
      model: 'Tinker Board$1'

    # watch detections
    - regex: '(?:ASUS_)?ZenWatch( 2)?'
      device: 'wearable'
      model: 'ZenWatch$1'

    # general detections
    - regex: 'Asus(?:-|;)?([a-z0-9]+)'
      model: '$1'
    - regex: '(PadFone(?: [^;/]+)?) Build'
      model: '$1'
    - regex: '(PadFone(?: [a-z0-9]+)?)'
      model: '$1'
    - regex: '(?:Asus|Transformer) ((?:Pad |Prime )?TF[0-9a-z]+)'
      device: 'tablet'
      model: 'Transformer $1'
    - regex: 'Chromebook Flip (C10[01]PA|C302)'
      device: 'desktop'
      model: 'Chromebook Flip $1'

# Audiovox
Audiovox:
  regex: 'Audiovox|CDM|UTS(?:TARCOM)?\-|audio(?!book)[a-z0-9\-]+'
  device: 'smartphone'
  models:
    - regex: 'Audiovox[_\-]([a-z0-9\-]+)'
      model: '$1'
    - regex: 'CDM(?:-)?([a-z0-9]+)'
      model: 'CDM-$1'
    - regex: 'UTS(?:TARCOM)?-([a-z0-9\-]+)'
      model: 'CDM-$1'
    - regex: 'audio([a-z0-9\-]+)'
      model: 'CDM-$1'

# AVH
AVH:
  regex: 'Excer[ _]'
  device: 'tablet'
  models:
    - regex: 'Excer[ _]G5.([236])'
      model: 'Excer G5.$1'
    - regex: 'Excer[ _]G5'
      model: 'Excer G5'
    - regex: 'Excer[ _]10[ _]PRO'
      model: 'Excer 10 Pro'
    - regex: 'Excer[ _]8'
      model: 'Excer 8'

# Avvio
Avvio:
  regex: 'Avvio[ _]?([a-z0-9\-]+)|(?:CHIVAS_55|Colombia_2018|Mint_M353)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'CHIVAS_55'
      model: 'Chivas 55'
    - regex: 'Mint_M353'
      model: 'Mint M353'
    - regex: 'Colombia_2018'
      model: 'Colombia (2018)'
    - regex: 'Avvio[ _]PAD'
      model: 'PAD'
      device: 'tablet'
    - regex: 'Avvio[ _]?([a-z0-9\-]+)'
      model: '$1'

# Azumi Mobile (azumi-mobile.com)
Azumi Mobile:
  regex: 'Azumi[_ -]|(?:SPEED55|A50_Style_Plus|LT50\+|KIREI A5Q PLUS|NOBU[ _]A55[ _]PRO|IRO A55 QL?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Azumi[_ -]AKANE'
      model: 'Akane'
    - regex: 'Azumi[_ -]A4\+'
      model: 'A4 Plus'
    - regex: 'Azumi[_ -]([^/;]+) Build'
      model: '$1'
    - regex: 'Azumi[_ -]([a-z0-9_]+)'
      model: '$1'
    - regex: 'SPEED55'
      model: 'Speed 5.5"'
    - regex: 'A50_Style_Plus'
      model: 'A50 Style Plus'
    - regex: 'IRO A55 Q'
      model: 'IRO A55 Q'
    - regex: 'LT50\+'
      model: 'LT50 Plus'
    - regex: 'KIREI A5Q PLUS'
      model: 'Kirei A5Q Plus'
    - regex: 'NOBU[ _]A55[ _]PRO'
      model: 'Nobu A55 Pro'

#Barnes & Noble
'Barnes & Noble':
  regex: 'Nook|BN[TR]V[0-9]+'
  device: 'tablet'
  models:
    - regex: 'Nook([a-z0-9]+)'
      model: 'Nook $1'
    - regex: 'Nook[ _]([^/;]+)[ _]Build'
      model: 'Nook $1'
    - regex: '(BN[TR]V[0-9]+)'
      model: 'Nook $1'

# BGH
BGH:
  regex: '(?!Positivo )BGH ([^/;)]+)(?: Build|[;)])'
  device: 'smartphone'
  models:
    - regex: 'Y([17]00|2[01]0|1010)'
      device: 'tablet'
      model: 'Y$1'
    - regex: 'BGH (\+Simple|Mini|M840)'
      device: 'tablet'
      model: '$1'
    - regex: 'Y710 KIDS'
      device: 'tablet'
      model: 'Y710 Kids'
    - regex: 'JOY X2'
      model: 'Joy X2'
    - regex: 'BGH ([^/;)]+)(?: Build|[;)])'
      model: '$1'

# Bitel
Bitel:
  regex: 'Bitel[ _-]([^/;]+) Build|(?:B(?:840[5-9]|841[0456]|850[2346]|860[146]|9401|950[1-5])|S8402L?|S8501L?|BPRO)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(B(?:840[5789]|841[0456]|850[2346]|860[146]|9401|950[12345])|S8402L?|S8501L?)'
      model: '$1'
    - regex: 'BPRO(?:[);/ ]|$)'
      model: 'B Pro'
    - regex: 'Bitel[ _-]([^/;]+) Build'
      model: '$1'

# Blu
Blu:
  regex: 'BLU[ _]|(?:blu|(?<!DROIDZ )Dash)[ _]([^/;)]+)(?: Build|[;)])|(?:Studio[ _](G3|J8M|X10L|X12|5.0K|5.5|View XL|Mega|C 8\+8|[CGM][ _]HD|G2 HD|G4|[CGX]|SELFIE|Selfie LTE|Touch|M5 Plus|J[1258]|X8 HD|X10\+?|XL(?: 2)?)|Advance (4.0 ?[LM]|5.[02](?: HD)?|A4|L[45])|M6 2021|ENERGY (DIAMOND|XL)|ENERGY[_ ]DIAMOND[_ ]MINI|Energy X 2|LIFE XL|B110DL|Dash (?:X[2L]|L3)|PURE (?:X[LR]|MINI|View)|Life One X2|G50 (?:Mega|Plus)|G51 Plus|G90(?: PRO)?|G91 Pro|GRAND (?:M3|Max|5.5 HD|XL LTE|Mini|Energy)|R1 (?:HD|PLUS)|R2 (?:LTE|Plus)|Tank Xtreme [45].0|Tank Xtreme(?: Pro)?|Touchbook M7 Pro|DASH X PLUS|C[456] 2019|BOLD (?:M7|N1)|B1[34]0DL|Vivo (?:5 Mini|One Plus|5R|XL[234]| Plus|8L|XI[+]?|GO)|(?<!Neffos )C[56]L(?: 2020)?|C6 2020|G9 PRO|D701|VIEW 1|B131DL|R2 3G|Grand (?:M2X?|XL|M2 LTE)|D600|D5[01]0|DIAMOND M|M8L Plus|STUDIO ENERGY)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Advance (4.0 ?[LM]|4.0|5.[02](?: HD)?|A4|L[54])'
      model: 'Advance $1'
    - regex: 'M6 2021(?:[);/ ]|$)'
      model: 'M6 (2021)'
    - regex: 'STUDIO X Mini'
      model: 'Studio X Mini'
    - regex: 'Studio X10 2022'
      model: 'Studio X10 (2022)'
    - regex: '(?:BLU[_ ])?Studio[ _](G3|J8M|5.0 C|5.5|C 5\+5 LTE|View XL|Mega|C 8\+8|G HD LTE|[CG][ _]HD|C|G|Touch|M HD|G2 HD|M5 Plus|J[1258]|X8 HD|X5|X10\+?|XL(?: 2)?|X|G4)(?:[);/ ]|$)'
      model: 'Studio $1'
    - regex: '(?:BLU[_ ])?Studio[ _]5.0 ?K(?:[);/ ]|$)'
      model: 'Studio 5.0 K'
    - regex: 'STUDIO SELFIE LTE'
      model: 'Studio Selfie LTE'
    - regex: 'STUDIO ONE'
      model: 'Studio One'
    - regex: 'STUDIO ENERGY'
      model: 'Studio Energy'
    - regex: 'STUDIO[_ ](X10L|X12)(?:[);/ ]|$)'
      model: 'Studio $1'
    - regex: 'STUDIO SELFIE ([23]|LTE)'
      model: 'Studio Selfie $1'
    - regex: 'STUDIO SELFIE'
      model: 'Studio Selfie'
    - regex: '(?:BLU[_ ])?NEO_ENERGY_MINI'
      model: 'Neo Energy Mini'
    - regex: 'ENERGY[_ ]DIAMOND[_ ]MINI'
      model: 'Energy Diamond Mini'
    - regex: 'ENERGY DIAMOND'
      model: 'Energy Diamond'
    - regex: 'DIAMOND M'
      model: 'Diamond M'
    - regex: 'Grand Energy'
      model: 'Grand Energy'
    - regex: 'ENERGY XL'
      model: 'Energy XL'
    - regex: 'Energy X 2'
      model: 'Energy X 2'
    - regex: 'ENERGY X PLUS 2'
      model: 'Energy X Plus 2'
    - regex: 'ENERGY X PLUS'
      model: 'Energy X Plus'
    - regex: 'LIFE XL'
      model: 'Life XL'
    - regex: 'DASH[ _]X[ _]PLUS[ _]LTE'
      model: 'Dash X Plus LTE'
    - regex: 'DASH X PLUS'
      model: 'Dash X Plus'
    - regex: 'DASH 4.5'
      model: 'Dash 4.5'
    - regex: 'Dash XL'
      model: 'Dash XL'
    - regex: 'PURE (X[LR]|View)'
      model: 'Pure $1'
    - regex: 'PURE MINI'
      model: 'Pure Mini'
    - regex: 'BOLD (M7|N1)'
      model: 'Bold $1'
    - regex: 'Life One X2 Mini'
      model: 'Life One X2 Mini'
    - regex: 'LIFE ONE (X2?)'
      model: 'Life One $1'
    - regex: 'LIFE ONE'
      model: 'Life One'
    - regex: 'LIFE X LTE'
      model: 'Life X LTE'
    - regex: 'LIFE MARK'
      model: 'Life Mark'
    - regex: 'NEO X PLUS'
      model: 'Neo X Plus'
    - regex: 'NEO (XL|X|5\.5)'
      model: 'Neo $1'
    - regex: 'G50 Mega'
      model: 'G50 Mega'
    - regex: 'G50 Plus'
      model: 'G50 Plus'
    - regex: 'G51 Plus'
      model: 'G51 Plus'
    - regex: 'G(90?) PRO'
      model: 'G$1 Pro'
    - regex: 'G91 PRO'
      model: 'G91 Pro'
    - regex: '(G90|D701|R2 3G)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'GRAND 5.5 HD'
      model: 'Grand 5.5 HD'
    - regex: 'Grand X LTE'
      model: 'Grand X LTE'
    - regex: 'Grand XL LTE'
      model: 'Grand XL LTE'
    - regex: 'Grand M2 LTE'
      model: 'Grand M2 LTE'
    - regex: 'Grand (M2X?|XL)'
      model: 'Grand $1'
    - regex: 'Grand Max'
      model: 'Grand Max'
    - regex: 'Grand Mini'
      model: 'Grand Mini'
    - regex: 'Grand M3'
      model: 'Grand M3'
    - regex: 'B110DL'
      model: 'View Mega'
    - regex: 'B13[01]DL'
      model: 'View 2'
    - regex: 'B140DL'
      model: 'View 3'
    - regex: 'VIEW 1'
      model: 'View 1'
    - regex: 'R1 HD'
      model: 'R1 HD'
    - regex: 'R2 LTE'
      model: 'R2 LTE'
    - regex: 'R([12]) PLUS'
      model: 'R$1 Plus'
    - regex: 'C([456]) 20(19|20)'
      model: 'C$1 (20$2)'
    - regex: 'Tank Xtreme ([45]).0'
      model: 'Tank Xtreme $1.0"'
    - regex: 'Tank Xtreme Pro'
      model: 'Tank Xtreme Pro'
    - regex: 'Tank Xtreme'
      model: 'Tank Xtreme'
    - regex: 'VIVO AIR LTE'
      model: 'Vivo Air LTE'
    - regex: 'Touchbook G7'
      model: 'Touchbook G7'
    - regex: 'C([56])L 20(20|21)'
      model: 'C$1L (20$2)'
    - regex: 'C5L Plus'
      model: 'C5L Plus'
    - regex: 'C5L Max'
      model: 'C5L Max'
    - regex: 'C([56])L'
      model: 'C$1L'
    - regex: '(?:BLU[_ ])?VIVO[ _]SELFIE'
      model: 'Vivo Selfie'
    - regex: '(?:BLU[_ ])?Vivo 5 Mini'
      model: 'Vivo 5 Mini'
    - regex: 'Vivo One Plus 2019'
      model: 'Vivo One Plus (2019)'
    - regex: '(?:BLU[_ ])?Vivo (One|XL3|XI)(?: Plus|[+])'
      model: 'Vivo $1 Plus'
    - regex: '(?:BLU[_ ])?Vivo (5R|XI|XL[234]|8L)'
      model: 'Vivo $1'
    - regex: '(?:BLU[_ ])?VIVO GO'
      model: 'Vivo Go'
    - regex: '(?:BLU[_ ])?(D600|D5[01]0)'
      model: '$1'

    - regex: 'Touchbook M7 Pro'
      model: 'Touchbook M7 Pro'
      device: 'tablet'
    - regex: 'M8L Plus'
      model: 'M8L Plus'
      device: 'tablet'
    - regex: 'STUDIO 7.0 II'
      model: 'Studio 7.0" II'
      device: 'tablet'

    - regex: 'DASH (L[45] LTE|5.0|L[45]X|L3|X2|[LMX])(?:[);/ ]|$)'
      model: 'Dash $1'

    - regex: 'DASH[ _]([^)/;]+)(?: Build|\))'
      model: 'Dash $1'

    - regex: 'blu[ _]([^/;]+)( Build|[);])'
      model: '$1'

# Bluegood
Bluegood:
  regex: 'BLUEGOOD'
  device: 'smartphone'
  models:
    - regex: 'V6'
      model: 'V6'

# Blackview
Blackview:
  regex: 'Blackview|(BL8800|BV([24-9]000|8800|[46]900|(5[1589]|9[15689])00|6[1368]00|7100)(?:[ _](?:PRO))?|(P10000(?:[ _](?:PRO))?)|omega[ _]pro|Alife[ _][PS]1|Heatwave|DM550|BV9700Pro|(?<!Lenovo[_ ])A[68]0(?:Pro)?\))|(?:SOLID 4 G2|A[86]0Plus|A80S|BL6000Pro|BL8800Pro|R6 Lite|P2Lite|A8 MAX|A30-RU|A20Pro|Android 10;(?: [\w-]+;)? Tab[89]|Android 1[12];(?: [\w-]+;)? (?:A[79]0|A70 Pro|A55 Pro|Tab 1[0135]|Tab 6)|BV500|BV[579]200)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'A([2678]0|55) ?Pro(?:[);/ ]|$)'
      model: 'A$1 Pro'
    - regex: 'A([679]0)(?: Build|[;)])'
      model: 'A$1'
    - regex: 'A8 MAX(?:[);/ ]|$)'
      model: 'A8 Max'
    - regex: 'A80S(?:[);/ ]|$)'
      model: 'A80S'
    - regex: 'A30-RU'
      model: 'A30'
    - regex: '(A[86]0|BV[59]500)Plus(?:[);/ ]|$)'
      model: '$1 Plus'
    - regex: '(BV6000S|BL8800)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(P2|R6) ?Lite'
      model: '$1 Lite'
    - regex: 'BV9000Pro-F'
      model: 'BV9000 Pro'
    - regex: '(BL6000|BL8800|BV(?:[0-9]+))Pro'
      model: '$1 Pro'
    - regex: 'Blackview (A[78]|E7S)'
      model: '$1'
    - regex: 'SOLID 4 G2'
      model: 'Solid-4 G2'
    - regex: '(BV6[13]00)(?:[);/ ]|$)'
      model: '$1'
      device: 'phablet'
    - regex: '(BV\d+[\w]?|P10000)[ _]?PRO(?:[-_](?:RU|F))?(?:[);/ ]|$)'
      model: '$1 Pro'
    - regex: '(BV\d+[\w]?|P10000)(?:[-_](?:RU|F))?(?:[);/ ]|$)'
      model: '$1'

    - regex: 'Tab 10 Pro(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Tab 10 Pro'
    - regex: ' Tab ?(6 Kids)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Tab $1'
    - regex: ' Tab ?([689]|1[0135])(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Tab $1'

    - regex: 'omega[ _]pro'
      model: 'Omega Pro'
    - regex: '(Alife[ _][PS]1|DM550|Heatwave)'
      model: '$1'

# Bluboo (bluboo.tel)
Bluboo:
  regex: 'Bluboo|Maya Build|(?:(?<!IQM )Picasso(?: 4G)?|Xfire2?|D6 Lite|D1_Pro|D6 Pro|S8_plus_a| S8a|Android 8(?:[\d.]*);(?: [\w-]+;)? D6)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Maya Build'
      model: 'Maya'
    - regex: 'Xfire2'
      model: 'Xfire 2'
    - regex: 'Picasso(?: 4G)?'
      model: 'Picasso 4G'
    - regex: 'Xfire'
      model: 'Xfire'
    - regex: 'D6 Lite'
      model: 'D6 Lite'
    - regex: 'S8_plus_a'
      model: 'S8 Plus'
    - regex: ' S8a'
      model: 'S8a'
    - regex: 'D([16])[_ ]Pro'
      model: 'D$1 Pro'
    - regex: '(?:Bluboo[_ ])?S8[_ ]plus'
      model: 'S8 Plus'
    - regex: ' D6(?: Build|[;)])'
      model: 'D6'
    - regex: 'Bluboo[ _-]?([^;/)]+)(?: Build|[;)])'
      model: '$1'
    - regex: 'Bluboo[ _-]?([^;/)]+)'
      model: '$1'

# Black Fox or BlackFox
'Black Fox':
  regex: 'BMM[ _-]?(?:44[123]D|431B|441[AWB]|44[12]S|431[SD]|53[23]D|54[12]S|541[ABW]|54[123]D|543S|531[ABD]|532 S|531S)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'BMM443D'
      model: 'B7 Fox+'
    - regex: 'BMM441[AS]'
      model: 'B8 Fox'
    - regex: 'BMM442S|BMM441B'
      model: 'B8 Fox+'
    - regex: 'BMM441W'
      model: 'B8M'
    - regex: 'BMM442D'
      model: 'B7'
    - regex: 'BMM531D'
      model: 'B6'
    - regex: 'BMM531A'
      model: 'B5'
    - regex: 'BMM541A'
      model: 'B5+'
    - regex: 'BMM543[DS]'
      model: 'B4'
    - regex: 'BMM441D'
      model: 'B4 Mini'
    - regex: 'BMM541B'
      model: 'B4 Mini NFC'
    - regex: 'BMM531B'
      model: 'B4 Mini (2019)'
    - regex: 'BMM542D'
      model: 'B3+'
    - regex: 'BMM541D'
      model: 'B3'
    - regex: 'BMM541W'
      model: 'B7R Fox'
    - regex: 'BMM 532 S'
      model: 'BMM 532S'
    - regex: 'BMM[ _-]?(53[23]D|431[DS]|54[12]S|531S|431B)(?:[);/ ]|$)'
      model: 'BMM $1'

# bogo
bogo:
  regex: 'BO-(FRSP4|LFSPBS5|LFSP4|LFSPSL4|LFSPBS5|LFSPSL6QCI)'
  device: 'smartphone'
  models:
    - regex: 'BO-LFSP4'
      model: 'LifeStyle 4DC'
    - regex: 'BO-LFSPSL4'
      model: 'LifeStyle 4SL'
    - regex: 'BO-LFSPBS5'
      model: 'LifeStyle 5BS'
    - regex: 'BO-LFSPSL6QCI'
      model: 'LifeStyle 6QC'
    - regex: 'BO-(FRSP4)'
      model: '$1'

# Boway
Boway:
  regex: '(?:sprd-)?(BOWAY)'
  device: 'smartphone'
  models:
    - regex: 'BOWAY[ _-]([^/;]+)[ _]Build'
      model: '$1'
    - regex: '([^/;]+) Build/BOWAY'
      model: '$1'
    - regex: '.*BOWAY[ _-]([^/;]+)/'
      model: '$1'

# Brondi (https://www.brondi.it/)
Brondi:
  regex: 'Brondi[ _]|(?:CENTURION|GLADIATOR| GLORY|LUXURY|SENSUELLE|(?<!ODYSSEY[_ ])VICTORY|AMICO SMARTPHONE XL|AMICO_SMARTPHONE_4G|MIDNIGHT_SKY|501 SZ|850_4G)(?:[ _-]?[2-6])?(?:[);/ ]|$)|Surfing Tab'
  device: 'smartphone'
  models:
    - regex: '(?:Brondi[ _])?(620 SZ|730_4G_HD|501 SZ|850_4G)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'CENTURION(?:[ _-]?([2-6]))?(?:[);/ ]|$)'
      model: 'CENTURION $1'
    - regex: 'GLADIATOR(?:[ _-]?([2-6]))?(?:[);/ ]|$)'
      model: 'GLADIATOR $1'
    - regex: 'GLORY(?:[ _-]?([2-6]))?(?:[);/ ]|$)'
      model: 'GLORY $1'
    - regex: 'LUXURY(?:[ _-]?([2-6]))?(?:[);/ ]|$)'
      model: 'LUXURY $1'
    - regex: 'MIDNIGHT_SKY(?:[);/ ]|$)'
      model: 'Midnight Sky'
    - regex: 'SENSUELLE(?:[ _-]?([2-6]))?(?:[);/ ]|$)'
      model: 'SENSUELLE $1'
    - regex: 'VICTORY(?:[ _-]?([2-6]))?(?:[);/ ]|$)'
      model: 'VICTORY $1'
    - regex: 'AMICO_SMARTPHONE_4G'
      model: 'Amico Smartphone 4G'
    - regex: 'AMICO SMARTPHONE XL'
      model: 'Amico Smartphone XL'

    - regex: 'Surfing Tab ([^;/]+) Build'
      model: 'SURFING TAB $1'
      device: 'tablet'
    - regex: 'Surfing Tab ([^;/)]+)[;/)]'
      model: 'SURFING TAB $1'
      device: 'tablet'

# VGO TEL (vgotel.com)
VGO TEL:
  regex: 'VGOTEL|(?:Venture V(?:[278]|12)|VentureV10|Ocean[_ ][689]|Ocean9L|NEW [57]|NEW 11|i_Smart)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Venture ?V([278]|1[02])(?:[);/ ]|$)'
      model: 'Venture V$1'
    - regex: 'Ocean[_ ]?([689]|9L)(?:[);/ ]|$)'
      model: 'Ocean $1'
    - regex: 'NEW (\d+)'
      model: 'New $1'
    - regex: 'i_Smart'
      model: 'i Smart'

# Vivo (vivo.com.cn, vivo.com)
Vivo:
  regex: '((?:VIV-|BBG-)?(?<!FBCR/|NOA |Gtel )vivo(?!(?:Browser)| 4G_r))|(?:V1730(D[AT]|GA)|V18(01A0|13B[AT])|1819|V1937|I(?:192[78]|201[28])|V(?:2006|202[2-9]|203[0-35-9]|204[0-3568]|205[02-5789]|206[015689]|2070|210[12459]|211[01]|212[0469])|V(?:2026|2031|2036|2043)_21|V1936AL|V(?:1732|1809|181[3468]|182[149]|183[1268]|1901|191[13469]|192[1-48]|193[0246]|194[15]|195[05]|196[235]|198[16]|1990|200[125]|201[12]|202[03-5]|203[146]|204[6789]|205[45679]|2066B|206[1568]|207[23]|208[05]|2099|2106|211[18]|212[135]|213[346]|214[1358]|2162)A|V1824BA|V(?:1731|1818|2020)CA|V(?:1818|1938)CT|V(?:1730|2031)EA|V(?:1732|1809|181[3468]|182[19]|183[1268]|1901|1913|1938)T|V2029_PK|V2044|V2069A|V217[12]A|I201[19]|I2126|X50 Pro\+|I220[12368]|I2127|V211[4-8]A?|V204[57]A?|V210[28]A?|I2009|I2017|I2022|V215[4678]A|V215[0-478]|V218[0358]A|V2180GA|V219[069]A|V213[012459]A?|V2023EA|V1962BA|V212[57]|V214[0-79]|V1930|V216[0289]|V2164[KP]A|V216[234568]A|V217[08]A|PA2170|V220[37]A|V220[1-9]|V221[789]A|V221[247]|V222[079]A|V222[18]|V22[34]1A|V224[234]A|V223[18]A|S7t 5G| (?:Y30g|Y20T|Y31s 5G|Y33s|Y50t|Y55s 5G)|V2166(?:BA)?|iQOO U1x?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'PA2170(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Pad'
    - regex: 'V2170A(?:[);/ ]|$)'
      device: 'phablet'
      model: 'X Note'
    - regex: 'V2178A'
      device: 'phablet'
      model: 'X Fold'
    - regex: 'V2229A'
      device: 'phablet'
      model: 'X Fold+'

    - regex: ' (Y20T|Y30g)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'V1824[B]?A(?:[);/ ]|$)'
      model: 'iQOO'
    - regex: 'V1955A(?:[);/ ]|$)'
      model: 'iQOO 3'
    - regex: '(?:V2171A|I2017)(?:[);/ ]|$)'
      model: 'iQOO 9'
    - regex: 'I2019(?:[);/ ]|$)'
      model: 'iQOO 9 SE'
    - regex: '(?:V2172A|I2022)(?:[);/ ]|$)'
      model: 'iQOO 9 Pro'
    - regex: 'I2201(?:[);/ ]|$)'
      model: 'iQOO 9T'
    - regex: 'V2218A'
      model: 'iQOO 10 Pro'
    - regex: 'V2217A'
      model: 'iQOO 10'
    - regex: 'V2243A'
      model: 'iQOO 11'
    - regex: 'I192[78](?:[);/ ]|$)'
      model: 'iQOO 3 5G'
    - regex: 'V2165A(?:[);/ ]|$)'
      model: 'iQOO U5'
    - regex: 'V2180GA'
      model: 'iQOO U5x'
    - regex: '(?:V2049A|I2009)(?:[);/ ]|$)'
      model: 'iQOO 7'
    - regex: 'V2196A'
      model: 'iQOO Neo 6'
    - regex: 'V2231A'
      model: 'iQOO Neo 7'
    - regex: 'V2238A'
      model: 'iQOO Neo 7 SE'
    - regex: 'V2157A'
      model: 'iQOO Neo 5 SE'
    - regex: 'V2154A'
      model: 'iQOO Neo 5S'
    - regex: 'I2012(?:[);/ ]|$)'
      model: 'iQOO 7 5G'
    - regex: 'V1922A(?:[);/ ]|$)'
      model: 'iQOO Pro' # 2019
    - regex: 'V1916A(?:[);/ ]|$)'
      model: 'iQOO Pro 5G'
    - regex: 'V1914A(?:[);/ ]|$)'
      model: 'iQOO Neo'
    - regex: 'V1981A(?:[);/ ]|$)'
      model: 'iQOO Neo 3'
    - regex: 'V1936A[L]?(?:[);/ ]|$)'
      model: 'iQOO Neo 855'
    - regex: 'V2055A(?:[);/ ]|$)'
      model: 'iQOO Neo 5'
    - regex: 'V2118A(?:[);/ ]|$)'
      model: 'iQOO Neo 5 Lite'
    - regex: 'V2199A(?:[);/ ]|$)'
      model: 'iQOO Neo 6 SE'
    - regex: 'V1986A(?:[);/ ]|$)'
      model: 'iQOO Z1'
    - regex: 'V2012A(?:[);/ ]|$)'
      model: 'iQOO Z1x'
    - regex: '(?:V2073A|I2011)(?:[);/ ]|$)'
      model: 'iQOO Z3'
    - regex: 'V1919A'
      model: 'iQOO Z5x'
    - regex: 'V2131A'
      model: 'iQOO Z5x 5G'
    - regex: 'V2148A'
      model: 'iQOO Z5'
    - regex: 'I2018(?:[);/ ]|$)'
      model: 'iQOO Z5 5G'
    - regex: '(?:I220[236]|I2127|V2220A)(?:[);/ ]|$)'
      model: 'iQOO Z6'
    - regex: 'V2164KA'
      model: 'iQOO Z6x'
    - regex: 'I2126(?:[);/ ]|$)'
      model: 'iQOO Z6 Pro'
    - regex: 'I2208(?:[);/ ]|$)'
      model: 'iQOO Z6 Lite'
    - regex: '(?:V2023A|iQOO U1)(?:[);/ ]|$)'
      model: 'iQOO U1'
    - regex: '(?:V2065A|iQOO U1x)(?:[);/ ]|$)'
      model: 'iQOO U1x'
    - regex: 'V2061A(?:[);/ ]|$)'
      model: 'iQOO U3'
    - regex: 'V2143A(?:[);/ ]|$)'
      model: 'iQOO U3x'
    - regex: 'V2106A(?:[);/ ]|$)'
      model: 'iQOO U3x 5G'
    - regex: 'V2024A(?:[);/ ]|$)'
      model: 'iQOO 5'
    - regex: 'V2025A(?:[);/ ]|$)'
      model: 'iQOO 5 Pro'
    - regex: 'V2136A(?:[);/ ]|$)'
      model: 'iQOO 8'
    - regex: 'V2141A(?:[);/ ]|$)'
      model: 'iQOO 8 Pro'
    - regex: '(?:V2025)(?:[);/ ]|$)'
      model: 'V20'
    - regex: '(?:V2066|V2108)(?:[);/ ]|$)'
      model: 'V21'
    - regex: '(?:V2050)(?:[);/ ]|$)'
      model: 'V21 5G'
    - regex: 'V2061(?:[);/ ]|$)'
      model: 'V21e'
    - regex: 'V2055(?:[);/ ]|$)'
      model: 'V21e 5G'
    - regex: 'V2040(?:[);/ ]|$)'
      model: 'V20 (2021)'
    - regex: 'Vivo 1921(?:[);/ ]|$)'
      model: 'U20'
    - regex: 'Vivo 1916(?:[);/ ]|$)'
      model: 'U10'
    - regex: 'vivo 1805(?:[);/ ]|$)'
      model: 'Nex'
    - regex: '(?:vivo 1912|V1923A)(?:[);/ ]|$)'
      model: 'Nex 3'
    - regex: 'V1924A(?:[);/ ]|$)'
      model: 'Nex 3 5G'
    - regex: 'V1950A(?:[);/ ]|$)'
      model: 'Nex 3S'
    - regex: 'vivo NEX S(?:[);/ ]|$)'
      model: 'Nex S'
    - regex: 'vivo NEX A(?:[);/ ]|$)'
      model: 'Nex A'
    - regex: 'vivo NEX(?:[);/ ]|$)'
      model: 'Nex'
    - regex: '(?:V1821[AT]|vivo 1813)(?:[);/ ]|$)'
      model: 'Nex Dual Display'
    - regex: 'Vivo ONE(?:[);/ ]|$)'
      model: 'One'
    - regex: 'V2115A|V2141|V2157|V2150'
      model: 'T1 5G'
    - regex: 'V2151'
      model: 'T1 Pro 5G'
    - regex: 'V2153'
      model: 'T1 4G'
    - regex: 'V2143'
      model: 'T1x'
    - regex: 'V2188A'
      model: 'T2x'
    - regex: 'V1962BA'
      model: 'G1 5G'
    - regex: 'V2203A(?:[);/ ]|$)'
      model: 'S15'
    - regex: 'V1831[AT]'
      model: 'S1'
    - regex: 'V1832[AT](?:[);/ ]|$)'
      model: 'S1 Pro'
    - regex: 'V2121A(?:[);/ ]|$)'
      model: 'S10'
    - regex: 'V2130A'
      model: 'S10e 5G'
    - regex: 'V211[56]'
      model: 'V23e'
    - regex: 'V2126'
      model: 'V23e 5G'
    - regex: 'V2130'
      model: 'V23 5G'
    - regex: 'V2132A'
      model: 'X70t'
    - regex: 'V2132'
      model: 'V23 Pro 5G'
    - regex: 'V2202'
      model: 'V25 SE'
    - regex: 'V220[19]'
      model: 'V25e'
    - regex: 'V1932[AT](?:[);/ ]|$)'
      model: 'S5'
    - regex: 'V2207A'
      model: 'S15 Pro'
    - regex: 'V1962A(?:[);/ ]|$)'
      model: 'S6 5G'
    - regex: 'V2162A?'
      model: 'S12 5G'
    - regex: 'V2190A'
      model: 'S15e'
    - regex: 'V2244A'
      model: 'S16'
    - regex: 'V2020C?A(?:[);/ ]|$)'
      model: 'S7'
    - regex: 'V2031EA(?:[);/ ]|$)'
      model: 'S7e'
    - regex: 'V2080A(?:[);/ ]|$)'
      model: 'S7t'
    - regex: 'S7t 5G(?:[);/ ]|$)'
      model: 'S7t 5G'
    - regex: 'V2072A(?:[);/ ]|$)'
      model: 'S9 (2021)'
    - regex: 'V2048A(?:[);/ ]|$)'
      model: 'S9e'
    - regex: 'V1941A(?:[);/ ]|$)'
      model: 'U3'
    - regex: 'V1928A(?:[);/ ]|$)'
      model: 'U3X'
    - regex: 'vivo 1804(?:[);/ ]|$)'
      model: 'V11 Pro'
    - regex: 'vivo 1806(?:[);/ ]|$)'
      model: 'V11i'
    - regex: '1819(?:[);/ ]|$)'
      model: 'V15'
    - regex: 'vivo 1818(?:[);/ ]|$)'
      model: 'V15 Pro'
    - regex: 'vivo 19(?:10|09)(?:[);/ ]|$)'
      model: 'V17 Pro'
    - regex: 'vivo 1907(?:_19)?(?:[);/ ]|$)'
      model: 'V17 Neo'
    - regex: 'vivo 19(?:20(?:_20)?|19)(?:[);/ ]|$)'
      model: 'V17'
    - regex: 'vivo 1933(?:[);/ ]|$)'
      model: 'V19'
    - regex: 'V2022(?:[);/ ]|$)'
      model: 'V20 SE'
    - regex: 'vivo 2018(?:[);/ ]|$)'
      model: 'V20 Pro'
    - regex: '(?:VIV-|BBG-)?vivo[ _]1601(?:[);/ ]|$)'
      model: 'V5'
    - regex: 'vivo 1609(?:[);/ ]|$)'
      model: 'V5 Lite'
    - regex: 'vivo 1611(?:[);/ ]|$)'
      model: 'V5 Plus'
    - regex: 'vivo (1713|1612)(?:[);/ ]|$)'
      model: 'V5s'
    - regex: 'vivo 1718(?:[);/ ]|$)'
      model: 'V7'
    - regex: 'V2166BA(?:[);/ ]|$)'
      model: 'V77e'
    - regex: 'vivo (?:1716|1850)(?:[);/ ]|$)'
      model: 'V7 Plus'
    - regex: 'vivo 1723(?:[);/ ]|$)'
      model: 'V9'
    - regex: '(?:vivo 1727|V9Youth)(?:[);/ ]|$)'
      model: 'V9 Youth'
    - regex: 'vivo (?:1851|V9Pro)(?:[);/ ]|$)'
      model: 'V9 Pro'
    - regex: 'vivo V3Max(?: [AL])?(?:[);/ ]|$)'
      model: 'V3 Max'
    - regex: 'vivo X9s Plus(?:[);/ ]|$)'
      model: 'X9s Plus'
    - regex: 'vivo X9s(?: [AL])?(?:[);/ ]|$)'
      model: 'X9s'
    - regex: 'V2241A'
      model: 'X90'
    - regex: 'vivo X5Pro(?:[);/ ]|$)'
      model: 'X5 Pro'
    - regex: 'vivo X20Plus UD(?:[);/ ]|$)'
      model: 'X20 Plus UD'
    - regex: 'vivo 1721(?:[);/ ]|$)'
      model: 'X20'
    - regex: '(?:X20Plus(?: a)?|vivo 1720)(?:[);/ ]|$)'
      model: 'X20 Plus'
    - regex: 'vivo X21i(?: A)?(?:[);/ ]|$)'
      model: 'X21i'
    - regex: 'vivo X21UD(?: A)?(?:[);/ ]|$)'
      model: 'X21 UD'
    - regex: 'vivo (?:1725|X21A?)(?:[);/ ]|$)'
      model: 'X21'
    - regex: 'V1814[AT](?:[);/ ]|$)'
      model: 'X21S'
    - regex: 'V1809[AT](?:[);/ ]|$)'
      model: 'X23'
    - regex: 'V1816[AT](?:[);/ ]|$)'
      model: 'X23'
    - regex: 'V18(38|29)[AT](?:[);/ ]|$)'
      model: 'X27'
    - regex: 'V1836[AT](?:[);/ ]|$)'
      model: 'X27 Pro'
    - regex: 'V1938CT(?:[);/ ]|$)'
      model: 'X30'
    - regex: 'V1938T(?:[);/ ]|$)'
      model: 'X30 Pro'
    - regex: '(?:V2001A|vivo 2004)(?:[);/ ]|$)'
      model: 'X50'
    - regex: 'V1930(?:[);/ ]|$)'
      model: 'X50e'
    - regex: 'vivo 2005(?:[);/ ]|$)'
      model: 'X50 5G'
    - regex: '(?:vivo 1937|V1937)(?:[);/ ]|$)'
      model: 'X50 Lite'
    - regex: '(?:V2005A|vivo 2006)(?:[);/ ]|$)'
      model: 'X50 Pro'
    - regex: '(?:V2011A|X50 Pro\+)(?:[);/ ]|$)'
      model: 'X50 Pro Plus'
    - regex: '(?:V20(?:46|59)A|V2045)(?:[);/ ]|$)'
      model: 'X60'
    - regex: 'V2085A(?:[);/ ]|$)'
      model: 'X60t'
    - regex: '(?:V2047A|V2046)(?:[);/ ]|$)'
      model: 'X60 Pro'
    - regex: '(?:V2056A|V2047)(?:[);/ ]|$)'
      model: 'X60 Pro Plus'
    - regex: '(?:V2134A|V2105)(?:[);/ ]|$)'
      model: 'X70 Pro'
    - regex: '(?:V2145A|V2114)(?:[);/ ]|$)'
      model: 'X70 Pro+'
    - regex: 'V2133A(?:[);/ ]|$)'
      model: 'X70'
    - regex: 'V2104(?:[);/ ]|$)'
      model: 'X70 5G'
    - regex: '(?:V2144|V2183A)(?:[);/ ]|$)'
      model: 'X80'
    - regex: 'V2242A'
      model: 'X90 Pro'
    - regex: 'V2227A'
      model: 'X90 Pro+'
    - regex: 'V2185A|V2145'
      model: 'X80 Pro'
    - regex: 'V2208(?:[);/ ]|$)'
      model: 'X80 Lite 5G'
    - regex: 'X([0-9])Plus(?: A)?(?:[);/ ]|$)'
      model: 'X$1 Plus'
    - regex: 'vivo Xplay6(?:[);/ ]|$)'
      model: 'X Play 6'
    - regex: 'vivo (?:1929|2015)(?:_21)?(?:[);/ ]|$)'
      model: 'Y1s'
    - regex: 'vivo 1902(?:[);/ ]|$)'
      model: 'Y17'
    - regex: 'V22[01]4(?:[);/ ]|$)'
      model: 'Y16'
    - regex: 'vivo 1906(?:_20)?(?:[);/ ]|$)'
      model: 'Y11'
    - regex: 'V2168A'
      model: 'Y10 T1'
    - regex: 'V2168'
      model: 'T1'
    - regex: 'V2118'
      model: 'Y01'
    - regex: 'V2166(?:[);/ ]|$)'
      model: 'Y01A'
    - regex: '(?:V2203|V2221)(?:[);/ ]|$)'
      model: 'Y02s'
    - regex: '(?:V2217)(?:[);/ ]|$)'
      model: 'Y02'
    - regex: 'vivo 19(?:04|40)(?:[);/ ]|$)'
      model: 'Y12'
    - regex: 'V2163A'
      model: 'Y12 Pro'
    - regex: 'V2102(?:[);/ ]|$)'
      model: 'Y12a'
    - regex: 'vivo 2007(?:[);/ ]|$)'
      model: 'Y12i'
    - regex: 'vivo 1901(?:_19)?(?:[);/ ]|$)'
      model: 'Y15'
    - regex: 'V2134'
      model: 'Y15a'
    - regex: '(?:V212[05]|V2139)(?:[);/ ]|$)'
      model: 'Y15s'
    - regex: 'V2147|V2212'
      model: 'Y15c'
    - regex: 'vivo 1915(?:[);/ ]|$)'
      model: 'Y19'
    - regex: 'V202[79](?:_PK)?(?:[);/ ]|$)'
      model: 'Y20'
    - regex: 'V2207(?:[);/ ]|$)'
      model: 'Y22'
    - regex: 'V2206(?:[);/ ]|$)'
      model: 'Y22s'
    - regex: 'vivo 1613(?:[);/ ]|$)'
      model: 'Y25'
    - regex: '(?:V2043_21|V2048)(?:[);/ ]|$)'
      model: 'Y20 (2021)'
    - regex: '(?:V205[24]|V2070|V2101)(?:[);/ ]|$)'
      model: 'Y20A'
    - regex: 'V2037(?:[);/ ]|$)'
      model: 'Y20G'
    - regex: 'V2129(?:[);/ ]|$)'
      model: 'Y20T'
    - regex: 'V2065(?:[);/ ]|$)'
      model: 'Y20G (2021)'
    - regex: 'V2028(?:[);/ ]|$)'
      model: 'Y11s'
    - regex: 'V2038(?:[);/ ]|$)'
      model: 'Y20s'
    - regex: 'V2043(?:[);/ ]|$)'
      model: 'Y20 (2021)'
    - regex: 'V(?:2041|2060)(?:[);/ ]|$)'
      model: 'Y72 5G'
    - regex: 'V2102A'
      model: 'Y72T 5G'
    - regex: 'V2117'
      model: 'Y75'
    - regex: 'V2219A'
      model: 'Y77'
    - regex: 'V2169'
      model: 'Y77 5G'
    - regex: 'V2032(?:[);/ ]|$)'
      model: 'Y20i'
    - regex: 'V2110(?:[);/ ]|$)'
      model: 'Y21s'
    - regex: 'V2152(?:[);/ ]|$)'
      model: 'Y21G'
    - regex: 'V2111(?:[);/ ]|$)'
      model: 'Y21'
    - regex: 'V2149(?:[);/ ]|$)'
      model: 'Y21a'
    - regex: 'V2140(?:[);/ ]|$)'
      model: 'Y21e'
    - regex: 'V213[15](?:[);/ ]|$)'
      model: 'Y21t'
    - regex: 'V2023(?:[);/ ]|$)'
      model: 'V20 SE'
    - regex: 'V1901[AT](?:[);/ ]|$)'
      model: 'Y3'
    - regex: 'V2044'
      model: 'Y3s' # 2021
    - regex: 'V1930A(?:[);/ ]|$)'
      model: 'Y3 Standard'
    - regex: '(?:vivo 193[89]|V203[46]A)(?:[);/ ]|$)'
      model: 'Y30'
    - regex: 'V2160(?:[);/ ]|$)'
      model: 'Y30 5G'
    - regex: 'V2099A(?:[);/ ]|$)'
      model: 'Y30 (2021)'
    - regex: 'V2066[B]?A(?:[);/ ]|$)'
      model: 'Y30g'
    - regex: 'V2036(?:_21)?(?:[);/ ]|$)'
      model: 'Y31'
    - regex: 'V2068A?(?:[);/ ]|$)'
      model: 'Y31s'
    - regex: 'V2158A'
      model: 'Y32'
    - regex: 'V2228(?:[);/ ]|$)'
      model: 'V25'
    - regex: 'V2158'
      model: 'V25 Pro'
    - regex: 'V2180A'
      model: 'Y32t'
    - regex: 'V2057(?:[);/ ]|$)'
      model: 'Y33'
    - regex: '(?:V2109|Y33s)(?:[);/ ]|$)'
      model: 'Y33s'
    - regex: 'V2146(?:[);/ ]|$)'
      model: 'Y33t'
    - regex: 'V2166A(?:[);/ ]|$)'
      model: 'Y33s (2022)'
    - regex: 'V2205(?:[);/ ]|$)'
      model: 'Y35'
    - regex: 'V1934A(?:[);/ ]|$)'
      model: 'Y5s'
    - regex: '(?:V1965A|vivo 1935)(?:[);/ ]|$)'
      model: 'Y50'
    - regex: '(?:V2023EA|Y50t)(?:[);/ ]|$)'
      model: 'Y50t'
    - regex: 'V(?:2024|203[05])(?:[);/ ]|$)'
      model: 'Y51'
    - regex: 'vivo 1707(?:[);/ ]|$)'
      model: 'Y51 (2015)'
    - regex: 'V2031(?:_21)?(?:[);/ ]|$)'
      model: 'Y51s'
    - regex: '(?:V2054A|Y31s 5G)(?:[);/ ]|$)'
      model: 'Y31s'
    - regex: 'V2057A(?:[);/ ]|$)'
      model: 'Y52s'
    - regex: 'V2053(?:[);/ ]|$)'
      model: 'Y52'
    - regex: 'vivo 1606(?:[);/ ]|$)'
      model: 'Y53i'
    - regex: 'vivo 1606a(?:[);/ ]|$)'
      model: 'Y53'
    - regex: '(?:V2058|V2111A|V2123A)(?:[);/ ]|$)'
      model: 'Y53s'
    - regex: 'V2069A'
      model: 'Y53s T1'
    - regex: 'vivo 1603(?:[);/ ]|$)'
      model: 'Y55l'
    - regex: 'vivo 1610(?:[);/ ]|$)'
      model: 'Y55s'
    - regex: 'V2164A|Y55s 5G'
      model: 'Y55s (2021)'
    - regex: 'V2164PA'
      model: 'Y73t 5G'
    - regex: 'V2127'
      model: 'Y55 5G'
    - regex: 'V2154'
      model: 'Y55'
    - regex: 'V2045A'
      model: 'Y54s'
    - regex: 'vivo 1719(?:[);/ ]|$)'
      model: 'Y65'
    - regex: 'vivo (?:1714|Y69A?)(?:[);/ ]|$)'
      model: 'Y69'
    - regex: 'V2002A(?:[);/ ]|$)'
      model: 'Y70s'
    - regex: 'V2006(?:[);/ ]|$)'
      model: 'Y60s'
    - regex: 'vivo (?:1724|Y71A?)(?:[);/ ]|$)'
      model: 'Y71'
    - regex: 'vivo 1801i?(?:[);/ ]|$)'
      model: 'Y71i'
    - regex: 'V1731CA(?:[);/ ]|$)'
      model: 'Y73'
    - regex: 'V2059(?:[);/ ]|$)'
      model: 'Y73 (2021)'
    - regex: 'V2031A(?:[);/ ]|$)'
      model: 'Y73s'
    - regex: 'V2124(?:[);/ ]|$)'
      model: 'Y76 5G'
    - regex: 'V2156A'
      model: 'Y76s'
    - regex: 'V1913[AT](?:[);/ ]|$)'
      model: 'Y7s'
    - regex: 'vivo 180([38]|8i)(?:[);/ ]|$)'
      model: 'Y81'
    - regex: 'vivo 1812(?:_19)?(?:[);/ ]|$)'
      model: 'Y81i'
    - regex: 'V1732[AT](?:[);/ ]|$)'
      model: 'Y81s'
    - regex: 'vivo (?:Y83A?|1802)(?:[);/ ]|$)'
      model: 'Y83'
    - regex: 'vivo 1726(?:[);/ ]|$)'
      model: 'Y83 Pro'
    - regex: 'V1730EA(?:[);/ ]|$)'
      model: 'Y89'
    - regex: 'vivo (?:1823|1908)(?:_19)?(?:[);/ ]|$)'
      model: 'Y90'
    - regex: 'vivo 181[17](?:[);/ ]|$)'
      model: 'Y91'
    - regex: 'vivo 1820(?:_19)?(?:[);/ ]|$)'
      model: 'Y91i'
    - regex: 'V1945A(?:[);/ ]|$)'
      model: 'Y9s'
    - regex: '(?:V2026|V2033|V2042)(?:[);/ ]|$)'
      model: 'Y12s'
    - regex: '(?:V20[63]9|V2026_21)(?:[);/ ]|$)'
      model: 'Y12s (2021)'
    - regex: 'vivo 18(16|20)(?:[);/ ]|$)'
      model: 'Y91i'
    - regex: '(V1818[AT]|vivo 181[45])(?:[);/ ]|$)'
      model: 'Y93'
    - regex: 'V1818C[AT](?:[);/ ]|$)'
      model: 'Y93s'
    - regex: 'vivo 1807(?:[);/ ]|$)'
      model: 'Y95'
    - regex: 'V1813[AT](?:[);/ ]|$)'
      model: 'Y97'
    - regex: 'V1801A0(?:[);/ ]|$)'
      model: 'Z1'
    - regex: 'vivo (?:1918|1951|Z1Pro)(?:[);/ ]|$)'
      model: 'Z1 Pro'
    - regex: 'V1730D[AT](?:[);/ ]|$)'
      model: 'Z1i'
    - regex: 'vivo 1917(?:[);/ ]|$)'
      model: 'Z1x'
    - regex: 'V1813B[AT](?:[);/ ]|$)'
      model: 'Z3'
    - regex: '(?:vivo Z3x|V1730GA)(?:[);/ ]|$)'
      model: 'Z3x'
    - regex: 'V1921A(?:[);/ ]|$)'
      model: 'Z5'
    - regex: 'V1911A(?:[);/ ]|$)'
      model: 'Z5x'
    - regex: 'V1990A(?:[);/ ]|$)'
      model: 'Z5x (2020)'
    - regex: 'V1963A(?:[);/ ]|$)'
      model: 'Z6'
    - regex: 'V2142(?:[);/ ]|$)'
      model: 'Y75 5G'
    - regex: 'vivo Y75s(?:[);/ ]|$)'
      model: 'Y75s'
    - regex: 'vivo X710L?(?:[);/ ]|$)'
      model: 'X Shot'
    - regex: 'X6SPlus(?: [AD])?(?:[);/ ]|$)'
      model: 'X6S Plus'
    - regex: 'vivo X6S(?: A)?(?:[);/ ]|$)'
      model: 'X6S'
    - regex: 'vivo X([5679]|20)[ALD]?(?:[);/ ]|$)'
      model: 'X$1'
    - regex: 'vivo X5Pro(?: L)?(?:[);/ ]|$)'
      model: 'X5 Pro'
    - regex: 'vivo Y66i(?: A)?(?:[);/ ]|$)'
      model: 'Y66i'
    - regex: 'vivo Y(\d{2})[AL]?(?:[);/ ]|$)'
      model: 'Y$1'
    - regex: 'vivo Xplay(\d)S(?:[);/ ]|$)'
      model: 'X Play $1S'
    - regex: 'vivo Xplay(\d)[AL]?(?:[);/ ]|$)'
      model: 'X Play $1'
    - regex: '(?:VIV-|BBG-)?vivo[ _]([^/;]+) Build'
      model: '$1'
    - regex: '(?:VIV-|BBG-)?vivo[ _]([^);/]+)(?:[);/]|$)'
      model: '$1'

# Vinsoc
Vinsoc:
  regex: '(XA Pro) Build'
  device: 'smartphone'
  model: '$1'

# Bird
Bird:
  regex: 'BIRD[\-. _]([^;/]+)'
  device: 'feature phone'
  models:
    - regex: 'BIRD[\-. _]([^;/]+) Build'
      model: '$1'
    - regex: 'BIRD[\-. _]([^;/]+)'
      model: '$1'

# Becker
Becker:
  regex: 'Becker-([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# Beeline
Beeline:
  regex: 'Beeline|(?:A239s|SWG2001A-A)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Beeline[_ ]Pro[_ ]([2436])'
      model: 'Pro $1'
    - regex: 'Tab (Fast(?: 2)?|Pro)'
      model: 'Tab $1'
      device: 'tablet'
    - regex: 'Tab ([0-9])'
      model: 'Tab $1'
      device: 'tablet'
    - regex: 'Tab'
      model: 'Tab'
      device: 'tablet'
    - regex: 'E([67]00)'
      model: 'E$1'
    - regex: '(?:Beeline[_ ])?Smart[ _]?([0-9])'
      model: 'Smart $1'
    - regex: 'Smart Dual'
      model: 'Smart Dual'
    - regex: '(?:Beeline[_ ])?Fast[_ ]2(?:[);/ ]|$)'
      model: 'Fast 2'
    - regex: 'Fast(?:[);/ ]|$)'
      model: 'Fast'
    - regex: 'A239s(?:[);/ ]|$)'
      model: 'Smart 8 A239s'
    - regex: '(SWG2001A-A)(?:[);/ ]|$)'
      device: 'tv'
      model: 'Beebox $1' # SuperWave

# Beetel
Beetel:
  regex: 'Beetel ([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# BenQ-Siemens
BenQ-Siemens:
  regex: 'BENQ-SIEMENS - ([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# BenQ
BenQ:
  regex: 'BENQ(?:[ \-])?([a-z0-9]+)|(?:F52_09|F5_15|T47_09)(?:[);/ ]|$)'
  device: 'feature phone'
  models:
    - regex: '(F(?:52|5)|T47)_(?:15|09)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'BENQ(?:[ \-])?([a-z0-9]+)'
      model: '$1'

# Blaupunkt (blaupunkt.com)
Blaupunkt:
  regex: 'Blaupunkt|Soundphone S2|Atlantis[_ ](?:1001A|1010A|A10[._]G40[23])|SLplus02|Discovery[_ ](?:A10_302|10[28]C|111C|1000C|1001A?)|Endeavour[_ ](?:785|101[GLM]|1000|1001|101[03]|1100)|Polaris[_ ]80[38]|BP_6010'
  device: 'tablet'
  models:
    - regex: 'Discovery[_ ](1000|111|10[28])C'
      model: 'Discovery $1C'
    - regex: 'Discovery[_ ]A10_302'
      model: 'Discovery A10.302'
    - regex: 'Discovery[_ ]1001A'
      model: 'Discovery 1001A'
    - regex: 'Discovery[_ ]1001'
      model: 'Discovery 1001'
    - regex: 'Soundphone S2'
      model: 'Soundphone S2'
    - regex: 'Endeavour[_ ](101[GLM]|785|100[01]|101[03]|1100)'
      model: 'Endeavour $1'
    - regex: 'Polaris[_ ](808[_ ]BE|80[38])'
      model: 'Polaris $1'
    - regex: 'Atlantis_A10_G403'
      model: 'Atlantis A10.G403'
    - regex: 'Atlantis[_ ](1001A|1010A|A10\.G40[23])'
      model: 'Atlantis $1'
    - regex: 'SLplus02'
      model: 'SL Plus 02'
    - regex: '(BP_6010)'
      model: '$1'
    - regex: 'Blaupunkt[_ ](SL[_ ]0[124]|SM[_ ]0[12])'
      device: 'smartphone'
      model: '$1'
    - regex: '(SF02)'
      device: 'smartphone'
      model: '$1'
    - regex: '(4K Android TV)'
      device: 'tv'
      model: '$1'

# Bmobile
Bmobile:
  regex: 'Bmobile[_ ]|B60Pro(?:_MV03)?|BL50P_TG0[567]|BL51_MV05|BL54_?Pro|(?:B50Pro|BL50|BL60_TG(?:05|17)|BL60M_MV05|FUN 4 2018|AX686A|AX-?(?:[1-9][0-9]{2,3}[eEO+]?|7OO))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'AX-?([1-9][0-9]{2,3}[eAEO+]?)'
      model: 'AX$1'
    - regex: 'AX7OO'
      model: 'AX700'
    - regex: 'FUN 4 2018'
      model: 'Fun 4 (2018)'
    - regex: 'B60Pro(?:_MV03)?'
      model: 'B60 Pro'
    - regex: 'BL60_TG(?:05|17)'
      model: 'BL60'
    - regex: 'BL60M_MV05'
      model: 'BL60M'
    - regex: 'B50Pro'
      model: 'B50 Pro'
    - regex: 'BL50P_TG0[567](?:[);/ ]|$)'
      model: 'BL50 Pro'
    - regex: 'BL50(?:[);/ ]|$)'
      model: 'BL50'
    - regex: 'BL51_MV05(?:[);/ ]|$)'
      model: 'BL51'
    - regex: 'BL54_?Pro'
      model: 'BL54 Pro'
    - regex: 'Bmobile[_ ]([^/;]+) Build'
      model: '$1'
    - regex: 'Bmobile[_ ]([a-z0-9]+)'
      model: '$1'

# bq
bq:
  regex: 'Aquaris|bq [^/;]+ Build|BQS[-_]([0-9]{4})|(BQ(ru)?[_ -][0-9]{3,4})|BQ5059|BQ1008G|BQru_BQru-|Edison 3|Smart_TV_BQ'
  device: 'smartphone'
  models:
    - regex: 'BQ(?:ru)?-(?:5209L|5044)(?:[);/ ]|$)'
      model: 'Strike LTE'
    - regex: 'BQ(?:ru)?-(?:6035L)(?:[);/ ]|$)'
      model: 'Strike Power Max'
    - regex: 'BQ(?:ru)?-(?:5535L)(?:[);/ ]|$)'
      model: 'Strike Power Plus'
    - regex: 'BQ(S|ru)?-6353L'
      model: 'Joy'
    - regex: 'BQ(S|ru)?-(?:5070|6040L)(?:[);/ ]|$)'
      model: 'Magic'
    - regex: 'BQ(S|ru)?-(?:6424L)(?:[);/ ]|$)'
      model: 'Magic O'
    - regex: 'BQ(?:S|ru)?-(?:5730L)(?:[);/ ]|$)'
      model: 'Magic C'
    - regex: 'BQ(?:S|ru)?-(?:5731L)(?:[);/ ]|$)'
      model: 'Magic S'
    - regex: 'BQ(?:S|ru)?-57[46]5L(?:[);/ ]|$)'
      model: 'Clever'
    - regex: 'BQ(?:S|ru)?-5533G(?:[);/ ]|$)'
      model: 'Fresh'
    - regex: 'BQ(?:S|ru)?-5031G(?:[);/ ]|$)'
      model: 'Fun'
    - regex: 'BQ(?:S|ru)?-(?:5732L)(?:[);/ ]|$)'
      model: 'Aurora SE'
    - regex: 'BQ(?:S|ru)?-6430L(?:[);/ ]|$)'
      model: 'Aurora'
    - regex: 'BQ(?:S|ru)?-6630L(?:[);/ ]|$)'
      model: 'Magic L'
    - regex: 'BQ-9011[G]?(?:[);/ ]|$)'
      model: 'Vision'
      device: 'tablet'
    - regex: 'BQ-8068L(?:[);/ ]|$)'
      model: 'Hornet Plus Pro'
    - regex: 'BQ-8067L'
      model: 'Hornet Plus'
      device: 'tablet'
    - regex: 'BQ-8052G'
      model: 'BQ-8052G'
      device: 'tablet'
    - regex: 'BQ-8041L'
      model: 'Art'
      device: 'tablet'
    - regex: 'BQ-7084G'
      model: 'Simple'
      device: 'tablet'
    - regex: 'BQ-7061G'
      model: 'Andros'
      device: 'tablet'
    - regex: 'BQ(ru)?-(7082)'
      model: 'Armor'
      device: 'tablet'
    - regex: 'BQ-7051G'
      model: 'Elba'
      device: 'tablet'
    - regex: 'BQ-7036L'
      model: 'Hornet'
      device: 'tablet'
    - regex: 'BQ-7022(G)?'
      model: 'Canion'
      device: 'tablet'
    - regex: 'BQ-7021G'
      model: 'Hit'
      device: 'tablet'
    - regex: 'BQ-7010G'
      model: 'Max'
      device: 'tablet'
    - regex: 'BQ-7006G'
      model: 'Union'
      device: 'tablet'
    - regex: 'BQ-7003'
      model: 'Jamaica'
      device: 'tablet'
    - regex: 'BQ-6200L|BQ-6000L'
      model: 'Aurora'
    - regex: 'BQ(?:ru|s)?-6631G'
      model: 'Surf'
    - regex: 'BQ-6645L'
      model: '6645L Element'
    - regex: 'BQ-6061L'
      model: '6061L Slim'
    - regex: 'BQ-6022G'
      model: 'Aura'
    - regex: 'BQ(ru)?[ -]6015L'
      model: 'Universe'
    - regex: 'BQ(?:S|ru)?-(?:5525|6030G|6010G)'
      model: 'Practic'
    - regex: 'BQ-6001L|BQ-6050'
      model: 'Jumbo'
    - regex: 'BQ-5707G(?:[);/ ]|$)'
      model: 'Next Music'
    - regex: 'BQ-5702(?:[);/ ]|$)'
      model: 'Spring'
    - regex: 'BQ-5700L(?:[);/ ]|$)'
      model: 'Space X'
    - regex: 'BQ-(?:5591|551[89]G)(?:[);/ ]|$)'
      model: 'Jeans'
    - regex: 'BQ-5522'
      model: 'Next'
    - regex: 'BQ-5520L(?:[);/ ]|$)'
      model: 'Silk'
    - regex: 'BQ-5519L(?:[);/ ]|$)'
      model: 'Fast Plus'
    - regex: 'BQ-5540L(?:[);/ ]|$)'
      model: 'Fast Pro'
    - regex: 'BQ-5517L(?:[);/ ]|$)'
      model: 'Twin Pro'
    - regex: 'BQ-5516L(?:[);/ ]|$)'
      model: 'Twin'
    - regex: 'BQ(?:S|ru)?-(?:5515|6868L)(?:[);/ ]|$)'
      model: 'Wide'
    - regex: 'BQ-5515L(?:[);/ ]|$)'
      model: 'Fast'
    - regex: 'BQ-(?:5512L|5528L)(?:[);/ ]|$)'
      model: 'Strike Forward'
    - regex: 'BQ-5511L(?:[);/ ]|$)'
      model: 'Bliss'
    - regex: 'BQS[_ ]5505(?:[);/ ]|$)'
      model: 'Amsterdam'
    - regex: 'BQ(?:ru)?-5510(?:[);/ ]|$)'
      model: 'Strike Power Max 4G'
    - regex: 'BQ(?:ru)?-(?:5521|5594)(?:[);/ ]|$)'
      model: 'Strike Power Max'
    - regex: 'BQ-5508L(?:[);/ ]|$)'
      model: 'Next LTE'
    - regex: 'BQ-5507L(?:[);/ ]|$)'
      model: 'Iron Max'
    - regex: 'BQ(?:ru)?-5504(?:[);/ ]|$)'
      model: 'Strike Selfie Max'
    - regex: 'BQ(?:ru)?-5503(?:[);/ ]|$)'
      model: 'Nice 2'
    - regex: 'BQ(?:ru)?-6045L(?:[);/ ]|$)'
      model: 'Nice'
    - regex: 'BQ(?:ru)?-4030G(?:[);/ ]|$)'
      model: 'Nice Mini'
    - regex: 'BQS-5502(?:[);/ ]|$)'
      model: 'Hammer'
    - regex: 'BQS-5501(?:[);/ ]|$)'
      model: 'Kawasaki'
    - regex: 'BQS-5500(?:[);/ ]|$)'
      model: 'Vancouver'
    - regex: 'BQ-5500L(?:[);/ ]|$)'
      model: 'Advance'
    - regex: 'BQ-5302G(?:[);/ ]|$)'
      model: 'Velvet 2'
    - regex: 'BQ-5301(?:[);/ ]|$)'
      model: 'Strike View'
    - regex: 'BQ-5300G(?:[);/ ]|$)'
      model: 'Velvet View'
    - regex: 'BQ(ru|S)?-(?:5211|5020)(?:[);/ ]|$)'
      model: 'Strike'
    - regex: 'BQ-5206L(?:[);/ ]|$)'
      model: 'Balance'
    - regex: 'BQ(?:ru|S)?-(?:5204|5050)(?:[);/ ]|$)'
      model: 'Strike Selfie'
    - regex: 'BQ(?:ru)?-5203(?:[);/ ]|$)'
      model: 'Vision'
    - regex: 'BQ(?:ru)?-5202(?:[);/ ]|$)'
      model: 'Space Lite'
    - regex: 'BQ(?:ru)?-5201(?:[);/ ]|$)'
      model: 'Space'
    - regex: 'BQ-5082(?:[);/ ]|$)'
      model: 'Sense 2'
    - regex: 'BQ-5045L(?:[);/ ]|$)'
      model: 'Wallet'
    - regex: 'BQ-5047L(?:[);/ ]|$)'
      model: 'Like'
    - regex: 'BQ-5071(?:[);/ ]|$)'
      model: 'Belief'
    - regex: 'BQ[S]?-(?:5065|5340)(?:[);/ ]|$)'
      model: 'Choice'
    - regex: 'BQ(?:S|ru)?-5046L(?:[);/ ]|$)'
      model: 'Choice LTE'
    - regex: 'BQ(?:ru)?-?(?:5059|5514G)(?:[);/ ]|$)'
      model: 'Strike Power'
    - regex: '(?:BQru_)?BQ(?:ru)?-5058(?:[);/ ]|$)'
      model: 'Strike Power Easy'
    - regex: 'BQ(?:ru)?-5057(?:[);/ ]|$)'
      model: 'Strike 2'
    - regex: 'BQ[S]?-(?:5056|5030)(?:[);/ ]|$)'
      model: 'Fresh'
    - regex: 'BQ-6042l(?:[);/ ]|$)'
      model: 'Magic E'
    - regex: 'BQS-5055(?:[);/ ]|$)'
      model: 'Turbo Plus'
    - regex: 'BQ(?:ru)?-5054(?:[);/ ]|$)'
      model: 'Crystal'
    - regex: 'BQ-5052(?:[);/ ]|$)'
      model: 'Sense'
    - regex: 'BQ-5060L'
      model: 'Basic'
    - regex: 'BQ-6051G(?:[);/ ]|$)'
      model: 'Soul'
    - regex: 'BQ[S]?-5045(?:[);/ ]|$)'
      model: 'Fast'
    - regex: 'BQ(?:ru)?-(?:5037|5514L)(?:[);/ ]|$)'
      model: 'Strike Power 4G'
    - regex: 'BQ(?:ru)?-5035(?:[);/ ]|$)'
      model: 'Velvet'
    - regex: 'BQ(?:ru)?-5033(?:[);/ ]|$)'
      model: 'Shark'
    - regex: 'BQ-5541L(?:[);/ ]|$)'
      model: 'Shark Rush'
    - regex: 'BQ-5032(?:[);/ ]|$)'
      model: 'Element'
    - regex: 'BQS-5025(?:[);/ ]|$)'
      model: 'High Way'
    - regex: 'BQ(?:ru)?-5022(?:[);/ ]|$)'
      model: 'Bond'
    - regex: 'BQ-5015L(?:[);/ ]|$)'
      model: 'First'
    - regex: 'BQ-5016G(?:[);/ ]|$)'
      model: 'Choice'
    - regex: 'BQ-5012L(?:[);/ ]|$)'
      model: 'Rich'
    - regex: 'BQ-5521L(?:[);/ ]|$)'
      model: 'Rich Max'
    - regex: 'BQS-5011(?:[);/ ]|$)'
      model: 'Monte Carlo'
    - regex: 'BQ-5010G(?:[);/ ]|$)'
      model: 'Spot'
    - regex: 'BQ-5000G(?:[);/ ]|$)'
      model: 'Velvet Easy'
    - regex: 'BQS-5010(?:[);/ ]|$)'
      model: 'Prague'
    - regex: 'BQ-5009L(?:[);/ ]|$)'
      model: 'Trend'
    - regex: 'BQ-5560L'
      model: 'Trend (2021)'
    - regex: 'BQ-5565L'
      model: 'Fest'
    - regex: 'BQS-500[59](?:[);/ ]|$)'
      model: 'Sydney'
    - regex: 'BQ-5008L(?:[);/ ]|$)'
      model: 'Brave'
    - regex: 'BQ-5007L(?:[);/ ]|$)'
      model: 'Iron'
    - regex: 'BQS-5006(?:[);/ ]|$)'
      model: 'Los Angeles'
    - regex: 'BQ-(?:5005L|5530L)(?:[);/ ]|$)'
      model: 'Intense'
    - regex: 'BQS-5004(?:[);/ ]|$)'
      model: 'Paris'
    - regex: 'BQ-5003L(?:[);/ ]|$)'
      model: 'Shark Pro'
    - regex: 'BQ-5002G(?:[);/ ]|$)'
      model: 'Fun'
    - regex: 'BQS-5002(?:[);/ ]|$)'
      model: 'Colombo'
    - regex: 'BQS-5003(?:[);/ ]|$)'
      model: 'Colombo II'
    - regex: 'BQ-5001L(?:[);/ ]|$)'
      model: 'Contact'
    - regex: 'BQS-5001(?:[);/ ]|$)'
      model: 'Milan'
    - regex: 'BQ(?:ru|S)?-5000(?:[);/ ]|$)'
      model: 'Tokyo'
    - regex: 'BQS-4800(?:[);/ ]|$)'
      model: 'Blade'
    - regex: 'BQS-4707(?:[);/ ]|$)'
      model: 'Montreal'
    - regex: 'BQS-4702(?:[);/ ]|$)'
      model: 'Оsaka'
    - regex: 'BQS-4701(?:[);/ ]|$)'
      model: 'Venice'
    - regex: 'BQ-(?:4585|5011G)(?:[);/ ]|$)'
      model: 'Fox View'
    - regex: 'BQ(?:ru)?-4583(?:[);/ ]|$)'
      model: 'Fox Power'
    - regex: 'BQS-4570(?:[);/ ]|$)'
      model: 'Drive'
    - regex: 'BQS-4560(?:[);/ ]|$)'
      model: 'Golf'
    - regex: 'BQS-4555(?:[);/ ]|$)'
      model: 'Turbo'
    - regex: 'BQS-4550(?:[);/ ]|$)'
      model: 'Richmond'
    - regex: 'BQ(?:ru)?-(?:4526|5004G)(?:[);/ ]|$)'
      model: 'Fox'
    - regex: 'BQS-4525(?:[);/ ]|$)'
      model: 'Vienna'
    - regex: 'BQS-4516(?:[);/ ]|$)'
      model: 'Singapore'
    - regex: 'BQS-4515(?:[);/ ]|$)'
      model: 'Moscow'
    - regex: 'BQS-4510(?:[);/ ]|$)'
      model: 'Florence'
    - regex: 'BQS-4505(?:[);/ ]|$)'
      model: 'Santiago'
    - regex: 'BQS-4503(?:[);/ ]|$)'
      model: 'Dubai'
    - regex: 'BQS-4502(?:[);/ ]|$)'
      model: 'Kingston'
    - regex: 'BQS-4501 Bristol'
      model: 'Bristol'
    - regex: 'BQ-4501G(?:[);/ ]|$)'
      model: 'Fox Easy'
    - regex: 'BQ(?:ru)?-4500(?:[);/ ]|$)'
      model: 'Fox LTE'
    - regex: 'BQ-4077(?:[);/ ]|$)'
      model: 'Shark Mini'
    - regex: 'BQ(?:ru)?-4072(?:[);/ ]|$)'
      model: 'Strike Mini'
    - regex: 'BQ(?:ru)?[- ]402[68](?:[);/ ]|$)'
      model: 'Up!'
    - regex: 'BQS-4010(?:[);/ ]|$)'
      model: 'Aspen'
    - regex: 'BQS-4009(?:[);/ ]|$)'
      model: 'Orleans'
    - regex: 'BQS-4008(?:[);/ ]|$)'
      model: 'Shanghai'
    - regex: 'BQS-4007(?:[);/ ]|$)'
      model: 'Valencia'
    - regex: 'BQS-4005(?:[);/ ]|$)'
      model: 'Seoul'
    - regex: 'BQS-4004(?:[);/ ]|$)'
      model: 'Dusseldorf'
    - regex: 'BQS-4003(?:[);/ ]|$)'
      model: 'Verona'
    - regex: 'BQ-4001G(?:[);/ ]|$)'
      model: 'Cool'
    - regex: 'BQS-4001(?:[);/ ]|$)'
      model: 'Oxford'
    - regex: 'BQS-3510(?:[);/ ]|$)'
      model: 'Aspen Mini'
    - regex: 'BQS-3503(?:[);/ ]|$)'
      model: 'Bombay'
    - regex: 'BQ-1085L(?:[);/ ]|$)'
      model: 'Hornet Max Pro'
      device: 'tablet'
    - regex: 'BQ-1084L(?:[);/ ]|$)'
      model: 'Hornet Max'
      device: 'tablet'
    - regex: 'BQ-1083G(?:[);/ ]|$)'
      model: 'Armor Pro Plus'
      device: 'tablet'
    - regex: 'BQ-1082G(?:[);/ ]|$)'
      model: 'Armor Pro'
      device: 'tablet'
    - regex: 'BQ-1077L(?:[);/ ]|$)'
      model: 'Armor Pro LTE'
      device: 'tablet'
    - regex: 'BQ(?:ru)?-1057L(?:[);/ ]|$)'
      model: 'Passion'
      device: 'tablet'
    - regex: 'BQ-1051G(?:[);/ ]|$)'
      model: 'Corsika'
      device: 'tablet'
    - regex: 'BQ-1050G(?:[);/ ]|$)'
      model: 'Hawaii'
      device: 'tablet'
    - regex: 'BQ[-]?1008G(?:[);/ ]|$)'
      model: 'Grace'
      device: 'tablet'
    - regex: 'Aquaris (M10 FHD|M10 4G|M8)'
      model: 'Aquaris $1'
      device: 'tablet'
    - regex: 'Aquaris_([AM])4.5'
      model: 'Aquaris $14.5'
    - regex: 'BQ(?:ru)?[_ -](?:5590|5740G)(?:[);/ ]|$)'
      model: 'Spring'
    - regex: 'BQ[S]?-(?:6016L|5520)(?:[);/ ]|$)'
      model: 'Mercury'
    - regex: 'BQ(?:S|ru)?-(?:5701L|5060)(?:[);/ ]|$)'
      model: 'Slim'
    - regex: '(BQ-7850|BQ-700[12]G|BQ-8002G|BQ-905[12]G|BQ-9702G|BQ-7056G)'
      model: '$1'
      device: 'tablet'
    - regex: 'BQ-8006G(?:[);/ ]|$)'
      model: 'Java'
      device: 'tablet'
    - regex: 'BQ-9055L'
      model: 'Exion Pro Mini'
      device: 'tablet'
    - regex: 'BQ-7062G(?:[);/ ]|$)'
      model: 'Fiji'
      device: 'tablet'
    - regex: 'BQ(?:ru)?-1081G(?:[);/ ]|$)'
      model: 'Grace 3G'
      device: 'tablet'
    - regex: 'BQ-7802G(?:[);/ ]|$)'
      model: 'Luzon'
      device: 'tablet'
    - regex: 'BQ-7008G(?:[);/ ]|$)'
      model: 'Clarion'
      device: 'tablet'
    - regex: 'BQ-7064G(?:[);/ ]|$)'
      model: 'Fusion'
      device: 'tablet'
    - regex: 'BQ-7050G(?:[);/ ]|$)'
      model: 'Malta'
      device: 'tablet'
    - regex: 'BQ-7000G(?:[);/ ]|$)'
      model: 'Сharm'
      device: 'tablet'
    - regex: 'BQ-7040G(?:[);/ ]|$)'
      model: 'Сharm Plus'
      device: 'tablet'
    - regex: 'BQ-7038G(?:[);/ ]|$)'
      model: 'Light Plus'
      device: 'tablet'
    - regex: 'BQ-7005G(?:[);/ ]|$)'
      model: 'Maui'
      device: 'tablet'
    - regex: 'BQ-7098G(?:[);/ ]|$)'
      model: 'Armor Power'
      device: 'tablet'
    - regex: 'BQ-1007(?:[);/ ]|$)'
      model: 'Necker'
      device: 'tablet'
    - regex: 'BQ-1045[G]?(?:[);/ ]|$)'
      model: 'Orion'
      device: 'tablet'
    - regex: 'BQ-(?:1054L|1020L)(?:[);/ ]|$)'
      model: 'Nexion'
      device: 'tablet'
    - regex: 'BQ-7083G(?:[);/ ]|$)'
      model: 'Light'
      device: 'tablet'
    - regex: 'BQ-8077L(?:[);/ ]|$)'
      model: 'Exion Plus'
      device: 'tablet'
    - regex: 'BQ(?:ru)?-7083(?:[);/ ]|$)'
      model: '7083'
      device: 'tablet'
    - regex: 'BQ(?:ru)?-1056L(?:[);/ ]|$)'
      model: '1056L'
      device: 'tablet'
    - regex: 'BQ(?:ru)?-1022l(?:[);/ ]|$)'
      model: 'Armor Pro LTE+'
      device: 'tablet'
    - regex: 'BQ(?:ru)?-1024L(?:[);/ ]|$)'
      model: 'Exion Pro'
      device: 'tablet'
    - regex: 'BQ(?:ru)?-7055L(?:[);/ ]|$)'
      model: 'Exion One'
      device: 'tablet'
    - regex: 'BQ(?:ru)?-1025L(?:[);/ ]|$)'
      model: 'Exion Max'
      device: 'tablet'
    - regex: 'BQ(?:ru)?-7081(?:[);/ ]|$)'
      model: 'Charm'
      device: 'tablet'
    - regex: 'Edison 3(?:[);/ ]|$)'
      model: 'Edison 3'
      device: 'tablet'
    - regex: '(?:bq )?Aquaris ([^/);]*)(?: Build|[);])'
      model: 'Aquaris $1'
    - regex: '(?:bq )?Aquaris'
      model: 'Aquaris'
    - regex: 'bq ([^/;]+) Build'
      model: '$1'
      device: 'tablet'
    - regex: 'Smart_TV_BQ'
      device: 'tv'
      model: ''

# Bush
Bush:
  regex: 'Bush[ ,_-]|Bush10Nou'
  device: 'smartphone'
  models:
    - regex: 'Bush10Nou'
      device: 'tablet'
      model: '10Nou'
    - regex: 'Spira B1 (8|10\.1)'
      device: 'tablet'
      model: 'Spira B1 $1"'
    - regex: 'BUSH ([^;/)]+)Tablet(?: Build|[);])'
      model: '$1Tablet'
      device: 'tablet'
    - regex: 'BUSH Spira B2 5 Smartphone'
      model: 'Spira B2 5"'
    - regex: 'BUSH ([^;/)]+) Smartphone'
      model: '$1'
    - regex: 'BUSH ([^;/)]+)(?: Build|[);])'
      model: '$1'
    - regex: 'BUSH, ([a-z0-9_ \-]+), (?:wired|wireless)'
      model: ''
      device: 'tv'

# CAGI
CAGI:
  regex: 'CAGI-'
  device: 'smartphone'
  models:
    - regex: 'CAGI-OMEGA'
      model: 'Omega'
    - regex: 'CAGI-([a-z0-9_\-]+)'
      model: '$1'

# Capitel
Capitel:
  regex: 'Capitel-([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# Captiva
Captiva:
  regex: 'Captiva[ _-]([^;/)]+)(?: Build|\))'
  device: 'tablet'
  model: 'Pad $1'

# Casio
Casio:
  regex: '(C811|C7[57]1)(?: 4G)?(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'C751(?:[);/ ]|$)'
      model: "G'zOne Ravine"
    - regex: 'C771(?:[);/ ]|$)'
      model: "G'zOne Commando"
    - regex: 'C811 4G(?:[);/ ]|$)'
      model: "G'zOne Commando 4G LTE"

# Casper (casper.com.tr)
Casper:
  regex: 'CASPER[_ ]|VIA[- _]([XF]20|T7D|A[34]|E[43]|E30|F[123]|G[345]|M4|[LS]8|S7|P[23]|V8C|A[13]_Plus(?:_64)?|A1(?:_1)?|S[13]0|S48|S|T17_M|T1[07]|T7|[ST]7-3G|T8B|T8D-3G|S1[78]|S48_0|[LS]30_0|L30|F30 Plus)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:CASPER[_ ])?VIA_A1_Plus(?:_64)?'
      model: 'VIA A1 Plus'
    - regex: '(?:CASPER[_ ])?VIA[_ ]([XF]20|G1_Plus|F30 Plus|A3_Plus|G[135]|E[14]|E30|[AE]2|M[123]|V[35689]|V10|G3|V6X|A[34]|E3|F[123]|G4|M4|P[23]|S|V8C|A1(?:_1)?)(?:[);/ ]|$)'
      model: 'VIA $1'
    - regex: 'CASPER_VIA_E1c'
      model: 'VIA E1C'
    - regex: 'CASPER_L10_4.5G'
      model: 'L10 4.5G'
      device: 'tablet'
    - regex: 'CASPER_(S[23]8)(?:[);/ ]|$)'
      model: '$1'
      device: 'tablet'
    - regex: 'VIA[- _]([ST]7|T8D)-3G'
      model: 'VIA $1 3G'
      device: 'tablet'
    - regex: 'VIA[- _](T7D|S[13]0|S48|[LS]8|S7|T17_M|T1[07]|T7|T8B|S1[78])(?:[);/ ]|$)'
      model: 'VIA $1'
      device: 'tablet'
    - regex: 'VIA[- _](S48|[LS]30)(?:_0)?(?:[);/ ]|$)'
      model: 'VIA $1'
      device: 'tablet'

# Cat (Caterpillar, Catphones)
Cat:
  regex: 'Cat ?(tablet|stargate|nova)|(?:B15Q|CAT B35|CAT-B100|S62 Pro|S48c|Android 9;(?: [\w-]+;)? S52|Android 10;(?: [\w-]+;)? S42)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'B15Q'
      model: 'B15Q'
      device: 'smartphone'
    - regex: 'CAT B35'
      model: 'B35'
      device: 'smartphone'
    - regex: 'S62 Pro'
      model: 'S62 Pro'
      device: 'smartphone'
    - regex: ' (S48c|S[45]2)(?:[);/ ]|$)'
      model: '$1'
      device: 'smartphone'
    - regex: 'Cat ?(?:tablet)? ?((?:Galactica|Nova|StarGate|PHOENIX)[^/;]*) Build'
      model: '$1'
    - regex: 'Cat ?tablet'
      model: 'Nova'

    - regex: 'CAT-(B100)'
      device: 'feature phone'
      model: '$1'

# Carrefour
Carrefour:
  regex: 'CT(?:10[0123]0|7[12]0|820|735_16GB|1005)(?:W|FR)?(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'CT820'
      model: 'Touch Tablet Neo2'
    - regex: 'CT(10[0123]0(?:W|FR)?)'
      model: 'CT$1'
    - regex: 'CT(7[12]0(?:W|FR)?|735|1005)'
      model: 'CT$1'

# Celcus
Celcus:
  regex: 'CELCUS, ([a-z0-9_ \-]+), (?:wired|wireless)'
  device: 'tv'
  model: ''

# Celkon
Celkon:
  regex: 'Celkon|Android 7.+ UNIQ(?: Build|[);])|(?:Millennia Hero|2GBStar|2GBXpress|CliQ2|Campus Prime)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Celkon[ _*](C[78]20)'
      model: '$1'
      device: 'tablet'
    - regex: 'Celkon[_ ]4G_TAB-8'
      model: '4G Tab 8'
      device: 'tablet'
    - regex: 'Millennia Hero'
      model: 'Millennia Hero'
    - regex: '2GBStar'
      model: '2GB Star'
    - regex: '2GBXpress'
      model: '2GB Xpress'
    - regex: 'CliQ2(?:[);/ ]|$)'
      model: 'CliQ 2'
    - regex: 'Q4GPlus(?:[);/ ]|$)'
      model: 'Q4G Plus'
    - regex: 'Android 7.+ UniQ(?: Build|[);])'
      model: 'UniQ'
    - regex: '(Campus Prime)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Celkon[ _*](CT[^;/]+) Build'
      model: '$1'
      device: 'tablet'
    - regex: 'Celkon[ _*]([^;/]+) Build'
      model: '$1'
    - regex: 'Celkon[\. _*]([^;/\)]+)[\)/]'
      model: '$1'

# Cellution
Cellution:
  regex: 'Cosmas|CT_Cosmas_V|PADUA'
  device: 'smartphone'
  models:
    - regex: 'Cosmas'
      model: 'Cosmas'
    - regex: 'CT_Cosmas_V'
      model: 'Cosmas V'
    - regex: 'PADUA'
      model: 'Padua'

# Changhong
Changhong:
  regex: 'Changhong|HON H01|GHONGV12'
  device: 'smartphone'
  models:
    - regex: 'Changhong[ ]?(X1-K|X6|R8|Z9S?|Z1S|S18|R9|S07)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'HON H01'
      model: 'HONPhone H01'
    - regex: 'GHONGV12'
      model: 'V12'

    - regex: 'ChangHong Andr[o0]id TV'
      device: 'tv'
      model: ''
    - regex: 'changhong,([a-z0-9_ \-]+),(?:wired|wireless)'
      device: 'tv'
      model: '$1'
    - regex: '(?:Opera TV.+)Changhong-([^);/]+)'
      device: 'tv'
      model: '$1'

# China Mobile
'China Mobile':
  regex: '(M812C|1501_M02|9930i|A1303|A309W|M651CY|M653|CMCC[ -]M(?:670|860))(?: Build|[);]|$)'
  device: 'smartphone'
  models:
    - regex: 'M651CY'
      model: 'A3'
    - regex: 'CMCC-M860'
      model: 'N5 Pro'
    - regex: 'M653'
      model: 'A3s'
    - regex: '(M812C|1501_M02|9930i|A1303|A309W|M670)'
      model: '$1'

# Comio
Comio:
  regex: 'Comio|(?:CT701G PLUS|CT701W|GT100)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'GT100'
      model: 'GT100'
      device: 'tablet'
    - regex: 'CT701W'
      model: 'CT701W'
      device: 'tablet'
    - regex: 'CT701G PLUS'
      model: 'CT701G Plus'
      device: 'tablet'

    - regex: 'Comio[ _-]?([^;/)]+)(?: Build|[);])'
      model: '$1'

# Compal
Compal:
  regex: 'Compal-[a-z0-9]+'
  device: 'feature phone'
  model: '$1'

# Artel (artelgroup.org)
Artel:
  regex: 'Artel[_ ]|\w+_ARTEL_\w+|(?: GAP|GAP YOQ| ALO|U1 MINI|Android 8.+; U4(?!/))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: ' GAP|GAP YOQ(?:[);/ ]|$)'
      model: 'Gap Yo Q'
    - regex: 'U1 MINI(?:[);/ ]|$)'
      model: 'U1 Mini'
    - regex: 'Android 8.+ U4(?:[);/ ]|$)'
      model: 'U4'
    - regex: ' ALO(?:[);/ ]|$)'
      model: 'Allo'
    - regex: 'Artel[_ ](Quadro(?: Pro)?|Tesla|Air|Tomchi|Premium|U3_4G|Z5|Sentinel (?:X 8G|X D5|X)|T10|T21)'
      model: '$1'
    - regex: 'Artel[_ ]Komi3'
      model: 'Komi 3'
    - regex: 'Artel[_ ]Q21_PRO'
      model: 'Q21 Pro'
    - regex: 'Artel[_ ](Star|Nova|Connect|Choice|Style)'
      model: '$1'
      device: 'tablet'

    - regex: '(?:\w+_)?ARTEL_([FVM]5|X[45])_\w+'
      device: 'feature phone'
      model: '$1'

# ComTrade Tesla
ComTrade Tesla:
  regex: 'Tesla(?!(?:Browser|Group/LUMUS))|Impulse 7.85 3G|Impulse 10.1 OCTA|Smartphone_6.1|SP(?:6.2|6.2_Lite)|TTL(?:713G|8)'
  device: 'smartphone'
  models:
    - regex: 'TeslaEvo5.0'
      model: 'Evo 5.0'
    - regex: '(Gravity 9.7 SHD)'
      model: '$1'
      device: 'tablet'
    - regex: '(Impulse 7.85 3G)'
      model: '$1'
      device: 'tablet'
    - regex: 'Impulse 10.1 OCTA'
      model: 'Impulse 10.1" OCTA'
      device: 'tablet'
    - regex: 'Tesla_SP([^/;)]+)L(?: Build|[;)])'
      model: 'Smartphone $1 Lite'
    - regex: 'Smartphone_6.1'
      model: 'Smartphone 6.1'
    - regex: 'SP6.2_Lite'
      model: 'Smartphone 6.2 Lite'
    - regex: 'Tesla_SP(\d+)[_.](\d+)(?: Build|[;)])'
      model: 'Smartphone $1.$2'
    - regex: 'Tesla_SP([^/;]+) Build'
      model: 'Smartphone $1'
    - regex: 'SP([^/;]+) Build'
      model: 'Smartphone $1'
    - regex: 'Smartphone ([36])'
      model: 'Smartphone $1'
    - regex: 'Tesla_Tablet_785'
      model: '7.85"'
      device: 'tablet'
    - regex: 'TTH7'
      model: 'H7'
      device: 'tablet'
    - regex: 'TTL7 Build'
      model: 'L7'
      device: 'tablet'
    - regex: 'Tesla_Tablet_L7_3G'
      model: 'L7 3G'
      device: 'tablet'
    - regex: '(L7.1)'
      model: '$1'
      device: 'tablet'
    - regex: 'TTL713G'
      model: 'L7.1 3G'
      device: 'tablet'
    - regex: '(L7 Quad) Build'
      model: '$1'
      device: 'tablet'
    - regex: '(L7 Quad Lite)'
      model: '$1'
      device: 'tablet'
    - regex: 'TTL8 Build'
      model: 'L8'
      device: 'tablet'
    - regex: '(L8.1)'
      model: '$1'
      device: 'tablet'
    - regex: 'TESLA_TABLET_M7'
      model: 'M7'
      device: 'tablet'
    - regex: 'Tesla_Tablet_M8'
      model: 'M8'
      device: 'tablet'
    - regex: 'TESLA XT550'
      model: 'MediaBox XT550'
      device: 'tv'
    - regex: 'TESLA,([a-z0-9_ \-]+),(?:wired|wireless)'
      model: ''
      device: 'tv'

# ConCorde
ConCorde:
  regex: 'ConCorde ([^/;]+) Build|Concorde_Raptor_Z55(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Concorde_(Raptor_Z55)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'ConCorde Tab ?([^/;]+) Build'
      model: 'Tab $1'
      device: 'tablet'
    - regex: 'ConCorde ReadMan ?([^/;]+) Build'
      model: 'ReadMan $1'
      device: 'tablet'
    - regex: 'ConCorde ([^/;]+) Build'
      model: '$1'

# Condor (www.condor.dz)
Condor:
  regex: 'Allure (?:A55 Slim|M[123]|X)|Griffe T[235-9]|TFX71[12]G|TFX71[34]L|TMK715L|TRA-901G|TGW[-]?(710G|709|102L|801[GL])|(?:PGN\-?[456][012][0-9]|PHS\-601|PHQ519|PAM412|PHQ52[056]|TB105L|TB717G|PKT\-301|Plume (?:H1|L[1-68]|P8|P6 PRO LTE)|Infinity E5|Infinity a4|Infinity_i[45]|PKT411)(?:[);/ ]|$)|CTAB[^/;]+ Build'
  device: 'smartphone'
  models:
    - regex: 'CTAB([^/;]+) Build'
      device: 'tablet'
      model: 'CTAB $1'
    - regex: '(TGW)-?(710G|709|801[GL]|102L)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1 $2'
    - regex: '(TFX71[12]G|TFX71[34]L|TB105L|TB717G|TMK715L)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: '(TRA)-(901G)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1 $2'

    - regex: 'PHS-601'
      model: 'C8'
    - regex: 'PGN-?403'
      model: 'C4+ Noir'
    - regex: 'PGN-?404'
      model: 'C7 Mini'
    - regex: 'PGN-?409'
      model: 'Plume P4'
    - regex: 'PKT-?301'
      model: 'C2'
    - regex: 'PGN-?504'
      model: 'C5'
    - regex: 'PGN-?505'
      model: 'C8S'
    - regex: 'PGN-?506'
      model: 'C7'
    - regex: '(Allure \w+) Plus'
      model: '$1 Plus'
    - regex: '(Allure \w+) Lite'
      model: '$1 Lite'
    - regex: '(Allure (?:M[123]|X))'
      model: '$1'
    - regex: 'PGN\-?507'
      model: 'Allure A9'
    - regex: 'PGN-?508'
      model: 'C6+'
    - regex: 'PGN\-?509'
      model: 'C6 Pro'
    - regex: 'PGN-?511'
      model: 'Allure A9 Plus'
    - regex: 'PAM-?412'
      model: 'G2S'
    - regex: 'PGN-?513'
      model: 'Griffe G4'
    - regex: 'PKT411'
      model: 'Griffe G2'
    - regex: 'PHQ519'
      model: 'Griffe G4S'
    - regex: 'PHQ520'
      model: 'Griffe G5'
    - regex: 'PHQ525'
      model: 'Griffe G6'
    - regex: 'PHQ526'
      model: 'Griffe G6 Pro'
    - regex: 'PGN-?514'
      model: 'Plume P7'
    - regex: 'PGN-?515'
      model: 'Plume P4 Pro'
    - regex: 'PGN-?516'
      model: 'Plume P5'
    - regex: 'PGN-?51[78]'
      model: 'Plume P6'
    - regex: 'Infinity a4'
      model: 'Infinity A4'
    - regex: 'Infinity e5 pro'
      model: 'Infinity E5 Pro'
    - regex: 'Infinity E5'
      model: 'Infinity E5'
    - regex: 'Infinity_i([45])'
      model: 'Infinity I$1'
    - regex: 'PGN-?521'
      model: 'Griffe G4 Plus'
    - regex: 'Griffe T3 ?pro'
      model: 'Griffe T3 Pro'
    - regex: 'Griffe T([0-9]) Plus'
      model: 'Griffe T$1 Plus'
    - regex: 'Griffe T([0-9])'
      model: 'Griffe T$1'
    - regex: 'PGN-?522'
      model: 'P6 Plus'
    - regex: 'PGN-?523'
      model: 'P7 Plus'
    - regex: 'PGN-?527'
      model: 'Plume P4 Plus'
    - regex: 'PGN-?528|PLUME P6 PRO LTE'
      model: 'Plume P6 Pro LTE'
    - regex: 'PGN-?605'
      model: 'Plume P8'
    - regex: 'PGN-?606'
      model: 'Allure A55'
    - regex: 'PGN-?607'
      model: 'Allure A100'
    - regex: 'PGN-?608|Allure A55 Slim'
      model: 'Allure A55 Slim'
    - regex: 'PGN-?609'
      model: 'Allure A100 Lite'
    - regex: 'PGN-?610'
      model: 'Plume P8 Lite'
    - regex: 'PGN-?611'
      model: 'Allure A8'
    - regex: 'PGN-?612'
      model: 'Allure A8 Plus'
    - regex: 'PGN-?613'
      model: 'Allure A55 Plus'
    - regex: 'Plume H1'
      model: 'Plume H1'
    - regex: 'Plume L([2468]) Pro'
      model: 'Plume L$1 Pro'
    - regex: 'Plume L([13]) Plus'
      model: 'Plume L$1 Plus'
    - regex: 'Plume L3 Smart'
      model: 'Plume L3 Smart'
    - regex: 'Plume L([1-5])'
      model: 'Plume L$1'
    - regex: 'Plume P8 Pro'
      model: 'Plume P8 Pro'

    - regex: 'PGN-?([0-9]{3})'
      model: 'PGN-$1'

# Coolpad (coolpad.us)
Coolpad:
  regex: '(?:YL-)?Coolpad|(?:Cool_9S|1824-S0|8190Q|1831-A0|8676-[AM]01|1872-A0|CP8298_I00|CP3648AT?|CP8676_I0[23]|REVVLPLUS C3701A|VCR-[AI]0|C105-(?:8|E0)|C106-[789]|C107-9| C106|MTS-T0|cp3705A[S]?|ORL-C0|DLS-E0|182[56]-I01|1825-E0| 1825|8298-(?:M02|A01)|5560S|CP3320AS2|CP3667AT|CP3706AS|CP3669AS|CP3321AT|CP350[34]L|C103|CP03|C1-U02|SAC-A0| 203[29])(?:[);/ ]|$)|(8295|5860S) Build'
  device: 'smartphone'
  models:
    - regex: 'VCR-[AI]0'
      model: 'Cool Play 6'
    - regex: '1831-A0(?:[);/ ]|$)'
      model: 'Cool Play C7'
    - regex: '1872-A0(?:[);/ ]|$)'
      model: 'Cool Play 7'
    - regex: ' 2032(?:[);/ ]|$)'
      model: 'N7 Plus'
    - regex: 'REVVLPLUS C3701A'
      model: 'REVVL Plus'
      device: 'phablet'
    - regex: 'CP3667AT'
      model: 'Tasker'
      device: 'tablet'
    - regex: '8190Q(?:[);/ ]|$)'
      model: '8190Q'
    - regex: 'DLS-E0(?:[);/ ]|$)'
      model: 'N5'
    - regex: '1825-E0'
      model: 'N5 Lite'
    - regex: '1824-S0(?:[);/ ]|$)'
      model: 'N5C'
    - regex: 'CP3321AT(?:[);/ ]|$)'
      model: 'Bellaza'
    - regex: 'CP3705A[S]?(?:[);/ ]|$)'
      model: 'Legacy'
    - regex: 'CP3648AT?(?:[);/ ]|$)'
      model: 'Legacy S'
    - regex: 'CP3320AS2?(?:[);/ ]|$)'
      model: 'Legacy S SR'
    - regex: 'CP3706AS(?:[);/ ]|$)'
      model: 'Legacy Brisa'
    - regex: 'CP3669AS(?:[);/ ]|$)'
      model: 'Suva'
    - regex: 'MTS-T0(?:[);/ ]|$)'
      model: 'N2M'
    - regex: '(?:C106-[789]|R116|C10[36]|C1-U02)(?:[);/ ]|$)'
      model: 'Cool 1'
    - regex: ' 2039(?:[);/ ]|$)'
      model: 'Cool S'
    - regex: 'C107-9(?:[);/ ]|$)'
      model: '1C'
    - regex: 'C105-(?:E0|8)(?:[);/ ]|$)'
      model: 'Cool S1'
    - regex: '1826-I01(?:[);/ ]|$)'
      model: 'Cool 5'
    - regex: '1825-I01(?:[);/ ]|$)'
      model: 'Cool 3 Plus'
    - regex: ' 1825(?:[);/ ]|$)'
      model: 'Cool 3'
    - regex: 'ORL-C0(?:[);/ ]|$)'
      model: 'Cool 9'
    - regex: 'Cool_9S(?:[);/ ]|$)'
      model: 'Cool 9S'
    - regex: 'CP03(?:[);/ ]|$)'
      model: 'Cool 20'
    - regex: 'SAC-A0(?:[);/ ]|$)'
      model: '26' # Tibetan Peak Edition
    - regex: '5560S(?:[);/ ]|$)'
      model: 'Arise'
    - regex: '(5860S|8295) Build'
      model: '$1'
    - regex: 'Coolpad[_ ]2041'
      model: '10A'
    - regex: 'E501'
      model: 'Modena'
    - regex: 'E502'
      model: 'Modena 2'
    - regex: 'CP8676_I02(?:[);/ ]|$)'
      model: 'Note 3'
    - regex: 'COR-I0(?:[);/ ]|$)'
      model: 'Note 6'
    - regex: 'CP8676_I03(?:[);/ ]|$)'
      model: 'Note 3 Plus'
    - regex: 'CP8298_I00(?:[);/ ]|$)'
      model: 'Note 3 Lite'
    - regex: '(CP350[34]L)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(8676-[AM]01|8298-(?:M02|A01))(?:[);/ ]|$)'
      model: '$1'
    - regex: '(?:YL-)?Coolpad[ _\-]?([^/;]+) Build'
      model: '$1'
    - regex: '(?:YL-)?Coolpad[ _\-]?([a-z0-9\-]+)'
      model: '$1'

# Clarmin (clarmin.com)
Clarmin:
  regex: 'Clarmin|(?:B8Lite|B8Plus|Android 7(?:[\d.]*);(?: [\w-]+;)? B5Pro)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'B8Lite'
      model: 'B8 Lite'
    - regex: 'B8Plus'
      model: 'B8 Plus'
    - regex: 'B5Pro'
      model: 'B5 Pro'
    - regex: 'Clarmin[_ ](B[65]|C1)'
      model: '$1'

# CORN (corn-mobile.com)
CORN:
  regex: 'CORN[_ ]|(?:C55 Pro|C60 Ultra|Fenix8_3G|Note1|Tronik_1|Star7 3G)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(C55 Pro|C60 Ultra|Star7 3G)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Fenix8_3G(?:[);/ ]|$)'
      model: 'Fenix 8 3G'
    - regex: 'CORN Note1(?:[);/ ]|$)'
      model: 'Note 1'
    - regex: 'CORN R([124])0'
      model: 'R$10'
    - regex: 'Tronik_1(?:[);/ ]|$)'
      model: 'Tronik 1'
    - regex: 'CORN[_ ]X(4|55|5)'
      model: 'X$1'

# Cosmote (https://www.telekom.ro/)
Cosmote:
  regex: 'Cosmote'
  device: 'smartphone'
  models:
    - regex: 'Cosmote_My_mini_Tab' # Allview My Mini Tab
      device: 'tablet'
      model: 'My Mini Tab'
    - regex: 'Cosmote?[_ ]([^;/)]+)(?: Build|[);])'
      model: '$1'

# Cricket
Cricket:
  regex: 'Cricket-([a-z0-9]+)|(?:U304AC|U325AC|U705AC|V350C|EC1002|EC21100[1-4]|SL100EA|SL101AE|WTCKT01)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'SL101AE'
      model: 'Debut Smart'
    - regex: 'EC211001'
      model: 'Dream 5G'
    - regex: 'U304AC'
      model: 'Icon'
    - regex: 'U325AC'
      model: 'Icon 2'
    - regex: 'EC211002'
      model: 'Icon 3'
    - regex: 'WTCKT01' # Wingtech
      model: 'Icon 4'
    - regex: 'V350C'
      model: 'Influence'
    - regex: 'EC211004'
      model: 'Innovate 5G'
    - regex: 'U705AC'
      model: 'Ovation'
    - regex: 'EC1002'
      model: 'Ovation 2'
    - regex: 'EC211003'
      model: 'Splendor'
    - regex: 'SL100EA'
      model: 'Vision Plus'
    - regex: 'Cricket-([a-z0-9]+)'
      device: 'feature phone'
      model: '$1'

# Crius
'Crius Mea':
  regex: '(Q7A\+?)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Crosscall
Crosscall:
  regex: 'Crosscall|ODYSSEY_Plus|Odyssey S1|Trekker-[MSX][1-4]|Action-X[35]|Core-(?:M[45]|T[45]|X[345])'
  device: 'smartphone'
  models:
    - regex: 'Action-X3 Pro(?:[);/ ]|$)'
      model: 'Action-X3 Pro'
    - regex: 'Action-X([35])(?:[);/ ]|$)'
      model: 'Action-X$1'
    - regex: 'Core-(M4) GO(?:[);/ ]|$)'
      model: 'Core-$1 Go'
    - regex: 'Core-(M[45]|X[345])(?:[);/ ]|$)'
      model: 'Core-$1'
    - regex: 'Crosscall ([^;/]+) Build'
      model: '$1'
    - regex: 'ODYSSEY_Plus'
      model: 'ODYSSEY+'
    - regex: 'Odyssey S1'
      model: 'ODYSSEY S1'
    - regex: 'Trekker-([MSX][1-4]) Core'
      model: 'Trekker-$1 Core'
    - regex: 'Trekker-([MSX][1-4](?: Core)?)'
      model: 'Trekker-$1'
    - regex: 'Core-T([45])(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Core-T$1'

# Crown
Crown:
  regex: 'CROWN, ([a-z0-9_ \-]+), (?:wired|wireless)|BlossomB902(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'CROWN, ([a-z0-9_ \-]+), (?:wired|wireless)'
      device: 'tv'
      model: ''
    - regex: 'BlossomB902'
      model: 'Blossom B902'

# AllDocube (alldocube.com)
AllDocube:
  regex: '(?:T1001XS?|T1006S?|T1001|iPlay[_ ][2345]0|U1006H?|U63PLUS|iPlay8|iPlay_?[89]T|iPlay[134]0|iPlay_40H|iPlay_?20[SP]|kPad|X_Game|T806MHE?|Power M3|Smile_X)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'Smile_X(?:[);/ ]|$)'
      model: 'Smile X'
    - regex: 'T1001XS(?:[);/ ]|$)'
      model: 'M5XS'
    - regex: 'kPad(?:[);/ ]|$)'
      model: 'kPad'
    - regex: 'T1006S(?:[);/ ]|$)'
      model: 'M5S'
    - regex: 'T1006(?:[);/ ]|$)'
      model: 'M5'
    - regex: 'T1001X(?:[);/ ]|$)'
      model: 'M5X'
    - regex: 'T1001(?:[);/ ]|$)'
      model: 'Power M3'
    - regex: 'U63PLUS(?:[);/ ]|$)'
      model: 'U63 Plus'
    - regex: 'U1006H?(?:[);/ ]|$)'
      model: 'iPlay 10 Pro 10.1"'
    - regex: 'T806MHE?'
      model: 'iPlay 8 Pro'
    - regex: 'iPlay[_ ]?([1-5]0|[89]T?|40H|20[sP])(?:[);/ ]|$)'
      model: 'iPlay $1'
    - regex: 'X_Game(?:[);/ ]|$)'
      model: 'X Game'
    - regex: 'Power M3(?:[);/ ]|$)'
      model: 'Power M3'

# MyTab
MyTab:
  regex: '(?:MyTAB[ _-](?:8 MINI Dual Core|U55GT)|U103GT1)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'MyTAB[ _-]8 MINI Dual Core(?:[);/ ]|$)'
      model: '8 Mini Dual Core'
    - regex: 'MyTAB-U55GT(?:[);/ ]|$)'
      model: 'U55GT'
    - regex: 'U103GT1(?:[);/ ]|$)'
      model: 'Volta'

# Cube (short name Alldocube)
Cube:
  regex: '(<!myPhone ?)Cube|(U[0-9]+GT|K8GT)|(?:T8-PLUSM?S?|T8PLUSML|I1-TF[BD]?|I1-TC|i15-T[CG]|I1_3GD|i1002S|Iwork10 Flagship|iwork10 Pro|T10 PLUS|CUBE-T970|U55GT_C8)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'U27GT-C8X?'
      model: 'Talk 8X'
    - regex: 'U25GT-C4YT|U25GT-W4'
      model: 'U25GT'
    - regex: 'U30GT ?2(?:[);/ ]|$)'
      model: 'U30GT2'
    - regex: 'U27GT'
      model: 'Talk 8'
    - regex: 'U55GT_C8'
      model: 'Talk 79'
    - regex: 'U51GT-SL'
      model: 'Talk 7X'
    - regex: 'U31GT'
      model: 'Talk 10'
    - regex: '(?:T8-PLUSM?S?|T8PLUSML)(?:[);/ ]|$)'
      model: 'T8 Ultimate'
    - regex: 'U55GT'
      model: 'Talk 79'
    - regex: 'T10 PLUS'
      model: 'T10 Plus'
    - regex: 'U65GT'
      model: 'Talk 9X'
    - regex: 'I1-TF[BD]?(?:[);/ ]|$)'
      model: 'iWork 8 Air'
    - regex: 'I1_3GD(?:[);/ ]|$)'
      model: 'iWork 8 3G'
    - regex: 'I1-TC(?:[);/ ]|$)'
      model: 'iWork 8 Ultimate'
    - regex: 'i15-TG(?:[);/ ]|$)'
      model: 'iWork 10 Ultimate'
    - regex: '(?:i1002S|iwork10 Pro)(?:[);/ ]|$)'
      model: 'iWork 10 Pro'
    - regex: 'Iwork10 Flagship|i15-TC(?:[);/ ]|$)'
      model: 'iWork 10 Flagship'
    - regex: 'CUBE-T970(?:[);/ ]|$)'
      model: 'T970 4G'

    - regex: '(U[0-9]+GT[^;/]*) Build'
      model: '$1'
    - regex: '(U[0-9]+GT(?:[0-9]|[\-_][a-z]+)?)'
      model: '$1'
    - regex: '(K8GT)'
      model: '$1'

# Meta (https://about.facebook.com/), former Oculus (https://www.oculus.com/)
Meta:
  regex: '(?:Pacific|Quest).+OculusBrowser|Standalone HMD'
  device: 'wearable'
  models:
    - regex: 'Pacific'
      model: 'Go'
    - regex: '(?:Quest 2|Standalone HMD)'
      model: 'Quest 2'
    - regex: 'Quest'
      model: 'Quest'

# CUBOT (www.cubot.net)
CUBOT:
  regex: 'CUBOT|(?<!QUMO )QUEST(?!(?:[0-9]|\s[0-9]))(?: LITE)?|(?:(?<!(?:Redmi|Tegra) )NOTE 7|NOTE 20(?: PRO)?|RAINBOW 2|KING_KONG_3|KINGKONG [567]|KINGKONG 5 Pro|ZORRO 001|KINGKONG[_ ]MINI2?|KING KONG CS|R15_PRO|S550 Pro| CHEETAH| [RX]19|X19 S|(?<!MI )MAX 3|Android 9;(?: [\w-]+;)? (?:J5|MAX 2)|Android [89](?:[\d.]*);(?: [\w-]+;)? R15|Android 11;(?: [\w-]+;)? (?:Pocket|NOTE 9)|POCKET 3)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'POCKET (3)'
      model: 'Pocket $1'
    - regex: 'Pocket'
      model: 'Pocket'
    - regex: 'CHEETAH( 2)?'
      model: 'Cheetah$1'
    - regex: 'RAINBOW 2'
      model: 'Rainbow 2'
    - regex: 'RAINBOW'
      model: 'Rainbow'
    - regex: 'DINOSAUR'
      model: 'Dinosaur'
    - regex: 'KINGKONG MINI2 Pro'
      model: 'King Kong Mini 2 Pro'
    - regex: 'KINGKONG MINI ?([23])'
      model: 'King Kong Mini $1'
    - regex: 'KINGKONG_MINI'
      model: 'King Kong Mini'
    - regex: 'KINGKONG 5 Pro'
      model: 'King Kong 5 Pro'
    - regex: 'KING[_ ]?KONG[_ ]([3567])'
      model: 'King Kong $1'
    - regex: 'KING KONG CS'
      model: 'King Kong CS'
    - regex: 'KING KONG'
      model: 'King Kong'
    - regex: 'QUEST LITE'
      model: 'Quest Lite'
    - regex: 'QUEST'
      model: 'Quest'
    - regex: 'ZORRO 001'
      model: 'Zorro 001'
    - regex: 'CUBOT[ _]Echo'
      model: 'Echo'
    - regex: 'CUBOT[ _]MANITO'
      model: 'Manito'
    - regex: 'CUBOT[ _]MAGIC'
      model: 'Magic'
    - regex: 'MAX ([23])'
      model: 'Max $1'
    - regex: 'CUBOT[ _]MAX'
      model: 'Max'
    - regex: 'NOTE Plus'
      model: 'Note Plus'
    - regex: 'NOTE 7'
      model: 'Note 7'
    - regex: 'NOTE 20 PRO'
      model: 'Note 20 Pro'
    - regex: 'NOTE (20|9)'
      model: 'Note $1'
    - regex: '(R15|S550|J3)[_ ]PRO'
      model: '$1 Pro'
    - regex: 'CUBOT[_ ]NOTE[_ ]S'
      model: 'Note S'
    - regex: 'CUBOT_NOVA'
      model: 'Nova'
    - regex: 'CUBOT_POWER'
      model: 'Power'
    - regex: 'CUBOT_X18_Plus'
      model: 'X18 Plus'
    - regex: 'CUBOT[ _](A5|C6W|H3|J3|P7|P20|[RXJ]9|R11|X18)(?:[);/ ]|$)'
      model: '$1'
    - regex: ' (X19 S|[RX]19|R15|J5)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'CUBOT ([^;/]+) Build'
      model: '$1'
    - regex: '([^;/]+) Build/CUBOT'
      model: '$1'

# Clout
Clout:
  regex: 'Hind[ _]5\.1|X417[ _]Amaze|X418[ _]Zest|X421[ _]Nova|X422[ ]Exotic|X425[ _]Shavit|X428[ _]Astute'
  device: 'smartphone'
  models:
    - regex: 'Hind[ _]5\.1'
      model: 'Hind 5.1'
    - regex: 'X417[ _]Amaze'
      model: 'X417 Amaze'
    - regex: 'X418[ _]Zest'
      model: 'X418 Zest'
    - regex: 'X421[ _]Nova'
      model: 'X421 Nova'
    - regex: 'X422[ _]Exotic'
      model: 'X422 Exotic'
    - regex: 'X425[ _]Shavit'
      model: 'X425 Shavit'
    - regex: 'X428[ _]Astute'
      model: 'X428 Astute'

# Concord (www.concord.com.tr)
Concord:
  regex: 'Concord[ _-]|(?:Flyfix 6|C-721|Plus-7_C777|Plus_M19_C779|Plus-9_C778|Dream_Edition_C-754)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'M10'
      model: 'M10'
    - regex: 'Flyfix 6'
      model: 'Flyfix 6'
    - regex: 'C-721'
      model: 'Flyfix Q'
      device: 'tablet'
    - regex: 'Plus[-_]([79]|M19)_(C77[789])(?:[);/ ]|$)'
      model: 'Plus-$1 $2'
      device: 'tablet'
    - regex: 'Dream_Edition_C-754'
      model: 'Dream Edition C-754'
      device: 'tablet'
    - regex: 'Concord_RANGE_HS'
      model: 'Range HS'
      device: 'tablet'

# Crescent
Crescent:
  regex: 'WING 5|WING9|Venus[ _][14]'
  device: 'smartphone'
  models:
    - regex: 'WING 5'
      model: 'Wing 5'
    - regex: 'WING9'
      model: 'Wing 9'
    - regex: 'Venus[ _]([14])'
      model: 'Venus $1'

# Cwowdefu
Cwowdefu:
  regex: 'C70W(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'C70W(?:[);/ ]|$)'
      model: 'C70W'

# Cyrus (www.cyrus-technology.de)
Cyrus:
  regex: 'Cyrus[ _-]|CyrusApel|CM17XA|CS(?:22|45)XA(?:_EEA)?(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'CM17XA(?:[);/ ]|$)'
      model: 'CM17XA'
    - regex: 'CS(22|45)XA(?:_EEA)?'
      model: 'CS$1 XA'
    - regex: 'Cyrus[ _-]?([^;/)]+)(?: Build|[);])'
      model: '$1'
    - regex: 'Cyrus[ _-]?([^;/)]+)(?:[);/ ]|$)'
      model: '$1'

# Datang
Datang:
  regex: 'DATANG'
  device: 'smartphone'
  models:
    - regex: '(?:DATANG[ _-])+([^;/]+) Build'
      model: '$1'
    - regex: '(?:DATANG[ _-])+([^;/)]+)(?:[;/)]|$)'
      model: '$1'

# Datsun
Datsun:
  regex: 'DATSUN'
  device: 'smartphone'
  models:
    - regex: 'DATSUN_D5500'
      model: 'D5500'
    - regex: 'Datsun_D5001'
      model: 'D5001'

# Danew (danew.fr)
Danew:
  regex: 'Dslide|Konnect_?(?:402|50[246]|556|60[1278])|GEODROID_A5|Dbook[_ ]110'
  device: 'smartphone'
  models:
    - regex: 'Konnect[_ ]?(402|50[246]|556|60[1278])'
      model: 'Konnect $1'
    - regex: 'GEODROID_A5'
      device: 'tablet'
      model: 'Geodroid A5'
    - regex: 'Dbook[_ ](110)'
      model: 'DBook $1'
      device: 'tablet'
    - regex: 'Dslide[ _]?([^;/)]+)(?: Build|[);])'
      device: 'tablet'
      model: 'DSlide $1'

# Dazen
Dazen:
  regex: 'dazen'
  device: 'smartphone'
  models:
    - regex: '6A'
      model: '6A'

# Denver Electronics (denver-electronics.com)
Denver:
  regex: '(?:TAQ_10[4G]|TA[CDQ]-[0-9]+)|P(?:.+)TAQ-(?:[0-9]+)|SDQ[_-](?:550[24]4L|52001G|50002G|57004L)'
  device: 'tablet'
  models:
    - regex: 'TAQ_(10[4G])'
      model: 'TAQ-$1'
    - regex: 'P(?:.+)TAQ-(10213GMK2|10172MK3|10242MK2|70242MK2|[0-9]+)(?:[);/ ]|$)'
      model: 'TAQ-$1'
    - regex: '(TA[CDQ]-[0-9]+)'
      model: '$1'
    - regex: 'SDQ[_-](550[24]4L|52001G|50002G|57004L)'
      device: 'smartphone'
      model: 'SDQ-$1'

# Dell
Dell:
  regex: 'Dell[^a-z]|Venue|XCD35|Latitude \d{4}|Inspiron N?\d{4}|Inspiron 13'
  device: 'smartphone'
  models:
    - regex: 'XCD35'
      model: 'XCD35'
    - regex: 'Venue ((?:10|[78]) [0-9]{4}|[78] HSPA\+)'
      model: 'Venue $1'
      device: 'tablet'
    - regex: '(?:Dell )?Venue(?: Build|[);])'
      model: 'Venue'
    - regex: 'Dell; Venue Pro'
      model: 'Venue Pro'

    - regex: '(OptiPlex (?:3050|7010))'
      device: 'desktop'
      model: '$1'
    - regex: 'Chromebook (\d{2} \(\d{4}\))'
      device: 'desktop'
      model: 'Chromebook $1'

    - regex: '(?:Dell )?(Streak|Venue) ?([^/;]*) Build'
      model: '$1 $2'
      device: 'tablet'
    - regex: '(?:Dell Inc./)?(XPS 13 9360|Latitude (?:7480|7390)|Inspiron N?\d{4}|Inspiron 13-\d{4})(?:[);/ ]|$)'
      device: 'desktop'
      model: '$1'
    - regex: 'Dell; ((?:Streak|Venue)[^;/\)]*)'
      model: '$1'
      device: 'tablet'
    - regex: 'Dell; ([^;/\)]+)'
      model: '$1'
    - regex: 'Dell[ _\-]([^/;]+) Build'
      model: '$1'

# Desay
Desay:
  regex: 'Desay'
  device: 'smartphone'
  models:
    - regex: 'Desay[ _-]?([^;/)]+)(?: Build|[;)])'
      model: '$1'
    - regex: 'Desay[ _-]?([^;/)]+)'
      model: '$1'

# DEXP (dexp.club)
DEXP:
  regex: 'DEXP|(?:Ursus|Ixion)[ _]([^;/)]+)|H135[ _]Build|Larus_TV1|Ixion(?:ML4.7|ES250)|M150Storm|(?:SENIOR|F4[38]D8000K|VA(?:[12]10|170)|ML450|MS[56]50|BL(?:[123]50|160|155)|BS(?:155|160|[1256]50)|(?<!ILIUM )S(?:3[78]0|2[89]0|670)|AL(?:[12]40|[23]50)|AS(?:155|[123]60)| (?:B260|B245|H[12]10|H270|L470|N280i|P310|P380i?|R1[18]0|Q110|E1[78]0|E[12]10|B(?:450|340|35[05])|M445|M[12]10|T155|H32F8000C|U43F8000Q|A(?:1[456]0|340|[34]55)|GS15[035]|GL[23]55|G25[035]|G355|G550|G15[05]|ES750|XL150|Z[1-4]55|H[13]70|H[34]10|P[45]10|L2[17]0)|Z250|A440|N[13]80i|(?<!Blade )L1[178]0|L3[17]0i|(?<!VOX )G450|G660|Q[123]10|Q[12]80|N[234]10|N[35]70|EX111|S[45]70|S[127]70i|S180i?|S770|A555(?! Universe)|(?:U50G8000QG|U43G9000CG|U43F8100QG|U55G8000QG|U50G9000CG|H32H8001C|H32G8000CG|H32F8000QG(?:-a)?|H32F8[01]00Q|H39F8000Q|U43H8000E|U43F8000EG|F43F8000QG?|F32[FG]8000C|H24H8000C|H24F8000Q)(?:-[Afed])?|Android 8(?:[\d.]*);(?: [\w-]+;)? A240|android 10;(?: [\w-]+;)? (?:B[23]1|B38|B1[87]|K28)|android 9;(?: [\w-]+;)? (?:K18|K21|B11)|android 11;(?: [\w-]+;)? (?:D[12]1|T21|K[345]1|K[342]8|K61|C37|B28|B27)|H32H8051C-G)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:DEXP_)?(ML450|MS[56]50|ES750|XL150|ES1050)(?:[);/ ]|$)'
      model: 'Ixion $1'
    - regex: 'IxionES250(?:[);/ ]|$)'
      model: 'Ixion ES250 Rage'
    - regex: 'IxionML4.7(?:[);/ ]|$)'
      model: 'Ixion ML 4.7"'
    - regex: 'Ixion ES2 5'
      model: 'Ixion ES2 5"'
    - regex: 'Ixion[_ ]([^;/]+)(?: Build|\))'
      model: 'Ixion $1'
    - regex: 'M150Storm(?:[);/ ]|$)'
      model: 'Ixion M150 Storm'
    - regex: 'M445(?:[);/ ]|$)'
      model: 'Ixion M445 Onyx 2'
    - regex: 'AL250(?:[);/ ]|$)'
      model: '4.5" AL250'
    - regex: 'AL350(?:[);/ ]|$)'
      model: '5.0" AL350'
    - regex: 'AS155(?:[);/ ]|$)'
      model: '5.45" AS155'
    - regex: 'AS260(?:[);/ ]|$)'
      model: '5.85" AS260'
      device: 'phablet'
    - regex: 'AS360(?:[);/ ]|$)'
      model: '6.22" AS360'
      device: 'phablet'

    - regex: 'Ursus[ _]([^;/)]+)(?: Build|[);])'
      model: 'Ursus $1'
      device: 'tablet'
    - regex: ' (K[23456]1|K[234]8|[KB]18|B[23]1|B[12]7|B[23]8|[BD]11|D21|T21|C37)(?:[);/ ]|$)'
      model: '$1'
      device: 'tablet'
    - regex: '(VA[21]10|VA170|E210|R1[18]0|Q110|M[12]10|N280i|P380i?|P[345]10|S2[89]0|S3[78]0|S[456]70|H[12]10|H[123]70|H[34]10|L1[178]0|L2[17]0|N[13]80i|N[234]10|E1[178]0|Q[123]10|Q[12]80|EX111|N[35]70|L3[17]0i|L470|S[127]70i|S770|S180i?)(?:[);/ ]|$)'
      model: 'Ursus $1'
      device: 'tablet'

    - regex: '(G450)[ _](2021)'
      model: '$1 ($2)'
    - regex: ' (B260|B245|A440|A[345]55|B450|B340|B35[05]|BL155|BL160|A160|A[23]40|T155|Z[1-4]55|G25[035]|G355|Z250|G450|G550|G660)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'SENIOR(?:[);/ ]|$)'
      model: 'Senior'

    - regex: 'Larus_TV1'
      device: 'feature phone'
      model: 'Larus_TV1'
    - regex: 'DEXP[_ ]Freya'
      device: 'console'
      model: 'Freya'

    - regex: '([HFU]\d{2}[A-Z]\d{4}[A-Z]{1,2}|AL-2020|H32H8051C-G)(?:-[Afed])?(?:[);/ ]|$)'
      device: 'tv'
      model: '$1'

    - regex: 'H135[ _]Build'
      model: 'Atlas'
      device: 'desktop'
    - regex: '(BL[123]50|BS155|BS160|BS[1256]50|AL[12]40|A1[45]0|GS15[035]|AS160|GL[23]55|G15[05])(?:[);/ ]|$)'
      model: '$1'
    - regex: 'DEXP[ _]([^;/]+) Build'
      model: '$1'
    - regex: 'DEXP[ _]([^);/]+)(?:[);/ ]|$)'
      model: '$1'

# DbPhone
DbPhone:
  regex: 'DB8PLUS'
  device: 'smartphone'
  model: 'DB8 Plus'

# Dbtel
Dbtel:
  regex: 'DBTEL(?:[\-/])?([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# DGTEC
DGTEC:
  regex: 'DG101TBIPS(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'DG101TBIPS(?:[);/ ]|$)'
      model: 'DG101TBIPS'
      device: 'tablet'

# Dialog or Dialog Blaze
Dialog:
  regex: 'Dialog ?([^;/]+)(?: Build|[;)])|(?:M50E-1A)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(M50E-1A)'
      model: '$1'
    - regex: 'Dialog ?([^;/]+)(?: Build|[;)])'
      model: '$1'

# Dicam
Dicam:
  regex: 'DICAM-([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# Digi
Digi:
  regex: '(?<!FBCR/)Digi[ _]([^);/]+)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Digicel
Digicel:
  regex: 'DIGICEL|DL3(?:PlusPro)?(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'DL3PlusPro'
      model: 'DL3 Plus Pro'
    - regex: 'DL3(?:[);/ ]|$)'
      model: 'DL3'
    - regex: 'DL755'
      model: 'DL755'
    - regex: 'DL810'
      model: 'DL810'
    - regex: 'DIGICEL[ _]([^/);]+)(?: Build|[;)])'
      model: '$1'

# Digidragon
Digidragon:
  regex: '(?:DS502|DS6018|DS6261)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(DS502|DS6018|DS6261)(?:[);/ ]|$)'
      model: '$1'

# Digihome
Digihome:
  regex: 'DIGIHOME, ([a-z0-9_ \-]+), (?:wired|wireless)'
  device: 'tv'
  model: ''

# Digiland
Digiland:
  regex: '(?:DL721-RB|DL(?:1016|1023|1036|900[23]|[78]006|1008M)|Compumax Blue)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'DL1008M'
      model: 'DL1008M'
    - regex: 'DL(1016|1023|1036|900[23]|[78]006|721-RB)'
      model: 'DL$1'
    - regex: '(Compumax Blue)' # Compumax
      model: '$1'

# Digit4G (https://digit4g.com/p)
Digit4G:
  regex: 'Digit(?:4G|play1)'
  device: 'smartphone'
  models:
    - regex: 'Digitplay1(?:[);/ ]|$)'
      model: 'Play1'
    - regex: 'Digit4G[ -](Energy|Pro)'
      model: '$1'

# Compumax or COMPUMAX COMPUTER  S.A.S (www.compumax.com.co)
COMPUMAX:
  regex: 'BlueS10(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'BlueS10'
      model: 'Blue S10'

# Digma
Digma:
  regex: 'Digma[_ ]([^;/]+) Build|iD[sr]Q\d+|DiMagic|HIT HT707[10]MG|CITI (?:7 E401 4G|8 E400 4G|ATL 4G|Kids|Octa [178]0|1902 3G|10 E402|Z530 3G)|(CITI[_ ](?:[A-Z0-9]+)[_ ][34]G)[ _][TC][ST](?:[0-9]{4}[PM][LG])|HIT 4G|HT7074ML|IDX5|(iDx10|iDx7)|MVM900H(?:WZ|C)|MVM908HCZ|(iDxD8 3G|iDxD10 3G|iDrQ10 3G|iDxD[45]|iDxQ5|iD[nx]D7(?:[_ ]3G)?)|PS604M|PT452E|Linx.+ [34]G L[TS][0-9]{4}[PM][GL]|Linx PS474S|PS1043MG|HT7071MG|HT5035PG|HT4039PG|NS6902QL|NS9797MG|TS7854M|TS1012E 3G|TT1004PG|TT702[045]MG|TT1002MG|TT7026MW|VRL42|((?:Optima(?![_ ]T-II)(?: Kids 7)?|Platina|Plane)[ _](?:[EM])?(?:[0-9\.ST]+|Prime)(?:[ _][43]G)?)|(VOX[ _](?:[0-9\.A-Z]+)[_ ][43]G)|DM-LED(?:32SR21|43SR23|42SR24|24SR20|55UR31)|RS1248PL|RS1253PL|RS1249PL'
  device: 'smartphone'
  models:
    - regex: 'HIT(?: 3G)? HT707[10]MG'
      model: 'HIT 3G'
      device: 'tablet'
    - regex: 'iDx5'
      model: 'iDx5'
    - regex: 'HT5035PG'
      model: 'HIT Q500 3G'
    - regex: 'HT4039PG'
      model: 'HIT Q401 3G'
    - regex: '(VOX[ _](?:[0-9\.A-Z]+)[_ ][43]G)'
      model: '$1'
    - regex: 'PS604M'
      model: 'Linx 6.0'
    - regex: 'LT4049PG'
      model: 'Linx Atom 3G'
    - regex: 'LT5048MG'
      model: 'Linx Joy 3G'
    - regex: 'LT5052ML'
      model: 'Linx Base 4G'
    - regex: 'LT4047MG'
      model: 'Linx Alfa 3G'
    - regex: 'LS4050MG'
      model: 'Linx X1 3G'
    - regex: 'LS4051MG'
      model: 'Linx X1 Pro 3G'
    - regex: 'LT4054MG'
      model: 'Linx Argo 3G'
    - regex: 'LS5041PL'
      model: 'Linx Trix 4G'
    - regex: 'LS5040PL'
      model: 'Linx Rage 4G'
    - regex: 'LS5053ML'
      model: 'Linx Pay 4G'
    - regex: 'Linx ([A-Z][0-9]{3}) 3G (?:LT4028PG|LS4019PG|LT4001PG|LT5001PG|LT4038PG|LT5037MG|LT4030PG)'
      model: 'Linx $1 3G'
    - regex: '(Linx PS474S)'
      model: '$1'
    - regex: 'PT452E'
      model: 'Linx 4.5'
    - regex: 'CITI ATL 4G CS5029ML'
      model: 'CITI ATL 4G'
    - regex: '(CITI Z530 3G)'
      model: '$1'
    - regex: '(CITI [A-Z0-9]+ [34]G) C[ST](?:606[32]ML|4024PG|5009PL|5021ML|502[56]PL)'
      model: '$1'

    - regex: 'TS7854M'
      model: 'Plane 8.1" 3G'
      device: 'tablet'
    - regex: 'RS1249PL'
      model: 'Pro 1800F 4G'
      device: 'tablet'
    - regex: 'PS1043MG'
      model: 'Plane 10.3" 3G'
      device: 'tablet'
    - regex: 'TS1012E 3G'
      model: 'Plane 10.1" 3G'
      device: 'tablet'
    - regex: 'MVM900H(?:WZ|C)'
      model: 'iDx8'
      device: 'tablet'
    - regex: 'MVM908HCZ'
      model: 'iDx9'
      device: 'tablet'
    - regex: '(iD(?:xD10|rQ10|xD7)[_ ]3G)'
      model: '$1'
      device: 'tablet'
    - regex: '(iDx10|iDx7)'
      model: '$1'
    - regex: '(iDxD[45]|iDxQ5)'
      model: '$1'
    - regex: 'HIT 4G HT7074ML'
      model: 'HIT 4G'
      device: 'tablet'
    - regex: 'PRO (1[46]00E 4G)'
      model: 'Pro $1'
      device: 'tablet'
    - regex: 'DIGMA[_ ]IDSD'
      model: 'IDsD 10 3G'
      device: 'tablet'
    - regex: 'CITI[_ ](1902 3G|Kids(?:[_ ]81)?|8527_4G|Octa [178]0|10 E402 4G|8 E400 4G|7 E401 4G)'
      model: 'CITI $1'
      device: 'tablet'
    - regex: '(CITI[ _](?:[A-Z0-9]+)[ _][34]G)[ _][TC][ST](?:106[24]ML|111[46]ML|1115MG|1117PG|1207MG|1210MG|3001ML|500[67]PG|7052PG|706[567]MG|7097MG|720[48]MG|820[69]MG|11[459]4MG|1195MG|1196ML|3001ML|8152ML|1050PL|709[68]PL|7113PL|7193MG|7216MG|8205PG|7203MG|8143MG|7153MG|7141MG|7140ML)'
      model: '$1'
      device: 'tablet'
    - regex: 'iDxD8 3G'
      model: 'D-Plane2 8'
      device: 'tablet'
    - regex: '(iDnD7)'
      model: '$1'
      device: 'tablet'
    - regex: 'NS6902QL'
      model: 'Platina 7.2 4G'
      device: 'tablet'
    - regex: 'NS9797MG'
      model: 'Platina 7.2 3G'
      device: 'tablet'
    - regex: 'TT1004PG'
      model: 'Optima 10.4" 3G'
      device: 'tablet'
    - regex: 'TT1002MG'
      model: 'Optima D 10.4" 3G'
      device: 'tablet'
    - regex: 'TT7025MG'
      model: 'Optima 7.5" 3G'
      device: 'tablet'
    - regex: 'TT7026MW'
      model: 'Optima 7.6" 3G'
      device: 'tablet'
    - regex: 'TT7020MG'
      model: 'Optima 7.3" 3G'
      device: 'tablet'
    - regex: 'TT7024MG'
      model: 'Optima 7.4" 3G'
      device: 'tablet'
    - regex: 'Optima ([0-9]+ [AXZE][0-9]+[SC]?) ([43])G'
      model: 'Optima $1 $2G'
      device: 'tablet'
    - regex: 'Optima ([0-9]+ A500S) 3G'
      model: 'Optima $1 3G'
      device: 'tablet'
    - regex: 'iD([sr])Q(\d+)[_ ]3G'
      model: 'iD$1Q$2 3G'
      device: 'tablet'
    - regex: 'iD([sr])Q(\d+)'
      model: 'iD$1Q$2'
      device: 'tablet'
    - regex: 'TS7203RW'
      model: 'Optima Kids 7'
      device: 'tablet'
    - regex: 'TT7000MG'
      model: 'Optima Prime 3G'
      device: 'tablet'
    - regex: '((?:Optima|Platina|Plane)[ _](?:[EM])?(?:[0-9\.STNMEVCD]+|Prime(?:[ _][345])?)(?:[ _][43]G)?)'
      model: '$1'
      device: 'tablet'
    - regex: 'Digma[_ ]([^;/]+) Build'
      model: '$1'
      device: 'tablet'
    # Cube Projector
    - regex: 'DiMagic Cube ([^;/)]+)(?: Build|[;)])'
      model: 'DiMagic Cube $1'
      device: 'peripheral'
    # VR headset
    - regex: 'VRL42(?:[);/ ]|$)'
      device: 'wearable'
      model: 'VR L42'
    # TV models
    - regex: 'DM-LED(\d+[SU]R\d+)(?:[);/ ]|$)'
      device: 'tv'
      model: 'DM-LED$1'

# DoCoMo
DoCoMo:
  regex: 'DoCoMo|\;FOMA|KGT/1\.0'
  device: 'feature phone'
  models:
    - regex: 'DoCoMo/.+MST.+(SH2101V)'
      model: '$1'
    - regex: 'DoCoMo/[12]\.0[/ ]([a-z0-9]+)'
      model: '$1'
    - regex: '([a-z0-9]+)(?:_W)?\;FOMA'
      model: '$1'
    - regex: 'KGT/1\.0 ([a-z0-9]+)'
      model: '$1'

# Doogee
Doogee:
  regex: 'DOOGEE[/ _-]|Valencia2_Y100(?:_?(?:pro|plus))?|Y100_Plus|X5max(?:[_ ]PRO)?|Shoot_[12]|x5_doogee|(KISSME|BIGBOY|COLLO[23]?|DAGGER|DISCOVERY2?|FIND|HOTWIND|LATTE|MAX|MINT|MOON|PIXELS|RAINBOX|TURBO|VALENCIA|VOYAGER2?|TITANS2?)[ -_](DG[0-9]+C?)(?:[);/ ]|$)|(?:BL12000|BL5500[_ ]Lite| Y6C|X9 Mini|LEO_DG280|Y9Plus|Y8 Plus|Hitman_DG850|S(?:4[01]|[568]8|9[05678]|59|61|8[69])Pro|X9[567]Pro|S[478]0Lite|S88Plus|BL[579]000|N[24]0Pro|(?<!Lenovo )S90C|Ibiza_F2|S55_Lite|T5_Lite|S60 ?Lite|Iron-bone DG750|X10S|X[569]0L|MIX2|Y6 Max|Y6_Piano(?:_black)?|X[679]pro|S96GT|android 10;(?: [\w-]+;)? (?:S59|S35|X95i?|X93)|android 12;(?: [\w-]+;)? (?:S98|S61|S89)|Y7Plus|S35T|Android 9(?:[\d.]*);(?: [\w-]+;)? Y8)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:Valencia2_)?Y100_Plus(?:[);/ ]|$)'
      model: 'Valencia2 Y100 Plus'
    - regex: 'Valencia2_Y100pro'
      model: 'Valencia2 Y100 Pro'
    - regex: 'Valencia2_Y100(?:[);/ ]|$)'
      model: 'Valencia2 Y100'
    - regex: 'LEO_(DG280)'
      model: 'Leo $1'
    - regex: 'Iron-bone (DG750)'
      model: 'Iron Bone $1'
    - regex: '(X95i?|BL[579]000|S90C|X10S|X[569]0L|X93)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'X(9[567])Pro(?:[);/ ]|$)'
      model: 'X$1 Pro'
    - regex: 'N([24]0)Pro(?:[);/ ]|$)'
      model: 'N$1 Pro'
    - regex: 'BL12000 PRO'
      model: 'BL12000 Pro'
    - regex: 'BL5500[_ ]Lite'
      model: 'BL5500 Lite'
    - regex: 'BL12000'
      model: 'BL12000'
    - regex: 'S([568]8|9[05678]|59|61|4[01]|8[69])Pro'
      model: 'S$1 Pro'
    - regex: 'S(88)Plus'
      model: 'S$1 Plus'
    - regex: 'S([4-8]0|55)[_ ]?Lite'
      model: 'S$1 Lite'
    - regex: 'S96GT'
      model: 'S96 GT'
    - regex: 'KISSME-DG580'
      model: 'Kissme DG580'
    - regex: 'Hitman_DG850'
      model: 'Hitman DG580'
    - regex: 'X9 Mini'
      model: 'X9 Mini'
    - regex: 'x5_doogee'
      model: 'X5'
    - regex: 'T5_Lite'
      model: 'T5 Lite'
    - regex: 'Doogee X5MP|x5MaxPro'
      model: 'X5 Max Pro'
    - regex: 'X5max_S'
      model: 'X5 Max S'
    - regex: 'Shoot_([12])'
      model: 'Shoot $1'
    - regex: 'Ibiza_F2'
      model: 'Ibiza F2'
    - regex: 'Y6_Piano_black'
      model: 'Y6 Piano Black'
    - regex: 'Y6_Piano'
      model: 'Y6 Piano'
    - regex: 'Y6 Max 3D'
      model: 'Y6 Max 3D'
    - regex: 'Y6 Max'
      model: 'Y6 Max'
    - regex: 'Y7Plus'
      model: 'Y7 Plus'
    - regex: 'X([679])pro'
      model: 'X$1 Pro'
    - regex: 'Y([89]) ?Plus(?:[);/ ]|$)'
      model: 'Y$1 Plus'
    - regex: ' (S59|S35T?|S98|S89|Y8|Y6C|S61)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(X5max(?:[_ ]PRO)?)'
      model: '$1'
    - regex: '(?:DOOGEE[ _-])?(BIGBOY|COLLO[23]?|DAGGER|DISCOVERY2?|FIND|HOTWIND|LATTE|MAX|MINT|MOON|PIXELS|RAINBOX|TURBO|VALENCIA|Valencia2_Y100pro|VOYAGER2?|TITANS2?)[ -_](DG[0-9]+C?)(?:[);/ ]|$)'
      model: '$1 $2'
    - regex: 'DOOGEE[ _-]([^);/]+) Build'
      model: '$1'
    - regex: 'DOOGEE[ _-]([^);/]+)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'MIX2(?:[);/ ]|$)'
      model: 'Mix 2'

# Doov
Doov:
  regex: '(?:Doov-)?Doov[ _]| (?:20200308|20190808)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '20200308(?:[);/ ]|$)'
      model: 'X11 Pro Max'
    - regex: '20190808(?:[);/ ]|$)'
      model: 'X11 Pro'
    - regex: '(?:Doov-)?Doov[ _]([^;/]+) Build'
      model: '$1'
    - regex: '(?:Doov-)?Doov[ _]([^);/]+)(?:[);/ ]|$)'
      model: '$1'

# Dopod
Dopod:
  regex: 'Dopod(?: )?([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# Doppio
Doppio:
  regex: 'Doppio '
  device: 'smartphone'
  models:
    - regex: 'Doppio DP355(?:[);/ ]|$)'
      model: 'DP355'
    - regex: 'Doppio ([0-9a-z]+)'
      model: '$1'

# Doro (doro.com)
Doro:
  regex: 'Doro|DSB-02[23]0'
  device: 'smartphone'
  models:
    - regex: 'DSB-0230(?:[);/ ]|$)'
      model: '8050'
    - regex: 'DSB-0220(?:[);/ ]|$)'
      model: '8080'
    - regex: 'Doro[ _-]?([^;/)]+) Build'
      model: '$1'
    - regex: 'Doro[ _-]([0-9a-z]+)'
      model: '$1'

# Dune HD
'Dune HD':
  regex: 'DuneHD|SOLO 4K(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'SOLO 4K(?:[);/ ]|$)'
      model: 'Solo 4k'
    - regex: 'DuneHD/\d.\d \([a-z]+__([a-z0-9_-]+);'
      model: '$1'
    - regex: 'DuneHD/\d.\d \(([a-z0-9_-]+);'
      model: '$1'

# DNS
DNS:
  regex: '(?:DNS|AirTab)[ _\-]([^;/)]+)|(?:S4505M|S4004M|SD01M)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:DNS[_ ])?(S4505M|S4004M|SD01M|S4502|S4003|S4003)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'S-4003(?:[);/ ]|$)'
      model: 'S4003'
    - regex: 'AirTab[ _\-]([^;/]+)(?: Build|[);])'
      model: 'AirTab $1'
      device: 'tablet'
    - regex: 'DNS[ _\-]([^;/]+)(?: Build|[);])'
      model: '$1'

# E-Boda (e-boda.ro)
E-Boda:
  regex: 'E-Boda|Eclipse_(?:G400M|G500)|Revo R77 GPS'
  device: 'smartphone'
  models:
    - regex: 'E-Boda ((?:Revo|Izzycomm(?: Z80)?|Essential|Intelligence|Supreme)[^/);]+)(?: Build|[;)])'
      device: 'tablet'
      model: '$1'
    - regex: 'Revo R77 GPS'
      device: 'tablet'
      model: 'Revo R77 GPS'
    - regex: 'Eclipse_(G400M|G500)'
      model: 'Eclipse $1'
    - regex: 'E-Boda ([^/);]+)(?: Build|[;)])'
      model: '$1'

# Easypix
Easypix:
  regex: 'EasyPad|(?<!INOI )EasyPhone'
  device: 'smartphone'
  models:
    - regex: '(EasyPhone[^/;]+) Build'
      model: '$1'
    - regex: 'EasyPad ([^/;)]+)(?: Build|[;)])'
      model: 'EasyPad $1'
      device: 'tablet'

# Ebest
EBEST:
  regex: 'EBEST'
  device: 'smartphone'
  models:
    - regex: 'EBEST[ _-]?([^;/)]+) Build'
      model: '$1'
    - regex: 'EBEST[ _-]?([^;/)]+)(?:[);/ ]|$)'
      model: '$1'

# Horizont (https://horizont.by/en/)
Horizont:
  regex: 'Horizont (32LE7011D|43LE7022D)'
  device: 'tv'
  model: '$1'

# Echo Mobiles
Echo Mobiles:
  regex: 'ECHO[ _](HOLI|HORIZON|MAX|MOSS|NOTE|POWER|SMART|DUNE|JAVA|FUSION)|(?:HORIZON_M|Stellar [34]G|FEELING|MOON(?![ _]HD[ _]Quad)|LOOK)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'ECHO_HORIZON_LITE'
      model: 'HORIZON Lite'
    - regex: '(HORIZON_M|FEELING|MOON|LOOK)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'STELLAR ([34])G'
      model: 'STELLAR $1G'
    - regex: 'ECHO_SMART_4G'
      model: 'SMART 4G'
    - regex: 'ECHO[ _](HOLI|MAX|MOSS|NOTE|POWER|SMART|DUNE|JAVA|FUSION)'
      model: '$1'

# ECS
ECS:
  regex: '(?:TA10CA3|TM105A?|TR10[CR]S1|TF10EA2)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'TA10CA3(?:[);/ ]|$)'
      model: 'TA10CA3'
    - regex: '(TR10[CR]S1|TF10EA2)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'TM105A(?:[);/ ]|$)'
      model: 'TM105A'
    - regex: 'TM105(?:[);/ ]|$)'
      model: 'TM105'

# EE
EE:
  regex: '(?:Harrier(?: Tab)?|Hawk|Rook)[_ ]from[_ ]EE'
  device: 'smartphone'
  models:
    - regex: '(Harrier Tab)[_ ]from[_ ]EE'
      device: 'tablet'
      model: '$1'
    - regex: 'Rook[_ ]from[_ ]EE'
      model: 'Rock'
    - regex: '(Harrier|Hawk)[_ ]from[_ ]EE'
      model: '$1'

# EGL
EGL:
  regex: 'EGL11QF6'
  device: 'smartphone'
  models:
    - regex: 'EGL11QF6'
      device: 'tablet'
      model: '11QF6'

# EKT
EKT:
  regex: 'EK-(?:5040|5336|5540|5937|6020|8680|MII|T7020)'
  device: 'tablet'
  models:
    - regex: 'EK-(MII|T7020)'
      model: 'EK-$1'
    - regex: 'EK-(5040|5336|5540|5937|6020|8680)'
      device: 'smartphone'
      model: 'EK-$1'

# Eks Mobility
Eks Mobility:
  regex: 'S5[UL]S|X4UPlus'
  device: 'smartphone'
  models:
    - regex: '(S5[UL]S)'
      model: '$1'
    - regex: 'X4UPlus'
      model: 'X4U Plus'

# Elephone
Elephone:
  regex: 'Elephone|Vowney(?: Lite)?|P6000(?!_Plus)( ?Pro| ?Plus|\+| ?02| 5.0 01)?|(?<!Chrome/)Soldier|(?:Trunk 1|P8_3D|P8_Max|P8_Mini|A6_mini|P9000(?:_Lite)?|Android 9;(?: [\w-]+;)? PX|PX_Pro| U3H|U_Pro|Android 10;(?: [\w-]+;)? (?:E10_Pro|E10))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:Elephone[_ ])?Trunk(?: 1)?(?:[);/ ]|$)'
      model: 'Trunk'
    - regex: 'Vowney Lite(?:[);/ ]|$)'
      model: 'Vowney Lite'
    - regex: 'Vowney(?:[);/ ]|$)'
      model: 'Vowney'
    - regex: 'P6000(\+| ?Plus)(?:[);/ ]|$)'
      model: 'P6000 Plus'
    - regex: 'P6000 02(?:[);/ ]|$)'
      model: 'P6000 02'
    - regex: 'P6000 5.0 01(?:[);/ ]|$)'
      model: 'P6000 01'
    - regex: 'P6000 ?Pro(?:[);/ ]|$)'
      model: 'P6000 Pro'
    - regex: 'P(\d+)[_ ]Lite(?:[);/ ]|$)'
      model: 'P$1 Lite'
    - regex: 'Soldier(?:[);/ ]|$)'
      model: 'Soldier'
    - regex: 'A6_mini(?:[);/ ]|$)'
      model: 'A6 Mini'
    - regex: 'P8_Mini(?:[);/ ]|$)'
      model: 'P8 Mini'
    - regex: '(U|PX|E10)_Pro(?:[);/ ]|$)'
      model: '$1 Pro'
    - regex: ' U3H(?:[);/ ]|$)'
      model: 'U3H'
    - regex: 'Android 9;(?: [\w-]+;)? PX(?:[);/ ]|$)'
      model: 'PX'
    - regex: '(P8_3D|P8_Max)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(?:Elephone[ _])?(P[7689]000|S2)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Elephone[ _\-]([^/;]+)(?: Build|[;)])'
      model: '$1'

# Element
Element:
  regex: 'AFTRS'
  model: 'Element 4K (2017)'
  device: 'tv'

# Elenberg
Elenberg:
  regex: '(?:TAB(?:101|728)[ _]3G|TAB7(?:[03]8|16|40|3[30])|STB0819)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(STB0819)'
      device: 'tv'
      model: '$1'
    - regex: '(TAB(?:101|728)[ _]3G|TAB7(?:[03]8|16|40|3[30]))'
      model: '$1'

# Ericy
Ericy:
  regex: 'Ericy-([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# Essential or Essential Products
Essential:
  regex: 'PH-1(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'PH-1'
      model: 'PH-1'

# E-tel (etelmobiles.com)
E-tel:
  regex: 'E-tel[-_ ](?:i2[45]0|i300|i7c|N[67]|Q4|O9)'
  device: 'smartphone'
  models:
    - regex: 'E-tel[-_ ]i(7c|\d+)'
      model: 'i$1'
    - regex: 'E-tel[-_ ]N([67])'
      model: 'N$1'
    - regex: 'E-tel[-_ ]O9'
      model: 'Curiosity O9'
    - regex: 'E-tel[-_ ]Q4'
      device: 'tablet'
      model: 'Q4'

# Evercoss
Evercoss:
  regex: 'EVERCOSS[ _]|(U6 PRIME|A75A\*|AT8B|U50A_PLUS|M50 (?:MAX|STAR)|A75 MAX|M50A|R40K|R70A|7.*; (?:R70|R5C)|S55[AB])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'A75A\*(?:[);/ ]|$)'
      model: 'A75A Star'
    - regex: '(A75|M50A) MAX*(?:[);/ ]|$)'
      model: '$1 Max'
    - regex: 'U50A_PLUS(?:[);/ ]|$)'
      model: 'U50A Plus'
    - regex: 'M50 STAR(?:[);/ ]|$)'
      model: 'M50 Star'
    - regex: 'M50 MAX(?:[);/ ]|$)'
      model: 'M50 Max'
    - regex: 'U6 PRIME'
      model: 'U6 Prime'
    - regex: ' (M50A|R40K|R70|R5C|S55[AB])(?:[);/ ]|$)'
      model: '$1'
    - regex: '(AT8B|R70A)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: 'EVERCOSS[ _](A7[BRLZ]|A65|A74A|A5Z)(?:[);/ ]|$)'
      model: '$1'

# Eurostar
Eurostar:
  regex: '(ET7002C-H12|ET8183GQ-HM15|ET7184GQ-B15|ET7183GQ-H16|Onyx-[13]S|T40SG?LED-A1[45])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Onyx-([13]S)'
      model: 'Onyx $1'
    - regex: 'ET7002C-H12'
      model: 'ePad 4S'
      device: 'tablet'
    - regex: '(ET8183GQ-HM15|ET7184GQ-B15|ET7183GQ-H16)'
      model: '$1'
      device: 'tablet'
    - regex: '(T40SG?LED-A1[45])'
      model: '$1'
      device: 'tv'

# Eton
Eton:
  regex: 'Eton'
  device: 'smartphone'
  models:
    - regex: 'Eton[ _-]?([^;/)]+) Build'
      model: '$1'
    - regex: 'Eton[ _-]?([^;/)]+)(?:[);/ ]|$)'
      model: '$1'

# Essentielb
Essentielb:
  regex: '(?:Wooze[_ ]?(?:I55?|I45|X?L)|HEYOU(?:[135]|20PLUS|[1-7]0))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'HEYOU20PLUS(?:[);/ ]|$)'
      model: 'HEYou 20 Plus'
    - regex: 'HEYOU([135]|[1-7]0)(?:[);/ ]|$)'
      model: 'HEYou $1'
    - regex: 'Wooze[_ ]?((?:I55?|I45|X?L))(?:[);/ ]|$)'
      model: 'Wooze $1'

# Facebook
Facebook:
  regex: 'PortalTV'
  device: 'tv'
  model: 'Portal TV'

# Gateway
Gateway:
  regex: 'GWAT8-1'
  device: 'smartphone'
  models:
    - regex: 'GWAT8-1'
      device: 'tablet'
      model: 'Tablet 8"'

# Ricoh (https://www.ricoh.com/)
Ricoh:
  regex: 'ricoh_'
  device: 'peripheral'
  models:
    - regex: 'ricoh_mfpapnl'
      model: 'MFP'

# Rikomagic or RMK
Rikomagic:
  regex: '(?:RKM[_ ])?MK(902II|902|80[28][^/;]*)(?: Build|[;)])'
  device: 'tv'
  model: 'MK$1'

# Rinno
Rinno:
  regex: 'Rinno (R(?:400|505))'
  device: 'smartphone'
  model: '$1'

# Riviera (www.riviera.com.ec)
Riviera:
  regex: 'RIVIERA[ _]'
  device: 'smartphone'
  models:
    - regex: 'RIVIERA[ _](F23|U963)'
      model: '$1'

# Senseit
Senseit:
  regex: 'SENSEIT[ _]?([^;/)]+)( Build|\))'
  device: 'smartphone'
  model: '$1'

# SunWind (sunwind.ru.com)
SUNWIND:
  regex: 'SUNWIND[_ ]|SUN[-_]LED\d+|(?:SKY 9 [EA]\d+ 3G)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'SKY ([79]) ([EA]\d+) 3G'
      model: 'Sky $1 $2 3G'
    - regex: 'SUN[-_]LED(\d+\w\d+)'
      device: 'tv'
      model: 'SUN-LED$1'

# ZoomSmart
ZoomSmart:
  regex: '(LT600T)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Sony & Sony Ericsson (combined as they are mixed up)
Sony:
  regex: 'Sony(?: ?Ericsson)?|SGP|Xperia|(?:[4-9]0[12])SO|C1[569]0[45]|C2[01]0[45]|C230[45]|C530[236]|C550[23]|C6[56]0[236]|C6616|C68(?:0[26]|[34]3)|C69(?:0[236]|16|43)|D(?:200[45]|21(?:0[45]|14)|22(?:0[236]|12|43)|230[2356]|240[36]|2502|2533|510[236]|530[36]|5316|5322|5503|58[03]3|65(?:0[23]|43|63)|66[03458]3|66[14]6|6708)|E(?:20[0345]3|2006|210[45]|2115|2124|230[36]|2312|23[356]3|530[36]|53[3456]3|5506|55[356]3|56[46305][36]|58[02]3|6508|65[35]3|66[0358]3|68[358]3)|F(?:311[12356]|331[13]|321[12356]|5[13]21|5122|813[12]|833[12])|G(?:2299|312[135]|311[26]|322[136]|3212|331[123]|3412|3416|342[136]|823[12]|834[123]|8[14]4[12]|8188)|H(?:3113|3123|3133|3213|3223|3311|3321|3413|4113|4133|4213|4233|4311|4331|4413|4433|4493|8116|8166|82[1679]6|83[12]4|8416|9436|9493)|I(?:3[12]23|3213|[34]113|[34]312|4193|42[19]3|4332)|J(?:3173|3273|81[17]0|82[17]0|91[15]0|92[16]0)|(?:WT|LT|SO|ST|SK|MK)[0-9]+[a-z]+[0-9]*(?: Build|\))|X?L39H|XM50[ht]|XQ-[A-Z]{2}[0-9]{2}|W960|portalmmm/2\.0 K|S3[69]h|SOG0[1-9]|SOL2[2-6]|SOT[23]1|SOV3[1-9]|SOV4[0-3]|X10[ia]v?|E1[05][ai]v?|MT[0-9]{2}[a-z]? Build|SO-0(?:[12]C|[2-5]D|[1-4]E|[1-5]F|[1-5]G|[1-4]H|[1-4]J|[1-5]K|1M|[1-3]L)|R800[aix]|LiveWithWalkman|BRAVIA|SGP771|E3 Dual|A[012]01SO|A204SO|A[12]02SO|SO-[45]1[AB]|SO-5[1234][ABC]|A[12]03SO|A002SO|NW-(A[13]00|ZX500|Z1000)Series|NSZ-GS7|SmartWatch 3|SVP-DTV15'
  device: 'smartphone'
  models:
    # SONY ERICSSON: explicit smartphone models
    - regex: '(?:Sony(?:Ericsson)?)?E10[ai]v?'
      model: 'Xperia X10 mini'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?U20'
      model: 'Xperia X10 mini pro'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?E15[ai]v?'
      model: 'Xperia X8'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?(LT15[ai]?v?|SO-01C)'
      model: 'Xperia arc'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?LT18[ai]v?'
      model: 'Xperia arc S'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?MT11'
      model: 'Xperia neo V'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?MT15'
      model: 'Xperia neo'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?MT27'
      model: 'Xperia Sola'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?MK16[ai]'
      model: 'Xperia pro'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?ST15[ai]'
      model: 'Xperia mini'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?ST17[ai]'
      model: 'Xperia active'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?SO-02L'
      model: 'Xperia Ace'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?ST18[ai]'
      model: 'Xperia ray'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?SK17[ai]?'
      model: 'Xperia mini pro'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?X10[ai]v?'
      model: 'Xperia X10'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)M1'
      model: 'Aspen'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?R800'
      model: 'Xperia PLAY'
      brand: 'Sony Ericsson'
    - regex: '(?:Sony(?:Ericsson)?)?WT19|LiveWithWalkman'
      model: 'Live with Walkman'
      brand: 'Sony Ericsson'

    # SONY ERICSSON: explicit feature phone models
    - regex: '(?:Sony(?:Ericsson)?)?CK13i'
      model: 'txt'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?CK15[ai]'
      model: 'txt pro'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?F100i'
      model: 'Jalou'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?J105'
      model: 'Naite'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?J108'
      model: 'Cedar'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?J10'
      model: 'Elm'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?J20'
      model: 'Hazel'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?U10'
      model: 'Aino'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?U100'
      model: 'Yari'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?U1'
      model: 'Satio'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?U5'
      model: 'Vivaz'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?U8'
      model: 'Vivaz pro'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?W20'
      model: 'Zylo'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?W100'
      model: 'Spiro'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?W150'
      model: 'Yendo'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?W960'
      model: 'W960'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: '(?:Sony(?:Ericsson)?)?WT13'
      model: 'Mix Walkman'
      brand: 'Sony Ericsson'
      device: 'feature phone'

    # SONY: explicit smartphone models
    - regex: 'SO-01E(?:[);/ ]|$)'
      model: 'Xperia AX'
    - regex: 'XQ-BE[4-7]2'
      model: 'Xperia Pro I'
    - regex: 'XQ-AQ[56]2'
      model: 'Xperia Pro'
    - regex: 'SO-04F'
      model: 'Xperia A2'
    - regex: 'SO-02D'
      model: 'Xperia NX'
    - regex: 'G2299'
      model: 'Xperia R1 Plus'
    - regex: 'SO-04G'
      model: 'Xperia A4'
    - regex: '(?:Sony(?:Ericsson)?)?I(?:4113|31[12]3)'
      model: 'Xperia 10'
    - regex: '(?:Sony(?:Ericsson)?)?J3173(?:[);/ ]|$)'
      model: 'Xperia Ace'
    - regex: 'SO-41B(?:[);/ ]|$)'
      model: 'Xperia Ace II'
    - regex: '(?:A203SO|SO-53C|SOG08)(?:[);/ ]|$)'
      model: 'Xperia Ace III'
    - regex: '(?:A001SO|XQ-AU42|XQ-AU51|XQ-A[TU]52|SO-41A|SOV43)(?:[);/ ]|$)'
      model: 'Xperia 10 II'
    - regex: '(?:A10[12]SO|SO-52B|SOG04|XQ-BT52)(?:[);/ ]|$)'
      model: 'Xperia 10 III'
    - regex: 'XQ-BT44(?:[);/ ]|$)'
      model: 'Xperia 10 III Lite'
    - regex: '(?:XQ-CC72|XQ-CC[45]4|SOG07|SO-52C|A202SO)(?:[);/ ]|$)'
      model: 'Xperia 10 IV'
    - regex: '(?:Sony(?:Ericsson)?)?I(?:42[19]3|32[12]3)'
      model: 'Xperia 10 Plus'
    - regex: '(?:Sony(?:Ericsson)?)?I4193'
      model: 'Xperia 10 Dual'
    - regex: '(?:Sony(?:Ericsson)?)?(?:J(?:9110|81[17]0)|SOV40|SO-03L|802SO)'
      model: 'Xperia 1'
    - regex: '(?:Sony(?:Ericsson)?)?(?:J9150)'
      model: 'Xperia 1 Professional Edition'
    - regex: '(?:Sony(?:Ericsson)?)?(?:SOG01|SO-51A|XQ-AT42|XQ-AT51|SO51Aa|XQ-AT72)(?:[);/ ]|$)'
      model: 'Xperia 1 II'
    - regex: '(?:Sony(?:Ericsson)?)?(?:SO-51B|SOG03|XQ-BC[4567]2)(?:[);/ ]|$)'
      model: 'Xperia 1 III'
    - regex: '(?:Sony(?:Ericsson)?)?(?:SOG06|XQ-CT72|SO-51C|A201SO|XQ-CT[45]4)(?:[);/ ]|$)'
      model: 'Xperia 1 IV'
    - regex: '(?:Sony(?:Ericsson)?)?LT22i|Xperia P'
      model: 'Xperia P'
    - regex: '(?:Sony(?:Ericsson)?)?LT25i|Xperia V'
      model: 'Xperia V'
    - regex: '(?:Sony(?:Ericsson)?)?J92[16]0'
      model: 'Xperia 5 Dual'
    - regex: '(?:Sony(?:Ericsson)?)?(?:J82[17]0|SO-01M|SOV41|901SO)'
      model: 'Xperia 5'
    - regex: '(?:Sony(?:Ericsson)?)?(?:SOG02|A002SO|XQ-AS[4567]2|SO-52A)'
      model: 'Xperia 5 II'
    - regex: '(?:Sony(?:Ericsson)?)?(?:SO-53B|A103SO|SOG05|XQ-BQ[4567]2)'
      model: 'Xperia 5 III'
    - regex: '(?:SOG09|XQ-CQ72|SO-54C|XQ-CQ44|A204SO)'
      model: 'Xperia 5 IV'
    - regex: '(?:Sony(?:Ericsson)?)?(?:SOV42|902SO)'
      model: 'Xperia 8'
    - regex: '(?:Sony(?:Ericsson)?)?J3273'
      model: 'Xperia 8 Lite'
    - regex: '(?:Sony(?:Ericsson)?)?LT26ii'
      model: 'Xperia SL'
    - regex: '(?:Sony(?:Ericsson)?)?LT26i|Xperia S(?:[);/ ]|$)'
      model: 'Xperia S'
    - regex: '(?:Sony(?:Ericsson)?)?SO-02C'
      model: 'Xperia arco'
    - regex: '(?:Sony(?:Ericsson)?)?SO-03D'
      model: 'Xperia arco HD'
    - regex: '(?:Sony(?:Ericsson)?)?LT26w'
      model: 'Xperia arco S'
    - regex: '(?:Sony(?:Ericsson)?)?LT28[aih]'
      model: 'Xperia ion'
    - regex: '(?:Sony(?:Ericsson)?)?LT29i|Xperia TX(?:[);/ ]|$)'
      model: 'Xperia TX'
    - regex: '(?:Sony(?:Ericsson)?)?LT30a'
      model: 'Xperia T LTE'
    - regex: '(?:Sony(?:Ericsson)?)?LT30p'
      model: 'Xperia T'
    - regex: '(?:Sony(?:Ericsson)?)?ST21[ia]2'
      model: 'Xperia tipo dual'
    - regex: '(?:Sony(?:Ericsson)?)?ST21[ia]'
      model: 'Xperia tipo'
    - regex: '(?:Sony(?:Ericsson)?)?ST23[ia]'
      model: 'Xperia miro'
    - regex: '(?:Sony(?:Ericsson)?)?ST25[ia]'
      model: 'Xperia U'
    - regex: '(?:Sony(?:Ericsson)?)?SOL22'
      model: 'Xperia UL'
    - regex: '(?:Sony(?:Ericsson)?)?SOL21'
      model: 'Xperia VL'
    - regex: '(?:Sony(?:Ericsson)?)?ST26[ia]'
      model: 'Xperia J'
    - regex: '(?:Sony(?:Ericsson)?)?ST27[ia]'
      model: 'Xperia go'
    - regex: '(?:Sony(?:Ericsson)?)?C150[45]'
      model: 'Xperia E'
    - regex: '(?:Sony(?:Ericsson)?)?C160[45]'
      model: 'Xperia E Dual'
    - regex: '(?:Sony(?:Ericsson)?)?(?:E210[45]|E2115|E2124)'
      model: 'Xperia E4'
    - regex: '(?:Sony(?:Ericsson)?)?E20[05]3|E2006'
      model: 'Xperia E4G'
    - regex: '(?:Sony(?:Ericsson)?)?C190[45]'
      model: 'Xperia M'
    - regex: '(?:Sony(?:Ericsson)?)?C200[45]'
      model: 'Xperia M Dual'
    - regex: '(?:Sony(?:Ericsson)?)?C210[45]|S36h'
      model: 'Xperia L'
    - regex: '(?:Sony(?:Ericsson)?)?C230[45]|S39h'
      model: 'Xperia C'
    - regex: '(?:Sony(?:Ericsson)?)?C530[236]|Xperia SP(?:[);/ ]|$)'
      model: 'Xperia SP'
    - regex: '(?:Sony(?:Ericsson)?)?C550[23]'
      model: 'Xperia ZR'
    - regex: '(?:Sony(?:Ericsson)?)?C650[236]|Xperia ZL(?:[);/ ]|$)'
      model: 'Xperia ZL'
    - regex: '(?:Sony(?:Ericsson)?)?SOL25(?:[);/ ]|$)'
      model: 'Xperia ZL2'
    - regex: '(?:Sony(?:Ericsson)?)?(?:C66(?:0[236]|16)|SO-02E)'
      model: 'Xperia Z'
    - regex: '(?:Sony(?:Ericsson)?)?(?:C68(?:0[26]|[34]3)|XL39H|SOL24)|Xperia Z Ultra(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Xperia Z Ultra'
    - regex: 'Xperia Z(?:[);/ ]|$)'
      model: 'Xperia Z'
    - regex: '(?:Sony(?:Ericsson)?)?D200[45]'
      model: 'Xperia E1'
    - regex: '(?:Sony(?:Ericsson)?)?D21(?:0[45]|14)'
      model: 'Xperia E1 Dual'
    - regex: '(?:Sony(?:Ericsson)?)?D22(?:0[236]|43)'
      model: 'Xperia E3'
    - regex: '(?:Sony(?:Ericsson)?)?D2212|E3 Dual'
      model: 'Xperia E3 Dual'
    - regex: '(?:Sony(?:Ericsson)?)?E20[34]3'
      model: 'Xperia E4g Dual'
    - regex: 'H33[12]1'
      model: 'Xperia L2'
    - regex: 'H43[13]1'
      model: 'Xperia L2 Dual'
    - regex: 'I3312'
      model: 'Xperia L3'
    - regex: 'I43[13]2'
      model: 'Xperia L3 Dual'
    - regex: 'XQ-AD5[12]'
      model: 'Xperia L4'
    - regex: '(?:Sony(?:Ericsson)?)?D2302'
      model: 'Xperia M2 Dual'
    - regex: '(?:Sony(?:Ericsson)?)?D230[356]'
      model: 'Xperia M2'
    - regex: '(?:Sony(?:Ericsson)?)?D240[36]'
      model: 'Xperia M2 Aqua'
    - regex: '(?:Sony(?:Ericsson)?)?(?:E230[36]|E23[35]3)'
      model: 'Xperia M4 Aqua'
    - regex: '(?:Sony(?:Ericsson)?)?(?:E2312|E2363)'
      model: 'Xperia M4 Aqua Dual'
    - regex: '(?:Sony(?:Ericsson)?)?E56[05][36]'
      model: 'Xperia M5'
    - regex: '(?:Sony(?:Ericsson)?)?E56[436]3'
      model: 'Xperia M5 Dual'
    - regex: '(?:Sony(?:Ericsson)?)?D2502'
      model: 'Xperia C3 Dual'
    - regex: '(?:Sony(?:Ericsson)?)?D2533'
      model: 'Xperia C3'
    - regex: '(?:Sony(?:Ericsson)?)?E53[05]3|E5306'
      model: 'Xperia C4'
    - regex: '(?:Sony(?:Ericsson)?)?E53[0346]3'
      model: 'Xperia C4 Dual'
    - regex: '(?:Sony(?:Ericsson)?)?E5506|E5553'
      model: 'Xperia C5 Ultra'
    - regex: '(?:Sony(?:Ericsson)?)?E55[36]3'
      model: 'Xperia C5 Ultra Dual'
    - regex: '(?:Sony(?:Ericsson)?)?D510[236]'
      model: 'Xperia T3'
    - regex: '(?:Sony(?:Ericsson)?)?(?:D530[36]|D5316|XM50[ht])'
      model: 'Xperia T2 Ultra'
      device: 'phablet'
    - regex: '(?:Sony(?:Ericsson)?)?D5322'
      model: 'Xperia T2 Ultra Dual'
      device: 'phablet'
    - regex: '(?:Sony(?:Ericsson)?)?D5503|Xperia Z1 Compact'
      model: 'Xperia Z1 Compact'
    - regex: '(?:Sony(?:Ericsson)?)?(?:C69(?:0[236]|16|43)|SOL23|L39H|SO-0[12]F)|Xperia Z1(?:[);/ ]|$)'
      model: 'Xperia Z1'
    - regex: '(?:Sony(?:Ericsson)?)?(?:D58[03]3|SO-02G)|Xperia Z3 Compact(?:[);/ ]|$)'
      model: 'Xperia Z3 Compact'
    - regex: 'Xperia Z2 Tablet Wifi'
      model: 'Xperia Z2 Tablet WiFi'
      device: 'tablet'
    - regex: 'SGP561|SOT21(?:[);/ ]|$)'
      model: 'Xperia Z2 Tablet'
      device: 'tablet'
    - regex: '(?:Sony(?:Ericsson)?)?(?:D65(?:0[23]|43)|SO-03F)|Xperia Z2(?:[);/ ]|$)'
      model: 'Xperia Z2'
    - regex: 'D6563'
      model: 'Xperia Z2a'
    - regex: '(?:Sony(?:Ericsson)?)?(?:D66[045]3|D66[14]6|SO-01G|SOL26|401SO)|Xperia Z3(?:[);/ ]|$)'
      model: 'Xperia Z3'
    - regex: '(?:Sony(?:Ericsson)?)?(?:D6633|D6683)'
      model: 'Xperia Z3 Dual'
    - regex: '(?:Sony(?:Ericsson)?)?(?:E65[35]3)'
      model: 'Xperia Z3+'
    - regex: '(?:Sony(?:Ericsson)?)?(?:D6708)'
      model: 'Xperia Z3v'
    - regex: 'SOV31|402SO|SO-03G'
      model: 'Xperia Z4'
    - regex: 'E6508'
      model: 'Xperia Z4v'
    - regex: 'SGP771|SOT31|SO-05G'
      model: 'Xperia Z4'
      device: 'tablet'
    - regex: '(?:Sony(?:Ericsson)?)?(?:E58[02]3|SO-02H)'
      model: 'Xperia Z5 Compact'
    - regex: '(?:Sony(?:Ericsson)?)?(?:E66[05]3|SOV32|501SO|SO-01H)'
      model: 'Xperia Z5'
    - regex: '(?:Sony(?:Ericsson)?)?E66[38]3'
      model: 'Xperia Z5 Dual'
    - regex: '(?:Sony(?:Ericsson)?)?(?:E68[58]3|SO-03H)'
      model: 'Xperia Z5 Premium'
    - regex: '(?:Sony(?:Ericsson)?)?E6833'
      model: 'Xperia Z5 Premium Dual'
    - regex: '(?:Sony(?:Ericsson)?)?F311[135]'
      model: 'Xperia XA'
    - regex: '(?:Sony(?:Ericsson)?)?F311[26]'
      model: 'Xperia XA Dual'
    - regex: '(?:Sony(?:Ericsson)?)?F321[135]'
      model: 'Xperia XA Ultra'
    - regex: '(?:Sony(?:Ericsson)?)?F321[26]'
      model: 'Xperia XA Ultra Dual'
    - regex: '(?:Sony(?:Ericsson)?)?F833[12]|SOV34|601SO|SO-01J'
      model: 'Xperia XZ'
    - regex: '(?:Sony(?:Ericsson)?)?(?:701SO|SOV36|G834[123]|SO-01K)'
      model: 'Xperia XZ1'
    - regex: '(?:Sony(?:Ericsson)?)?G8441|SO-02K'
      model: 'Xperia XZ1 Compact'
    - regex: '(?:Sony(?:Ericsson)?)?F331[13]'
      model: 'Xperia E5'
    - regex: '(?:Sony(?:Ericsson)?)?G312[135]|G311[26]'
      model: 'Xperia XA1'
    - regex: '(?:Sony(?:Ericsson)?)?G341[26]|G342[13]'
      model: 'Xperia XA1 Plus'
    - regex: '(?:Sony(?:Ericsson)?)?G3426'
      model: 'Xperia XA1 Plus Dual'
    - regex: '(?:Sony(?:Ericsson)?)?G322[136]|G3212'
      model: 'Xperia XA1 Ultra'
    - regex: '(?:Sony(?:Ericsson)?)?H31[123]3'
      model: 'Xperia XA2'
    - regex: '(?:Sony(?:Ericsson)?)?H41[13]3'
      model: 'Xperia XA2 Dual'
    - regex: 'H44[19]3|H3413'
      model: 'Xperia XA2 Plus'
    - regex: 'H4433'
      model: 'H4433'
    - regex: '(?:Sony(?:Ericsson)?)?H(?:3213|3223|4213|4233)'
      model: 'Xperia XA2 Ultra'
    - regex: '(?:Sony(?:Ericsson)?)?G823[12]|SOV35|602SO|SO-03J'
      model: 'Xperia XZs'
    - regex: '(?:Sony(?:Ericsson)?)?(?:G814[12]|G8188|SO-04[JK])'
      model: 'Xperia XZ Premium'
    - regex: '(?:Sony(?:Ericsson)?)?(?:H83[12]4|H82[17]6|SOV37|SO-03K|H8296|702SO)'
      model: 'Xperia XZ2'
    - regex: 'H8266'
      model: 'Xperia XZ2 Dual'
    - regex: 'SO-05K'
      model: 'Xperia XZ2 Compact'
    - regex: '(?:H81[16]6|SOV38)(?:[);/ ]|$)'
      model: 'Xperia XZ2 Premium Dual'
    - regex: '(?:Sony(?:Ericsson)?)?(?:H(8416|9436|9493)|SO-01L|SOV39|801SO)'
      model: 'Xperia XZ3'
    - regex: '(?:Sony(?:Ericsson)?)?G331[13]'
      model: 'Xperia L1'
    - regex: '(?:Sony(?:Ericsson)?)?G3312'
      model: 'Xperia L1 Dual'
    - regex: '(?:Sony(?:Ericsson)?)?SO-04E'
      model: 'Xperia A'
    - regex: '(?:Sony(?:Ericsson)?)?SO-04D'
      model: 'Xperia GX'
    - regex: '(?:Sony(?:Ericsson)?)?SO-05D'
      model: 'Xperia SX'
    - regex: '(?:Sony(?:Ericsson)?)?F5121'
      model: 'Xperia X'
    - regex: '(?:Sony(?:Ericsson)?)?F5122'
      model: 'Xperia X Dual'
    - regex: '(?:Sony(?:Ericsson)?)?F5321|SO-02J'
      model: 'Xperia X Compact'
    - regex: '(?:Sony(?:Ericsson)?)?(?:F8131|502SO|SOV33|SO-04H)'
      model: 'Xperia X Performance'
    - regex: '(?:Sony(?:Ericsson)?)?F8132'
      model: 'Xperia X Performance Dual'

    # SONY: explicit tablet models
    - regex: '(?:SGP(?:311|312|321)|(Sony)?SO-03E|Tablet Z LTE)(?:[);/ ]|$)'
      model: 'Xperia Tablet Z'
      device: 'tablet'
    - regex: 'SGP712(?:[);/ ]|$)'
      model: 'Xperia Tablet Z4'
      device: 'tablet'
    - regex: 'SGP(?:511|512|521)(?:[);/ ]|$)|SO-05F'
      model: 'Xperia Tablet Z2'
      device: 'tablet'
    - regex: 'SGP(?:6[124]1|612)(?:[);/ ]|$)'
      model: 'Xperia Tablet Z3 Compact'
      device: 'tablet'
    - regex: 'SGPT(?:12|121|122|123|13|131|132|133)(?:[);/ ]|$)'
      model: 'Xperia Tablet S'
      device: 'tablet'

    # SONY: explicit wearable models
    - regex: 'SmartWatch 3'
      model: 'SmartWatch 3'
      device: 'wearable'

    # SONY: Bravia or TV Box
    - regex: '(?:BRAVIA )(2K GB ATV3|[48]K UR[123]|4K GB ATV3|4K GB|4K VH2|4K 2015|2015|VH1|VU1)(?:[);/ ]|$)'
      model: 'Bravia $1'
      device: 'tv'
    - regex: 'SVP-DTV15(?:[);/ ]|$)'
      model: 'Bravia 4K (2015)'
      device: 'tv'
    - regex: '(NSZ-GS7)(?:[);/ ]|$)'
      model: '$1'
      device: 'tv'
    - regex: 'Sony-BRAVIA-VH1(?:[);/ ]|$)'
      model: 'Bravia VH1'
      device: 'tv'

    - regex: 'NW-(A[13]00|Z1000|ZX500)Series'
      model: 'Walkman $1'
      device: 'portable media player'

    # general detections
    - regex: 'SonyBDP|SonyDBV'
      model: 'Blu-ray Player'
      device: 'tv'
    - regex: 'BDP2015'
      model: 'Blu-ray Player (2015)'
      device: 'tv'
    - regex: '(?:Sony-)?(KDL?-?[0-9a-z]+)'
      model: '$1'
      device: 'tv'
    - regex: 'Opera TV Store.*(?:Sony-)([0-9a-z\-_]+)'
      model: '$1'
      device: 'tv'
    - regex: '((?:WT|SO|ST|SK|MK)[0-9]+[a-z]*[0-9]*)(?: Build|\))'
      model: '$1'
      brand: 'Sony Ericsson'
    - regex: '(MT[0-9]{2}[a-z]?)(?:[);/ ]|$)'
      model: '$1'
      brand: 'Sony Ericsson'
    - regex: 'portalmmm/2.0 K([a-z0-9]+)'
      model: 'K$1'
      brand: 'Sony Ericsson'
    - regex: 'SonyEricsson ?IS11S'
      model: 'arco IS11S'
      brand: 'Sony Ericsson'
    - regex: 'Sony ?Ericsson?([^/;]*) Build'
      model: '$1'
      brand: 'Sony Ericsson'
    - regex: 'SonyEricsson([CGJKPTWZ][0-9]+[a-z]+)/'
      model: '$1'
      brand: 'Sony Ericsson'
      device: 'feature phone'
    - regex: 'Sony ?Ericsson ?([a-z0-9\-]+)'
      model: '$1'
      brand: 'Sony Ericsson'
    - regex: 'Sony Corporation/([^/;]*)\)'
      model: '$1'
      device: 'desktop'

    - regex: 'Sony (Tablet[^/;]*) Build'
      model: '$1'
      device: 'tablet'
    - regex: '(SGP[^/;]*) Build'
      model: '$1'
      device: 'tablet'
    - regex: 'Xperia ([^/;]*Tablet[^/;]*) Build'
      model: 'Xperia $1'
      device: 'tablet'
    - regex: 'Xperia ([^;/]+) \(AOSP\) Build'
      model: 'Xperia $1'
    - regex: 'Xperia ([^;/]+) Build'
      model: 'Xperia $1'
    - regex: '(XQ-[A-Z]{2}[0-9]{2})'
      model: '$1'
    - regex: 'Sony[ -]?([^/;]*) Build'
      model: '$1'
    - regex: 'Sony[ -]?([a-z0-9\-]+)'
      model: '$1'

# Ergo
Ergo:
  regex: 'ERGO|(V550[_ ]Vision|B502 Basic|B504[_ ]Unit|A502[_ ]Aurum|A503[ _]Optima|Prime B400|A551 Sky 4G|A553 Power|A555 Universe|Force F500|GoTab GBT9|GoTab Gti8|F501_Magic|V551[ _]Aura|V540_Level|V570_BIG_BEN|B506[_ ]INTRO|A503-Optima|B505_Unit_4G|LE32CT5515AK)'
  device: 'smartphone'
  models:
    - regex: 'F501_Magic'
      model: 'F501 Magic'
    - regex: 'B502 Basic'
      model: 'B502 Basic'
    - regex: 'A503-Optima'
      model: 'A503 Optima'
    - regex: 'B506[_ ]INTRO'
      model: 'B506 Intro'
    - regex: 'V550[_ ]Vision'
      model: 'V550 Vision'
    - regex: 'B504[_ ]Unit'
      model: 'B504 Unit'
    - regex: 'B505_Unit_4G'
      model: 'B505 Unit 4G'
    - regex: 'V551[ _]Aura'
      model: 'V551 Aura'
    - regex: 'V540_Level'
      model: 'V540 Level'
    - regex: 'V570_BIG_BEN'
      model: 'V570 Big Ben'
    - regex: 'Ergo F502'
      model: 'F502 Platinum'
    - regex: '(ERGO_)?A500[ _]Best'
      model: 'A500 Best'
    - regex: '(ERGO_)?A550[ _]Maxx'
      model: 'A550 Maxx'
    - regex: 'Prime B400'
      model: 'Prime B400'
    - regex: 'A502[_ ]Aurum'
      model: 'A502 Aurum'
    - regex: 'A503[ _]Optima'
      model: 'A503 Optima'
    - regex: 'A551 Sky 4G'
      model: 'A551 Sky 4G'
    - regex: 'A553 Power'
      model: 'A553 Power'
    - regex: 'A555 Universe'
      model: 'A555 Universe'
    - regex: 'ERGO[_ ]A556'
      model: 'A556'
    - regex: 'ERGO[_ ]F500'
      model: 'F500'
    - regex: 'ERGO[_ ]F501'
      model: 'F501'
    - regex: 'B500 First'
      model: 'B500 First'
    - regex: 'Force F500'
      model: 'Force F500'
    - regex: 'GoTab GBT9'
      model: 'GoTab GBT9'
      device: 'tablet'
    - regex: 'GoTab Gti8'
      model: 'GoTab GTi8'
      device: 'tablet'
    - regex: 'ERGO[_ ]Tab[ _]Crystal[ _]Lite'
      model: 'Tab Crystal Lite'
      device: 'tablet'
    - regex: 'ERGO[_ ]Tab[ _]Hero[ _]II'
      model: 'Tab Hero II'
      device: 'tablet'
    - regex: 'ERGO[_ ](B700)'
      model: 'Tab $1'
      device: 'tablet'

    - regex: 'ERGO SmartBox SX'
      model: 'SmartBox SX'
      device: 'tv'
    - regex: '(LE32CT5515AK)'
      model: '$1'
      device: 'tv'

# Ericsson
Ericsson:
  regex: '(?:Ericsson(?:/ )?[a-z0-9]+)|(?:R380 2.0 WAP1.1)'
  device: 'feature phone'
  models:
    - regex: 'Ericsson(?:/ )?([a-z0-9]+)'
      model: '$1'
    - regex: 'R380 2.0 WAP1.1'
      model: 'R380'

# Energizer (www.energizeyourdevice.com)
Energizer:
  regex: 'PowerMax|HARDCASEH5[05]0S|ENERGY[_ ]?(?:[45]00|400S|S[56]00|E12|E5[02]0S?)(?:[_ ](?:LTE|EU))?'
  device: 'smartphone'
  models:
    - regex: 'PowerMax(P[0-9]+S?)'
      model: 'Power Max $1'
    - regex: 'ENERGY[_ ]([45]00|E520)[_ ]LTE'
      model: 'Energy $1 LTE'
    - regex: 'ENERGY[_ ]400S'
      model: 'Energy 400S'
    - regex: 'ENERGY400'
      model: 'Energy 400'
    - regex: 'ENERGY[_ ]S([56]00)'
      model: 'Energy S$1'
    - regex: 'ENERGY[_ ]?(E500S|E500|E12)'
      model: 'Energy $1'
    - regex: 'HARDCASE(H5[05]0S)'
      model: 'Hard Case $1'

# eTouch
eTouch:
  regex: 'eTouch ?([a-z0-9]+)'
  device: 'smartphone'
  model: '$1'

# Etuline
Etuline:
  regex: '(ETL-S(?:3520|4521|5042|5084|6022)|ETL-T(?:752G|850|882G|9[78]0))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(ETL-S(?:[^/); ]+))'
      model: '$1'
    - regex: '(ETL-T(?:[^/); ]+))'
      device: 'tablet'
      model: '$1'

# Storex
Storex:
  regex: "eZee[^a-z]*Tab ?([^;/]*) Build|STOREX LinkBox"
  device: 'tablet'
  models:
    - regex: "eZee[^a-z]*Tab ?([^;/]*) Build"
      model: "eZee'Tab$1"
    - regex: 'STOREX LinkBox'
      model: 'LinkBox'
      device: 'tv'

# Everest (everest-global.eu)
Everest:
  regex: '(?:DC-(?:1032|121[56]|110[24]|1028|1545|70[59]|71[48]|85[56]|971[45])|(?:EVERPAD )?DC-709|DC-9712-8)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'DC-(1032|1028|121[56]|110[24]|1545|70[59]|71[48]|85[56]|971[45]|9712)'
      model: 'EverPad DC-$1'

# Evertek
Evertek:
  regex: '(Ever(?:Allure|Glory|Shine|Miracle|Mellow|Classic|Trendy|Fancy|Vivid|Slim|Glow|Magic|Solo|Smart|Star)[^/);]*)(?: Build|[;)])|(?:E70[25]0HD|E805[01]HD|E9054HD|E8050HG|E1014HG|E7224HG|E7914HG|V5_Nano|M10 Nano|V4 Nano| V4\+)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(E70[25]0HD|E805[01]HD|E9054HD|E8050HG|E7914HG|E7224HG|E1014HG)'
      device: 'tablet'
      model: 'Everpad $1'
    - regex: '(M10|V[45])[_ ]Nano'
      model: '$1 Nano'
    - regex: 'EverMiracle Plus'
      model: 'EverMiracle Plus'
    - regex: ' V4\+'
      model: 'V4 Plus'
    - regex: 'EverTrendy\+4G'
      model: 'EverTrendy 4G'
    - regex: 'Ever(Shine|Allure|Glory) ?II'
      model: 'Ever$1 II'
    - regex: '(Ever(?:Allure|Glory|Shine|Miracle|Mellow|Classic|Trendy|Fancy|Vivid|Slim|Glow|Magic|Solo|Smart|Star)[^/);]*)(?: Build|[;)])'
      model: '$1'

# Evolio
Evolio:
  regex: 'Evolio|M4MAGIC'
  device: 'smartphone'
  models:
    - regex: 'M4MAGIC'
      model: 'M4 Magic'
    - regex: 'Evolio_M5Pro'
      model: 'M5 Pro'
    - regex: 'Evolio[ _](M6|S4 Cobalt|S5|X10|Yuppi)'
      model: '$1'

# Evolveo
Evolveo:
  regex: 'EVOLVEO|StrongPhone'
  device: 'smartphone'
  models:
    - regex: 'EVOLVEO MultiMedia Box M4'
      device: 'tv'
      model: 'MultiMedia Box M4'
    - regex: 'Smart TV ([^;/]*) Build'
      device: 'tv'
      model: 'Smart TV $1'
    - regex: 'Android Stick Q4'
      device: 'tv'
      model: 'Stick Q4'
    - regex: 'StrongPhone D2 Mini'
      model: 'StrongPhone D2 Mini'
    - regex: 'EVOLVEO StrongPhone G(\d)'
      model: 'StrongPhone G$1'
    - regex: '(?:EVOLVEO[ _])?StrongPhone[ _]?Q([679])(_LTE)?'
      model: 'StrongPhone Q$1$2'
    - regex: 'EVOLVEO[ _]([^;/]*) Build'
      model: '$1'

# Evoo
Evoo:
  regex: '(EVM4G3|EVM4G6|EVMFV2)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Leotec
Leotec:
  regex: '(LESPH501[14]|LESPH5003B|SUPERNOVA[ _](?:Qi16|i216|Qi32|i3G96[X]?|iS3G)|PULSAR QI3G|LETAB916|Titanium T355)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'LESPH5011'
      model: 'Argon e250'
    - regex: 'LESPH5003B'
      model: 'Argon A250B'
    - regex: 'LESPH5014'
      model: 'Krypton K150'
    - regex: 'Titanium T355'
      model: 'Titanium T355'
    - regex: 'SUPERNOVA[ _](i216|Qi16|Qi32|i3G96[X]?|iS3G)'
      device: 'tablet'
      model: 'Supernova $1'
    - regex: 'PULSAR (QI3G)'
      device: 'tablet'
      model: 'Pulsar $1'
    - regex: 'LETAB916'
      device: 'tablet'
      model: 'L-Pad Star S'

# EVPAD (https://www.evpadpro.com/ or https://evpad.com.my/)
EVPAD:
  regex: '(?:EVBOX-PLUS\+|EVPAD-[35]S)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'EVBOX-PLUS\+'
      model: 'EVBox Plus'
    - regex: 'EVPAD-([35]S)'
      model: '$1'

# EvroMedia
EvroMedia:
  regex: 'EVROMEDIA|Playpad[ _]|PLAY_PAD_PRO_XL|3G NOTE XL'
  device: 'tablet'
  models:
    - regex: 'Playpad 3G GOO'
      model: 'Play Pad 3G Goo'
    - regex: 'Play Pad 3G 2Goo'
      model: 'Play Pad 3G 2Goo'
    - regex: 'Play Pad PRO'
      model: 'Play Pad Pro'
    - regex: 'PLAY_PAD_PRO_XL'
      model: 'Play Pad Pro XL'
    - regex: 'PlayPad 3GTab XL'
      model: 'Play Pad 3G Tab XL'
    - regex: '3G NOTE XL'
      model: 'Play Pad 3G Note XL'
# EKO
EKO:
  regex: 'EKO|Star (?:\d\.\d) (?:G65|G5[05]|G40)'
  device: 'smartphone'
  models:
    - regex: 'EKO Android TV 2K'
      model: '2K Android TV'
      device: 'tv'
    - regex: 'Star (\d\.\d) (G65|G5[05]|G40)'
      model: 'Star $1 $2'
    - regex: 'EKO[ _-]?([^;/)]+) Build'
      model: '$1'
    - regex: 'EKO[ _-]?([^;/)]+)(?:[);/ ]|$)'
      model: '$1'

# Extrem
Extrem:
  regex: 'Rock[ _]X[89]+|ROCK_X11'
  device: 'smartphone'
  models:
    - regex: 'Rock[ _]X([89])\+'
      model: 'Rock X$1+'
    - regex: 'ROCK_X11'
      model: 'Rock X11'

# Jumper (jumper.com.ru)
Jumper:
  regex: 'EZpad ([^;/)]+)(?: Build|[;)])'
  device: 'tablet'
  model: 'EZpad $1'

# JPay (https://www.jpay.com/)
JPay:
  regex: '(JP5s?) Inmate Media Device(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Ezze
Ezze:
  regex: 'EZZE-|EZ(?!Browser)[a-z0-9]+'
  device: 'feature phone'
  models:
    - regex: 'EZZE-([a-z0-9]+)'
      model: '$1'
    - regex: 'EZ([a-z0-9]+)'
      model: 'EZ$1'

# Ezio
Ezio:
  regex: 'EZIO-([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# Forstar
Forstar:
  regex: 'Amosta ?3G5'
  device: 'smartphone'
  models:
    - regex: 'Amosta ?3G5'
      model: 'Amosta 3G5'

# Foxconn
Foxconn:
  regex: 'InFocus M[0-9]+[a-z]?'
  device: 'smartphone'
  models:
    - regex: 'InFocus M([0-9]+[a-z]?)'
      model: 'InFocus M$1'

# Fondi
Fondi:
  regex: 'Fondi[- _]([^;/)]+)|(T702|Q008B|Q010B|Q718B|Q902|T602B|T707G|T708B|T725B|T725B1|T907B)(?:\)| Build)'
  device: 'smartphone'
  models:
    - regex: '(T702|T602B)'
      model: '$1'
    - regex: '(Q008B|Q010B|Q718B|Q902|T707G|T708B|T725B|T725B1|T907B)'
      device: 'tablet'
      model: '$1'
    - regex: 'Fondi[- _]([^;/)]+)'
      model: '$1'

# Fairphone (fairphone.com)
Fairphone:
  regex: ' (FP(?:1U?|[234]))(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Famoco
Famoco:
  regex: '(FX[123]00)'
  device: 'smartphone'
  model: '$1'

# FiGO (figoglobal.com)
FiGO:
  regex: 'ATRIUM II F55L2|TRIO F40LT|CENTRIC S50G|EPIC F50G|Gravity X55L|Orion M50L|ULTRA M50G|UltraJ8|M405B|VIRTUE3|F55L Build|Orbit_ll|F40G2'
  device: 'smartphone'
  models:
    - regex: 'ATRIUM II F55L2'
      model: 'Atrium II'
    - regex: '(F55L)'
      model: '$1'
    - regex: 'TRIO F40LT'
      model: 'Trio F40LT'
    - regex: 'EPIC F50G'
      model: 'Epic F50G'
    - regex: '(Gravity X55L|Orion M50L)'
      model: '$1'
    - regex: 'ULTRA M50G'
      model: 'Prime'
    - regex: 'M405B_8GB'
      model: 'Virtue II 8GB'
    - regex: 'M405B'
      model: 'Virtue II'
    - regex: 'VIRTUE3'
      model: 'Virtue III'
    - regex: 'CENTRIC S50G'
      model: 'Centric S50G'
    - regex: 'UltraJ8'
      model: 'Ultra J8'
    - regex: 'Orbit_ll'
      model: 'Orbit II'
    - regex: 'F40G2'
      model: 'Ultra Plus F40G2'

# FNB
FNB:
  regex: 'ConeXis (A[12]|X[12])|SP5045V'
  device: 'smartphone'
  models:
    - regex: 'SP5045V'
      model: 'SP5045V'
    - regex: 'ConeXis A1'
      model: 'ConeXis A1'
    - regex: 'ConeXis A2'
      model: 'ConeXis A2'
    - regex: 'ConeXis X1'
      model: 'ConeXis X1'
    - regex: 'ConeXis X2'
      model: 'ConeXis X2'

# Fujitsu
Fujitsu:
  regex: '(?:F-01[FHJKLM]|F-02[EFGHLK]|F-03[DEFGKHL]|F-04[EGFHKJ]|F-05[DEFJG]|F-06[EF]|F-07[DE]|F-08D|F-09[DE]|F-10D|F-[45]1A|F-41B|F-[45]2A|F-11D|F-12C|F-5[12]B|M532|FARTM933KZ|901FJ|arrows(?:RX|M03|M0[45](?:-PREMIUM)?)|801FJ|FJL2[12]|RM02|FCG01|A101FC)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'F-51A(?:[);/ ]|$)'
      model: 'Arrows 5G F-51A'
    - regex: 'F-01F(?:[);/ ]|$)'
      model: 'Arrows NX F-01F'
    - regex: '(F-01[LM]|F-06F|F-03K|F-42A)(?:[);/ ]|$)'
      model: 'Easy Phone $1'
    - regex: 'F-03L(?:[);/ ]|$)'
      model: 'Arrows Phone F-03L'
    - regex: 'F-01J(?:[);/ ]|$)'
      model: 'Arrows NX F-01J'
    - regex: 'F-01K(?:[);/ ]|$)'
      model: 'Arrows NX F-01K'
    - regex: 'F-01H(?:[);/ ]|$)'
      model: 'Arrows Fit F-01H'
    - regex: 'F-02E(?:[);/ ]|$)'
      model: 'Arrows X F-02E'
    - regex: 'F-02G(?:[);/ ]|$)'
      model: 'Arrows NX F-02G'
    - regex: 'FJL21(?:[);/ ]|$)'
      model: 'Arrows EF FJL21'
    - regex: 'FJL22(?:[);/ ]|$)'
      model: 'Arrows Z FJL22'
    - regex: 'F-02H(?:[);/ ]|$)'
      model: 'Arrows NX F-02H'
    - regex: 'F-52A(?:[);/ ]|$)'
      model: 'Arrows NX9 F-52A'
    - regex: 'F-03D(?:[);/ ]|$)'
      model: 'Arrows Kiss F-03D'
    - regex: 'F-03E(?:[);/ ]|$)'
      model: 'Arrows Kiss F-03E'
    - regex: 'F-03F(?:[);/ ]|$)'
      model: 'Disney Mobile F-03F'
    - regex: 'F-03H(?:[);/ ]|$)'
      model: 'Arrows SV F-03H'
    - regex: '901FJ(?:[);/ ]|$)'
      model: 'Arrows J 901FJ'
    - regex: 'F-04E(?:[);/ ]|$)'
      model: 'Arrows V F-04E'
    - regex: 'F-04G(?:[);/ ]|$)'
      model: 'Arrows NX F-04G'
    - regex: 'F-05D(?:[);/ ]|$)'
      model: 'Arrows X LTE F-05D'
    - regex: 'F-05F(?:[);/ ]|$)'
      model: 'Arrows NX F-05F'
    - regex: 'F-05J(?:[);/ ]|$)'
      model: 'Arrows Be F-05J'
    - regex: 'F-05G(?:[);/ ]|$)'
      model: 'Arrows K-tai'
    - regex: 'F-04K(?:[);/ ]|$)'
      model: 'Arrows Be F-04K'
    - regex: 'F-02L(?:[);/ ]|$)'
      model: 'Arrows Be 3 F-02L'
    - regex: 'F-41A(?:[);/ ]|$)'
      model: 'Arrows Be 4 F-41A'
    - regex: 'F-41B(?:[);/ ]|$)'
      model: 'Arrows Be 4 Plus F-41B'
    - regex: 'F-06E(?:[);/ ]|$)'
      model: 'Arrows NX F-06E'
    - regex: 'F-07D(?:[);/ ]|$)'
      model: 'Arrows μ F-07D'
    - regex: '(?:F-51B|FCG01|A101FC)(?:[);/ ]|$)'
      model: 'Arrows We'
    - regex: '801FJ(?:[);/ ]|$)'
      model: 'Arrows U 801FJ'
    - regex: 'F-07E(?:[);/ ]|$)'
      model: 'Disney Mobile F-07E'
    - regex: 'F-08D(?:[);/ ]|$)'
      model: 'Disney Mobile F-08D'
    - regex: 'F-09D(?:[);/ ]|$)'
      model: 'ANTEPRIMA F-09D'
    - regex: 'F-09E(?:[);/ ]|$)'
      model: 'Raku-Raku Smartphone Premium F-09E'
    - regex: 'F-52B(?:[);/ ]|$)'
      model: 'Raku-Raku Smartphone F-52B'
    - regex: 'F-10D(?:[);/ ]|$)'
      model: 'Arrows X F-10D'
    - regex: 'F-11D(?:[);/ ]|$)'
      model: 'Arrows Me F-11D'
    - regex: 'F-12C(?:[);/ ]|$)'
      model: 'F-12C'
    - regex: '(F-04[JF])(?:[);/ ]|$)'
      model: '$1'
    - regex: 'arrowsM03(?:[);/ ]|$)'
      model: 'Arrows M03'
    - regex: 'RM02(?:[);/ ]|$)'
      model: 'Arrows RM02'
    - regex: 'arrowsRX(?:[);/ ]|$)'
      model: 'Arrows RX'
    - regex: 'arrowsM04-PREMIUM(?:[);/ ]|$)'
      model: 'Arrows M04 Premium'
    - regex: 'arrowsM(0[45])(?:[);/ ]|$)'
      model: 'Arrows M$1'

    - regex: '(F-0[32]F|F-03G|F-04H|F-05E|F-02K)(?:[);/ ]|$)'
      model: 'Arrows Tab $1'
      device: 'tablet'
    - regex: 'FARTM933KZ'
      model: 'Arrows Tab M504/HA4'
      device: 'tablet'
    - regex: 'M532(?:[);/ ]|$)'
      model: 'Stylistic'
      device: 'tablet'

# G-TiDE
G-TiDE:
  regex: 'G-TiDE|(?: EX10|EXTREME X9)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Shining7'
      model: 'Shining 7'
    - regex: 'G-TiDE[_ ](A1|S[34]|E520|Vans 8)'
      model: '$1'
    - regex: 'G-TiDE V6'
      model: 'V6'
    - regex: 'EXTREME X9'
      model: 'Extreme X9'
    - regex: ' EX10'
      model: 'EX10'
    - regex: 'E(57|60|66|72|77)'
      model: '$1'

# Gemini
Gemini:
  regex: '(GEM[0-9]+[a-z]*)'
  device: 'tablet'
  model: '$1'

# Geotel
Geotel:
  regex: 'GEOTEL[ _]?'
  device: 'smartphone'
  models:
    - regex: 'G1'
      model: 'G1'
    - regex: 'GEOTEL[ _]?Note'
      model: 'Note'
    - regex: 'GEOTEL[ _]AMIGO'
      model: 'Amigo'

# Gigabyte
Gigabyte:
  regex: 'GSmart[ _][a-z0-9 ]+(?: Build|\))|Gigabyte-[a-z0-9]+|Simba SX1|Roma R2|Boston 4G|GSmart_Classic_Lite|(?<!Eagle )Classic[_ ](?:Joy|Pro)'
  device: 'smartphone'
  models:
    - regex: 'Roma R2'
      model: 'GSmart Roma R2'
    - regex: '(GSmart[ _][a-z0-9 ]+)(?: Build|[);])'
      model: '$1'
    - regex: 'Gigabyte-([a-z0-9]+)'
      model: '$1'
    - regex: '(Classic[ _](?:Joy|Pro)|GSmart_Classic_Lite|Boston 4G)'
      model: '$1'
    - regex: 'Simba SX1'
      model: 'GSmart Simba SX1'

# Gigaset
Gigaset:
  regex: 'Gigaset|(?: GX290|GS80|GS1[0189]0|GS1[89]5|GS2[89]0|GS5[357]-6|GS[23]70(?:_Plus)?|E940-2795-00)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Gigaset QV(1030|830)'
      model: 'Gigaset QV$1'
      device: 'tablet'

    - regex: 'G(S[23]70)[_ ]Plus(?:[);/ ]|$)'
      model: 'G$1 Plus'
    - regex: 'GS([23]70|1[0189]0|1[89]5|2[89]0|80)(?:[);/ ]|$)'
      model: 'GS$1'
    - regex: '(GX290)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'GS57-6'
      model: 'ME Pro'
    - regex: 'GS55-6'
      model: 'ME'
    - regex: 'E940-2795-00'
      model: 'GS4'
    - regex: 'GS53-6'
      model: 'ME Pure'

    - regex: 'Gigaset ([^;/]+) Build'
      model: '$1'
    - regex: 'Gigaset ([^;/)]+)(?:[);/]|$)'
      model: '$1'

# Ginzzu
Ginzzu:
  regex: 'GINZZU[_ ]|((?:RS(?:7[14]|81|9[67])D)|S5002|(?<!Wave Pro )S5021|S5230|S50[45]0|S51[24]0|RS(6[12]|9[45])D|S40[23]0|RS850[12]|RS9602)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'GINZZU[_ ]?(S40[17]0|S4710|ST60[14]0|ST6120)'
      model: '$1'
    - regex: 'GINZZU[_ ]?(GT-(?:1050|7105|70[1-4]0|7115|7210|[WX]831|X[78]70|7810|8[01]10|X853|X890))'
      model: '$1'
      device: 'tablet'
    - regex: '(RS6[12]D) ULTIMATE'
      model: '$1 Ultimate'
    - regex: '(?:GINZZU[ _])?((?:RS(?:7[14]|81|9[14-7]|7)D)|S50[45]0|S5002|S5021|S5230|S51[24]0|S40[23]0|RS850[12]|RS9602|RS94D|R8 Dual)(?:[);/ ]|$)'
      model: '$1'

# Gionee
Gionee:
  regex: '(?:GIO-)?GIONEE[ _-]?[a-z0-9]+|(?:Dream_D1|V188S?|GN(?!2200)[0-9]{3,4}[a-z]?)(?:[);/ ]|$)|F103(?: Pro)?(?: Build|\))|P5 mini Build|(M7 Power|F106L|F100A|F103S|F103 Pro|M6 mirror|20190620G|20190619G|20190418Q|GNP21M02|GNS2161B|GAU0820|Android 6(?:[\d.]*);(?: [\w-]+;)? (?:P8 Max|P7 Max)|Android 11;(?: [\w-]+;)? P61|WBL7519|WBL7361|20190419Q)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'GNP21M02'
      model: 'M12 Pad Pro'
      device: 'tablet'

    - regex: 'GN810(?:[);/ ]|$)'
      model: 'GN810'
      device: 'phablet'

    - regex: 'GN8003L'
      model: 'M6L'
    - regex: 'WBL7519'
      model: 'S6s'
    - regex: 'WBL7361'
      model: 'M6 Lite'
    - regex: 'GIONEE[_ ]MAX Pro'
      model: 'Max Pro'
    - regex: '20190619G'
      model: 'K3 Pro'
    - regex: '20190418Q'
      model: 'K6'
    - regex: 'GN8003'
      model: 'M6'
    - regex: 'GAU0820'
      model: 'K8 Pro'
    - regex: 'GNS2161B'
      model: 'M18'
    - regex: 'GN([0-9]{3,4}[a-z]?)(?:[);/ ]|$)'
      model: 'GN$1'
    - regex: '(F106L|F100A|V188S|V188|F103S)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'M7 Power(?:[);/ ]|$)'
      model: 'M7 Power'
    - regex: '20190620G(?:[);/ ]|$)'
      model: 'M11'
    - regex: 'P5 mini Build'
      model: 'P5 mini'
    - regex: 'P7 Max Build'
      model: 'P7 Max'
    - regex: 'P8 Max'
      model: 'P8 Max'
    - regex: '(S11|F205|S10) Lite(?:[);/ ]|$)'
      model: '$1 Lite'
    - regex: 'M6 mirror(?:[);/ ]|$)'
      model: 'M6 Mirror'
    - regex: 'F9 Plus(?:[);/ ]|$)'
      model: 'F9 Plus'
    - regex: '20190419Q(?:[);/ ]|$)'
      model: 'F12 Pro'
    - regex: 'F103( Pro)?( BUILD|\))'
      model: 'F103$1'
    - regex: ' (P61)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(?:(?:GIO-)?GIONEE[ _-])?Dream_D1(?:[);/ ]|$)'
      model: 'Dream D1'
    - regex: '(?:GIO-)?GIONEE[ _-]([a-z0-9_-]+).*Android'
      model: '$1'
    - regex: 'Android.*(?:GIO-)?GIONEE[ _-]([a-z0-9_-]+)[ _]Pro'
      model: '$1 Pro'
    - regex: 'Android.*(?:GIO-)?GIONEE[ _-]([a-z0-9_-]+)'
      model: '$1'
    - regex: '(?:GIO-)?GIONEE[ _-]?([a-z0-9]+)'
      model: '$1'
      device: 'feature phone'

# Grape
Grape:
  regex: '(?:Grape[ _])?GTM-5([^;/]+) Build'
  device: 'smartphone'
  model: 'GTM-5$1'

# Vizio (vizio.com)
Vizio:
  regex: 'Vizio|(?:VAP430|VTAB1008|XR6[PM]10)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'VAP430'
      model: 'VAP430'
    - regex: 'ISV-B11'
      model: 'ISV-B11'
    - regex: 'D50u-D1'
      model: 'D50u-D1'
    - regex: '(VTAB1008|XR6[PM]10)'
      device: 'tablet'
      model: '$1'

# Timovi
Timovi:
  regex: 'Tmovi[ _]|(?:Infinit[ _](?:Lite[_ ]2|X[_ ]CAM)|Infinit MX(?: Pro)?|Vision_PRO|VISION ULTRA|Epix|Yeah_Go|Insignia Delta 2|Insignia_(?:Delta3|Lab))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Tmovi[ _]Prime'
      model: 'Prime'
    - regex: 'TMOVI_YEAH_BEAT'
      model: 'Yeah Beat'
    - regex: 'YeahLIVE'
      model: 'Yeah LIVE'
    - regex: 'Infinit[_ ]X[_ ]CAM'
      model: 'Infinit X Cam'
    - regex: 'Infinit MX Pro'
      model: 'Infinit MX Pro'
    - regex: 'Infinit MX'
      model: 'Infinit MX'
    - regex: 'Infinit[_ ]Lite([_ ]2)?'
      model: 'Infinit Lite$1'
    - regex: 'Vision_PRO'
      model: 'Vision Pro'
    - regex: 'VISION ULTRA'
      model: 'Vision Ultra'
    - regex: 'Epix'
      model: 'Epix'
    - regex: 'Yeah_Go'
      model: 'Yeah Go'
    - regex: 'Insignia_(Lab)'
      device: 'tablet'
      model: 'Insignia $1'
    - regex: 'Insignia[ _]Delta[ _]?([32])'
      device: 'tablet'
      model: 'Insignia Delta $1'

# TIMvision (https://www.timvision.it/)
TIMvision:
  regex: 'TIM_BOX(?:[);/ ]|$)'
  device: 'tv'
  model: 'TIM Box'

# GOCLEVER (goclever.com)
GOCLEVER:
  regex: 'GOCLEVER|QUANTUM_(?:[235]_)?[0-9]{3}|QUANTUM [0-9]{1}|QUANTUM 700N|Quantum2 500|QUANTUM_(1010N|1010M|900|II_500_N)|ARIES|INSIGNIA|ORION_|ELIPSO|LIBRA[ _]97|TERRA_7o[WL]|TQ700(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'QUANTUM_(1010N|1010M|900)'
      model: 'QUANTUM $1'
      device: 'tablet'
    - regex: 'INSIGNIA_(785_PRO|1010M|800M)'
      model: 'INSIGNIA $1'
      device: 'tablet'
    - regex: '(ORION|ARIES|ELIPSO)[_ ](71|101|102)'
      model: '$1 $2'
      device: 'tablet'
    - regex: 'TQ700N'
      model: 'QUANTUM 700N'
      device: 'tablet'
    - regex: 'TQ700(?:[);/ ]|$)'
      model: 'QUANTUM 700'
      device: 'tablet'
    - regex: 'QUANTUM_1010_Lite'
      model: 'Quantum 1010 Lite'
      device: 'tablet'
    - regex: 'QUANTUM_2_(1010|700|960)_Mobile'
      model: 'Quantum 2 $1 Mobile'
      device: 'tablet'
    - regex: 'QUANTUM_([235])_(5[05]0)_RUGGED'
      model: 'Quantum $1 $2 Rugged'
    - regex: 'QUANTUM_(\d+)_RUGGED_PRO'
      model: 'Quantum $1 Rugged Pro'
    - regex: 'QUANTUM[_ ]([235])_([45]00)[_ ]LITE'
      model: 'Quantum $1 $2 Lite'
    - regex: 'QUANTUM_II_500_N'
      model: 'Quantum 2 500 N'
    - regex: 'QUANTUM[_ ]([45]00)[_ ]LITE'
      model: 'Quantum $1 Lite'
    - regex: 'QUANTUM[ _]?([235])[ _]([^;/]+)(?: Build|[);])'
      model: 'Quantum $1 $2'
    - regex: '((?:QUANTUM|ARIES|INSIGNIA|ORION|ELIPSO)[ _-]?[^;/]+)(?: Build|\))'
      model: '$1'
    - regex: 'NETBOOK R103'
      device: 'desktop'
      model: 'Netbook R103'
    - regex: 'TERRA_(7o[WL])'
      model: 'Terra $1'
      device: 'tablet'
    - regex: 'GOCLEVER[ _-]TAB[ _-]?([^;/]+) Build'
      model: 'TAB $1'
      device: 'tablet'
    - regex: 'GOCLEVER[ _-]?([^;/]+) Build'
      model: '$1'
    - regex: 'TAB ([^;/)]+) Build/GOCLEVER'
      model: 'TAB $1'
      device: 'tablet'
    - regex: '([^;/)]+) Build/GOCLEVER'
      model: '$1'
    - regex: 'GOCLEVER[ _-]?TAB[ _-]([^;/)]+)(?:[;/)]|$)'
      model: 'TAB $1'
      device: 'tablet'
    - regex: 'GOCLEVER[ _-]?([^;/)]+)(?:[;/)]|$)'
      model: '$1'
    - regex: 'LIBRA[ _]97'
      model: 'Libra 97'
      device: 'tablet'

# GoMobile
GoMobile:
  regex: 'GO Onyx|GO[0-9]{3,4}'
  device: 'smartphone'
  models:
    - regex: 'GO Onyx Plus'
      model: 'GO Onyx Plus'
    - regex: 'GO Onyx mini'
      model: 'Go Onyx Mini'
    - regex: 'GO Onyx HD'
      model: 'Go Onyx HD'
    - regex: 'GO Onyx'
      model: 'Go Onyx'
    - regex: 'GO([0-9]{3,4})'
      model: 'Go$1'

# Explay
Explay:
  regex: 'Explay|[\w]+-EXPLAY-FIN|ActiveD[ _]|Atlant |Informer[ _][0-9]+|CinemaTV 3G|Surfer[ _][0-9\.]|Surfer7773G|sQuad[ _][0-9\.]|Onliner[1-4]|RioPlay|Leader|Pulsar|Infinityll|Joy_TV|Imperium[78]|Winner[78]|Indigo|Lagoon|Tornado(?! 348| Slim)(?:3G)?|Onyx(?!_[A-Z]{1,2})(?:[);/ ]|$)|android 4([\d.]*);(?: [\w-]+;)? Discovery.+(?<! Mobile )Safari/|Party|Scream 3G'
  device: 'tablet'
  models:
    - regex: 'ActiveD[ _]7.4[ _]3G'
      model: 'ActiveD 7.4 3G'
    - regex: 'Scream 3G'
      model: 'Scream 3G'
    - regex: 'Imperium([78])(?:[);/ ]|$)'
      model: 'Imperium $1 3G'
    - regex: 'ActiveD[ _]8.2[ _]3G'
      model: 'ActiveD 8.2 3G'
    - regex: 'CinemaTV[ _]3G'
      model: 'CinemaTV 3G'
    - regex: 'Infinityll'
      model: 'Infinity II'
    - regex: 'Informer[ _]([0-9]+(?:[ _]3G)?)'
      model: 'Informer $1'
    - regex: 'Surfer[ _]([0-9\.]+(?:[ _]3G)?)'
      model: 'Surfer $1'
    - regex: 'Surfer([0-9\.]+)[ _]?3G'
      model: 'Surfer $1 3G'
    - regex: 'sQuad[ _]([0-9\.]+(?:[ _]3G)?)'
      model: 'sQuad $1'
    - regex: 'Onliner([1-4])'
      model: 'Onliner $1'
    - regex: 'Winner([78])'
      model: 'Winner $1'
    - regex: 'Discovery(?:[);/ ]|$)'
      model: 'Discovery'
    - regex: 'Atlant(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Atlant'
    - regex: 'Indigo(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Indigo'
    - regex: 'Pulsar(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Pulsar'
    - regex: 'Tornado(?:3G)?(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Tornado 3G'
    - regex: 'Onyx(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Onyx'
    - regex: 'Fresh(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Fresh'
    - regex: 'Joy_TV(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'JoyTV'
    - regex: '[\w]+-EXPLAY-FIN'
      device: 'feature phone'
      model: 'Fin'

    - regex: 'Lagoon(?:[);/ ]|$)'
      model: 'Lagoon'
    - regex: 'Party(?:[);/ ]|$)'
      model: 'Party'
    - regex: 'Explay[ _-]([^;/]+)(?: Build|[;)])'
      model: '$1'
    - regex: 'RioPlay(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Rio Play'
    - regex: 'Leader'
      model: 'Leader'

# General Mobile (www.generalmobile.com)
General Mobile:
  regex: 'General_Mobile_|GM 5 Plus|GM8 go|GM[ _][568][ _]d|GM [86]|General Mobile 4G|GM6_Tur|GM 9 (?:Pro|Plus)|(?: GM 5|e-tab 20|Android 1[012];(?: [\w-]+;)? (?:G[35]01|G[35]10|(?<!Huawei )G700)|Discovery(?![_ ]XT) (?:Air|Elite(?: Plus)?)|GM Discovery II|Discovery II Mini| GM6|G300|G008|android 4([\d.]*);(?: [\w-]+;)? Discovery|e-?tab5)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'GM 5 Plus'
      model: 'GM 5 Plus'
    - regex: 'G300'
      model: 'GM 10'
    - regex: 'G310'
      model: 'GM 21'
    - regex: 'G510'
      model: 'GM 21 Plus'
    - regex: 'G700'
      model: 'GM 21 Pro'
    - regex: 'G301'
      model: 'GM 20'
    - regex: 'G501'
      model: 'GM 20 Pro'
    - regex: 'GM[ _](\d+)[ _]d'
      model: 'GM $1D'
    - regex: 'GM6_Tur|GM ?6'
      model: 'GM 6'
    - regex: 'GM ([58])'
      model: 'GM $1'
    - regex: 'GM8 go'
      model: 'GM 8 Go'
    - regex: 'G008'
      model: 'GM 9 Go'
    - regex: 'GM 9 Pro'
      model: 'GM 9 Pro'
    - regex: 'GM 9 Plus'
      model: 'GM 9 Plus'
    - regex: 'Discovery (Air|Elite(?: Plus)?)'
      model: 'Discovery $1'
    - regex: 'Discovery II Mini'
      model: 'Discovery II Mini'
    - regex: 'GM Discovery II'
      model: 'GM Discovery II'
    - regex: 'Discovery(?:[);/ ]|$)'
      model: 'Discovery'
    - regex: 'General[ _]Mobile[ _]4G[ _]Dual'
      model: '4G Dual'
    - regex: 'General Mobile 4G'
      model: '4G'
    - regex: 'e-?tab ?(\d+)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'E-Tab $1'

# Gol Mobile (gol-mobile.com)
Gol Mobile:
  regex: '(?:F10_PRIME|F3Prime|F9_PLUS|TEAM_7_3G)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'F10_PRIME'
      model: 'F10 Prime'
    - regex: 'F3Prime'
      model: 'F3 Prime'
    - regex: 'F9_PLUS'
      model: 'F9 Plus'
    - regex: 'TEAM_7_3G'
      device: 'tablet'
      model: 'Team 7.0 3G'

# Goly
Goly:
  regex: 'Goly[ _-]'
  device: 'smartphone'
  models:
    - regex: 'Goly[ _-]([^;/]+) Build'
      model: '$1'
    - regex: 'Goly[ _-]([^;/)]+)(?:[;/)]|$)'
      model: '$1'

# Google
Google:
  regex: 'Nexus(?! 6P)|GoogleTV|Google Fiber|Google Pixel|Glass(?<!Browser)|CrKey[^a-z0-9]|(?:Pixel|sailfish|taimen|blueline|Chromecast)(?: Build|[)])|Pixel (?:XL|C|[2-7]|[2-4] XL)|Google 2XL|PIXEL4X|G011A|AOSP on (?:bramble|HammerHead|Manta|sunfish)|Pipit|ADT-2'
  device: 'smartphone'
  models:
    - regex: 'Glass'
      model: 'Glass'
    - regex: 'Galaxy Nexus'
      model: 'Galaxy Nexus'
    - regex: 'AOSP on HammerHead'
      model: 'Nexus 5'
    - regex: '(Nexus (?:2|S|4|5X?|One))'
      model: '$1'
    - regex: '(Nexus (?:6P?))'
      device: 'phablet'
      model: '$1'
    - regex: '(Nexus (?:7|9|10))'
      device: 'tablet'
      model: '$1'
    - regex: 'AOSP on Manta'
      device: 'tablet'
      model: 'Nexus 10'
    - regex: 'Pixel Slate'
      device: 'tablet'
      model: 'Pixel Slate'
    # explicit tv models
    - regex: '(GFHD[12]00)'
      device: 'tv'
      model: 'Fiber $1'
    - regex: 'CrKey[^a-z0-9]'
      model: 'Chromecast'
      device: 'tv'
    - regex: 'Chromecast'
      model: 'Chromecast (2020)'
      device: 'tv'
    - regex: 'GoogleTV'
      device: 'tv'
      model: 'GoogleTV'
    # explicit smartphone models
    - regex: '(?:Pixel|sailfish)(?: Build|[)])'
      model: 'Pixel'
    - regex: 'Pixel XL'
      model: 'Pixel XL'
    - regex: 'blueline'
      model: 'Pixel 3'
    - regex: 'Pixel 3 XL'
      model: 'Pixel 3 XL'
    - regex: 'Pixel 2 XL|taimen'
      model: 'Pixel 2 XL'
    - regex: 'Pixel 3a XL'
      model: 'Pixel 3a XL'
    - regex: 'Pixel 4 XL'
      model: 'Pixel 4 XL'
    - regex: 'PIXEL4X'
      model: 'Pixel 4 X'
    - regex: 'AOSP on sunfish'
      model: 'Pixel 4a'
    - regex: 'Pixel 4a \(5G\)|AOSP on bramble'
      model: 'Pixel 4a (5G)'
    - regex: 'pixel ([3-6])a'
      model: 'Pixel $1a'
    - regex: 'G011A'
      model: 'Pixel 2'
    - regex: 'Google 2XL'
      model: 'Pixel 2 XL'
    - regex: 'Pixel ([67]) Pro'
      model: 'Pixel $1 Pro'
    - regex: 'pixel ([2-7])'
      model: 'Pixel $1'
    - regex: 'Pipit'
      device: 'phablet'
      model: 'Pipit'

    - regex: 'Pixel C'
      device: 'tablet'
      model: 'Pixel C'
    - regex: 'Pixelbook'
      device: 'tablet'
      model: 'Pixelbook'
    - regex: 'ADT-2'
      device: 'tv'
      model: 'ADT-2'
    - regex: 'Nexus Player'
      device: 'tv'
      model: 'Nexus Player'

# Gradiente
Gradiente:
  regex: 'GRADIENTE'
  device: 'feature phone'
  models:
    - regex: 'GRADIENTE-([a-z0-9]+)'
      model: '$1'
    - regex: 'GRADIENTE ([a-z0-9\-]+)'
      model: '$1'

# Grundig
Grundig:
  regex: 'GR?-TB[0-9]+[a-z]*|GRUNDIG|portalmmm/2\.0 G|AFTEU(?:011|014|FF014)'
  device: 'tv'
  models:
    - regex: '(GR?-TB[0-9]+[a-z]*)'
      device: 'tablet'
      model: '$1'
    - regex: 'GRUNDIG ([a-z0-9]+)'
      model: '$1'
    - regex: 'portalmmm/2\.0 G([a-z0-9]+)'
      model: 'G$1'
    - regex: 'AFTEU014'
      model: 'Vision 7 4K (2019)'
    - regex: 'AFTEUFF014'
      model: 'OLED 4K (2019)'
    - regex: 'AFTEU011'
      model: 'Vision 6 HD (2019)'

# Gtel (https://gtel.co.zw/)
Gtel:
  regex: 'Gtel[ _]'
  device: 'smartphone'
  models:
    - regex: 'Infinity 8s(?:[);/ ]|$)'
      model: 'Infinity 8s'
    - regex: 'Infinity 9(?:[);/ ]|$)'
      model: 'Infinity 9'
    - regex: 'Gtel[ _-]X(\d) ?plus(?:[);/ ]|$)'
      model: 'X$1 Plus'
    - regex: 'Gtel[ _-]X(\d) ?mini(?:[);/ ]|$)'
      model: 'X$1 Mini'
    - regex: 'Gtel[ _-]([^;/]+)(?: Build|[;)])'
      model: '$1'

# H133
H133:
  regex: 'Betacrux(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Betacrux(?:[);/ ]|$)'
      model: 'Betacrux'

# H96 (https://www.h96tvbox.com/)
H96:
  regex: 'H96[ _]?Max'
  device: 'tv'
  models:
    - regex: '(?:H96[_ ]?)?Max[ _]RK(\d{4})(?:[);/ ]|$)'
      model: 'Max RK$1'
    - regex: 'Max X2(?:[);/ ]|$)'
      model: 'Max X2'
    - regex: 'H96[_ ]Max[ _]V11(?:[);/ ]|$)'
      model: 'Max V11'
    - regex: 'Max(?:[);/ ]|$)'
      model: 'Max'

# Hafury (hafury.com)
Hafury:
  regex: 'HAFURY|GT20(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'GT20(?:[);/ ]|$)'
      model: 'GT20'
    - regex: '(MIX|UMAX)'
      model: '$1'

# Haier (www.haier.com)
Haier:
  regex: 'Haier|(?:M53-52401|I6_Infinity|Titan[ _]T[135]|(?:HW-)?W(?:71[67]|757|86[07]|970)|S5 Silk|(?:HM-)?(N505|N700|G(?:152|303|353|552|70[01])?-FL|HM-(?:I559|N50[15]|I560|G553|N70[01])-FL|HR-V101|G(?:303)?-W|I(?:557)?-FL)|(?:PAD[ _](?:D71|G781|d85))|A2_Lite_NFC|A4_Lite|HL810G|Andromax C46B2H|android 8([\d.]*);(?: [\w-]+;)? E13)(?:[);/ ]|$)|Android [67](?:[\d.]*);(?: [\w-]+;)? P2(?: Build|[;)])'
  device: 'smartphone'
  models:
    - regex: 'A2_Lite_NFC'
      model: 'Alpha A2 Lite NFC'
    - regex: 'A4_Lite'
      model: 'Alpha A4 Lite'
    - regex: 'HM-N505-FL'
      model: 'I8'
    - regex: 'S5 Silk'
      model: 'S5 Silk'
    - regex: ' E13(?:[);/ ]|$)'
      model: 'Elegance E13'
    - regex: 'HM-N700-FL'
      model: 'L7'
    - regex: 'HM-N701-FL'
      model: 'L8'
    - regex: 'HM-N501-FL'
      model: 'L56'
    - regex: 'HM-I559-FL'
      model: 'L55s'
    - regex: 'HM-I560-FL'
      model: 'G7s'
    - regex: 'HM-G553-FL'
      model: 'G51'
    - regex: ' P2(?: Build|[;)])'
      model: 'P2'
    - regex: 'Andromax C46B2H'
      model: 'Andromax EC'
    - regex: '(?:HM-)?(G(?:152|353|552|70[01])|G(?:303)|I(?:557))'
      model: '$1'
    - regex: '(Titan[_ ]T[135]|I6_Infinity)'
      model: '$1'
    - regex: '(?:HW-)?W(71[67]|757|86[07]|970)(?:[);/ ]|$)'
      model: 'W$1'
    - regex: 'PAD[ -_](D71|G781|d85)'
      device: 'tablet'
      model: '$1'
    - regex: '(HL810G|HR-V101|M53-52401)'
      device: 'tablet'
      model: '$1'
    - regex: 'haierATVnippori'
      device: 'tv'
      model: '2K Android TV'
    - regex: 'haierATV'
      device: 'tv'
      model: 'Android TV'
    - regex: 'Android TV FF Pro'
      device: 'tv'
      model: 'Android TV FF Pro'
    - regex: 'Haier[ _\-](H[WT]-[^/;]+) Build'
      model: '$1'
    - regex: 'Haier[ _\-](H[WT]-[a-z0-9_\-]+)'
      model: '$1'
    - regex: 'Haier[ _\-](sy[0-9]+)'
      model: '$1'
    - regex: 'Haier[ _\-]([a-z0-9\-]+)'
      model: '$1'
      device: 'feature phone'

# HannSpree (hannspree.eu)
HannSpree:
  regex: '(HSG[0-9]{4})|SN97T41W|SN1AT71W\(B\)|SN70T51A|SN70T31?|T7-QC'
  device: 'tablet'
  models:
    - regex: '(HSG[0-9]{4})'
      model: '$1'
    - regex: 'SN1AT71W\(B\)'
      model: 'SN1AT71W(B)'
    - regex: 'SN70T31'
      model: 'SN70T31'
    - regex: 'SN70T3'
      model: 'SN70T3'
    - regex: 'SN70T51A'
      model: 'SN70T51A'
    - regex: 'SN97T41W'
      model: 'SN97T41W'
    - regex: 'T7-QC'
      model: 'SNAT71BUE'

# Hasee
Hasee:
  regex: 'Hasee'
  device: 'smartphone'
  models:
    - regex: 'Hasee ([^;/]+) Build'
      model: '$1'
    - regex: 'Hasee ([^;/)]+)(?:[);/ ]|$)'
      model: '$1'

# Hisense (www.hisense-usa.com)
Hisense:
  regex: '(?:HS-)?Hisense ([^;/]+) Build|Hisense [^);/]+|HISENSE; |HS-(?:G|U|EG?|I|L|T|X)[0-9]+[a-z0-9\-]*|HNR55[01]T|E270BSA|HWCD100E|HITV300C|HITV205N|M470BS[AE]|EG98|E2281|EG680|I46D1G|HAT4KDTV|HITV10[12]C|HLTE([237]00T|200M|203T|202N|21[023567][TM]|22[67]T|22[13]E|230E|103E|310[TM]|31[16]T|500T|501N|510[TM]|7[23]0T|M800)|KS(?:907|964)|U972|U601S Pro|U972_Pro|HNR320T|HiSmart [24]K ATV4|HiSmartTV A4'
  device: 'smartphone'
  models:
    # explicit tablet models
    - regex: 'E270BSA'
      device: 'tablet'
      model: 'Sero 7'
    - regex: 'HITV10[12]C'
      device: 'tablet'
      model: 'E22'
    - regex: 'M470BS[AE]'
      device: 'tablet'
      model: 'Sero 7 Pro'
    - regex: 'E2281'
      device: 'tablet'
      model: 'Sero 8'
    - regex: 'HLTE202N'
      model: 'A5'
    - regex: 'HLTE203T'
      model: 'A5 Pro CC'
    - regex: 'HLTE700T'
      model: 'A6'
    - regex: 'HLTE730T'
      model: 'A6L'
    - regex: 'HNR320T'
      model: 'A7'
    - regex: 'M50 Lite 2021'
      model: 'M50 Lite (2021)'
    - regex: 'E50s \d+GB'
      model: 'E50s'
    - regex: 'Infinity E MAX'
      model: 'Infinity E Max'
    - regex: 'HLTE221E|E MAX(?:[);/ ]|$)'
      model: 'E Max'
    - regex: 'HLTE501N'
      model: 'V Plus'
    - regex: 'KS907'
      model: 'V3'
    - regex: 'HLTE223E'
      model: 'H30'
    - regex: 'I46D1G'
      model: 'Smartfren Andromax R'
    - regex: 'EG680'
      model: 'Smartfren Andromax Z'
    - regex: 'EG98'
      model: 'Smartfren Andromax U2'
    - regex: 'HLTE200T(?:[);/ ]|$)'
      model: 'F26'
    - regex: 'HLTE210T(?:[);/ ]|$)'
      model: 'F28'
    - regex: 'HLTE215T(?:[);/ ]|$)'
      model: 'F29'
    - regex: 'HLTE213T(?:[);/ ]|$)'
      model: 'King Kong 4'
    - regex: 'HLTE311T(?:[);/ ]|$)'
      model: 'King Kong 4 Pro'
    - regex: 'HLTE216[TM](?:[);/ ]|$)'
      model: 'King Kong 5'
    - regex: 'HLTE316T(?:[);/ ]|$)'
      model: 'King Kong 5 Pro'
    - regex: 'HLTE226T(?:[);/ ]|$)'
      model: 'King Kong 6'
    - regex: 'F8 MINI(?:[);/ ]|$)'
      model: 'F8 Mini'
    - regex: 'HLTE217T(?:[);/ ]|$)'
      model: 'F30S'
    - regex: 'HLTE227T(?:[);/ ]|$)'
      model: 'F40'
    - regex: 'HNR550T(?:[);/ ]|$)'
      model: 'F50'
    - regex: 'HNR551T(?:[);/ ]|$)'
      model: 'F50 Plus'
    - regex: 'HLTE310[TM](?:[);/ ]|$)'
      model: 'H18'
    - regex: 'HLTE510[TM](?:[);/ ]|$)'
      model: 'H20'
    - regex: 'HLTE103E'
      model: 'E20'
    - regex: 'Hisense E50 128G'
      model: 'E50'
    - regex: 'HLTE500T(?:[);/ ]|$)'
      model: 'H11'
    - regex: '(?:HLTE230E|Infinity H40 Lite)(?:[);/ ]|$)'
      model: 'Infinity H40 Lite'
    - regex: 'HLTEM800'
      model: 'Xiaohaitun 2'
    - regex: 'HLTE720T(?:[);/ ]|$)'
      model: 'U30'
      device: 'phablet'
    - regex: 'HWCD100E(?:[);/ ]|$)'
      model: 'U40 Lite'
    - regex: '(HLTE300T|HLTE200M|HLTE212T)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'HITV300C(?:[);/ ]|$)'
      model: 'E9'
    - regex: 'E260T\+(?:[);/ ]|$)'
      model: 'Nana'
    - regex: '(U972|U601S)[ _]Pro(?:[);/ ]|$)'
      model: '$1 Pro'
    - regex: 'Infinity H50 ZOOM(?:[);/ ]|$)'
      model: 'Infinity H50 Zoom'
    - regex: 'Infinity E30SE(?:[);/ ]|$)'
      model: 'Infinity E30 SE'
    - regex: '(HS-(?:G|U|EG?|I|L|T|X)[0-9]+[a-z0-9\-]*|U972)'
      model: '$1'

    - regex: '(HAT4KDTV|HiSmart [24]K ATV4|HiSmartTV A4)(?:[);/ ]|$)'
      device: 'tv'
      model: '$1'

    - regex: 'HITV205N(?:[);/ ]|$)'
      device: 'portable media player'
      model: 'Touch'

    - regex: 'KS964(?:[);/ ]|$)'
      model: 'U3 (2019)'
    - regex: '(?:HS-)?Hisense (U3) 2021(?: Build|[);])'
      model: 'U3 (2021)'
    - regex: '(?:HS-)?Hisense ([^;/)]+) Pro(?: Build|[);])'
      model: '$1 Pro'
    - regex: '(?:HS-)?Hisense ([^;/)]+) Plus(?: Build|[);])'
      model: '$1 Plus'
    - regex: '(?:HS-)?Hisense ([^;/)]+)(?: Build|[);])'
      model: '$1'
    - regex: '(?:HS-)?Hisense ([^/]+)/'
      model: '$1'

# Hi-Level
Hi-Level:
  regex: 'HLV-T([a-z0-9]+)'
  device: 'tablet'
  model: 'HLV-T$1'

# HKPro
HKPro:
  regex: 'HKPRO,([a-z0-9_ \-]+),(?:wired|wireless)'
  device: 'tv'
  model: ''

# Hoffmann (hoffmann-electric.com)
Hoffmann:
  regex: '(HOFFMANN|Neo[_ ]A[1379]00|X-Go|X-Play|X-Pro|X_Ultra)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Neo[_ ](A[1379]00)'
      model: 'Neo $1'
    - regex: 'HOFFMANN[ _]X[-_ ](Prime|Twist|Max)'
      model: 'X $1'
    - regex: 'X[-_](Play|Go|Pro|Ultra)'
      model: 'X $1'

# Huagan
Huagan:
  regex: 'Huagan[ _]'
  device: 'smartphone'
  models:
    - regex: 'Huagan[ _]([^;/)]+)(?: Build|[);])'
      model: '$1'

# Homtom
Homtom:
  regex: 'Homtom|(?:HT[0-9]{1,2}(?: ?Pro)?|HT3_Pro|P30 Pro|android 8([\d.]*);(?: [\w-]+;)? S17)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'P30 Pro'
      model: 'P30 Pro'
    - regex: ' S17'
      model: 'S17'
    - regex: '(?:Homtom[_ ])?HT ?([0-9]{1,2})[ _]?Pro(?:[);/ ]|$)'
      model: 'HT$1 Pro'
    - regex: '(?:Homtom[_ ])?HT ?([0-9]{1,2}?)(?:[);/ ]|$)'
      model: 'HT$1'
    - regex: 'Homtom ([^;/]+) Build'
      model: '$1'

# Hosin
Hosin:
  regex: 'HOSIN[ _-]'
  device: 'smartphone'
  models:
    - regex: 'HOSIN[ _-]([^;/]+) Build'
      model: '$1'
    - regex: 'HOSIN[ _-]([^;/]+)(?:[;/)]|$)'
      model: '$1'

# Hoozo (hoozoelectronics.com)
Hoozo:
  regex: '(?:HOOZO[_ ](MT232|MT116|MT Pad 116 LTE|X1001)|MZ104|HZ0010J?|HZ1012|YK_P30(?:_EEA)?)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'HOOZO[_ ](MT232|MT116|MT Pad 116 LTE|X1001|MZ104)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(HZ0010J?|HZ1012)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(YK_P30)(?:_EEA)?(?:[);/ ]|$)'
      device: 'smartphone'
      model: '$1'

# Minix (minix.us)
Minix:
  regex: 'NEO[- ](?:X8-H|X8|U9-H|X[57]-mini|X8H?-PLUS|X88-?I|X7-216A|X5-116A|X[68]|U1|Z64|U22-XJ)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'NEO-X8-H(?:[);/ ]|$)'
      model: 'NEO X8H'
    - regex: 'NEO U22-XJ(?:[);/ ]|$)'
      model: 'NEO U22'
    - regex: 'NEO-X([57])-mini(?:[);/ ]|$)'
      model: 'NEO X$1 Mini'
    - regex: 'NEO-(X8H?)-PLUS(?:[);/ ]|$)'
      model: 'NEO $1 Plus'
    - regex: 'NEO-X88-?I(?:[);/ ]|$)'
      model: 'NEO X88i'
    - regex: 'NEO-X7-216A(?:[);/ ]|$)'
      model: 'NEO X7'
    - regex: 'NEO-X5-116A(?:[);/ ]|$)'
      model: 'NEO X5'
    - regex: 'NEO-X([68])(?:[);/ ]|$)'
      model: 'NEO X$1'
    - regex: 'NEO-U1(?:[);/ ]|$)'
      model: 'NEO U1'
    - regex: 'NEO-Z64(?:[);/ ]|$)'
      model: 'NEO Z64'
    - regex: 'NEO-U9-H(?:[);/ ]|$)'
      model: 'NEO U9H'

# Huavi (https://www.huavi.us/)
Huavi:
  regex: 'KHATAR H-(?:10 mini|20 PRO)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'KHATAR H-10 mini(?:[);/ ]|$)'
      model: 'KHATAR H-10 Mini'
    - regex: 'KHATAR H-20 PRO(?:[);/ ]|$)'
      model: 'KHATAR H-20 Pro'

# Turkcell (https://www.turkcell.com.tr/)
Turkcell:
  regex: 'TURKCELL[_ ]'
  device: 'smartphone'
  models:
    - regex: 'Turbo T50(?:[);/ ]|$)'
      model: 'Turbo T50'
    - regex: 'T([124-8])0(?:[);/ ]|$)'
      model: 'T$10'
    - regex: 'Maxi Plus 5(?:[);/ ]|$)'
      model: 'T21 Maxi Plus 5'
    - regex: 'MaxiPRO5(?:[);/ ]|$)'
      model: 'T21 Maxi Pro 5' # Huawei

    - regex: 'Turkcell_T_Tablet(?:[);/ ]|$)'
      device: 'tablet'
      model: 'T Tablet'

# China Telecom
China Telecom:
  regex: 'Build/Tianyi|(?:TYH61[12]M|TYH211U|TYH201H|TYH622M)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'TYH622M'
      model: 'Maimang 11 5G'
    - regex: 'TYH611M'
      model: 'Maimang 10 SE 5G'
    - regex: 'TYH612M'
      model: 'Maimang 10 5G'
    - regex: 'TYH211U'
      model: 'Tianyi One (2021)'
    - regex: 'TYH201H'
      model: 'Tianyi One'

# U-Magic (China Unicom)
U-Magic:
  regex: '(?:Liantong)?(?:VP00[123])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:Liantong)?VP001'
      model: 'Enjoy 20 Plus 5G'
    - regex: '(?:Liantong)?VP002'
      model: 'Enjoy 20 5G'
    - regex: '(?:Liantong)?VP003'
      model: 'Enjoy 30e 5G'

# Hi Nova
Hi Nova:
  regex: '(?:Hebe|Hera)-BD00|(?:ALH-BD00|MGZ-BD00|FIO-BD00)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'FIO-BD00'
      model: '9 SE'
    - regex: 'Hebe-BD00'
      model: '9 Pro'  # Nova 9 Pro
    - regex: 'Hera-BD00'
      model: '9'      # Nova 9
    - regex: 'ALH-BD00'
      model: '10'
    - regex: 'MGZ-BD00'
      model: '10 Pro'

# TD Tech (based for Huawei brand)
TD Tech:
  regex: 'Build/TDTech|(?:NAT-TN70|TDT-MA01|AVA-PA00)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'NAT-TN70'
      model: 'N8 Pro'
    - regex: 'AVA-PA00'
      model: 'P50'
    - regex: 'TDT-MA01'
      model: 'M40'

# Huawei
Huawei:
  regex: '(HW-)?(?:Huawei(?!Browser)|MediaPad T1|Ultym5|Ideos|Honor[ _]?|(?:(?:AGS|AGS2|ALE|ALP|AMN|ANA|ANE|ARE|ARS|ASK|ATH|ATU|AUM|BAC|BAH[234]?|BG2|BGO|B[ZK]K|BKL|BL[ALN]|BND|BTV|CA[GMNZ]|CH[CM]|CHE[12]?|CLT|CMR|COL|COR|CPN|CRO|CRR|CUN|DIG|DLI|DRA|DUA|DUB|DUK|EDI|ELE|EML|EVA|EVR|FDR|FIG|FLA|FRD|FRL|GEM|GRA|HDN|HLK|HMA|Hol|HRY|HWI|H[36]0|INE|JAT|JEF|JDN|JDN2|JKM|JMM|JSN|KII|KIW|KNT|KOB|KSA|LDN|LEO|LIO|LLD|LND|LON|LRA|LUA|LY[AO]|MAR|MHA|MRD|MYA|NCE|NEN|NEM|NEO|NXT|PAR(?!-[AH]0)|PCT|PIC|PLE|PLK|POT|PPA|PRA|RIO|RNE|RVL|SCC|SCL|SCM|SEA|SHT|SLA|SNE|SPN|STF|STK|TAG|TIT|TNY|TRT|VCE|VEN|VIE|VKY|VNS|VOG|VRD|VTR|WAS|YAL|G(?:527|620S|621|630|735)|Y(?:221|330|550|6[23]5))-(?:[A-Z]{0,2}[0-9]{1,4}[A-Z]{0,3}?)|H1711|U(?:8230|8500|8661|8665|8667|8800|8818|8860|9200|9508))(?:[);/ ]|$))|hi6210sft|PE-(UL00|TL[12]0|TL00M)|T1-(A21?[Lw]|A2[23]L|701u|823L)|G7-(?:L01|TL00)|HW-01K|JNY-(LX[12]|AL10)|OXF-AN[01]0|TAS-(A[LN]00|L29|TL00)|WLZ-(AL10|AN00)|YOK-AN[10]0|NIC-LX1A|MRX-(AN19|AL[01]9|W[0-3]9)|CDY-(?:[AT]N00|AN[29][05]|NX9[AB]|TN[29]0)|GLK-(?:[AT]L00|LX1U)|JER-(?:[AT]N20|[AT]N10)|ELS-(?:[AT]N[10]0|NX9|N39|N04)|AKA-(AL10|L29)|MON-(W|AL)19|BMH-(?:TN10|AN[12]0)|AQM-([AT]L[01]0|LX1)|MOA-([AT]L[02]0|LX9N)|NTS-AL00|ART-(?:[AT]L00[xm]|L29N?|L28)|MED-(?:[AT]L00|LX[29]N?|AL20)|EBG-(?:AN[01]0|TN00)|ANA-(?:[AT]N00|NX9)|BZ[AK]-W00|BZT-(W09|AL[01]0)|HDL-(AL09|W09)|HWV3[123]|HW-02L|TEL-[AT]N(?:00a?|10)|KKG-AN[07]0|MXW-[AT]N00|JKM-AL00[ab]|TAH-(?:N29|AN00)m?|C8817D|T1-821W|d-01[JKH]|d-02[HK]|KRJ-(?:W09|AN00)|HWT31|Y320-U10|Y541-U02|VAT-L19|70[14]HW|60[58]HW|NOH-(?:NX9|AN0[01]|AN50|AL[01]0)|TNNH?-AN00|LIO-(?:[TA]L00|[LN]29|AN00)|KOB2-(?:AL00|[LW]09|L03)|AGS3-(?:[WL]09|AL0[09]|W00[DE])|DNN-LX9|NEY-NX9|LON-AL00|HLK-L41|503HW|AGR-(?:[LW]09|AL09)|PPA-LX[12]|ANG-(?:AN00|LX[12])|NOP-AN00|ALA-AN70|DVC-[AT]N[02]0|302HW|Nexus 6P|DBY-W09|WKG-(?:LX9|[AT]N00)|JSC-(?:AN00|AL50)|OCE-A[NL][015]0|NZA-AL00|BRQ-A[LN]00|BZC-(?:AL|W)00|NEN-L(?:X1|22)|KOZ-AL[04]0|NTH-(?:AN00|NX9)|MRR-W[23]9|WGR-(?:W[10]9|AN19)|TET-AN[10]0|SCMR-(?:W09|AL09)|OXP-AN00|HJC-(?:AN90|LX9)|CDL-AN50|CND-AN00|NTN-(?:LX[13]|AN20|L22)|RNA-[AT]N00|CHL-(?:A[LN]00|AL60)|ELZ-AN[012]0|NAM-(?:LX9|AL00)|JLH-AN00|JAD-(?:AL[056]0|LX9)|AGS5-(?:L09|W09)|AGS3K-(?:W20|[WL]0[09])|AGRK-[WL]09|MT2L03|LSA-AN00|KJR-W09|TET-A[NL][05]0|TYH601M|RTE-AL00|BAL-(?:AL00|L49)|BZI-(?:AL00|W00)|BZT3-(?:AL00|W09)|BZD-(?:W00|AL00)|MLD-AL[01]0|AGM3-(?:W09|AL09)HN|ABR-(?:AL[0689]0|LX9)|GIA-AN00|LEO-DLXXE?|BZA-L00|MGI-AN00|CMA-(?:LX[123]|AN[04]0)|NEW-AN90|KRJ2-(?:W09|AN00)|BRT-(?:W09|AN09)|ANY-(?:[LN]X1|LX[23]|AN00)|JLN-(?:LX[13]|AL00)|LGE-(?:NX[19]|AN[012]0)|TNA-AN00|TFY-(?:LX[123]|AN[04]0)|DIO-AN00|BZW-AL[01]0|MOGOLIA|CM990|MGA-(?:AL00|LX[39])|60[56]HW|Peppa-(?:L2[23]B|L0[23]B)|KANT-\d{3}[BCS]?|Kobe3-L09|FNE-(?:NX9|AN00)|HPB-AN00|Mate ?(?:[34]0 RS|Xs|30)|Y530|SDY-AN00|EC6108V[89]|CTR-(?:LX[123]|AL00)|VNE-(?:LX[123]|N41|AN00)|HMW-W09|GLA-(?:LX[13]|AL00)|HEY-W09|GOT-(?:AL09|W29)|PAL-(?:AL00|LX9)|PAN-L29|NNH-AN00|P Smart S|NCO-(?:LX[13]|AL00)|DCO-(?:AL00|LX9)|CET-(?:AL[06]0|LX9)|ADT-AN00|RMO-(?:AN00|NX1)|RKY-(?:AN00|LX[123])|M300-L09|EVE-LX9N?|BNE-(?:LX1|AL00)|dtab01|BZT4-W19|ROD-W09|ANP-AN00|WGRR-W09|HN3-U01|Holly-U19|BLM-00|ANN-AN00|VNA-LX2|CRT-LX[123]'
  device: 'smartphone'
  models:
    - regex: 'FNE-AN00'
      model: 'Honor 70'
    - regex: 'FNE-NX9'
      model: 'Honor 70 5G'
    - regex: 'SDY-AN00'
      model: 'Honor 70 Pro'
    - regex: 'ANP-AN00'
      model: 'Honor 80 Pro'
    - regex: 'ANN-AN00'
      model: 'Honor 80 5G'
    - regex: 'HPB-AN00'
      model: 'Honor 70 Pro+'
    - regex: 'POT-[TA]L00a(?:[);/ ]|$)'
      model: '9S'
    - regex: 'U9500(?:[);/ ]|$)'
      model: 'Ascend D1'
    - regex: 'Z100-UL00(?:[);/ ]|$)'
      model: 'Ascend D3'
    - regex: 'Y530(?:[);/ ]|$)'
      model: 'Ascend Y530'
    - regex: 'Y320-(?:U10|T00|U05)(?:[);/ ]|$)'
      model: 'Ascend Y320'
    - regex: 'Y330-U05(?:[);/ ]|$)'
      model: 'Ascend Y330'
    - regex: 'Y541-U02(?:[);/ ]|$)'
      model: 'Ascend Y5C'
    - regex: 'U8818(?:[);/ ]|$)'
      model: 'Ascend G300'
    - regex: 'G527-U081(?:[);/ ]|$)'
      model: 'Ascend G527'
    - regex: '(G620S-L0[13]|C8817D)(?:[);/ ]|$)'
      model: 'Ascend G620S'
    - regex: 'G630-U251(?:[);/ ]|$)'
      model: 'Ascend G630'
    - regex: 'G7-(?:L01|TL00)(?:[);/ ]|$)'
      model: 'Ascend G7'
    - regex: 'P7-L(?:10|07)(?:[);/ ]|$)'
      model: 'Ascend P7'
    - regex: 'P6 ?S-U06'
      model: 'Ascend P6'
    - regex: 'G730-C00(?:[);/ ]|$)'
      model: 'Ascend G730'
    - regex: 'U9200(?:[);/ ]|$)'
      model: 'Ascend P1'
    - regex: 'H1711(?:[);/ ]|$)'
      model: 'Ascend XT2'
    - regex: 'Y221-U(?:[12]2|[0345]3)(?:[);/ ]|$)'
      model: 'Ascend Y221'
    - regex: 'Y550-L03(?:[);/ ]|$)'
      model: 'Ascend Y550'
    - regex: 'Y560-L01(?:[);/ ]|$)'
      model: 'Ascend Y560'
    - regex: 'Huawei g700(?:-(?:U[012]0|T0[01]))?'
      model: 'Ascend G700'
    - regex: 'ART-[AT]L00[xm](?:[);/ ]|$)'
      model: 'Enjoy 10'
    - regex: 'STK-[AT]L00(?:[);/ ]|$)'
      model: 'Enjoy 10 Plus'
    - regex: 'MED-(?:[AT]L00|AL20)(?:[);/ ]|$)'
      model: 'Enjoy 10E'
    - regex: 'AQM-[AT]L00(?:[);/ ]|$)'
      model: 'Enjoy 10S'
    - regex: 'TAG-[ACT]L00(?:[);/ ]|$)'
      model: 'Enjoy 5S'
    - regex: 'MGA-AL00'
      model: 'Enjoy 50'
    - regex: 'CTR-AL00'
      model: 'Enjoy 50 Pro'
    - regex: 'TAG-(?:L0[13]|L32|L13|L2[123])(?:[);/ ]|$)'
      model: 'GR3'
    - regex: 'NCE-(AL[10]0|TL10)(?:[);/ ]|$)'
      model: 'Enjoy 6'
    - regex: 'DIG-(?:TL10|AL00)(?:[);/ ]|$)'
      model: 'Enjoy 6S'
    - regex: 'SLA-(?:AL00|TL10)(?:[);/ ]|$)'
      model: 'Enjoy 7'
    - regex: 'FIG-(?:[AT]L[10]0)(?:[);/ ]|$)'
      model: 'Enjoy 7S'
    - regex: '(?:TRT-AL00[A]?|TRT-TL10A)(?:[);/ ]|$)'
      model: 'Enjoy 7 Plus'
    - regex: 'LDN-(?:AL[12]0|TL[02]0)(?:[);/ ]|$)'
      model: 'Enjoy 8'
    - regex: 'FLA-AL[01]0(?:[);/ ]|$)'
      model: 'Enjoy 8 Plus'
    - regex: 'ATU-[AT]L10(?:[);/ ]|$)'
      model: 'Enjoy 8e'
    - regex: 'MRD-[TA]L00(?:[);/ ]|$)'
      model: 'Enjoy 9e'
    - regex: 'DVC-[AT]N20(?:[);/ ]|$)'
      model: 'Enjoy 20 Pro'
    - regex: 'DVC-AN00(?:[);/ ]|$)'
      model: 'Enjoy Z 5G'
    - regex: 'PPA-AL20(?:[);/ ]|$)'
      model: 'Enjoy 20 SE'
    - regex: 'FRL-[AT]N00'
      model: 'Enjoy 20 Plus 5G'
    - regex: 'MLD-AL[01]0'
      model: 'Enjoy 20e'
    - regex: 'U8665(?:[);/ ]|$)'
      model: 'Fusion 2'
    - regex: 'MED-LX9N?(?:[);/ ]|$)'
      model: 'Y6p'
    - regex: 'G735-L(?:03|12|23)(?:[);/ ]|$)'
      model: 'G Play'
    - regex: 'CHC-U(?:0[13]|23)(?:[);/ ]|$)'
      model: 'G Play Mini'
    - regex: '(?:Honor_|HW-)?G621-TL00M?(?:[);/ ]|$)'
      model: 'G621'
    - regex: 'DIG-L2[12](?:[);/ ]|$)'
      model: 'GR3 (2017)'
    - regex: 'KII-L2[12](?:[);/ ]|$)'
      model: 'GR5'
    - regex: 'BLL-L2[12](?:[);/ ]|$)'
      model: 'GR5 (2017)'
    - regex: 'RIO-L03(?:[);/ ]|$)'
      model: 'GX8'
    - regex: 'RIO-L0[12](?:[);/ ]|$)'
      model: 'G8'
    - regex: 'RIO-[UT]L00(?:[);/ ]|$)'
      model: 'G7 Plus'
    - regex: 'JAD-(?:AL[056]0|LX9)(?:[);/ ]|$)'
      model: 'P50 Pro'
    - regex: 'ABR-(?:AL[08]0|LX9)'
      model: 'P50'
    - regex: 'ABR-AL[69]0'
      model: 'P50E'
    - regex: 'BAL-(?:AL00|L49)'
      model: 'P50 Pocket'
    - regex: 'U8860(?:[);/ ]|$)'
      model: 'Honor'
    - regex: 'COL-(?:AL[01]0|TL[01]0|L29|L10)(?:[);/ ]|$)'
      model: 'Honor 10'
    - regex: 'HRY-(?:[AT]L00[A]?|LX[12]|LX1MEB)(?:[);/ ]|$)'
      model: 'Honor 10 Lite'
    - regex: 'HRY-LX1T(?:[);/ ]|$)'
      model: 'Honor 10I'
    - regex: 'U9508(?:[);/ ]|$)'
      model: 'Honor 2'
    - regex: 'YAL-(?:L21|[AT]L00)(?:[);/ ]|$)'
      model: 'Honor 20'
    - regex: 'LRA-AL00(?:[);/ ]|$)'
      model: 'Honor 20 Lite'
    - regex: '(HRY-AL00T[a]?)(?:[);/ ]|$)'
      model: 'Honor 20I'
    - regex: 'YAL-(L41|AL10)(?:[);/ ]|$)'
      model: 'Honor 20 Pro'
    - regex: '(MAR-LX1H|YAL-AL50)(?:[);/ ]|$)'
      model: 'Honor 20S'
    - regex: 'EBG-[AT]N00(?:[);/ ]|$)'
      model: 'Honor 30 Pro'
    - regex: 'EBG-AN10(?:[);/ ]|$)'
      model: 'Honor 30 Pro Plus'
    - regex: '(?:CDY-(?:AN9[05]|NX9A|TN90)|Honor 30S)(?:[);/ ]|$)'
      model: 'Honor 30S'
    - regex: 'LRA-LX1(?:[);/ ]|$)'
      model: 'Honor 30I'
    - regex: 'MXW-[AT]N00(?:[);/ ]|$)'
      model: 'Honor 30 Lite'
    - regex: '(?:BMH-(?:AN[12]0|TN10)|Honor 30)(?:[);/ ]|$)'
      model: 'Honor 30'
    - regex: '(?:Honor_|HW-)?H30-(?:C00|L01M?|L02|U10|T00|T10)(?:_TD)?(?:[);/ ]|$)'
      model: 'Honor 3C'
    - regex: 'Hol-U19(?:[);/ ]|$)'
      model: 'Honor 3C Lite'
    - regex: 'G750-T01(?:[);/ ]|$)'
      model: 'Honor 3X'
    - regex: 'HN3-U01'
      model: 'Honor 3'
    - regex: '(?:Honor_|HW-)?SCL-(?:AL00|CL00|TL00H?)(?:_TD)?(?:[);/ ]|$)'
      model: 'Honor 4A'
    - regex: '(?:Honor_|HW-)?CHM-U01(?:_TD)?(?:[);/ ]|$)'
      model: 'Honor 4C'
    - regex: 'Honor 4c Pro(?:[);/ ]|$)'
      model: 'Honor 4C Pro'
    - regex: 'AQM-AL10(?:[);/ ]|$)'
      model: 'Honor 4T Pro'
    - regex: '(CHE2?-[UT]L00[HM]?|CHE1-CL[12]0|CHE2-L(?:1[12]|23)|Che1-L04|CHE-TL00)(?:[);/ ]|$)'
      model: 'Honor 4X'
    - regex: '(?:Honor_|HW-)?CUN-[AT]L00(?:[);/ ]|$)'
      model: 'Honor 5 Play'
    - regex: '(?:Honor_|HW-)?CAM-(?:AL00|TL00H|TL00)(?:_TD)?(?:[);/ ]|$)'
      model: 'Honor 5A'
    - regex: '(?:Honor_|HW-)?NEM-(?:AL10|L51|UL10|TL00)(?:[);/ ]|$)'
      model: 'Honor 5C'
    - regex: '(?:Honor_|HW-)?NEM-(?:L22|TL00H)(?:[);/ ]|$)'
      model: 'Honor 5C Dual SIM'
    - regex: '(?:Honor_|HW-)?KIW-(?:AL10|TL00H|[TC]L00|L2[1-4]|UL00)(?:_TD)?(?:[);/ ]|$)'
      model: 'Honor 5X'
    - regex: 'NTH-(?:NX9|AN00)'
      model: 'Honor 50 5G'
    - regex: 'JLH-AN00(?:[);/ ]|$)'
      model: 'Honor 50 SE'
    - regex: 'NTN-(?:LX[13]|L22)(?:[);/ ]|$)'
      model: 'Honor 50 Lite'
    - regex: 'RNA-[AT]N00'
      model: 'Honor 50 Pro 5G'
    - regex: 'LSA-AN00'
      model: 'Honor 60'
    - regex: 'GIA-AN00'
      model: 'Honor 60 SE 5G'
    - regex: 'TNA-AN00'
      model: 'Honor 60 Pro'
    - regex: '((?:Honor_|HW-)?H60-L(?:01|02|03|04|11|12)(?:_TD)?|HW-H60-J1|MOGOLIA)(?:[);/ ]|$)'
      model: 'Honor 6'
    - regex: 'MYA-TL10(?:[);/ ]|$)'
      model: 'Honor 6 Play'
    - regex: 'PE-(UL00|TL[12]0|TL00M)(?:[);/ ]|$)'
      model: 'Honor 6 Plus'
    - regex: '(?:HONOR[ _]?)?DLI-(?:AL10|L[24]2|TL20)(?:[);/ ]|$)'
      model: 'Honor 6A'
    - regex: 'DIG-L21HN(?:[);/ ]|$)'
      model: 'Honor 6C'
    - regex: 'JMM-L22(?:[);/ ]|$)'
      model: 'Honor 6C Pro'
    - regex: '(?:HONOR[ _]?)?BLN-(?:L2[124]|AL[1-4]0|TL[01]0(?:[);/ ]|$))'
      model: 'Honor 6X'
    - regex: '(?:Honor[_]?|HW-)?PLK-(?:AL10|CL00|TL00|TL01H?|UL00|L01)(?:[);/ ]|$)'
      model: 'Honor 7'
    - regex: '(?:Honor_|HW-)?NEM-L21(?:[);/ ]|$)'
      model: 'Honor 7 Lite'
    - regex: 'AUM-(?:AL[20]0|L33[A]?|TL20)(?:[);/ ]|$)'
      model: 'Honor 7A'
    - regex: 'AUM-L29(?:[);/ ]|$)'
      model: 'Honor 7A Pro'
    - regex: '(?:Honor_|HW-)?(?:LND-(?:AL[34]0|L29|TL[34]0)|AUM-L41)(?:[);/ ]|$)'
      model: 'Honor 7C'
    - regex: 'ATH-(?:[CAU]L00|TL00H?)(?:[);/ ]|$)'
      model: 'Honor 7i'
    - regex: '(?:Honor_|HW-)?DUA-(?:L22|LX3)(?:[);/ ]|$)'
      model: 'Honor 7S'
    - regex: '(?:HONOR[ _]?)?BND-(?:AL[01]0|TL10|L2[14]|L31)(?:[);/ ]|$)'
      model: 'Honor 7X'
    - regex: '(?:FRD-(?:AL[01]0|L0[249]|L1[49]|DL00)|VAT-L19)(?:[);/ ]|$)'
      model: 'Honor 8'
    - regex: 'PRA-(?:AL00X|AL00|TL10)(?:[);/ ]|$)'
      model: 'Honor 8 Lite'
    - regex: 'DUK-(?:L09|TL30)(?:[);/ ]|$)'
      model: 'Honor 8 Pro'
    - regex: 'VEN-L22(?:[);/ ]|$)'
      model: 'Honor 8 Smart'
    - regex: 'JAT-L(29|X[13])(?:[);/ ]|$)'
      model: 'Honor 8A'
    - regex: 'JAT-L41(?:[);/ ]|$)'
      model: 'Honor 8A Pro'
    - regex: 'BKK-(?:AL[10]0|L21|L22|LX2|TL00)(?:[);/ ]|$)'
      model: 'Honor 8C'
    - regex: 'KSA-(LX[239]|AL00)(?:[);/ ]|$)'
      model: 'Honor 8S'
    - regex: 'JSN-L(?:2[123]|42)|JSN-[TA]L00[a]?(?:[);/ ]|$)'
      model: 'Honor 8X'
    - regex: 'ARE-(?:AL[10]0|L22(?:HN)?|TL00)(?:[);/ ]|$)'
      model: 'Honor 8X Max'
    - regex: 'STF-(?:AL[10]0|L09S?|TL10)(?:[);/ ]|$)'
      model: 'Honor 9'
    - regex: '(?:MOA-LX9N|Honor 9A)(?:[);/ ]|$)'
      model: 'Honor 9A'
    - regex: '(?:AKA-L29|Honor 9C)(?:[);/ ]|$)'
      model: 'Honor 9C'
    - regex: 'LLD-(?:AL[01]0|L[23]1|TL10)(?:[);/ ]|$)'
      model: 'Honor 9 Lite'
    - regex: 'LLD-AL[23]0(?:[);/ ]|$)'
      model: 'Honor 9i'
    - regex: 'DUA-LX9(?:[);/ ]|$)'
      model: 'Honor 9S'
    - regex: 'HLK-AL00a?(?:[);/ ]|$)'
      model: 'Honor 9X'
    - regex: 'HLK-(?:AL10|L4[12])(?:[);/ ]|$)'
      model: 'Honor 9X Pro'
    - regex: 'CAM-UL00(?:[);/ ]|$)'
      model: 'Honor Holly 3'
    - regex: 'Holly-U19(?:[);/ ]|$)'
      model: 'Honor Holly'
    - regex: 'NTS-AL00(?:[);/ ]|$)'
      model: 'Honor Magic'
    - regex: 'TNY-[AT]L00(?:[);/ ]|$)'
      model: 'Honor Magic 2'
    - regex: 'ELZ-AN00'
      model: 'Honor Magic 3'
    - regex: 'ELZ-AN10'
      model: 'Honor Magic 3 Pro'
    - regex: 'ELZ-AN20'
      model: 'Honor Magic 3 Pro+'
    - regex: 'LGE-(?:AN10|NX9)'
      model: 'Honor Magic 4 Pro'
    - regex: 'LGE-AN00'
      model: 'Honor Magic 4'
    - regex: 'LGE-AN20'
      model: 'Honor Magic 4 Pro+'
    - regex: 'ANY-LX1'
      model: 'Honor Magic 4 Lite'
    - regex: 'MGI-AN00'
      model: 'Honor Magic 5'
    - regex: 'RVL-AL09(?:[);/ ]|$)'
      model: 'Honor Note 10'
    - regex: 'EDI-AL10(?:[);/ ]|$)'
      model: 'Honor Note 8'
    - regex: 'VKY-TL00(?:[);/ ]|$)'
      model: 'Honor P10 Plus'
    - regex: 'VOG-AL00(?:[);/ ]|$)'
      model: 'Honor P30 Pro'
    - regex: 'ANA-(?:[AT]N00)(?:[);/ ]|$)'
      model: 'Honor P40 5G'
    - regex: 'ANA-AL00(?:[);/ ]|$)'
      model: 'Honor P40 4G'
    - regex: 'ANA-NX9(?:[);/ ]|$)'
      model: 'Honor P40 Dual'
    - regex: 'COR-(?:AL[01]0|L29|TL10)(?:[);/ ]|$)'
      model: 'Honor Play'
    - regex: 'ASK-AL(00x|20)(?:[);/ ]|$)'
      model: 'Honor Play 3'
    - regex: 'CMA-AN00(?:[);/ ]|$)'
      model: 'Honor Play 30 Plus'
    - regex: 'VNE-AN00'
      model: 'Honor Play 30'
    - regex: 'KSA-AL10(?:[);/ ]|$)'
      model: 'Honor Play 3E'
    - regex: 'NNH-AN00(?:[);/ ]|$)'
      model: 'Honor 50'
    - regex: 'TNNH-AN00(?:[);/ ]|$)'
      model: 'Honor Play 4'
    - regex: 'CHM-[CUT]L00[HM]?(?:[);/ ]|$)'
      model: 'Honor Play 4C'
    - regex: '(?:AKA-AL10|Honor Play 4T)(?:[);/ ]|$)'
      model: 'Honor Play 4T'
    - regex: 'OXP-AN00(?:[);/ ]|$)'
      model: 'Honor Play 4 Pro'
    - regex: 'RKY-AN00(?:[);/ ]|$)'
      model: 'Honor Play 40 Plus'
    - regex: 'RKY-LX[13]'
      model: 'Honor X7a'
    - regex: '(?:NZA-AL00?|KOZ-AL40)(?:[);/ ]|$)'
      model: 'Honor Play 5T' # Vitality Edition
    - regex: 'NEW-AN90'
      model: 'Honor Play 5 Vitality'
    - regex: 'CHL-AL00(?:[);/ ]|$)'
      model: 'Honor Play 5T Pro'
    - regex: 'CMA-AN40(?:[);/ ]|$)'
      model: 'Honor Play 6T'
    - regex: 'CHL-AN00(?:[);/ ]|$)'
      model: 'Honor X20 SE'
    - regex: 'DUA-[TA]L00(?:[);/ ]|$)'
      model: 'Honor Play 7'
    - regex: 'HJC-AN90(?:[);/ ]|$)'
      model: 'Honor Play 5'
    - regex: 'KOZ-AL00(?:[);/ ]|$)'
      model: 'Honor Play 20'
    - regex: 'HJC-LX9(?:[);/ ]|$)'
      model: 'Honor Play 20 Pro'
    - regex: 'JAT-[AT]L00(?:[);/ ]|$)'
      model: 'Honor Play 8A'
    - regex: '(?:MOA-(?:AL[02]0|TL00))(?:[);/ ]|$)'
      model: 'Honor Play 9A'
    - regex: 'BKL-(?:AL00|AL20|AL30|L09|TL10)(?:[);/ ]|$)'
      model: 'Honor V10'
    - regex: 'PCT-[TA]L10(?:[);/ ]|$)'
      model: 'Honor V20'
    - regex: 'YOK-AN10(?:[);/ ]|$)'
      model: 'Honor V40'
    - regex: 'KNT-(?:AL[12]0|[TU]L10)(?:[);/ ]|$)'
      model: 'Honor V8'
    - regex: 'DUK-AL20(?:[);/ ]|$)'
      model: 'Honor V9'
    - regex: 'JMM-[AT]L[01]0(?:[);/ ]|$)'
      model: 'Honor V9 Play'
    - regex: 'BKL-L04(?:[);/ ]|$)'
      model: 'Honor View 10'
    - regex: 'PCT-L29(?:[);/ ]|$)'
      model: 'Honor View 20'
    - regex: 'OXF-AN00(?:[);/ ]|$)'
      model: 'Honor View 30'
    - regex: 'OXF-AN10(?:[);/ ]|$)'
      model: 'Honor View 30 Pro'
    - regex: '(?:Honor_|HW-)?SCL-L(0[1-4]|21|32)(?:_TD)?(?:[);/ ]|$)'
      model: 'Honor Y6'
    - regex: '(?:Honor_|HW-)?LYO-L21(?:[);/ ]|$)'
      model: 'Honor Y6 II Compact'
    - regex: 'NTN-AN20(?:[);/ ]|$)'
      model: 'Honor X20'
    - regex: '(?:TEL-(?:AN(?:00a?|10)|TN00)|Honor X10 5G)(?:[);/ ]|$)'
      model: 'Honor X10 5G'
    - regex: 'Honor X10 Pro(?:[);/ ]|$)'
      model: 'Honor X10 Pro'
    - regex: 'CMA-LX[123]'
      model: 'Honor X7'
    - regex: 'TFY-LX[123]'
      model: 'Honor X8'
    - regex: 'CRT-LX[123]'
      model: 'Honor X8a'
    - regex: 'VNE-N41'
      model: 'Honor X8 5G'
    - regex: 'VNE-LX[123]'
      model: 'Honor X6'
    - regex: '(?:KKG-AN00|Honor X10 Max)(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Honor X10 Max'
    - regex: 'KKG-AN70'
      model: 'Honor X30 Max'
    - regex: 'ANY-AN00'
      model: 'Honor X30'
    - regex: 'TFY-AN00'
      model: 'Honor X30i'
    - regex: 'TFY-AN40'
      model: 'Honor Play 6T Pro'
    - regex: 'DIO-AN00'
      model: 'Honor X40i'
    - regex: 'ADT-AN00'
      model: 'Honor X40 GT'
    - regex: 'RMO-AN00'
      model: 'Honor X40'
    - regex: 'RMO-NX1'
      model: 'Honor X9a'
    - regex: '(?:DNN-LX9|Honor X10 Lite)(?:[);/ ]|$)'
      model: 'Honor X10 Lite'
    - regex: 'ANY-(?:NX1)'
      model: 'Honor X9 5G'
    - regex: 'ANY-(?:LX[23])'
      model: 'Honor X9'
    - regex: 'VNA-LX2'
      model: 'Honor X5'
    - regex: 'ALA-AN70(?:[);/ ]|$)'
      model: 'Honor V40 Lite'
    - regex: 'U8500(?:[);/ ]|$)'
      model: 'Ideos X2'
    - regex: 'U8510(?:[);/ ]|$)'
      model: 'Ideos X3'
    - regex: 'U8800(?:[);/ ]|$)'
      model: 'Ideos X5'
    - regex: 'MLA-AL10(?:[);/ ]|$)'
      model: 'Maimang 5'
    - regex: 'RIO-AL00'
      model: 'Maimang 4'
    - regex: 'POT-AL10(?:[);/ ]|$)'
      model: 'Maimang 8'
    - regex: 'TNN-AN00(?:[);/ ]|$)'
      model: 'Maimang 9'
    - regex: 'TYH601M'
      model: 'Maimang 9 5G'
    - regex: '(?:TAH-(?:N29|AN00)m|Mate Xs)(?:[);/ ]|$)'
      model: 'Mate XS'
    - regex: 'PAL-(?:AL00|LX9)'
      model: 'Mate XS 2'
    - regex: 'TAH-AN00'
      model: 'Mate X'
    - regex: 'TET-(?:A[NL]00|AN10)'
      model: 'Mate X2'
    - regex: 'TET-AN50'
      model: 'Mate X2 5G'
    - regex: 'ALP-(?:[TA]L00|L[02]9)(?:[);/ ]|$)'
      model: 'Mate 10'
    - regex: 'RNE-(?:AL00|L(?:01|03|21|23))(?:[);/ ]|$)'
      model: 'Mate 10 Lite'
    - regex: 'BLA-(?:A09|L[02]9|[TA]L00)(?:[);/ ]|$)'
      model: 'Mate 10 Pro'
    - regex: 'HMA-(?:[AT]L00|L[02]9)(?:[);/ ]|$)'
      model: 'Mate 20'
    - regex: 'SNE-(?:AL00|LX[0-3])(?:[);/ ]|$)'
      model: 'Mate 20 Lite'
    - regex: '(?:LYA-(?:AL[01]0|L[02]9|L0C|TL00)|PAN-L29)(?:[);/ ]|$)'
      model: 'Mate 20 Pro'
    - regex: 'LYA-AL00P(?:[);/ ]|$)'
      model: 'Mate 20 RS'
    - regex: 'EVR-(?:[TA]L00|L29|N29|AN00)(?:[);/ ]|$)'
      model: 'Mate 20 X'
    - regex: 'TAS-([AT]L00|L29)(?:[);/ ]|$)'
      model: 'Mate 30'
    - regex: 'TAS-AN00(?:[);/ ]|$)'
      model: 'Mate 30 5G'
    - regex: '(?:LIO-AN00P|Mate30 RS)(?:[);/ ]|$)'
      model: 'Mate 30 RS Porsche Design'
    - regex: 'SPN-AL00(?:[);/ ]|$)'
      model: 'Mate 30 Lite'
    - regex: 'LIO-(?:[TA]L00|L[02]9|AN00)(?:[);/ ]|$)'
      model: 'Mate 30 Pro'
    - regex: 'LIO-N29(?:[);/ ]|$)'
      model: 'Mate 30 Pro 5G'
    - regex: 'LIO-AN00m(?:[);/ ]|$)'
      model: 'Mate 30E Pro 5G'
    - regex: 'NOH-(?:NX9|AN0[01]|AN50|AL[01]0)(?:[);/ ]|$)'
      model: 'Mate 40 Pro'
    - regex: 'NOP-AN00(?:[);/ ]|$)'
      model: 'Mate 40 Pro+'
    - regex: 'Mate 40 RS(?:[);/ ]|$)'
      model: 'Mate 40 RS'
    - regex: 'OCE-AN10(?:[);/ ]|$)'
      model: 'Mate 40'
    - regex: 'OCE-(?:A[NL]50|AN00)(?:[);/ ]|$)'
      model: 'Mate 40E'
    - regex: 'DCO-(?:AL00|LX9)'
      model: 'Mate 50 Pro'
    - regex: 'CET-(?:AL00|LX9)'
      model: 'Mate 50'
    - regex: 'CET-AL60'
      model: 'Mate 50E'
    - regex: 'NXT-(?:AL10|L[02]9)(?:[);/ ]|$)'
      model: 'Mate 8'
    - regex: '(?:MHA-(?:L[02]9|[AT]L00)|M300-L09)(?:[);/ ]|$)'
      model: 'Mate 9'
    - regex: 'BLL-L23(?:[);/ ]|$)'
      model: 'Mate 9 Lite'
    - regex: 'LON-(?:AL00(?:-PD)?|L29)(?:[);/ ]|$)'
      model: 'Mate 9 Pro'
    - regex: 'NEO-AL00(?:[);/ ]|$)'
      model: 'Mate RS'
    - regex: 'NEO-L29(?:[);/ ]|$)'
      model: 'Mate RS Porsche Design'
    - regex: 'CRR-(?:L09|UL[20]0|CL00)(?:[);/ ]|$)'
      model: 'Mate S'
    - regex: 'BND-L34(?:[);/ ]|$)'
      model: 'Mate SE'
    - regex: '(CAZ-(?:AL[01]0|TL[12]0)|CAN-L[01][1-3])(?:[);/ ]|$)'
      model: 'Nova'
    - regex: '(?:608HW|PRA-LX[23])(?:[);/ ]|$)'
      model: 'Nova Lite'
    - regex: 'MLA-L1[12](?:[);/ ]|$)'
      model: 'Nova Plus'
    - regex: '(?:PIC-(?:[AT]L00|LX9)|HWV31)(?:[);/ ]|$)'
      model: 'Nova 2'
    - regex: '704HW(?:[);/ ]|$)'
      model: 'Nova 2 Lite'
    - regex: 'BAC-(?:L0[13]|TL00)(?:[);/ ]|$)'
      model: 'Nova 2 Plus'
    - regex: 'BAC-(?:AL00|L2[12])(?:[);/ ]|$)'
      model: 'Nova 2 Plus Dual SIM'
    - regex: 'RNE-L[02]2(?:[);/ ]|$)'
      model: 'Nova 2I'
    - regex: 'HWI-[AT]L00(?:[);/ ]|$)'
      model: 'Nova 2S'
    - regex: 'PAR-(?:[AT]L00|LX[19]|LX1M|TL20)(?:[);/ ]|$)'
      model: 'Nova 3'
    - regex: 'ANE-AL00(?:[);/ ]|$)'
      model: 'Nova 3e'
    - regex: 'INE-(?:AL00|LX[12]r|LX[12]|TL00)(?:[);/ ]|$)'
      model: 'Nova 3i'
    - regex: 'VCE-(L22|[AT]L00)(?:[);/ ]|$)'
      model: 'Nova 4'
    - regex: 'MAR-AL00(?:[);/ ]|$)'
      model: 'Nova 4e'
    - regex: 'SEA-AL00(?:[);/ ]|$)'
      model: 'Nova 5'
    - regex: 'SEA-AL10(?:[);/ ]|$)'
      model: 'Nova 5 Pro'
    - regex: 'GLK-(?:[AT]L00|LX1U)(?:[);/ ]|$)'
      model: 'Nova 5i'
    - regex: 'SPN-TL00(?:[);/ ]|$)'
      model: 'Nova 5i Pro'
    - regex: 'WLZ-AL10(?:[);/ ]|$)'
      model: 'Nova 6'
    - regex: 'WLZ-AN00(?:[);/ ]|$)'
      model: 'Nova 6 5G'
    - regex: 'JNY-AL10(?:[);/ ]|$)'
      model: 'Nova 6 SE'
    - regex: 'JEF-(?:[AT]N00|[AT]N20|NX9)(?:[);/ ]|$)'
      model: 'Nova 7 5G'
    - regex: 'JER-(?:[AT]N10|[AT]N20)(?:[);/ ]|$)'
      model: 'Nova 7 Pro 5G'
    - regex: '(?:CDY-(?:[AT]N00|NX9B|[AT]N20)|CDL-AN50|CND-AN00)(?:[);/ ]|$)'
      model: 'Nova 7 SE 5G'
    - regex: 'JNY-LX2(?:[);/ ]|$)'
      model: 'Nova 7i'
    - regex: 'ANG-LX[12](?:[);/ ]|$)'
      model: 'Nova 8'
    - regex: 'NEN-L(?:X[13]|22)(?:[);/ ]|$)'
      model: 'Nova 8i'
    - regex: 'ANG-AN00(?:[);/ ]|$)'
      model: 'Nova 8 5G'
    - regex: 'JSC-AN00'
      model: 'Nova 8 SE 5G'
    - regex: 'JSC-AL50'
      model: 'Nova 8 SE 4G'
    - regex: 'CHL-AL60'
      model: 'Nova 8 SE Vitality'
    - regex: 'BRQ-AL00(?:[);/ ]|$)'
      model: 'Nova 8 Pro 4G'
    - regex: 'BRQ-AN00(?:[);/ ]|$)'
      model: 'Nova 8 Pro 5G'
    - regex: 'NAM-(?:AL00|LX9)(?:[);/ ]|$)'
      model: 'Nova 9'
    - regex: 'RTE-AL00(?:[);/ ]|$)'
      model: 'Nova 9 Pro'  # 4G
    - regex: 'JLN-(?:AL00|LX[13])'
      model: 'Nova 9 SE'   # 4G
    - regex: 'GLA-(?:LX[13]|AL00)'
      model: 'Nova 10 Pro'
    - regex: 'NCO-(?:AL00|LX[13])'
      model: 'Nova 10 4G'
    - regex: 'BNE-(?:LX1|AL00)'
      model: 'Nova 10 SE'
    - regex: 'DIG-L01(?:[);/ ]|$)'
      model: 'Nova Smart'
    - regex: 'WAS-AL00(?:[);/ ]|$)'
      model: 'Nova Youth'
    - regex: 'WKG-[AT]N00'
      model: 'Enjoy 20 5G'
    - regex: 'WKG-LX9(?:[);/ ]|$)'
      model: 'Nova Y60'
    - regex: 'EVE-LX9'
      model: 'Nova Y61'
    - regex: 'MGA-LX[39]'
      model: 'Nova Y70'
    - regex: 'CTR-LX[123]'
      model: 'Nova Y90'
    - regex: 'FIG-L(?:A1|X[123])(?:[);/ ]|$)'
      model: 'P smart'
    - regex: 'POT-(?:LX(?:[13]|1T|2J|1AF)|AL00|L01)(?:[);/ ]|$)'
      model: 'P smart (2019)'
    - regex: 'POT-LX1A(?:[);/ ]|$)'
      model: 'P smart (2020)'
    - regex: 'PPA-LX[12](?:[);/ ]|$)'
      model: 'P smart (2021)'
    - regex: 'STK-LX1(?:[);/ ]|$)'
      model: 'P smart Z'
    - regex: 'P Smart S(?:[);/ ]|$)'
      model: 'P smart S'
    - regex: 'VTR-(?:L[02]9|AL00|TL00)(?:[);/ ]|$)'
      model: 'P10'
    - regex: 'WAS-(?:L(?:X1|X1A|X2|X2J|X3|03T)|TL10)(?:[);/ ]|$)'
      model: 'P10 Lite'
    - regex: 'VKY-(?:AL00|L09|L29)(?:[);/ ]|$)'
      model: 'P10 Plus'
    - regex: 'BAC-L[02]3(?:[);/ ]|$)'
      model: 'P10 Selfie'
    - regex: 'EML-(?:[TA]L00|L[02]9)(?:[);/ ]|$)'
      model: 'P20'
    - regex: '(?:ANE-(?:LX[123]|LX2J|TL00)|HWV32)(?:[);/ ]|$)'
      model: 'P20 Lite'
    - regex: '(?:CLT-(?:AL0[01]|TL0[01]|L0J|L(?:04|[02]9))l?|HW-01K)(?:[);/ ]|$)'
      model: 'P20 Pro'
    - regex: '(ELE-L(?:04|09|29)|ELE-[AT]L00)(?:[);/ ]|$)'
      model: 'P30'
    - regex: '(?:MAR-(?:LX(?:1[BM]|2B|[13]Am?|2J?|3BM)|TL00|L21B)|NIC-LX1A|HWV33)(?:[);/ ]|$)'
      model: 'P30 Lite'
    - regex: '(?:VOG-(?:L(?:04|09|29)|TL00|AL10)|HW-02L)(?:[);/ ]|$)'
      model: 'P30 Pro'
    - regex: 'ANA-LX4(?:[);/ ]|$)'
      model: 'P40'
    - regex: 'JNY-LX1(?:[);/ ]|$)'
      model: 'P40 Lite'
    - regex: 'ART-L29(?:[);/ ]|$)'
      model: 'P40 Lite E'
    - regex: 'ART-L29N(?:[);/ ]|$)'
      model: 'P40 Lite E NFC'
    - regex: '(?:ELS-(?:[AT]N00|NX9|N04)|NEY-NX9)(?:[);/ ]|$)'
      model: 'P40 Pro'
    - regex: 'ELS-(?:AN10|N39)(?:[);/ ]|$)'
      model: 'P40 Pro Plus'
    - regex: 'GRA-(?:L09|[TU]L00)(?:[);/ ]|$)'
      model: 'P8'
    - regex: 'HUAWEI P8max(?:[);/ ]|$)'
      model: 'P8 Max'
    - regex: 'GRA-UL10(?:[);/ ]|$)'
      model: 'P8 Premium'
    - regex: '(?:ALE-L(?:02|21|23)|ALE-[TUC]L00|503HW)(?:[);/ ]|$)'
      model: 'P8 Lite (2015)'
    - regex: '(?:PRA-L(?:A1|X[12])|hi6210sft)(?:[);/ ]|$)'
      model: 'P8 Lite (2017)'
    - regex: 'EVA-(?:AL[10]0|L[012]9|[TCD]L00)(?:[);/ ]|$)'
      model: 'P9'
    - regex: 'VNS-L(?:[23]1|[26]2|53|23)(?:[);/ ]|$)'
      model: 'P9 Lite'
    - regex: 'VNS-L52(?:[);/ ]|$)'
      model: 'P9 Lite Premium'
    - regex: 'SLA-L(?:02|03|22|23)(?:[);/ ]|$)'
      model: 'P9 Lite Mini'
    - regex: 'DIG-L(?:03|23)(?:[);/ ]|$)'
      model: 'P9 Lite Smart'
    - regex: 'VIE-(?:AL10|L[02]9)(?:[);/ ]|$)'
      model: 'P9 Plus'
    - regex: 'MLA-TL[01]0(?:[);/ ]|$)'
      model: 'G9 Plus'
    - regex: 'VNS-[AT]L00(?:[);/ ]|$)'
      model: 'G9 Lite'
    - regex: 'ATH-UL0[16](?:[);/ ]|$)'
      model: 'ShotX'
    - regex: 'U(8230|8661|8667)(?:[);/ ]|$)'
      model: 'U$1'
    - regex: 'ARS-([AT]L00|L22)(?:[);/ ]|$)'
      model: 'Y Max'
    - regex: 'CRO-(?:L[02]2|U00)(?:[);/ ]|$)'
      model: 'Y3 (2017)'
    - regex: 'CAG-L[02]2(?:[);/ ]|$)'
      model: 'Y3 (2018)'
    - regex: 'LUA-(U22|L2[12]|U03)(?:[);/ ]|$)'
      model: 'Y3II'
    - regex: 'MYA-(?:L(?:02|03|2[23])|U29)(?:[);/ ]|$)'
      model: 'Y5 (2017)'
    - regex: 'DRA-L(?:01|03|21|23|X3)(?:[);/ ]|$)'
      model: 'Y5 (2018)'
    - regex: 'AMN-LX[1239](?:[);/ ]|$)'
      model: 'Y5 (2019)'
    - regex: 'DRA-LX5(?:[);/ ]|$)'
      model: 'Y5 lite'
    - regex: 'DRA-LX9(?:[);/ ]|$)'
      model: 'Y5p'
    - regex: 'CRO-L[02]3(?:[);/ ]|$)'
      model: 'Y5 Lite (2017)'
    - regex: 'CAG-L[02]3(?:[);/ ]|$)'
      model: 'Y5 Lite (2018)'
    - regex: 'DRA-(?:LX2|[AT]L00)(?:[);/ ]|$)'
      model: 'Y5 Prime (2018)'
    - regex: 'MYA-L13(?:[);/ ]|$)'
      model: 'Y5 Pro (2017)'
    - regex: 'CUN-(?:L(?:0[123]|2[123]|33)|U29)(?:[);/ ]|$)'
      model: 'Y5II'
    - regex: '(?:SCC-U21|SCL-U31)(?:[);/ ]|$)'
      model: 'Y6'
    - regex: 'MYA-L11(?:[);/ ]|$)'
      model: 'Y6 (2016)'
    - regex: 'MYA-(L41|AL10)(?:[);/ ]|$)'
      model: 'Y6 (2017)'
    - regex: 'ATU-L(?:11|21|22|X3)(?:[);/ ]|$)'
      model: 'Y6 (2018)'
    - regex: 'MRD-L(?:X1[NF]?|X3)(?:[);/ ]|$)'
      model: 'Y6 (2019)'
    - regex: 'ATU-L(?:31|42)(?:[);/ ]|$)'
      model: 'Y6 Prime (2018)'
    - regex: 'TIT-(?:AL00|L01|U02)(?:[);/ ]|$)'
      model: 'Y6 Pro'
    - regex: 'M[ER]D-LX2(?:[);/ ]|$)'
      model: 'Y6 Pro (2019)'
    - regex: 'Y625-U03(?:[);/ ]|$)'
      model: 'Y625'
    - regex: 'Y635-L0[123](?:[);/ ]|$)'
      model: 'Y635'
    - regex: 'Y635-L21(?:[);/ ]|$)'
      model: 'Y635 Dual SIM'
    - regex: 'CAM-L(?:03|21|23|32)(?:[);/ ]|$)'
      model: 'Y6II'
    - regex: 'TRT-LX[123](?:[);/ ]|$)'
      model: 'Y7 (2017)'
    - regex: 'LDN-L(?:01|X3)(?:[);/ ]|$)'
      model: 'Y7 (2018)'
    - regex: '(?:HUAWEI[ _]?)?DUB-(?:LX[13]|TL00)(?:[);/ ]|$)'
      model: 'Y7 (2019)'
    - regex: '(LDN-(?:AL00|L21)|TRT-TL10)(?:[);/ ]|$)'
      model: 'Y7 Prime'
    - regex: '(LDN-(?:LX2|TL10)|TRT-(?:L21A|L53))(?:[);/ ]|$)'
      model: 'Y7 Prime (2018)'
    - regex: 'DUB-(?:LX2|AL00)(?:[);/ ]|$)'
      model: 'Y7 Pro (2019)'
    - regex: 'DUB-AL00a(?:[);/ ]|$)'
      model: 'Enjoy 9'
    - regex: 'DUB-AL20(?:[);/ ]|$)'
      model: 'Y7 Pro (2019)'
    - regex: '(?:PPA-LX3|Peppa-(?:L2[23]B|L0[23]B))(?:[);/ ]|$)'
      model: 'Y7a'
    - regex: 'ART-L28(?:[);/ ]|$)'
      model: 'Y7p'
    - regex: 'AQM-LX1(?:[);/ ]|$)'
      model: 'Y8p'
    - regex: 'FLA-(LX[123]|AL20|TL10)(?:[);/ ]|$)'
      model: 'Y9 (2018)'
    - regex: 'JKM-(?:[TA]L00[ab]?|LX[123])(?:[);/ ]|$)'
      model: 'Y9 (2019)'
    - regex: 'STK-(L2[12]|LX3)(?:[);/ ]|$)'
      model: 'Y9 Prime (2019)'
    - regex: 'FRL-L2[23](?:[);/ ]|$)'
      model: 'Y9a'
    - regex: '302HW(?:[);/ ]|$)'
      model: 'Stream S'
    - regex: 'NMO-L31(?:[);/ ]|$)'
      model: 'GT3'
    - regex: 'CM990(?:[);/ ]|$)'
      model: 'Evolucion 3'
    - regex: 'Ultym5(?:[);/ ]|$)'
      model: 'Ultym 5'
    - regex: 'G6-L11(?:[);/ ]|$)'
      model: 'Ascend G6'

    - regex: 'Nexus 6P(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Nexus 6P'

    - regex: 'HWT31(?:[);/ ]|$)'
      model: 'Qua Tab 02 10.1"'
      device: 'tablet'
    - regex: 'HDN-[LW]09(?:[);/ ]|$)'
      model: 'Honor Water Play 10.1'
      device: 'tablet'
    - regex: 'BAH4-(?:L09|AL10)'
      model: 'MatePad 10.4" (2022)'
      device: 'tablet'
    - regex: 'BAH4-W(?:29|[03]9)'
      model: 'MatePad 10.4" (2022) WiFi'
      device: 'tablet'
    - regex: 'BAH3-(?:AL00|[LW]09)(?:[);/ ]|$)'
      model: 'MatePad 10.4"'
      device: 'tablet'
    - regex: 'BAH3-W59(?:[);/ ]|$)'
      model: 'MatePad 10.4" WiFi'
      device: 'tablet'
    - regex: 'BAH3-AN10(?:[);/ ]|$)'
      model: 'MatePad 10.4" 5G'
      device: 'tablet'
    - regex: 'DBY-W09(?:[);/ ]|$)'
      model: 'MatePad 11 WiFi'
      device: 'tablet'
    - regex: 'GOT-AL09(?:[);/ ]|$)'
      model: 'MatePad Pro 11'
      device: 'tablet'
    - regex: 'GOT-W29(?:[);/ ]|$)'
      model: 'MatePad Pro 11 WiFi'
      device: 'tablet'
    - regex: 'SCMR-W09(?:[);/ ]|$)'
      model: 'MatePad 10.8" WiFi'
      device: 'tablet'
    - regex: 'SCMR-AL09(?:[);/ ]|$)'
      model: 'MatePad 10.8"'
      device: 'tablet'
    - regex: 'AGS3-(L09|AL00)(?:[);/ ]|$)'
      model: 'MatePad T10s'
      device: 'tablet'
    - regex: 'AGS3-W09(?:[);/ ]|$)'
      model: 'MatePad T10s WiFi'
      device: 'tablet'
    - regex: 'AGS5-L09(?:[);/ ]|$)'
      model: 'MatePad 10.4" SE'
      device: 'tablet'
    - regex: 'AGS5-W09(?:[);/ ]|$)'
      model: 'MatePad 10.4" SE WiFi'
      device: 'tablet'
    - regex: 'HMW-W09(?:[);/ ]|$)'
      model: 'MatePad Paper 10.3" WiFi'
      device: 'tablet'
    - regex: 'HDL-(?:W09|AL09)(?:[);/ ]|$)'
      model: 'Honor Water Play 8.0'
      device: 'tablet'
    - regex: 'JDN-(?:AL00|W09)(?:[);/ ]|$)'
      model: 'Honor Pad 2'
      device: 'tablet'
    - regex: 'ROD-W09'
      model: 'Honor Pad V8 Pro 12.1" WiFi'
      device: 'tablet'
    - regex: 'KRJ2-W09'
      model: 'Honor Pad V7 10.4" WiFi'
      device: 'tablet'
    - regex: 'KRJ2-AN00'
      model: 'Honor Pad V7 10.4" 5G'
      device: 'tablet'
    - regex: 'BRT-W09'
      model: 'Honor Pad V7 Pro 11" WiFi'
      device: 'tablet'
    - regex: 'BRT-AN09'
      model: 'Honor Pad V7 Pro 11" 5G'
      device: 'tablet'
    - regex: 'KRJ-AN00|Honor V6 5G'
      model: 'Honor Pad V6 10.4" 5G'
      device: 'tablet'
    - regex: 'KJR-W09|KRJ-W09|Honor V6 Wi-Fi'
      model: 'Honor Pad V6 10.4" WiFi'
      device: 'tablet'
    - regex: 'KOB2-W09HN'
      device: 'tablet'
      model: 'Honor Pad X7 8" WiFi'
    - regex: 'KOB2-AL00HN'
      device: 'tablet'
      model: 'Honor Pad X7 8" LTE'
    - regex: 'AGR-W09HN'
      device: 'tablet'
      model: 'Honor Pad X6'
    - regex: 'AGR-AL09HN'
      device: 'tablet'
      model: 'Honor Pad X6 9.7"'
    - regex: 'AGS3-AL09HN(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Honor Pad 6 10.1"'
    - regex: 'AGS3-W09HN(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Honor Pad 6 10.1" WiFi'
    - regex: 'HEY-W09(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Honor Pad 8 12.0" WiFi'
    - regex: 'MON-(W|AL)19(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MatePad C5 8'
    - regex: 'BZA-W00(?:[);/ ]|$)'
      device: 'tablet'
      model: 'C3 9.6" WiFi'
    - regex: 'BZA-L00(?:[);/ ]|$)'
      device: 'tablet'
      model: 'C3 9.6"'
    - regex: 'BZC-AL00(?:[);/ ]|$)'
      device: 'tablet'
      model: 'C3 9.7" (2020)'
    - regex: 'BZC-W00(?:[);/ ]|$)'
      device: 'tablet'
      model: 'C3 9.7" (2020) WiFi'
    - regex: 'BZW-AL[01]0(?:[);/ ]|$)'
      device: 'tablet'
      model: 'C5 8" LTE'
    - regex: 'BZT4-W19(?:[);/ ]|$)'
      device: 'tablet'
      model: 'C5 10.4" WiFi'
    - regex: 'M2-80[123]L(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad M2 8.0"'
    - regex: 'M2-A01L(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad M2 10.1"'
    - regex: 'M2-801W(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad M2 8.0" WiFi'
    - regex: 'MRX-AL[01]9(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MatePad Pro 10.8"'
    - regex: 'MRX-W[0-3]9(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MatePad Pro 10.8" WiFi'
    - regex: 'MRR-W[23]9(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MatePad Pro 10.8" (2021) WiFi'
    - regex: 'MRX-AN19(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MatePad Pro 10.8" 5G'
    - regex: 'WGRR?-W[10]9(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MatePad Pro 12.6" WiFi'
    - regex: 'WGR-AN19(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MatePad Pro 12.6"'
    - regex: 'CMR-(?:AL[01]9|W09)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad M5 10.8'
    - regex: 'CMR-W19(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad M5 Pro 10.8'
    - regex: 'SCM-AL09(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad M6 10.8"'
    - regex: 'GEM-70[1-3]L(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad X2'
    - regex: '(?:JDN2-(:?[WL]09|AL[50]0|AL50HN)|BAH2-(?:AL[01]0|L09|W[01]9))(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad M5 Lite'  #8.4
    - regex: 'SHT-(?:AL|W)09(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad M5 8.4'
    - regex: 'VRD-(?:(AL|W)09|AL10|W10)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad M6 8.4'
    - regex: 'SCM-W09(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad M6 10.8" WiFi'
    - regex: 'BTV-W09(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad M3 8'
    - regex: '(BAH-W09|CPN-(?:L|W)09|CPN-AL00|701HW)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad M3 Lite'
    - regex: 'BAH-(?:L09|AL00)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad M3 Lite 10'
    - regex: 'BTV-DL09'
      device: 'tablet'
      model: 'MediaPad M3'
    - regex: '(AGS2-AL00|JDN2-(?:AL00|W09))HN(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Honor Tab 5'
    - regex: 'AGM3-W09HN'
      device: 'tablet'
      model: 'Honor Pad 7 10.1" WiFi'
    - regex: 'AGM3-AL09HN'
      device: 'tablet'
      model: 'Honor Pad 7 10.1"'
    - regex: 'AGS2-(?:[LW]09|W09HN|W19|L03)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad T5 10'
    - regex: '(?:KOB2-(?:[LW]09|L03)|Kobe3-L09)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad T 8.0"'
    - regex: 'AGR-[LW]09(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad T 10'
    - regex: 'AGS-(?:L0[39]|W09)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad T3 10'
    - regex: '(KOB-(?:L|W)09|BZK-[LW]00)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad T3 8'
    - regex: 'BG2-(?:U0[13]|W09)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad T3 7'
    - regex: 'BGO-L03(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad T2 7.0'
    - regex: '(?:BGO-DL09|PLE-70[13]L)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad T2 7.0 Pro'
    - regex: 'JDN-L01(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad T2 8.0 Pro'
    - regex: '(?:FDR-(A01[LW]|A03L)|60[56]HW)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad T2 10.0" Pro'
    - regex: 'T1-(?:A21[LW]|A2[23]L)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad T1 10'
    - regex: 'T1-701u(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad T1 7'
    - regex: '(?:T1-82(?:3L|1W)|MediaPad T1 8.0)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad T1 8'
    - regex: 'AGS3K-W20'
      device: 'tablet'
      model: 'MediaPad SE 10.1" WiFi'
    - regex: 'AGS3K-W0[90]'
      device: 'tablet'
      model: 'MediaPad T10s 10.1" WiFi'
    - regex: 'AGS3K-L09'
      device: 'tablet'
      model: 'MediaPad T10s 10.1" LTE'
    - regex: 'AGRK-W09'
      device: 'tablet'
      model: 'MediaPad T10 9.7" WiFi'
    - regex: 'AGRK-L09'
      device: 'tablet'
      model: 'MediaPad T10 9.7" LTE'
    - regex: 'AGS2-AL00(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Enjoy Tablet 10.1'
    - regex: 'AGS3-W00[DE](?:[);/ ]|$)'
      device: 'tablet'
      model: 'Enjoy Tablet 2 10.1" WiFi'
    - regex: 'BZT-(?:AL[01]0)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad C5 10.1'
    - regex: 'BZT-W09(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MediaPad C5 10.1 WiFi'
    - regex: 'MON-AL19B'
      device: 'tablet'
      model: 'MediaPad C5 8"'
    - regex: 'BZI-AL00'
      model: 'C5e 10.1"'
      device: 'tablet'
    - regex: 'BZI-W00'
      model: 'C5e 10.1" WiFi'
      device: 'tablet'
    - regex: 'BZT3-W09'
      model: 'C5 10.4" WiFi'
      device: 'tablet'
    - regex: 'BZT3-AL00'
      model: 'C5 10.4"'
      device: 'tablet'
    - regex: 'BZD-W00'
      device: 'tablet'
      model: 'MediaPad C3 8.0" WiFi'
    - regex: 'BZD-AL00'
      device: 'tablet'
      model: 'MediaPad C3 8.0"'
    - regex: '(?:d-01J|d-02[HK])(?:[);/ ]|$)'
      device: 'tablet'
      model: 'D Tab Compact'
    - regex: '(?:dtab)?(d-01[KH]|01)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'dtab $1'

      # smart watch regex
    - regex: 'LEO-BX9(?:[);/ ]|$)'
      device: 'wearable'
      model: 'Smart Watch 2'
    - regex: 'LEO-DLXXE?(?:[);/ ]|$)'
      device: 'wearable'
      model: 'Smart Watch 2 Sport'

    # smart display regex
    - regex: 'BLM-00(?:[);/ ]|$)'
      device: 'smart display'
      model: 'BLM-00 SmartScreen'

    # tv regex
    - regex: 'EC6108V(8|9)'
      device: 'tv'
      model: 'EC6108V$1'
    - regex: 'KANT-369'
      device: 'tv'
      model: 'Vision S 65"'
    - regex: 'KANT-350[BC]'
      device: 'tv'
      model: 'Smart Screen S 55"'
    - regex: 'KANT-350S'
      device: 'tv'
      model: 'Smart Screen S Pro 55"'
    - regex: 'KANT-360S'
      device: 'tv'
      model: 'Smart Screen S Pro 65"'
    - regex: 'KANT-360'
      device: 'tv'
      model: 'Smart Screen S 65"'
    - regex: 'KANT-370S'
      device: 'tv'
      model: 'Smart Screen S Pro 75"'
    - regex: 'KANT-370'
      device: 'tv'
      model: 'Smart Screen S 75"'

      # common regex
    - regex: '(MediaPad[^/;]*) Build'
      device: 'tablet'
      model: '$1'
    - regex: 'Ideos([^;/]*) Build'
      model: 'Ideos$1'
    - regex: '(?:HUAWEI )?MT([0-9]+)'
      device: 'phablet'
      model: 'Ascend Mate $1'
    - regex: 'Huawei[ _\-]?([^/;]*) Build'
      model: '$1'
    - regex: '(?:HW-)?Huawei(?!Browser)(?:/1\.0/0?(?:Huawei))?[_\- /]?([a-z0-9\-_]+)'
      model: '$1'
    - regex: 'Huawei; ([a-z0-9 \-]+)'
      model: '$1'

# Hyundai
Hyundai:
  regex: 'Hyundai|(?:Ultra (?:Active|Air|Charm|Dream|Energy|Latitude|Link|Live|Shadow|Shine|Storm|Style|Sync|Trend|Vision|Wave)|Ultra_Vision_Plus|E(?:475|504|603)|G(?:24027|2552[34])K|W25042L|HP554O|Seoul (ECO|S8|MIX|5 Plus|9)|L503F Plus|HT0701L16|HT0703K16|HT0704K08|HT100(?:4LI?16|2W32|3X16|2W16)|Koral_8W2|HT0701W16|Eternity[_ ](?:G25|H6[578])|HYMI 5S Plus|7GB1|7WD1|(?:Android 9;(?: [\w-]+;)? [EL]553)|10LB1|L601F|10WB1|E601F|E503F|E465GO|H-LED55EU1311|H-LED40GS5003|H-DMP100|HT0703W08)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Ultra[_ ]Vision[_ ]Plus'
      model: 'Ultra Vision Plus'
    - regex: 'Ultra (Active|Air|Charm|Dream|Energy Lite|Energy Plus|Energy|Latitude|Link|Live II|Live|Shadow|Shine|Storm|Style|Sync|Trend|Vision|Wave)'
      model: 'Ultra $1'
    - regex: 'Seoul S8'
      model: 'Seoul S8'
    - regex: 'Seoul MIX'
      model: 'Seoul Mix'
    - regex: 'Seoul ECO'
      model: 'Seoul Eco'
    - regex: 'Seoul 5 Plus'
      model: 'Seoul 5 Plus'
    - regex: 'Seoul (\d+)'
      model: 'Seoul $1'
    - regex: 'G25523K'
      model: 'Eternity G23'
    - regex: 'Eternity[_ ](G25|H6[578])'
      model: 'Eternity $1'
    - regex: 'G25524K'
      model: 'Eternity G24'
    - regex: 'G24027K'
      model: 'Eternity G27'
    - regex: 'W25042L'
      model: 'Eternity W42'
    - regex: 'HP554O'
      model: 'HP554O'
    - regex: 'L503F Plus'
      model: 'L503F Plus'
    - regex: 'HYMI 5S Plus'
      model: 'Hymi 5S Plus'
    - regex: 'E465GO'
      model: 'E465 Go'
    - regex: 'E(475|504|503F|553|603|601F)(?:[);/ ]|$)'
      model: 'E$1'
    - regex: 'L(553|601F)(?:[);/ ]|$)'
      model: 'L$1'
    - regex: '(?:Hyundai[_ ])?(Eternity[_ ](?:G57L?|G[56]0W?)|H7|Aero Plus)'
      model: '$1'

    - regex: '(H-LED\w+|H-DMP100)(?:[);/ ]|$)'
      device: 'tv'
      model: '$1'

    # explicit tables models
    - regex: 'HT0701L16'
      model: 'Koral 7XL'
      device: 'tablet'
    - regex: 'HT0701W16'
      model: 'Koral 7W4X'
      device: 'tablet'
    - regex: 'HT0703W08'
      model: 'Koral 7W3'
      device: 'tablet'
    - regex: '10LB1'
      model: 'Koral 10LB1'
      device: 'tablet'
    - regex: 'HT1004LI16'
      model: 'Koral 10XL'
      device: 'tablet'
    - regex: 'Koral_8W2'
      model: 'Koral 8W2'
      device: 'tablet'
    - regex: 'HT1004L16'
      model: 'Koral 10XL'
      device: 'tablet'
    - regex: 'HT1003X16'
      model: 'Koral 10X'
      device: 'tablet'
    - regex: 'HT1002W16'
      model: 'Koral 10W'
      device: 'tablet'
    - regex: 'HT0703K16'
      model: 'Koral 7M3X'
      device: 'tablet'
    - regex: 'HT0704K08'
      model: 'Koral 7M4'
      device: 'tablet'
    - regex: '10WB1'
      model: 'Koral 10WB1'
      device: 'tablet'
    - regex: 'HT1002W32'
      model: 'Koral 10X3 WiFi'
      device: 'tablet'
    - regex: '7GB1(?:[);/ ]|$)'
      model: 'HyTab 7GB1'
      device: 'tablet'
    - regex: '7WD1(?:[);/ ]|$)'
      model: 'HyTab Lite 7WD1'
      device: 'tablet'
    - regex: 'Hyundai ([^;/]+) Build'
      model: '$1'
      device: 'tablet'
    - regex: 'Hyundai[ _\-]?([a-z0-9_-]+)'
      model: '$1'
      device: 'tablet'

#i-Joy
'i-Joy':
  regex: 'i-Joy|i-Call|(?:Neon[79]|Sygnus|Deox|Elektra (?:M|L|XL|XXL))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    # explicit smartphone models
    - regex: 'Elektra M(?:[);/ ]|$)'
      model: 'Elektra M'
    - regex: 'Elektra L(?:[);/ ]|$)'
      model: 'Elektra L'
    - regex: 'Elektra XL(?:[);/ ]|$)'
      model: 'Elektra XL'
    - regex: 'Elektra XXL(?:[);/ ]|$)'
      model: 'Elektra XXL'
      device: 'phablet'

    # explicit tablet models
    - regex: 'Neon([79])(?:[);/ ]|$)'
      model: 'Neon $1'
      device: 'tablet'
    - regex: 'Sygnus(?:[);/ ]|$)'
      model: 'Sygnus'
      device: 'tablet'
    - regex: 'Deox(?:[);/ ]|$)'
      model: 'Deox'
      device: 'tablet'

    - regex: 'i-Call ([^;/]+) Build'
      model: 'i-Call $1'
    - regex: 'i-Joy ([^;/]+) Build'
      model: '$1'

# iBall (iball.co.in)
iBall:
  regex: 'iBall[ _]([^;/)]+)[ _]Build|iBall[_ ]Slide|(?:Snap[_ ]4G2|3G 1026-Q18|6351-Q400i|iT-KSA0003|iT-KSA0012|iT-KSA0066|Avid|Twinkle_i5|Gorgeo[_ ]4GL|Brisk 4G2|Slide[_ ]Dazzle[_ ]3500|Blaze_V4|Wondro 10|Q27 4G|Andi (?:Wink|5G Blink) 4G|Co-Mate|Nova_4G|Brace-X1|DD-1GB)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'Andi Wink 4G'
      device: 'smartphone'
      model: 'Andi Wink 4G'
    - regex: 'Andi 5G Blink 4G'
      device: 'smartphone'
      model: 'Andi 5G Blink 4G'
    - regex: '(Snap[_ ]4G2|Avid|Twinkle_i5|Gorgeo[_ ]4GL|Blaze_V4|Wondro 10|Q27 4G|Brisk 4G2|Co-Mate|Nova_4G)(?:[);/ ]|$)'
      model: '$1'
    - regex: '6351-Q400i(?:[);/ ]|$)'
      model: 'Slide'
    - regex: 'DD-1GB(?:[);/ ]|$)'
      model: 'Slide DD-1GB'
    - regex: 'Slide[_ ]Dazzle[_ ]3500(?:[);/ ]|$)'
      model: 'Slide Dazzle 3500'
    - regex: '1026-Q18(?:[);/ ]|$)'
      model: 'Slide 3G'
    - regex: 'Brace-X1(?:[);/ ]|$)'
      model: 'Brace X1'
    - regex: 'iT-KSA0003(?:[);/ ]|$)'
      model: 'iTAB BizniZ'
    - regex: 'iT-KSA0066(?:[);/ ]|$)'
      model: 'iTAB BizniZ Mini'
    - regex: 'iT-KSA0012(?:[);/ ]|$)'
      model: 'iTAB Moviez Pro'
    - regex: 'iBall[ _]([^;/)]+)(?:[ _]Build|[;)])'
      model: '$1'

# iRola
iRola:
  regex: 'iRola ([^/;]+) Build|(DX758|DX752|DX752|DX758[ _]?Pro) Build'
  device: 'tablet'
  models:
    - regex: 'DX758[ _]?Pro'
      model: 'DX758 Pro'
    - regex: '(DX758|DX752)'
      model: '$1'
    - regex: 'iRola ([^/;]+) Build'
      model: '$1'

# iRulu
iRulu:
  regex: 'iRULU[ _-](X11|V[34]|U2|AL101)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'iRULU[ _-](X11|V[34]|AL101)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'iRULU[ _](U2)(?:[);/ ]|$)'
      device: 'smartphone'
      model: '$1'

# Irbis (irbis-digital.ru)
Irbis:
  regex: 'IRBIS|TZ(1(?:0[04]|42|5[01]|84|65|7[01345-89]|8[356]|9[12578])|200|49|55|72|22|7(?:0[127]|1[1-46789]|2[021567]|3[025-8]|4[257]|5[23457]|6[12]|72|7[137]|8[1]|9[147])|8(?:[34]1|32|5[3-8]|6[2-5]|7[12478]|8[1-5]|9[0127])|96[0-9])|TZ199|TZ85|TZ13|TZ(?:one|art|HIT|81L)|(SP(?:0[56]|2[01]|4[1-36]|40[12]|45[345]|49[34]|50|51[0147]|531|54[12]|55[0124]|571)|43F1YDX000BS2)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(TZ(?:[0-9]+)|TZ(?:one|art|HIT|81L))(?:[);/ ]|$)'
      model: '$1'
    - regex: '(SP[0-9]+)(?:[);/ ]|$)'
      device: 'smartphone'
      model: '$1'
    - regex: '(43F1YDX000BS2)'
      device: 'tv'
      model: '$1'

iBerry:
  regex: 'AUXUS ([^/;]+) Build'
  device: 'smartphone'
  models:
    - regex: 'AUXUS (Core[^/;]+) Build'
      device: 'tablet'
      model: '$1'
    - regex: 'AUXUS ([^/;]+) Build'
      model: '$1'

# iHunt
iHunt:
  regex: 'iHunt|One_ Love_|TIT?AN[_ ]P\d+|Like_(3|4U|3_Pro)|X300 Elite|S10_Tank_2019|S10 Tank PRO 2020|S60 Discovery Plus|S60_Discovery_2019|AlienXLite2020|Alien X (?:Lite|Pro)|Alien_X|(?:Titan ?P6000|S[23]0 Ultra ApeX 2021|S21 Ultra 4G 2021|Like 11 Panda Pro|Like_Hi10_2021|Like Hi5|S21 Plus 2021|Like_[78]|S10 Tank 2020|(?:S100|S90_)Apex)(?:_EEA)?(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Like_Hi10_2021'
      model: 'Like Hi10 (2021)'
    - regex: 'S10[_ ]Tank[_ ]20(19|20)'
      model: 'S10 Tank (20$1)'
    - regex: 'S10 Tank PRO 2020'
      model: 'S10 Tank Pro (2020)'
    - regex: 'One_ Love_'
      model: 'One Love'
    - regex: 'Tian[ _]P3000'
      model: 'Tian P3000'
    - regex: 'TITAN_P11000_PRO'
      model: 'Titan P11000 Pro'
    - regex: 'TITAN P15000 PRO 5G'
      model: 'Titan P15000 Pro 5G'
    - regex: 'TITAN P4000 Pro 2021'
      model: 'Titan P4000 Pro (2021)'
    - regex: 'Titan P8000 PRO 2021'
      model: 'Titan P8000 Pro (2021)'
    - regex: 'Titan_P6000_PRO'
      model: 'Titan P6000 Pro'
    - regex: 'Titan ?P6000'
      model: 'Titan P6000'
    - regex: 'Like_3_Pro'
      model: 'Like 3 Pro'
    - regex: 'Like 12 PRO'
      model: 'Like 12 Pro'
    - regex: 'Like Hi5'
      model: 'Like Hi5'
    - regex: 'Like_([378])'
      model: 'Like $1'
    - regex: 'Like_4U'
      model: 'Like 4U'
    - regex: 'iHunt_Like'
      model: 'Like'
    - regex: 'X300 Elite'
      model: 'X300 Elite'
    - regex: 'S60_Discovery_2019'
      model: 'S60 Discovery (2019)'
    - regex: 'S60 Discovery Plus'
      model: 'S60 Discovery Plus'
    - regex: 'S60 Discovery Pro 2022'
      model: 'S60 Discovery Pro (2022)'
    - regex: 'AlienXLite2020'
      model: 'Alien X Lite (2020)'
    - regex: 'Alien X Lite PRO'
      model: 'Alien X Lite Pro'
    - regex: 'Alien X Lite'
      model: 'Alien X Lite'
    - regex: 'Alien X Pro 2021'
      model: 'Alien X Pro (2021)'
    - regex: 'Alien_X_ApeX_2020'
      model: 'Alien X ApeX (2020)'
    - regex: 'Alien_X_ApeX'
      model: 'Alien X ApeX'
    - regex: 'S(90|100)_?Apex'
      model: 'S$1 ApeX'
    - regex: 'Alien_X'
      model: 'Alien X'
    - regex: 'S21 Plus 2021'
      model: 'S21 Plus (2021)'
    - regex: 'S([23]0) Ultra ApeX 2021'
      model: 'S$1 Ultra ApeX (2021)'
    - regex: 'S21 Ultra 4G 2021'
      model: 'S21 Ultra 4G (2021)'
    - regex: 'S22 ULTRA'
      model: 'S22 Ultra'
    - regex: 'S22 PLUS'
      model: 'S22 Plus'
    - regex: 'Like 11 Panda Pro 2022'
      model: 'Like 11 Panda Pro (2022)'
    - regex: 'iHunt ([^;)/]+)(?: Build|[;)])'
      model: '$1'

# IconBIT
IconBIT:
  regex: 'IconBIT|NT-(3506M|1501C|0704S|0909T|1009T|10[01]1T|1017T|3601P/3602P|3603P|3702S|3805C|3905T|3701S|0701S|0805C|0902S|370[23]M)|XDS[789]4K|Omnicast UHD|Movie Smart 4K|Movie IPTV Quad|TOUCAN (?:NANO|Stick) 4K|NetTAB_Space_3G'
  device: 'tablet'
  models:
    - regex: 'NT-3506M'
      device: 'smartphone'
      model: 'NetTAB Mercury Quad FHD'
    - regex: 'NT-0704S'
      model: 'NetTAB Sky LE'
    - regex: 'NT-0909T'
      model: 'NetTAB Thor IZ'
    - regex: 'NT-1009T'
      model: 'NetTAB Thor quad II'
    - regex: 'NT-10[01]1T'
      model: 'NetTAB Thor LE'
    - regex: 'NT-1017T'
      model: 'NetTAB Thor 3G quad'
    - regex: 'NT-3601P/3602P'
      model: 'NetTAB Pocket 3G'
    - regex: 'NT-3603P'
      model: 'NetTAB Pocket 3G Slim'
    - regex: 'NT-3702S'
      model: 'NetTAB Sky HD 3G'
    - regex: 'NT-3805C'
      model: 'NetTAB Skat 3G quad'
    - regex: 'NT-3701S'
      model: 'NetTAB Sky 3G duo'
    - regex: 'NT-3905T'
      model: 'NetTAB Thor ZX 3G'
    - regex: 'NT-0701S'
      model: 'NetTAB Sky net'
    - regex: 'NT-0805C'
      model: 'NetTAB Skat MX'
    - regex: 'NT-0902S'
      model: 'NetTAB Space quad RX'
    - regex: 'NetTAB_Space_3G'
      model: 'NetTAB Space 3G'
    - regex: 'NT-3702M'
      model: 'NetTAB Matrix 3G duo'
    - regex: 'NT-3703M'
      model: 'NetTAB Matrix 3GT'
    - regex: 'MATRIX ULTRA'
      model: 'NetTAB Matrix Ultra'

    - regex: 'NT-1501C'
      model: 'Callisto 100'
      device: 'wearable'

    - regex: 'TOUCAN NANO 4K'
      model: 'Toucan Nano 4K'
      device: 'tv'
    - regex: 'TOUCAN Stick 4K'
      model: 'Toucan Stick 4K'
      device: 'tv'
    - regex: '(?:iconBIT )?(Movie (?:Smart 4K|UNO|Play|IPTV Quad|Ultra HD 4K)|XDS[789]4K|Omnicast UHD|Stick|XDS1[01]00?)'
      model: '$1'
      device: 'tv'

# LYF
LYF:
  regex: '(LYF[ _])?LS-[456][0-9]{3}|LYF/[^/]+/'
  device: 'smartphone'
  models:
    - regex: 'LS-4004'
      model: 'Flame 2'
    - regex: 'LS-5501'
      model: 'Earth 1'
    - regex: 'LS-5021'
      model: 'Earth 2'
    - regex: 'LS-5505'
      model: 'Water F1'
    - regex: 'LS-4503'
      model: 'Flame LS-4503'
    - regex: 'LS-4001'
      model: 'Flame 3'
    - regex: 'LS-4003'
      model: 'Flame 4'
    - regex: 'LS-4002'
      model: 'Flame 5'
    - regex: 'LS-4005'
      model: 'Flame 6'
    - regex: '(LYF[ _])?LS-4006'
      model: 'Flame 7'
    - regex: 'LS-4008'
      model: 'Flame 7S'
    - regex: 'LS-450[58]'
      model: 'Flame 8'
    - regex: 'LS-5002'
      model: 'Water 1'
    - regex: 'LS-5005'
      model: 'Water 4'
    - regex: 'LS-5006'
      model: 'Water 6'
    - regex: 'LS-5008'
      model: 'Water 2'
    - regex: 'LS-5009'
      model: 'Wind 6'
    - regex: 'LS-5013'
      model: 'Wind 5'
    - regex: 'LS-5014'
      model: 'Wind 4'
    - regex: 'LS-5010'
      model: 'Wind 1'
    - regex: 'LS-5015'
      model: 'Water 8'
    - regex: 'LS-5016'
      model: 'Wind 7'
    - regex: 'LS-5504'
      model: 'Water 7'
    - regex: 'LS-5507'
      model: 'Water 7S'
    - regex: 'LS-5017'
      model: 'Water 11'
    - regex: 'LS-5018'
      model: 'Wind 4S'
    - regex: 'LS-5020'
      model: 'Water 10'
    - regex: 'LS-5201'
      model: 'Water F1S'
    - regex: 'LS-5502'
      model: 'Wind 3'
    - regex: 'LS-5503'
      model: 'Water 3'
    - regex: 'LS-5506'
      model: 'Water 9'
    - regex: 'LS-6001'
      model: 'Wind 2'

    - regex: 'LYF/([^/]+)/'
      model: '$1'

# Lumus
Lumus:
  regex: '(?:NEO(SR620|SC600)|INNOSR545|Lumus[_ ]Ion|AEONSR570)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    # explicit smartphone models
    - regex: 'NEO(SR620|SC600)(?:[);/ ]|$)'
      model: 'Neo $1'
    - regex: 'INNO(SR545)(?:[);/ ]|$)'
      model: 'INNO $1'
    - regex: 'Lumus[_ ]Ion(?:[);/ ]|$)'
      model: 'Ion'
    - regex: 'AEON(SR570)(?:[);/ ]|$)'
      model: 'AEON $1'
# M4tel
M4tel:
  regex: '(?:M4[ -]SS[0-9]{4}(?:-R)?|M4_B[23]|M4_R2|R2_Plus)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'SS1050'
      model: 'Joy'
    - regex: 'SS1060'
      model: 'Live'
    - regex: 'SS1070'
      model: 'Sense'
    - regex: 'SS1080'
      model: 'Max One'
    - regex: 'SS1090'
      model: 'Max Ultra'
    - regex: 'SS4020'
      model: 'Play'
    - regex: 'SS4040'
      model: 'In Touch'
    - regex: 'SS4045'
      model: 'Style'
    - regex: 'SS4345'
      model: 'Soul Mini'
    - regex: 'SS4350'
      model: 'Soul'
    - regex: 'SS4445'
      model: 'Style Access'
    - regex: 'SS4450'
      model: 'Share'
    - regex: 'SS4451'
      model: 'Believe'
    - regex: 'SS4452'
      model: 'Dream'
    - regex: 'SS4453-R'
      model: 'R1 Feel'
    - regex: 'R2_Plus'
      model: 'R2 Plus'
    - regex: 'SS4453'
      model: 'Inspiration'
    - regex: 'SS4455'
      model: 'Excite'
    - regex: 'SS4456'
      model: 'Evolution'
    - regex: 'SS4457-R'
      model: 'Ever'
    - regex: 'SS4457'
      model: 'Elegance'
    - regex: 'SS4458-R|M4-SS4458-R'
      model: 'Feel Plus'
    - regex: 'SS4458'
      model: 'Attitude'
    - regex: 'M4_B([23])'
      model: 'B$1'
    - regex: 'M4_R(2)'
      model: 'R$1'

# IMO Mobile or In My Opinion Mobile (imomobile.co.uk)
IMO Mobile:
  regex: 'IMO[ _]\w'
  device: 'smartphone'
  models:
    - regex: 'IMO[ _]Q([23]) Plus(?:[);/ ]|$)'
      model: 'Q$1 Plus'
    - regex: 'IMO[ _]Q([4]) Pro(?:[);/ ]|$)'
      model: 'Q$1 Pro'
    - regex: 'IMO[ _]Q2(?:[);/ ]|$)'
      model: 'Q2'
    - regex: 'IMO[ _]S2(?:[);/ ]|$)'
      model: 'S2'
    - regex: 'IMO[ _]FEEL A2(?:[);/ ]|$)'
      model: 'Feel A2'
    - regex: 'IMO[ _]S50(?:[);/ ]|$)'
      model: 'S50 Light'
    - regex: 'IMO[ _]S80(?:[);/ ]|$)'
      model: 'S80 Hero'
    - regex: 'IMO[ _]S89(?:[);/ ]|$)'
      model: 'S89 Miracle'
    - regex: 'IMO[ _]S88(?:[);/ ]|$)'
      model: 'S88 Discovery'
    - regex: 'IMO[ _]S99(?:[);/ ]|$)'
      model: 'S99 Ocean'
    - regex: 'IMO[ _]S98(?:[);/ ]|$)'
      model: 'S98 Champion'
    - regex: 'IMO[ _]S87(?:[);/ ]|$)'
      model: 'S87 Raptor'
    - regex: 'IMO[ _]S67(?:[);/ ]|$)'
      model: 'S67 Blast'
    - regex: 'IMO[ _]S78(?:[);/ ]|$)'
      model: 'S78 Glory'
    - regex: 'IMO[ _]Q8(?:[);/ ]|$)'
      model: 'Q8 Clarity'
    - regex: 'IMO[ _]Discovery II(?:[);/ ]|$)'
      model: 'Discovery II'
    - regex: 'IMO[ _]Q(?:[);/ ]|$)'
      model: 'Q'

    - regex: 'IMO[ _](Y5|Z[67])(?:[);/ ]|$)'
      model: 'Tab $1'
      device: 'tablet'
    - regex: 'IMO TAB X9(?:[);/ ]|$)'
      model: 'Tab X9'
      device: 'tablet'

# iLA or ILA Mobile
iLA:
  regex: '(?:iLA[-_ ](?:Silk|X)|R1 Lite)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'iLA[-_ ](Silk|X)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(R1) Lite(?:[);/ ]|$)'
      model: '$1 Lite'

# iNew
iNew:
  regex: 'iNew|(?:V7A|V3 Plus|V3-?E|V3C|FIRE_Tab_6)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'V3C(?:[);/ ]|$)'
      model: 'V3C'
    - regex: 'V3-?E(?:[);/ ]|$)'
      model: 'V3-E'
    - regex: 'V3 Plus(?:[);/ ]|$)'
      model: 'V3 Plus'
    - regex: 'V7A(?:[);/ ]|$)'
      model: 'V7A'
    - regex: 'FIRE_Tab_6(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Fire Tab 6'

    - regex: 'iNew[ -_]([^;/]+) Build'
      model: '$1'

# iPro
iPro:
  regex: '(?:Kylin[ _]5.[05]S?|KYLIN(?:40|50i)|Jade[78]s|Amber[678]S?|Amber[58]S[ _]Pro|Benny10|Phonenix50S|Ruby5S|Zafiro|I9355A|Opal 4S|Perla|S501A|WAVE 4.0 II|WAVE 5.0|MEGA7|SAMBA65S)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Kylin_5.0S'
      model: 'Kylin 5.0S'
    - regex: 'Kylin (5.[05])'
      model: 'Kylin $1'
    - regex: 'Kylin50i'
      model: 'Kylin 50i'
    - regex: 'KYLIN40'
      model: 'Kylin 40'
    - regex: 'Opal 4S'
      model: 'Opal 4S'
    - regex: 'Jade([78])s'
      model: 'Jade $1s'
    - regex: 'Amber5S_Pro'
      model: 'Amber 5S Pro'
    - regex: 'Amber6'
      model: 'Amber 6'
    - regex: 'Amber7S'
      model: 'Amber 7S'
    - regex: 'Amber8s Pro'
      model: 'Amber 8S Pro'
    - regex: 'Amber8S'
      model: 'Amber 8S'
    - regex: 'Amber8'
      model: 'Amber 8'
    - regex: 'Benny10'
      model: 'Benny 10'
    - regex: 'Phonenix50S'
      model: 'Phonenix 50S'
    - regex: 'Ruby5S'
      model: 'Ruby 5S'
    - regex: 'SAMBA65S'
      model: 'Samba 65S'
    - regex: 'Zafiro'
      model: 'Zafiro'
    - regex: 'WAVE 4.0 II'
      model: 'Wave 4.0 II'
    - regex: 'WAVE 5.0'
      model: 'Wave 5.0'
    - regex: '(I9355A|S501A|Perla)'
      model: '$1'
    - regex: 'MEGA7'
      device: 'tablet'
      model: 'Mega 7'

# Infinix (infinixmobility.com)
Infinix:
  regex: 'Infinix'
  device: 'smartphone'
  models:
    - regex: 'Infinix[ _-]X260'
      model: 'Buzz'
    - regex: 'Infinix[ _-]X502'
      model: 'Alpha Marvel'
    - regex: 'Infinix[ _-]X570'
      model: 'Alpha'

    - regex: 'Infinix[ _-]X350'
      model: 'Surf Smart'
    - regex: 'Infinix[ _-]X351'
      model: 'Surf Smart 3G'
    - regex: 'Infinix[ _-]X352'
      model: 'Surf Smart 2'
    - regex: 'Infinix[ _-]X403'
      model: 'Surf Spice'
    - regex: 'Infinix[ _-]X503'
      model: 'Surf Bravo'
    - regex: 'Infinix[ _-]X511'
      model: 'Surf Noir'

    - regex: 'Infinix[ _-]X400'
      model: 'Race'
    - regex: 'Infinix[ _-]X401'
      model: 'Race Lite'
    - regex: 'Infinix[ _-]X450'
      model: 'Race Bolt'
    - regex: 'Infinix[ _-]X451'
      model: 'Race Bolt Q'
    - regex: 'Infinix[ _-]X454'
      model: 'Race Bolt 2'
    - regex: 'Infinix[ _-]X500'
      model: 'Race Eagle'
    - regex: 'Infinix[ _-]X501'
      model: 'Race Jet'

    - regex: 'Infinix[ _-]X506'
      model: 'Zero'
    - regex: 'Infinix[ _-]X509'
      model: 'Zero 2'
    - regex: 'Infinix[ _-]X6821'
      model: 'Zero 20'
    - regex: 'Infinix[ _-](?:X552|Zero 3)'
      model: 'Zero 3'
    - regex: 'Infinix[ _-](?:X(?:574|602)|Zero 4 Plus)'
      model: 'Zero 4 Plus'
    - regex: 'Infinix[ _-](?:X555|Zero 4)'
      model: 'Zero 4'
    - regex: 'Infinix[ _-]X603'
      model: 'Zero 5'
    - regex: 'Infinix[ _-]X603B'
      model: 'Zero 5 Pro'
    - regex: 'Infinix[ _-]X620B'
      model: 'Zero 6'
    - regex: 'Infinix[ _-]X620'
      model: 'Zero 6 Pro'
    - regex: 'Infinix[ _-]X687B'
      device: 'phablet'
      model: 'Zero 8i'
    - regex: 'Infinix[ _-]X687'
      device: 'phablet'
      model: 'Zero 8'
    - regex: 'Infinix[ _-]X6815B'
      device: 'phablet'
      model: 'Zero 5G'
    - regex: 'Infinix[ _-]X6811B'
      device: 'phablet'
      model: 'Zero X'
    - regex: 'Infinix[ _-]X6815'
      device: 'phablet'
      model: 'Zero 5G'
    - regex: 'Infinix[ _-]X6811'
      device: 'phablet'
      model: 'Zero X Pro'
    - regex: 'Infinix[ _-]X6810'
      device: 'phablet'
      model: 'Zero X Neo'
    - regex: 'Infinix[ _-]X6820'
      device: 'phablet'
      model: 'Zero Ultra'

    - regex: 'Infinix[ _-]X507'
      model: 'Hot'
    - regex: 'Infinix[ _-]X510'
      model: 'Hot 2'
    - regex: 'Infinix[ _-]X55[34]'
      model: 'Hot 3'
    - regex: 'Infinix[ _-]X622'
      model: 'Hot S3X'
    - regex: 'Infinix[ _-]X521'
      model: 'Hot S'
    - regex: 'Infinix[ _-]X522'
      model: 'Hot S2'
    - regex: 'Infinix[ _-]X557'
      model: 'Hot 4'
    - regex: 'Infinix[ _-]X556'
      model: 'Hot 4 Pro'
    - regex: 'Infinix[ _-]X559[cF]'
      model: 'Hot 5'
    - regex: 'Infinix[ _-]X559'
      model: 'Hot 5 Lite'
    - regex: 'Infinix[ _-]X606[BC]?'
      model: 'Hot 6'
    - regex: 'Infinix[ _-]X623'
      model: 'Hot 6X'
    - regex: 'Infinix[ _-]X608'
      model: 'Hot 6 Pro'
    - regex: 'Infinix[ _-]X624'
      model: 'Hot 7'
    - regex: 'Infinix[ _-]X625'
      model: 'Hot 7 Pro'
    - regex: 'Infinix[ _-]X650'
      model: 'Hot 8'
    - regex: 'Infinix[ _-]X655F'
      model: 'Hot 9 Pro'
    - regex: 'Infinix[ _-]X655'
      model: 'Hot 9'
    - regex: 'Infinix[ _-]X680[BCEF]'
      model: 'Hot 9 Play'
    - regex: 'Infinix[ _-]X680D'
      model: 'Smart 4 Plus'
    - regex: 'Infinix[ _-]X680'
      model: 'Smart 4'
    - regex: 'Infinix[ _-]X688'
      model: 'Hot 10 Play'
    - regex: 'Infinix[ _-]X682[BC]'
      model: 'Hot 10'
    - regex: 'Infinix[ _-]X689C'
      model: 'Hot 10T'
    - regex: 'Infinix[ _-]X689F'
      model: 'Hot 11'
    - regex: 'Infinix X689D'
      model: 'Hot 10s NFC'
    - regex: 'Infinix X689'
      model: 'Hot 10s'
    - regex: 'Infinix[ _-](?:X659|PR652|X658)'
      model: 'Hot 10i'
    - regex: 'Infinix[ _-]X573B?'
      model: 'Hot S3'
    - regex: 'Infinix[ _-]X6812'
      model: 'Hot 11S'
    - regex: 'Infinix[ _-]X675'
      model: 'Hot 11 (2020)'
    - regex: 'Infinix[ _-]X662'
      model: 'Hot 11'
    - regex: 'Infinix[ _-]X6816D'
      model: 'Hot 12 Play NFC'
    - regex: 'Infinix[ _-]X6816C?'
      model: 'Hot 12 Play'
    - regex: 'Infinix[ _-]X668C?'
      model: 'Hot 12 Pro'
    - regex: 'Infinix[ _-]X665[EC]'
      model: 'Hot 20i'
    - regex: 'Infinix[ _-]X6826'
      model: 'Hot 20'
    - regex: 'Infinix[ _-]X666'
      model: 'Hot 20 5G'
    - regex: 'Infinix[ _-]X6825'
      model: 'Hot 20 Play'
    - regex: 'Infinix[ _-]X6827'
      model: 'Hot 20S'
    - regex: 'Infinix[ _-]X665'
      model: 'Hot 12i'
    - regex: 'Infinix[ _-]X6817'
      model: 'Hot 12'

    - regex: 'Infinix[ _-]X612'
      model: 'Smart HD (2021)'
    - regex: 'Infinix[ _-]X5010'
      model: 'Smart'
    - regex: 'Infinix[ _-]X5515[FI]?'
      model: 'Smart 2'
    - regex: 'Infinix[ _-]X609'
      model: 'Smart 2 HD'
    - regex: 'Infinix[ _-]X5516'
      model: 'Smart 3'
    - regex: 'Infinix[ _-]X627'
      model: 'Smart 3 Plus'
    - regex: 'Infinix[ _-]X5514D'
      model: 'Smart 2 Pro'
    - regex: 'Infinix[ _-]X653'
      model: 'Smart 4'
    - regex: 'Infinix[ _-]X657'
      model: 'Smart 5'
    - regex: 'Infinix[ _-](?:X6823C?|X6511G)'
      model: 'Smart 6 Plus'
    - regex: 'Infinix[ _-]X6511'
      model: 'Smart 6'
    - regex: 'Infinix[ _-]X6512'
      model: 'Smart 6 HD'
    - regex: 'Infinix[ _-]X652B'
      model: 'S5 Lite'
    - regex: 'Infinix[ _-]X626'
      model: 'S4'
    - regex: 'Infinix[ _-]X652C'
      model: 'S5 Lite'
    - regex: 'Infinix[ _-]X652'
      model: 'S5'
    - regex: 'Infinix[ _-]X660'
      model: 'S5 Pro'

    - regex: 'Infinix[ _-]X551'
      model: 'Hot Note'
      device: 'phablet'
    - regex: 'Infinix[ _-]X600'
      model: 'Note 2'
      device: 'phablet'
    - regex: 'Infinix[ _-]X601'
      model: 'Note 3'
      device: 'phablet'
    - regex: 'Infinix[ _-]X572'
      model: 'Note 4'
      device: 'phablet'
    - regex: 'Infinix[ _-]X571'
      model: 'Note 4 Pro'
      device: 'phablet'
    - regex: 'Infinix[ _-]X604'
      model: 'Note 5'
      device: 'phablet'
    - regex: 'Infinix[ _-]X605'
      model: 'Note 5 Stylus'
      device: 'phablet'
    - regex: 'Infinix[ _-]X610'
      model: 'Note 6'
      device: 'phablet'
    - regex: 'Infinix[ _-]X690'
      model: 'Note 7'
      device: 'phablet'
    - regex: 'Infinix[ _-]X656'
      model: 'Note 7 Lite'
      device: 'phablet'
    - regex: 'Infinix[ _-]X692'
      model: 'Note 8'
      device: 'phablet'
    - regex: 'Infinix[ _-]X683'
      model: 'Note 8i'
      device: 'phablet'
    - regex: 'Infinix[ _-]X695'
      model: 'Note 10 Pro'
      device: 'phablet'
    - regex: 'Infinix[ _-]X693'
      model: 'Note 10'
      device: 'phablet'
    - regex: 'Infinix[ _-]X663C'
      model: 'Note 12'
      device: 'phablet'
    - regex: 'Infinix[ _-]X6819'
      model: 'Note 12i'
      device: 'phablet'
    - regex: 'Infinix[ _-]X676B'
      model: 'Note 12 Pro'
      device: 'phablet'
    - regex: 'Infinix[ _-]X671B'
      model: 'Note 12 Pro 5G'
      device: 'phablet'
    - regex: 'Infinix[ _-]X672'
      model: 'Note 12 VIP'
      device: 'phablet'
    - regex: 'Infinix[ _-]X663D'
      model: 'Note 12 NFC'
      device: 'phablet'
    - regex: 'Infinix[ _-]X671B'
      model: 'Note 12 Pro 5G'
      device: 'phablet'
    - regex: 'Infinix[ _-]X663'
      model: 'Note 11'
      device: 'phablet'
    - regex: 'Infinix[ _-]X697'
      model: 'Note 11 Pro'
      device: 'phablet'
    - regex: 'Infinix[ _-]X698'
      model: 'Note 11S'
      device: 'phablet'
    - regex: 'Infinix[ _-]X670'
      model: 'Note 12'
      device: 'phablet'
    - regex: 'Infinix[ _-]X676C'
      model: 'Note 12 (2023)'
      device: 'phablet'

    - regex: 'Infinix HOT ([a-z]?[1-6])( (?:Lite|Plus|Pro))?'
      model: 'Hot $1$2'
    - regex: 'Infinix[ _-](X[78]00)'
      device: 'tablet'
      model: '$1'
    - regex: 'Infinix[ _-](X\d+)'
      model: '$1'
    - regex: 'Infinix[_ ]([^/;)]+)(?: Build|[);])'
      model: '$1'
    - regex: 'Infinix[ _-]([a-z0-9_\-]+)'
      model: '$1'

# InFocus
InFocus:
  regex: '(?:IF(900[1237]|902[19]|903[15])|M370i?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'IF9001'
      model: 'Turbo 5'
    - regex: '(M370i?)'
      model: '$1'
    - regex: 'IF9007'
      model: 'A3'
    - regex: 'IF9021'
      model: 'Turbo 5 Plus'
    - regex: 'IF9035'
      model: 'A2'
    - regex: 'IF9002'
      model: 'M5s'
    - regex: 'IF9003'
      model: 'M6s'
    - regex: 'IF9031'
      model: 'Vision 3'
    - regex: 'IF9029'
      model: 'Vision 3 Pro'

# InnJoo (innjoo.es)
InnJoo:
  regex: 'InnJoo|(?:Halo Plus|Halo X|Halo 5 3G|Halo[ _]4(?:[ _]mini[ _]LTE)?|VISION LTE|Halo2 3G|Fire_Plus_LTE|Fire3 mini|Fire2 (?:Air|Pro|Plus) LTE|Fire2 LTE|Superb(?:_PLus)?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'InnJoo[ _]X3(?:[);/ ]|$)'
      model: 'X3'
    - regex: 'Halo[ _]X[ _]LTE(?:[);/ ]|$)'
      model: 'Halo X LTE'
    - regex: 'InnJoo[ _]X(?:[);/ ]|$)'
      model: 'X'
    - regex: 'Halo Plus(?:[);/ ]|$)'
      model: 'Halo Plus'
    - regex: 'Halo[ _]4[ _]mini[ _]LTE(?:[);/ ]|$)'
      model: 'Halo 4 Mini LTE'
    - regex: 'Halo 4(?:[);/ ]|$)'
      model: 'Halo 4'
    - regex: 'Halo ?([25]) 3G(?:[);/ ]|$)'
      model: 'Halo $1 3G'
    - regex: 'InnJoo[ _]Pro2(?:[);/ ]|$)'
      model: 'Pro 2'
    - regex: 'Innjoo ONE 3G(?:[);/ ]|$)'
      model: 'One 3G'
    - regex: 'Innjoo[ _]2[ _]LTE(?:[);/ ]|$)'
      model: '2 LTE'
    - regex: 'InnJoo[ _]([2-4])'
      model: '$1'
    - regex: 'Fire2 Plus LTE'
      model: 'Fire 2 Plus LTE'
    - regex: 'Fire_Plus_LTE'
      model: 'Fire Plus LTE'
    - regex: 'Fire2 Air LTE'
      model: 'Fire 2 Air LTE'
    - regex: 'Fire2 Pro LTE'
      model: 'Fire 2 Pro LTE'
    - regex: 'Fire2 LTE'
      model: 'Fire 2 LTE'
    - regex: 'Fire3 mini'
      model: 'Fire 3 Mini'
    - regex: 'Superb_PLus'
      model: 'SuperB Plus'
    - regex: 'Superb'
      model: 'SuperB'
    - regex: 'VISION LTE'
      model: 'Vision LTE'

# Inkti
Inkti:
  regex: 'intki[ _]([^/;]*)[ _]Build'
  device: 'smartphone'
  model: '$1'

# Innos
Innos:
  regex: 'Innos_?(D6000)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Innostream
Innostream:
  regex: 'INNO([a-z0-9]+)'
  device: 'feature phone'
  model: 'INNO$1'

# Insignia
Insignia:
  regex: 'NS-(P11A8100|P10A8100|P10A6100|P16AT08|P16AT10|P16AT785HD|P08A7100|P10A7100)(?:[);/ ]|$)|AFTEAMR311|AFTJMST12'
  device: 'tablet'
  models:
    - regex: 'NS-P11A8100'
      model: '11.6"'
    - regex: 'NS-(P10A6100|P16AT10)'
      model: 'Flex 10.1"'
    - regex: 'NS-P16AT08'
      model: 'Flex 8"'
    - regex: 'NS-P08A7100'
      model: '8"'
    - regex: 'NS-(P10A8100|P10A7100)'
      model: '10.1"'
    - regex: 'NS-P16AT785HD'
      model: 'Flex Elite 7.85"'
    - regex: 'AFTEAMR311'
      model: 'HD (2018)'
      device: 'tv'
    - regex: 'AFTJMST12'
      model: '4K (2018)'
      device: 'tv'

# INSYS (https://www.insys.pt/)
INSYS:
  regex: 'INSYS|(?:HK9-4010|IH9-L614)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'HK9-4010'
      model: 'HK9-4010'
    - regex: 'IH9-L614'
      model: 'MX IH9-L614'
    - regex: '(VI4-103|GU4-K147)'
      device: 'tablet'
      model: '$1'

# Inq
INQ:
  regex: 'INQ[/ ]'
  device: 'feature phone'
  models:
    - regex: 'INQ/([a-z0-9\-]+)'
      model: '$1'
    - regex: 'INQ ([^;/]+) Build'
      model: '$1'
      device: 'smartphone'

# AFFIX
AFFIX:
  regex: 'elite Aquarius(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'elite Aquarius'
      model: 'Elite Aquarius'

# Aquarius (www.aq.ru)
Aquarius:
  regex: 'Aquarius'
  device: 'tablet'
  models:
    - regex: 'Aquarius Pro, Std, Elt Series'
      device: 'desktop'
      model: 'Pro Std Elite Series'
    - regex: '(NS220)'
      model: 'CMP $1'
    - regex: 'Aquarius[_ ]CMP[_ ]([^/;)]+)(?: Build|[);])'
      model: 'CMP $1'
    - regex: 'Aquarius[_ ]([^/;)]+)(?: Build|[);])'
      model: '$1'


# Vsun
Vsun:
  regex: '(?:VSUN (?:ILLUSION|RACE|V9|TOUCH)|Aqua Tough|MERCURY Tough|MARS TOUCH|MARS NOTE|MARS NOCAM|SATURN SELFIE)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'ILLUSION(?:[);/ ]|$)'
      model: 'Illusion'
    - regex: 'MARS TOUCH(?:[);/ ]|$)'
      model: 'Mars Touch'
    - regex: 'MERCURY Tough'
      model: 'Mercury Touch'
    - regex: 'MARS NOTE'
      model: 'Mars Note'
    - regex: 'MARS NOCAM'
      model: 'Mars Nocam'
    - regex: 'Aqua Tough'
      model: 'Aqua Tough'
    - regex: 'SATURN SELFIE(?:[);/ ]|$)'
      model: 'Saturn Selfie'
    - regex: 'RACE(?:[);/ ]|$)'
      model: 'Race'
    - regex: 'VSUN TOUCH(?:[);/ ]|$)'
      model: 'Touch'
    - regex: '(V9)(?:[);/ ]|$)'
      model: '$1'

# Turbo
Turbo:
  regex: '(?:Turbo[_ ]?(?:X5[_ ]?(?:Max|Black|Space|Hero)|X8|X6[ _]Z|X[ _]Ray)|Monsterpad7)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'TurboX5Space(?:[);/ ]|$)'
      model: 'X5 Space'
    - regex: 'TurboX5Hero(?:[);/ ]|$)'
      model: 'X5 Hero'
    - regex: 'TurboX[ _]Ray(?:[);/ ]|$)'
      model: 'X Ray'
    - regex: 'Turbo[ _]?X5[ _]?Black(?:[);/ ]|$)'
      model: 'X5 Black'
    - regex: 'Turbo[ _]X5[ _]Max(?:[);/ ]|$)'
      model: 'X5 Max'
    - regex: 'Turbo[ _]X6[ _]Z(?:[);/ ]|$)'
      model: 'X6 Z'
    - regex: 'Turbo[ _]X8(?:[);/ ]|$)'
      model: 'X8'
    - regex: 'Monsterpad7(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MonsterPad 7"'

# Turbo-X
Turbo-X:
  regex: 'Turbo[-_]X|(?:TURBOX_I4G|Hive V 3G|Calltab10.1|Calltab2GB10|Calltab7inch|Turbox_S3|Fire_II_WiFi|Breeze IV|Aqua_II|RainbowIII3G|RubikII7|Rubik 10\.1 II|Rubik_10_III|QUAD-CORE A33 inet)(?:[);/ ]|$)|(?<!Rombica TV )Mercury(?!/| HD Quad core)'
  device: 'smartphone'
  models:
    # specific smartphone models
    - regex: 'Turbox_S3'
      model: 'S3'
    - regex: 'Turbo-X_A2(?:[);/ ]|$)'
      model: 'A2'
    - regex: 'Turbo-X_e3(?:[);/ ]|$)'
      model: 'E3'
    - regex: 'Mercury(?!/)'
      model: 'Mercury'
    - regex: 'Turbo-X_epsilon'
      model: 'Epsilon'
    - regex: 'Turbo-X lamda'
      model: 'Lamda'
    - regex: 'Turbo-X_pi_4G|Turbo_X_Pi 1 4G'
      model: 'Pi 4G'
    - regex: 'TURBOX_I4G'
      model: 'I 4G'

    # specific tablet models
    - regex: 'Turbo-X Ice(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Ice'
    - regex: 'Turbo-X Coral II' # Plaisio Computers
      device: 'tablet'
      model: 'Coral II'
    - regex: 'Aqua_II(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Aqua II'
    - regex: 'Hive V 3G(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Hive V 3G'
    - regex: 'Hive VI'
      device: 'tablet'
      model: 'Hive VI'
    - regex: 'Fire_II_WiFi(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Fire II WiFi'
    - regex: 'Breeze IV(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Breeze IV'
    - regex: 'RubikII7(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Rubik II 7"'
    - regex: 'Rubik 10.1 II(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Rubik II 10.1"'
    - regex: 'Rubik_10_III(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Rubik III 10.1"'
    - regex: 'RainbowIII3G(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Rainbow III 3G'
    - regex: 'Calltab10.1'
      device: 'tablet'
      model: 'CallTab II 10.1"'
    - regex: 'Calltab2GB10'
      device: 'tablet'
      model: 'CallTab 10.1"'
    - regex: 'Calltab7inch'
      device: 'tablet'
      model: 'CallTab 7"'
    - regex: 'QUAD-CORE A33 inet'
      device: 'tablet'
      model: 'Twister'

    # general detections
    - regex: 'TURBO-X, ([a-z0-9_ \-]+), (?:wired|wireless)'
      model: ''
      device: 'tv'
    - regex: 'Turbo-X Tablet([^;/)]+)(?: Build|[;)])'
      device: 'tablet'
      model: '$1'
    - regex: 'Turbo-X ([^;)/]+)(?: Build|[;)])'
      model: '$1'

# Intex
Intex:
  regex: 'Intex|(Aqua|Cloud[ _][XY][0-9]{1}|Cloud (?:Fame|Glory) 4G)|(?:CLOUD TREAD|IM0318ND|IV0318ND)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'IM0318ND'
      model: 'Aqua Lions 3'
    - regex: 'AQUA[ _]LIONS[ _]T1[ _]LITE(?:[);/ ]|$)'
      model: 'Aqua Lions T1 Lite'
    - regex: 'AQUA[ _]LIONS[ _]([NT]1|[23]|E3)(?:[);/ ]|$)'
      model: 'Aqua Lions $1'
    - regex: 'AQUA (A4) PLUS(?:[);/ ]|$)'
      model: 'Aqua $1 Plus'
    - regex: 'AQUA[ _](A4|S[13])(?:[);/ ]|$)'
      model: 'Aqua $1'
    - regex: 'Intex[ _]IM0118ND'
      model: 'Aqua Lions T1 Plus'
    - regex: 'AQUA CRYSTAL\+(?:[);/ ]|$)'
      model: 'Aqua Crystal Plus'
    - regex: 'AQUA FulVU e5(?:[);/ ]|$)'
      model: 'Aqua Fulvu E5'
    - regex: 'AQUA JEWEL 2(?:[);/ ]|$)'
      model: 'Aqua Jewel 2'
    - regex: '(?:INTEX[_ ])?AQUA[_ ]4\.0[_ ]4G'
      model: 'Aqua 4.0 4G'
    - regex: '(?:INTEX[_ ])?AQUA[_ ]4G[_ ]MINI'
      model: 'Aqua Mini 4G'
    - regex: '(?:INTEX[_ ])?AQUA[_ ]LIONS[_ ]4G'
      model: 'Aqua Lions 4G'
    - regex: '(?:INTEX[_ ])?AQUA[_ ]PRIME[_ ]4G'
      model: 'Aqua Prime 4G'
    - regex: '(?:INTEX[ _])?AQUA[_ ]YOUNG[_ ]4G'
      model: 'Aqua Young 4G'
    - regex: '(?:INTEX[ _])?AQUA[_ ]TREND[_ ]LITE'
      model: 'Aqua Trend Lite'
    - regex: '(?:INTEX[ _])?AQUA[_ ]AMAZE\+'
      model: 'Aqua Amaze Plus'
    - regex: '(?:INTEX[ _])?AQUA[_ ]Supreme\+'
      model: 'Aqua Supreme Plus'
    - regex: '(?:INTEX[ _])?AQUA[_ ]Strong 5\.1\+'
      model: 'Aqua Strong 5.1 Plus'
    - regex: '(?:INTEX[ _])?AQUA[_ ]CRYSTAL'
      model: 'Aqua Crystal'
    - regex: '(?:INTEX[ _])?ELYT[_ ]DUAL[_ ]PLUS'
      model: 'Elyt Dual Plus'
    - regex: '(?:INTEX[ _])?ELYT[_ ]DUAL'
      model: 'Elyt Dual'
    - regex: '(?:INTEX[ _])?ELYT[_ ](E\d+)'
      model: 'Elyt $1'
    - regex: 'IV0318ND'
      model: 'Indie 11'
    - regex: 'Intex[ _]IV0118ND'
      model: 'Lions 6'
    - regex: 'Intex[ _]IP0418ND'
      model: 'Infie 77'
    - regex: 'Intex[ _]([^/;]*)[ _]Build'
      model: '$1'
    - regex: 'CLOUD TREAD(?:[);/ ]|$)'
      model: 'Cloud Tread'
    - regex: '(Cloud (?:Fame|Glory) 4G)'
      model: '$1'
    - regex: '(Aqua|Cloud)[ _\.]([^/;\)]+)(?:[ _]Build|(?<!Build)/|\))'
      model: '$1 $2'
    - regex: 'Intex[ _]([a-z0-9_+\-]+)'
      model: '$1'

# i-mate
i-mate:
  regex: 'i-mate ([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# i-mobile
i-mobile:
  regex: 'i-mobile ?[a-z0-9]+|i-Style|IQ ?(9\.1|5\.5|5\.6A?)'
  device: 'feature phone'
  models:
    - regex: 'i-mobile (i-note[^/;]*) Build'
      model: '$1'
      device: 'tablet'
    - regex: 'i-Style ?([^;/)]+)(?: Build|[;)])'
      model: 'i-Style $1'
      device: 'smartphone'
    - regex: 'IQ ?(9\.1|5\.5|5\.6A?|II)'
      model: 'IQ $1'
      device: 'smartphone'
    - regex: 'IQ Z PRO'
      model: 'IQ Z Pro'
      device: 'smartphone'
    - regex: 'IQ Z BRIGHT'
      model: 'IQ Z Bright'
      device: 'smartphone'
    - regex: 'i-mobile (IQ[^/;]*) Build'
      model: '$1'
      device: 'smartphone'
    - regex: 'i-mobile(?: )?([a-z0-9\- ]+) Build'
      model: '$1'
    - regex: 'i-mobile(?: )?([a-z0-9]+)'
      model: '$1'

# ikomo
iKoMo:
  regex: 'iKoMo ([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# iOcean
iOcean:
  regex: 'iOCEAN|M6752|W180|X7[ _]?S|X8 mini'
  device: 'smartphone'
  models:
    - regex: 'X7S-T'
      model: 'X7S-T'
    - regex: 'X8 mini pro'
      model: 'X8 Mini Pro'
    - regex: 'X8 mini'
      model: 'X8 Mini'
    - regex: 'X7[ _]?S'
      model: 'X7S Elite'
    - regex: '(M6752|W180) Build'
      model: '$1'
    - regex: 'iOCEAN[ _\-]?([^/;]+) Build'
      model: '$1'
    - regex: 'iOCEAN[ _\-]?([^);/ ]+)'
      model: '$1'

# iView (iviewus.com)
iView:
  regex: '(?:(?:733|730|766|930)TPC|769TPC(?:II)?|744TPC plus)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '744TPC plus'
      model: '744TPC Plus'
    - regex: '((?:733|730|766|930)TPC|769TPC(?:II)?)(?:[);/ ]|$)'
      model: '$1'

# Impression
Impression:
  regex: '(?:Impression[ _\-]?([^/;]+)|A502|I10\-LE|ImPad[ _]?(.*)|ImSmart[ _]?(.*))(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(A502)'
      model: '$1'
      device: 'smartphone'
    - regex: 'ImSmart[ _]?([^/;)]+)(?: Build|\))'
      model: 'ImSmart $1'
      device: 'smartphone'
    - regex: 'ImPad[ _]?([^/;)]+)(?: Build|\))'
      model: 'ImPad $1'
    - regex: '(I10\-LE)'
      model: '$1'
      device: 'smartphone'
    - regex: 'Impression[ _\-]?([^/;)]+)(?: Build|\))'
      model: '$1'

#iLife or i-life (lifedigital.com)
iLife:
  regex: 'WTAB[ _]?\d{3}|(ITELL[_ ](?:K3300|K3500N?|K4700)|K3102 WIFI|FIVO (?:PLUS|Lite)|Zed Book G)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'K3102 WIFI'
      model: 'K3102 WiFi'
    - regex: 'WTAB[ _]?(\d{3}(?:[^;/)]*))(?: Build|[;)])'
      model: 'WTAB $1'
    - regex: '(ITELL[_ ](?:K3300|K3500N?|K4700))(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Zed Book G'
      model: 'Zed Book G'
    - regex: 'FIVO PLUS(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Fivo Plus'
    - regex: 'FIVO Lite(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Fivo Lite'

# iTel
iTel:
  regex: 'itel|iNote|GP10X2019(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'W6502'
      device: 'phablet'
      model: 'S16'
    - regex: 'L6503'
      device: 'phablet'
      model: 'S16 Pro'
    - regex: 'W5505'
      model: 'A36'
    - regex: 'W5504'
      model: 'P33'
    - regex: 'W5503'
      model: 'Alpha'
    - regex: 'W5002'
      model: 'A35'
    - regex: 'A571W'
      model: 'A37'
    - regex: 'W6002E?'
      model: 'S15'
    - regex: 'S663LN'
      model: 'Vision 5'
    - regex: 'S663L'
      model: 'S18'
    - regex: 'S661W'
      model: 'S17'
    - regex: 'A551L'
      model: 'S17 Pro'
    - regex: 'W5005P?'
      model: 'P15'
    - regex: 'P552W'
      model: 'P17 Pro'
    - regex: 'P551W'
      model: 'P17'
    - regex: 'W5003'
      model: 'S32 Mini'
    - regex: 'L5502'
      model: 'A44 Air'
    - regex: 'L5505'
      model: 'A47'
    - regex: 'W5006X'
      model: 'A17'
    - regex: 'A510W'
      model: 'A16 Plus'
    - regex: 'L6006'
      model: 'A48'
    - regex: 'A571L'
      model: 'A26'
    - regex: 'P651W'
      model: 'P37'
    - regex: 'A509WM?'
      model: 'A33 Plus'
    - regex: 'P681L'
      model: 'P37 Pro'
    - regex: 'W6501'
      model: 'P36'
    - regex: 'P661W'
      model: 'P38'
    - regex: 'L5007'
      model: 'A24'
    - regex: 'L6003P'
      model: 'A55 LTE'
    - regex: 'L6002P'
      model: 'S15 Pro'
    - regex: '[LW]6503'
      model: 'S16 Pro'
    - regex: 'L5006[CS]'
      model: 'A23 Pro'
    - regex: 'L5002P'
      model: 'A25 Pro'
    - regex: 'L5002'
      model: 'A25'
    - regex: 'A507LS'
      model: 'A24'
    - regex: 'L5503'
      model: 'A46'
    - regex: 'A661L'
      model: 'A49'
    - regex: 'W6004P'
      model: 'A56 Pro'
    - regex: 'A661WP'
      model: 'A58 Pro'
    - regex: 'A661W'
      model: 'A58'
    - regex: 'A631W'
      model: 'A58 Lite'
    - regex: 'L6004L'
      model: 'AC60'
    - regex: 'W4001S'
      model: 'V41'
    - regex: 'W4001'
      model: 'AC13'
    - regex: 'W4002'
      model: 'A14 Plus'
    - regex: 'W4003'
      model: 'A14 Max'
    - regex: '[LW]6004'
      model: 'A56 LTE'
    - regex: 'W6001'
      model: 'P33 Plus'
    - regex: 'W5001P'
      model: 'A33'
    - regex: 'W6003'
      model: 'A55'
    - regex: 'A611W'
      model: 'A57'
    - regex: 'itel[ _]A15R'
      model: 'A15'
    - regex: 'L6005'
      model: 'Vision 1'
    - regex: 'P682LPN'
      model: 'Vision 3 Plus'
    - regex: 'P682L'
      model: 'P38 Pro'
    - regex: 'P651L'
      model: 'Vision 2S'
    - regex: 'L6501'
      model: 'Vision 1 Plus'
    - regex: 'L6502'
      model: 'Vision 1 Pro'
    - regex: 'S661L'
      model: 'Vision 3'
    - regex: 'GP10X2019'
      model: 'GP10X2019'
    - regex: 'iNote ([^/;]*)Build'
      model: 'iNote $1'
    - regex: 'iNote_([a-z0-9\-_]+)'
      model: 'iNote $1'
    - regex: 'itel-it(1410|1512|1520)(?:[);/ ]|$)'
      model: 'it$1'
    - regex: 'itel-it1553(?:[);/ ]|$)'
      model: 'Power Pro'
    - regex: 'S11Plus(?:[);/ ]|$)'
      model: 'S11 Plus'
    - regex: 'itel[- ](A14|A16 Plus|A44 Power|A23S|A52 Lite)'
      model: '$1'

    - regex: 'itel it1701'
      device: 'tablet'
      model: 'iNote Prime'
    - regex: 'itel W7001'
      device: 'tablet'
      model: 'KidPad 1'
    - regex: 'itel W7002'
      device: 'tablet'
      model: 'PrimeTab 1'
    - regex: 'itel it170([23])'
      device: 'tablet'
      model: 'iNote Prime $1'

    - regex: 'iTel ([^/;)]+)(?: Build|[;)])'
      model: '$1'
    - regex: 'iTel[_ ]([a-z0-9\-_]*)'
      model: '$1'

# iZotron
iZotron:
  regex: '(Mi7_HERO_(?:BETA|TAB))(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'Mi7[_ ]HERO[_ ]BETA(?:[);/ ]|$)'
      model: 'MI7 Hero Beta'
    - regex: 'Mi7[_ ]HERO[_ ]TAB(?:[);/ ]|$)'
      model: 'MI7 Hero Tab'

# JAY-Tech
JAY-Tech:
  regex: '(?<!VIVAX )(?<!VIVAX TABLET )TPC-(?!71213G)[A-Z0-9]+|TPCY-TX[TE][^);/ ]+'
  device: 'tablet'
  models:
    - regex: 'TPC-PA10.1M'
      model: 'Tablet PC PA10.1M'
    - regex: 'TPC-(XE10D-H)'
      model: 'Tablet PC $1'
    - regex: 'TPC-([A-Z0-9]+)'
      model: 'Tablet PC $1'
    - regex: '(TPCY-TX[TE][^);/ ]+)'
      model: '$1'

# Jiayu
Jiayu:
  regex: 'JIAYU[ _-]|(?:JY-G4[\\_]G5|(?:JY-[a-z0-9]+)|JY_G4C)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:JIAYU G4_G5|JY-G4[\\_]G5)(?:[);/ ]|$)'
      model: 'G4/G5'
    - regex: 'JIAYU[ _-](G4[S]?|G2F|G3[S]?|S[23])(?:[);/ ]|$)'
      model: '$1'
    - regex: 'JY[-_]([a-z0-9]+|G4C)(?:[);/ ]|$)'
      model: 'JY-$1'

# Jolla
Jolla:
  regex: 'Jolla'
  device: 'smartphone'
  model: ''

# Juniper Systems (https://junipersys.com/)
'Juniper Systems':
  regex: 'Junipers/'
  device: 'smartphone'
  models:
    - regex: 'Cedar#CT8'
      device: 'tablet'
      model: 'CT8'

# Just5 (www.just5.com)
Just5:
  regex: 'JUST5(-)?SPACER(s)?|COSMO[_ ](L707|L808)|BLASTER|FREEDOM[ _](C10[05]|M303|X1)|Freedom(?!TurboXL)'
  device: 'smartphone'
  models:
    - regex: 'COSMO[_ ](L707|L808)'
      model: 'Cosmo $1'
    - regex: 'FREEDOM[ _](C10[05]|M303|X1)'
      model: 'Freedom $1'
    - regex: 'Freedom'
      model: 'Freedom'
    - regex: 'JUST5(-)?SPACER2s'
      model: 'Spacer 2S'
    - regex: 'JUST5(-)?SPACER2'
      model: 'Spacer 2'
    - regex: 'JUST5SPACER'
      model: 'Spacer'
    - regex: 'BLASTER 2'
      model: 'Blaster 2'
    - regex: 'BLASTER'
      model: 'Blaster'

# Kalley (www.kalley.com.co)
Kalley:
  regex: 'KALLEY|(?:ELEMENT (?:4 Plus|MAX|PLAY|Q)|ELEMENT_PRO_2|K-BOOK(?:8MG|73G)|SILVER_MAX|Silver Max (?:Lite|Pro)|Black[ _][GZ]|Black_G_2|BLACK_PRO|ATV R[12]|GOLD_PRO|KBOOK7M)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Black_G_2'
      model: 'Black G 2'
    - regex: 'Black[ _]([GZ])'
      model: 'Black $1'
    - regex: 'BLACK_PRO'
      model: 'Black Pro'
    - regex: 'Element 4 Plus'
      model: 'Element 4 Plus'
    - regex: 'ELEMENT MAX'
      model: 'Element Max'
    - regex: 'SILVER_MAX'
      model: 'Silver Max'
    - regex: 'Silver Max (Lite|Pro)'
      model: 'Silver Max $1'
    - regex: 'ELEMENT PLAY'
      model: 'Element Play'
    - regex: 'ELEMENT Q'
      model: 'Element Q'
    - regex: 'ELEMENT_PRO_2'
      model: 'Element Pro 2'
    - regex: 'GOLD_PRO'
      model: 'Gold Pro'
    - regex: 'K-?BOOK(8MG|73G|7M)'
      device: 'tablet'
      model: 'K-BOOK$1'
    - regex: 'ATV (R[12])'
      device: 'tv'
      model: 'Android TV $1'
    - regex: 'KALLEY,(43D1800|55D1240)'
      device: 'tv'
      model: '$1'

# Kaan
Kaan:
  regex: 'KAAN[ _](N[12]|A1)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Kazam
Kazam:
  regex: 'Kazam|(?:Trooper_X[0-9][0-9]|Tornado 348|TROOPER 4\.0)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Tornado 348'
      model: 'Tornado 348'
    - regex: 'Thunder 450W'
      model: 'Thunder 450W'
    - regex: 'TROOPER 4\.0'
      model: 'Trooper X4.0'
    - regex: 'Trooper_X([0-9])([0-9])(?:[);/ ]|$)'
      model: 'Trooper X$1.$2'
    - regex: 'Kazam[; _]([^;/)]+)(?: Build|\))'
      model: '$1'

# Kazuna (https://kazuna.co.jp/)
Kazuna:
  regex: 'KAZ-N20'
  device: 'smartphone'
  models:
    - regex: 'KAZ-N20'
      model: 'eTalk MYFLIX'

# Keneksi
Keneksi:
  regex: 'KENEKSI|(?:Hemera|Teta Dual|Helios)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(Hemera|Teta Dual|Helios)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'KENEKSI[ _-]liberty'
      model: 'Liberty'
    - regex: 'KENEKSI[ _-]FLASH'
      model: 'Flash'
    - regex: 'KENEKSI[ _-]SUN'
      model: 'Sun'
    - regex: 'KENEKSI[ _-]ZETA'
      model: 'Zeta'
    - regex: 'KENEKSI[ _-]SIGMA'
      model: 'Sigma'
    - regex: 'KENEKSI[ _-](Moon|Libra_Dual|Glass|Amber|Chance|Amulet|Choice|Crystal|Dream|Delta[_ ]Dual|Norma 2|Norma|Sky|Fire 2|Fire|Flame|Flora|Rock|Solo|Soul|Step|Smart|Star|Storm|Wind)'
      model: '$1'

# Kempler & Strauss (www.kemplerusa.com)
'Kempler & Strauss':
  regex: 'Alumini_?3_?Plus|Alumini ?[23]|KEMPLER_(?:P[13]|TV|[X9]|8_PLUS)|P1[ _]Amateur'
  device: 'smartphone'
  models:
    - regex: 'Alumini ?2'
      model: 'Alumini 2'
    - regex: 'Alumini_?3_?Plus'
      model: 'Alumini 3 Plus'
    - regex: 'Alumini3'
      model: 'Alumini 3'
    - regex: 'KEMPLER_P([13])'
      model: 'P$1'
    - regex: 'P1[ _]Amateur'
      model: 'P1 Amateur'
    - regex: 'KEMPLER_TV'
      model: 'TV'
    - regex: 'KEMPLER_X'
      model: 'X'
    - regex: 'KEMPLER_8_PLUS'
      model: '8 Plus'
    - regex: 'KEMPLER_9'
      model: '9'

# Kiano
Kiano:
  regex: 'Kiano|Elegance_[45]_[015](?:_PRO)?|ELEGANCE 5.0 Lite|Elegance_4.5|Elegance 6|CORE 10.1 DUAL 3G|Intelect ?(7|8|10)|Slim ?Tab ?\d+(?:[_ ]3GR?)?(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Slim ?Tab ?(\d+)(?:[_ ]3GR?)?'
      model: 'Slim Tab $1'
      device: 'tablet'
    - regex: 'CORE 10.1 DUAL 3G'
      model: 'CORE 10.1 DUAL 3G'
      device: 'tablet'
    - regex: 'Elegance_(5)_([51])_Pro'
      model: 'Elegance $1.$2" Pro'
    - regex: 'ELEGANCE 5.0 Lite'
      model: 'Elegance 5.0" Lite'
    - regex: 'Elegance 6'
      model: 'Elegance 6 5.85"'
    - regex: 'Elegance_([45])[_.]([015])'
      model: 'Elegance $1.$2"'
    - regex: '(Kiano)?(Intelect|Elegance) ?(7|8|10)?'
      model: '$2 $3'
      device: 'tablet'
    - regex: 'Kiano[ _]([^;/]+) Build'
      model: '$1'

# Kingbox
Kingbox:
  regex: 'Kingbox'
  device: 'tv'
  model: ''

# Kingstar
Kingstar:
  regex: 'Kingstar'
  device: 'smartphone'
  models:
    - regex: 'Kingstar[-_ ]?([^;/)]+)(?: Build|[;)])'
      model: '$1'

# Kingsun
Kingsun:
  regex: 'Kingsun[ _-]'
  device: 'smartphone'
  models:
    - regex: 'Kingsun[ _-]([^;/]+) Build'
      model: '$1'
    - regex: 'Kingsun[ -]((?!Build)[a-z0-9_-]+)'
      model: '$1'

# Kocaso (www.kocaso.com)
Kocaso:
  regex: 'Kocaso|(?:DX765 Pro|M(?:6200|729|7[357][026][hw]?|76[01236][bw]?|83[016]|8[567]0|1050s|106[012368]w?|1070|X736(?:-kit)?|X780))(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'DX765 Pro(?:[);/ ]|$)'
      model: 'DX765 Pro'
    - regex: 'M6200(?:[);/ ]|$)'
      model: 'M6200'
    - regex: 'M729(?:[);/ ]|$)'
      model: 'M729'
    - regex: 'M(7[357][026])[hw]?(?:[);/ ]|$)'
      model: 'M$1'
    - regex: 'M(76[01236])[bw]?(?:[);/ ]|$)'
      model: 'M$1'
    - regex: 'MX780(?:[);/ ]|$)'
      model: 'MX780'
    - regex: 'M(83[016])(?:[);/ ]|$)'
      model: 'M$1'
    - regex: 'M(8[567]0)(?:[);/ ]|$)'
      model: 'M$1'
    - regex: 'M851(?:[);/ ]|$)'
      model: 'M851'
    - regex: 'M1050S(?:[);/ ]|$)'
      model: 'M1050s'
    - regex: 'M(106[012368])W?(?:[);/ ]|$)'
      model: 'M$1'
    - regex: 'M1070(?:[);/ ]|$)'
      model: 'M1070'
    - regex: 'MX736(?:-kit)?(?:[);/ ]|$)'
      model: 'MX736'
    - regex: 'Kocaso[ _\-]?([^;/)]+)(?: Build|[;)])'
      model: '$1'
    - regex: 'Kocaso[ _\-]?([a-z0-9_-]+)'
      model: '$1'

# Kogan
Kogan:
  regex: 'Kogan|(?:Agora (?:8 Plus|XI|Go))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Kogan ?(SmarterTV(?: 2K)?|TV|TVAP)(?:[);/ ]|$)'
      device: 'tv'
      model: '$1'

    - regex: 'Agora 8 Plus'
      model: 'Agora 8 Plus'
    - regex: 'Agora XI'
      model: 'Agora 11'
    - regex: 'Agora Go'
      model: 'Agora Go'
    - regex: 'Kogan[ _-]([^;/]+) Build'
      model: '$1'
    - regex: 'Kogan[ _-]([a-z0-9_-]+)'
      model: '$1'

# Komu
Komu:
  regex: 'Komu[_ -]'
  device: 'smartphone'
  models:
    - regex: 'Komu[_ -]([^;/).]+)(?: Build|[;).])'
      model: '$1'
    - regex: 'Komu[_ -]([a-z0-9_-]+)'
      model: '$1'

# Koobee
Koobee:
  regex: 'Koobee|F2_Plus(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'F2_Plus'
      model: 'F2 Plus'
    - regex: 'Koobee[ _\-]?([^;/]+) Build'
      model: '$1'
    - regex: 'Koobee[ _\-]?([a-z0-9_-]+)'
      model: '$1'

# Kumai
Kumai:
  regex: '(?:KM-)?Kumai'
  device: 'smartphone'
  models:
    - regex: '(?:KM-)?Kumai[ _\-]?([^;/]+) Build'
      model: '$1'
    - regex: '(?:KM-)?Kumai[ _\-]?([a-z0-9_-]+)'
      model: '$1'

# KT-Tech
KT-Tech:
  regex: '(KM-[a-z0-9]+|EV-[a-z0-9]+)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# kddi
KDDI:
  regex: 'kddi-([a-z0-9]+)|(?:INFOBAR A01|HTX21|HTL21)(?:[);/ ]|$)'
  device: 'feature phone'
  models:
    - regex: 'kddi-([a-z0-9]+)'
      model: '$1'
    - regex: 'INFOBAR (A01)'
      device: 'smartphone'
      model: 'iida InfoBar $1'
    - regex: 'HTX21(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'InfoBar A02'
    - regex: 'HTL21(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'J Butterfly'

# Kodak
Kodak:
  regex: 'KODAK|(?:IM5|KD50|Ektra|Smartway[_ ](?:[FT]1|[LT]2)|D55L|D6[05]LX)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'IM5'
      model: 'IM5'
    - regex: '(KD50|D55L|D6[05]LX)'
      model: 'Seren $1'
    - regex: 'Ektra(?:[);/ ]|$)'
      model: 'Ektra'
    - regex: '(?:KODAK[_ ])?SMARTWAY[_ ]L1 PRO'
      model: 'Smartway L1 Pro'
    - regex: '(?:KODAK[_ ])?SMARTWAY[_ ]([FLMTX]1|[LMTX]2|T3)'
      model: 'Smartway $1'
    - regex: 'Tablet (7|10)'
      device: 'tablet'
      model: 'Tablet $1'

# KOPO
KOPO:
  regex: 'KOPO[ _-]'
  device: 'smartphone'
  models:
    - regex: 'KOPO[ _\-]?([^/;]+) Build'
      model: '$1'
    - regex: 'KOPO[ _\-]?([^);/ ]+)'
      model: '$1'

# Koridy
Koridy:
  regex: 'KORIDY[ _-]([^/;]+) Build'
  device: 'smartphone'
  model: '$1'

# KRONO (www.kronodigital.com)
KRONO:
  regex: '(?:NET1100|NET_(?:LITE|TITAN|VOLT|MAX|MATRIX|K7)|android 8([\d.]*);(?: [\w-]+;)? NETWORK)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'NET1100'
      model: 'NET 1100'
    - regex: 'NET_(LITE|TITAN|VOLT)'
      model: 'NET $1'
    - regex: 'NET_MATRIX'
      device: 'tablet'
      model: 'Net Matrix'
    - regex: 'NET_MAX'
      device: 'tablet'
      model: 'Net Max'
    - regex: 'NET_K7'
      device: 'tablet'
      model: 'Net K7'
    - regex: 'NETWORK'
      device: 'tablet'
      model: 'Network'

#k-touch
K-Touch:
  regex: 'K-?Touch[ _][a-z0-9]+|(?:Pace 2 Lite|KT202011(?:99|88)|LDXA-2[01]22|LDOX-2130|LDOX-212[13])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'KT20201199'
      model: 'P60 Pro'
    - regex: 'KT20201188'
      model: 'T12 Pro Max'
    - regex: 'LDOX-2130'
      model: 'i13 Pro Max'
    - regex: 'LDOX-2123'
      model: 'X13 Pro'
    - regex: 'LDOX-2121'
      model: 'MT40'
    - regex: 'LDXA-2022'
      model: 'X27S Pro'
    - regex: 'LDXA-2122'
      model: 'X27S'
    - regex: 'Pace 2 Lite'
      model: 'Pace 2 Lite'
    - regex: 'K-?Touch[ _]([^/;]*)[ _]Build'
      model: '$1'
    - regex: 'K-?Touch[ _]([a-z0-9]+)'
      model: '$1'

# Diva
Diva:
  regex: '(QC-(?:703GN|704GA|803GN|1013G|7BHD)|QC7704GM)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# kyocera (kyocera.co.jp, kyocera.com)
Kyocera:
  regex: 'Kyocera|KWC-|QC-[0-9]{4}|(?:QC6035|NP501KC|302KC|503KC|602KC|705KC|901KC|C51[27]0|C5155|C5215|C67[35]0|C6522N?|C6530N|C6740N?|C6743|E6[89]10|KYL2[13]|KYV3[1-9]|KYT3[123]|KYF3[1235789]|KYF4[012]|KYX31|KYG01|KYY2[1-4]|S2151|KC-S701|S[468]-KC|S9-KC|KYV40U?|KYY31|KYV4[1-8]|KYV4[47]|KC-S301AE|X3-KC|E6560[CT]|E6782[L]?|E6790(?:TM)?|SZJ-JS20[12]|KCP01K|[47]04KC|A[012]01KC|WX10K|URBANO PROGRESSO|E7110|E6921|KY-51B|C6930|A101BM)(?:[-_][uj]2?)?(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    # explicit smartphone models
    - regex: 'C5120(?:[);/ ]|$)'
      model: 'Milano'
    - regex: '(A101BM)(?:[);/ ]|$)'
      model: 'Balmuda $1'
    - regex: 'S([4689])-KC(?:[);/ ]|$)'
      model: 'One S$1'
    - regex: 'C5155(?:[);/ ]|$)'
      model: 'Rise'
    - regex: '602KC(?:[);/ ]|$)'
      model: 'Digno G'
    - regex: '503KC(?:[);/ ]|$)'
      model: 'Digno E'
    - regex: '404KC(?:[);/ ]|$)'
      model: 'Digno C'
    - regex: '704KC(?:[);/ ]|$)'
      model: 'Digno J'
    - regex: '302KC(?:[);/ ]|$)'
      model: 'Digno T'
    - regex: 'NP501KC(?:[);/ ]|$)'
      model: 'Digno'
    - regex: 'WX10K(?:[);/ ]|$)'
      model: 'Digno Dual 2'
    - regex: 'KYV36(?:[);/ ]|$)'
      model: 'Digno Rafre'
    - regex: '901KC(?:[);/ ]|$)'
      model: 'Digno BX'
    - regex: 'A101KC(?:[);/ ]|$)'
      model: 'Digno BX 2'
    - regex: 'KYV39(?:[);/ ]|$)'
      model: 'Miraie F'
    - regex: 'KYX31(?:[);/ ]|$)'
      model: 'Infobar XV'
    - regex: 'C5170(?:[);/ ]|$)'
      model: 'Hydro'
    - regex: 'C5215(?:[);/ ]|$)'
      model: 'Hydro EDGE'
    - regex: 'C6522N?'
      model: 'Hydro XTRM'
    - regex: 'C6730'
      model: 'Hydro ICON'
    - regex: 'C6750'
      model: 'Hydro ELITE'
    - regex: 'C6530N'
      model: 'Hydro LIFE'
    - regex: 'C6740(N)?'
      model: 'Hydro WAVE'
    - regex: 'C6743'
      model: 'Hydro Reach'
    - regex: 'E6560[CT]'
      model: 'DuraForce'
    - regex: '(?:KYOCERA-)?E68[12]0'
      model: 'DuraForce Pro'
    - regex: '(?:KYOCERA-)?(?:E69[12]0|E6921)'
      model: 'DuraForce Pro 2'
    - regex: 'E7110'
      model: 'DuraForce Ultra 5G'
    - regex: 'C6930'
      model: 'DuraForce 5G'
    - regex: 'KC-S701'
      model: 'Torque'
    - regex: 'KYG01'
      model: 'Torque 5G'
    - regex: 'KYL21(?:[);/ ]|$)'
      model: 'Digno S'
    - regex: 'KYL23(?:[);/ ]|$)'
      model: 'Miraie'
    - regex: 'KYY24(?:[);/ ]|$)'
      model: 'Torque G01'
    - regex: '(KYF32|KYF41)(?:[);/ ]|$)'
      model: 'Easy Mobile Phone $1'
    - regex: 'KYF35(?:[);/ ]|$)'
      model: 'Marvera'
    - regex: 'KYF40(?:[);/ ]|$)'
      model: 'Mamorino 5'
    - regex: 'KYF3[179](?:[);/ ]|$)'
      model: 'Gratina 4G'
    - regex: '(KYV48|KYF42)(?:[);/ ]|$)'
      model: 'Gratina $1'
    - regex: 'KYF33(?:[);/ ]|$)'
      model: 'Torque X01'
    - regex: '(KYF38)(?:[);/ ]|$)'
      model: 'Keitai $1'
    - regex: 'KYV35(?:[);/ ]|$)'
      model: 'Torque G02'
    - regex: 'KYV41(?:[);/ ]|$)'
      model: 'Torque G03'
    - regex: 'KYV46(?:[);/ ]|$)'
      model: 'Torque G04'
    - regex: 'KYV32?(?:[);/ ]|$)'
      model: 'Basio'
    - regex: 'KYV47(?:-[uj])?(?:[);/ ]|$)'
      model: 'Basio 4'
    - regex: 'KYV43(?:_j)?(?:[);/ ]|$)'
      model: 'Basio 3'
    - regex: '705KC(?:[);/ ]|$)'
      model: 'Kantan Sumaho'
    - regex: 'KYV37(?:[);/ ]|$)'
      model: 'Qua Phone'
    - regex: 'KYV42(?:_u)?(?:[);/ ]|$)'
      model: 'Qua Phone QX'
    - regex: 'KYV44(?:_u2?)?(?:[);/ ]|$)'
      model: 'Qua Phone QZ'
    - regex: 'KYT33(?:[);/ ]|$)'
      model: 'Qua Tab QZ10'
      device: 'tablet'
    - regex: 'KYT32(?:[);/ ]|$)'
      model: 'Qua Tab QZ8'
      device: 'tablet'
    - regex: 'KYT31(?:[);/ ]|$)'
      model: 'Qua Tab 01'
      device: 'tablet'
    - regex: 'KYV40U?(?:[);/ ]|$)'
      model: 'Rafre'
    - regex: 'KYV33(?:[);/ ]|$)'
      model: 'Infobar A03'
    - regex: 'KYY21(?:[);/ ]|$)'
      model: 'Urbano L01'
    - regex: 'KYY22(?:[);/ ]|$)'
      model: 'Urbano L02'
    - regex: 'KYY23(?:[);/ ]|$)'
      model: 'Urbano L03'
    - regex: 'KYV31(?:[);/ ]|$)'
      model: 'Urbano V01'
    - regex: 'KYV34(?:[);/ ]|$)'
      model: 'Urbano V02'
    - regex: 'KYV(?:45|38)(?:[);/ ]|$)'
      model: 'Urbano V03'
    - regex: '(?:Kyocera-)?E6790(?:TM)?'
      model: 'DuraForce XD'
    - regex: 'X3-KC(?:[);/ ]|$)'
      model: 'One X3'
    - regex: 'E6782(?:[);/ ]|$)'
      model: 'Brigadier'
    - regex: 'E6782L(?:[);/ ]|$)'
      model: 'DuraScout'
    - regex: 'KCP01K(?:[);/ ]|$)'
      model: 'Luce'
    - regex: '(KC-S301AE|KY-51B)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(SZJ-JS20[12])(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: 'A001KC(?:[);/ ]|$)'
      model: 'Katan Sumaho 2'
    - regex: 'A201KC(?:[);/ ]|$)'
      model: 'Katan Sumaho 2+'
    - regex: 'URBANO PROGRESSO(?:[);/ ]|$)'
      model: 'Urbano Progresso'
    - regex: 'KYY31(?:[);/ ]|$)'
      model: 'GzOne Type-XX'

    # explicit feature phone models
    - regex: 'S2151'
      model: 'Coast'
      device: 'feature phone'

    - regex: 'Kyocera-KZ-([a-z0-9]+)'
      model: 'KZ $1'
    - regex: 'Kyocera(?:[\-/])?([a-z0-9]+)'
      model: '$1'
    - regex: '(KWC|QC)-?([a-z0-9]+)'
      model: '$1-$2'

# Mymaga (support.mymaga.eu)
Mymaga:
  regex: '(MOVE_S201)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Krüger&Matz or Kruger&Matz (www.krugermatz.com)
Krüger&Matz:
  regex: 'Kruger[ _&]Matz|KrugerMatz[ _]|K&M|EAGLE_(?:961|1068)|FLOW ?5PLUS|FLOW 4 PLUS|Flow 9|FLOW_5|FLOW7|FLOW6(?:S|Lite)?|DRIVE9|DRIVE 8|DRIVE[_ ]6S?|MOVE8mini|MOVE9|MOVE_|LIVE_6plus|LIVE 5 PLUS|Live [89]|LIVE4_KM043[89]|LIVE 7S?|Flow 7S|KM(?:106[679]|1065G|0701(?:_1)?|0702|080[45](?:_1)?|1070)'
  device: 'smartphone'
  models:
    - regex: 'MOVE8mini'
      model: 'MOVE 8 Mini'
    - regex: 'MOVE_6_mini'
      model: 'MOVE 6 Mini'
    - regex: 'MOVE[_ ]([78]|6S?)'
      model: 'MOVE $1'
    - regex: 'DRIVE 4 mini LTE'
      model: 'DRIVE 4 mini LTE'
    - regex: 'DRIVE[ _]?([45689][S]?)(?:[);/ ]|$)'
      model: 'DRIVE $1'
    - regex: 'FLOW ?([54]) ?PLUS(?:[);/ ]|$)'
      model: 'FLOW $1 Plus'
    - regex: 'FLOW6Lite(?:[);/ ]|$)'
      model: 'FLOW 6 Lite'
    - regex: 'FLOW[ _]?([4-7][S]?|9)(?:[);/ ]|$)'
      model: 'FLOW $1'
    - regex: 'LIVE4_(KM043[89])(?:[);/ ]|$)'
      model: 'LIVE 4 $1'
    - regex: 'KrugerMatz_LIVE4(?:[);/ ]|$)'
      model: 'LIVE 4'
    - regex: '_LIVE5_(KM0450)(?:[);/ ]|$)'
      model: 'LIVE 5 $1'
    - regex: 'LIVE 5 PLUS(?:[);/ ]|$)'
      model: 'LIVE 5 Plus'
    - regex: 'LIVE_6plus(?:[);/ ]|$)'
      model: 'LIVE 6 Plus' # KM0454
    - regex: 'LIVE ([79])S(?:[);/ ]|$)'
      model: 'LIVE $1S'
    - regex: 'Live ([789])(?:[);/ ]|$)'
      model: 'LIVE $1'
    - regex: 'MOVE9(?:[);/ ]|$)'
      model: 'MOVE 9'

    - regex: 'KM(106[679])(?:[);/ ]|$)'
      device: 'tablet'
      model: 'EAGLE $1 10.1"'
    - regex: 'EAGLE_(961|1068)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'EAGLE $1'
    - regex: 'KM(1070)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'EAGLE $1 10.5"'
    - regex: 'KM(1065G)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'EAGLE $1 10.1"'
    - regex: 'KM0(701)(?:_1)?(?:[);/ ]|$)'
      device: 'tablet'
      model: 'EAGLE $1 7.1"'
    - regex: 'KM0(80[45])(?:_1)?(?:[);/ ]|$)'
      device: 'tablet'
      model: 'EAGLE $1 8.0"'
    - regex: 'KM0(702)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'EAGLE $1 7.0"'

    - regex: 'K&M,([a-z0-9_ \-]+),(?:wired|wireless)'
      model: '$1'
      device: 'tv'

# LAIQ
LAIQ:
  regex: 'LAIQ'
  device: 'smartphone'
  models:
    - regex: '(Glam|New York|Dubai)(?:[);/ ]|$)'
      model: '$1'

# AIS
AIS:
  regex: 'iris708|Kingcomm C500'
  device: 'smartphone'
  models:
    - regex: 'iris708'
      model: 'LAVA PRO 4.5'
    - regex: 'Kingcomm C500'
      model: 'Super Smart Plus X3'

# Benco (www.bencomobile.com)
Benco:
  regex: 'Benco[_ ]|(?:AE9010|AE9950|AH9110)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'AE9950'
      model: 'V60'
    - regex: 'AE9010'
      model: 'V80'
    - regex: 'AH9110'
      model: 'Y11'

# Lava (Lavamobiles.com)
Lava:
  regex: 'Lava[ _]|LAVA(?:A1|X10)|(?:DISCOVER136|KKT QUADRA)|iris(?! Plus 2021|_Pad_G)[ _]?([^/;)]+)(?<!Plus 2021)(?: Build|[;)])|A(?:67|76) Build|X1 Selfie Build|X41 Plus Build|X1_atom_L|(?:Flair (?:[ZS]1|P8)|PixelV1|Pixel V2\+?|Z60s|Z61_2GB|A97 IPS|A97 2GB PLUS|L[EH]9920(?:[_ ]P)?|L[NEH]9910|LH9810|Ivory(?:S1|S4G)?|A76Plus|Grand2c|AH9910| A3_mini|T71_w|V23GB|R1_Lite|Atom 2X|AF9030|Z50_Pro| Z(?:[56]1|92)|Android 6(?:[\d.]*);(?: [\w-]+;)? (:?X28|P7plus)|AF9020|Alfa L)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    # explicit smartphone models
    - regex: 'Flair ([ZS]1|P8)(?:[);/ ]|$)'
      model: 'Flair $1'
    - regex: 'AF9030(?:[);/ ]|$)'
      model: 'Benco Y30'
    - regex: 'AF9020(?:[);/ ]|$)'
      model: 'Benco Y50'
    - regex: 'AH9910(?:[);/ ]|$)'
      model: 'Benco Y40'
    - regex: 'LXX501(?:[);/ ]|$)'
      model: 'Agni 5G'
    - regex: 'Z61P(?:[);/ ]|$)'
      model: 'Z61 Pro'
    - regex: 'A97 IPS(?:[);/ ]|$)'
      model: 'A97 IPS'
    - regex: 'LF6810(?:[);/ ]|$)'
      model: 'R5s Play'
    - regex: 'A97 2GB PLUS(?:[);/ ]|$)'
      model: 'A97 2GB Plus'
    - regex: 'A76Plus(?:[);/ ]|$)'
      model: 'A76 Plus'
    - regex: ' A3_mini(?:[);/ ]|$)'
      model: 'A3 Mini'
    - regex: 'Pixel V2\+(?:[);/ ]|$)'
      model: 'Pixel V2 Plus'
    - regex: 'Pixel ?V([12])(?:[);/ ]|$)'
      model: 'Pixel V$1'
    - regex: 'X1_atom_L(?:[);/ ]|$)'
      model: 'X1 Atom L'
    - regex: 'X1 Selfie(?:[);/ ]|$)'
      model: 'Iris X1 Selfie'
    - regex: 'X41 Plus(?:[);/ ]|$)'
      model: 'X41 Plus'
    - regex: '(?:LAVA[_ ]?)?A([13]|67|76)(?:[);/ ]|$)'
      model: 'A$1'
    - regex: 'LAVA_R(1s?)'
      model: 'R$1'
    - regex: 'LAVA Z3 UP'
      model: 'Z3'
    - regex: ' Z(\d{2})(?:_2GB)?(?:[);/ ]|$)'
      model: 'Z$1'
    - regex: 'Z50_Pro(?:[);/ ]|$)'
      model: 'Z50 Pro'
    - regex: 'LMX06(?:[);/ ]|$)'
      model: 'Z6'
    - regex: 'LMG01(?:[);/ ]|$)'
      model: 'Z2'
    - regex: 'LZG402 OM'
      model: 'Z21'
    - regex: 'LZG403[ _]225(?:[);/ ]|$)'
      model: 'X2'
    - regex: 'LZG403(?:[);/ ]|$)'
      model: 'Z3'
    - regex: 'Z60s(?:[);/ ]|$)'
      model: 'Z60s'
    - regex: 'V23GB(?:[);/ ]|$)'
      model: 'V2'
    - regex: 'LE9920[ _]P(?:[);/ ]|$)'
      model: 'V7'
    - regex: 'LE9940(?:[);/ ]|$)'
      model: 'V7 Prime'
    - regex: 'LE9920(?:[);/ ]|$)'
      model: 'Z53'
    - regex: 'LH9910(?:[);/ ]|$)'
      model: 'Z52'
    - regex: 'LF9810(?:_2GB)?(?:[);/ ]|$)'
      model: 'Z62'
    - regex: 'LF9820(?:[);/ ]|$)'
      model: 'Z71'
    - regex: 'LE9830(?:[);/ ]|$)'
      model: 'Z93'
    - regex: 'LN9810(?:[);/ ]|$)'
      model: 'Iris 66'
    - regex: 'LH9810(?:[);/ ]|$)'
      model: 'Iris 52'
    - regex: 'LH993[01](?:[);/ ]|$)'
      model: 'Iris 54'
    - regex: 'LE9930(?:[);/ ]|$)'
      model: 'Iris 59'
    - regex: 'LH9950(?:[);/ ]|$)'
      model: 'Iris 46'
    - regex: 'Atom 2X(?:[);/ ]|$)'
      model: 'Iris Atom 2X'
    - regex: 'Alfa L(?:[);/ ]|$)'
      model: 'Iris Alfa L'
    - regex: 'LN9910(?:[);/ ]|$)'
      model: 'Z41'
    - regex: 'LE9910(?:[);/ ]|$)'
      model: 'V8'
    - regex: 'LH9920(?:[);/ ]|$)'
      model: 'V+6'
    - regex: 'Grand2c'
      model: 'Grand 2C'
    - regex: 'R1_Lite'
      model: 'R1 Lite'
    - regex: 'LE9820'
      model: 'R5'
    - regex: 'LE9810'
      model: 'R3 Note'
    - regex: 'P7plus'
      model: 'P7 Plus'
    - regex: '(X\d+)[ _]Plus(?:[);/ ]|$)'
      model: '$1 Plus'
    - regex: ' (X28)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'iris88[_ ]go'
      model: 'Iris 88 Go'
    # explicit feature phone models
    - regex: 'DISCOVER136'
      device: 'feature phone'
      model: 'Discover 136'
    - regex: 'KKT QUADRA'
      device: 'feature phone'
      model: 'KKT Quadra'
    - regex: 'KKT40[ ]?Power[P\+]'
      device: 'feature phone'
      model: 'KKT40 Power Plus'
    # explicit tablet models
    - regex: 'Ivory(S1|S4G)?(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Ivory $1'
    - regex: 'T71_w(?:[);/ ]|$)'
      device: 'tablet'
      model: 'T71'
    # explicit general
    - regex: 'iris[ _]?([^/;)]+)[_ ]lite(?: Build|[);])'
      model: 'Iris $1 Lite'
    - regex: 'iris[ _]?([^/;)]+)(?: Build|[);])'
      model: 'Iris $1'
    - regex: 'Lava[ _]?([^/;)]+)(?: Build|[);])'
      model: '$1'
    - regex: 'LAVA[ _]([^/;)]+)/MIDP'
      device: 'feature phone'
      model: '$1'

# SKG (skgmobile.net | skgmobile.com)
SKG:
  regex: '(Modern[ _](?:S10?|S[3679]))(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# iVA
iVA:
  regex: '(LAMCY (?:L3[05]0|C100|L400)|IVA S6)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'LAMCY (L3[05]0|C100|L400)(?:[);/ ]|$)'
      model: 'Lamcy $1'
    - regex: 'IVA S6(?:[);/ ]|$)'
      model: 'S6'

# Landvo
Landvo:
  regex: 'XM[123]00|(?<!Blade |Haipainoble )S6 Build'
  device: 'smartphone'
  models:
    - regex: 'S6 Build' # clone Galaxy S6
      model: 'S6'
    - regex: 'XM([123])00([^/;)]*)(?: Build|[;)])'
      model: 'XM$100$2'

# Land Rover
Land Rover:
  regex: 'Land[ ]?Rover[d]?[ _-](?:X1[0-9]|Explore|T878|L15\+|V18|V[168]|X)(?:[);/ ]|$)|Polar3|Vphone[- ]X3'
  device: 'smartphone'
  models:
    - regex: 'Land[ ]?Rover[d]?[ _-](X1[0-9]|Explore(?: R)?|T878|L15\+|V18|V[168]|X)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Vphone[- ]X3'
      model: 'Vphone X3'
    - regex: 'Polar3'
      model: 'Ioutdoor Polar 3'

# iOutdoor
iOutdoor:
  regex: 'iOutdoor (X)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Lanin
Lanin:
  regex: 'lanin (T4)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# lanix (lanix.com)
Lanix:
  regex: 'LANIX-([a-z0-9]+)|Ilium[ _]|LANIX_PAD|IliumPad|X120C|(?:Alpha 950(?:XL)?|Alpha [135]V)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'ILIUM_PAD_RX10v5'
      device: 'tablet'
      model: 'Ilium Pad RX10 V5'
    - regex: 'LANIX_PAD_E7'
      device: 'tablet'
      model: 'Ilium Pad E7'
    - regex: 'ILIUM[ _]?PAD[ _]?([^;/]+)(?: Build|[;)])'
      model: 'Ilium Pad $1'
      device: 'tablet'
    - regex: 'X120C'
      model: 'Ilium X120C'
    - regex: 'Ilium[ _](Alpha [15]s|Alpha [379]|Alpha 1T|L(?:200|6[12]0|9[0125]0|1[0124]00|1050|1120)|LT5[012]0|M[579]s|M7T|M[13579]|S(?:106|520|6[27]0)|X(?:1[12]0|2[0126]0|5[12]0|500B|710))(?:[);/ ]|$)'
      model: 'Ilium $1'
    - regex: 'ILIUM[ _]([^;/]+) Build'
      model: 'Ilium $1'
    - regex: 'Alpha (9500|950(?:XL)?)'
      model: 'Ilium Alpha $1'
    - regex: 'Alpha ([135])V'
      model: 'Alpha $1V'
    - regex: 'LANIX-([a-z0-9]+)'
      device: 'feature phone'
      model: '$1'

# Lark
Lark:
  regex: '(Lark|Cumulus|Evolution|FreeMe|Ultimate (?:X4|7i))[ _-]|Build/Lark|Bjorn[_ ]SP-500|FreeBird 5WiFi|Impress_Noda'
  device: 'tablet'
  models:
    - regex: 'Cumulus[ _](5\.5|[56])[ _]HD'
      model: 'Cumulus $1 HD'
      device: 'smartphone'
    - regex: 'FreeMe X2 ([79]) (?:ver|v)?\.([23])'
      model: 'FreeMe X2 $1 Version $2'
    - regex: 'FreeMe X4 7 3G HD'
      model: 'FreeMe X4 7HD 3G'
    - regex: 'FreeMe[ _]X2[ _]([7-9])'
      model: 'FreeMe X2 $1'
    - regex: 'FreeMe X4[ _]7[_ ]?HD'
      model: 'FreeMe X4 7HD'
    - regex: 'FreeMe X4[ _]9'
      model: 'FreeMe X4 9'
    - regex: 'FreeMe X4 7'
      model: 'FreeMe X4 7'
    - regex: 'FreeBird 5WiFi'
      model: 'FreeBird 5 WiFi'
    - regex: '(?:Lark[ _-])?Evolution[ _](X2 7 3G-GPS|X4[_ ]10\.1|10|X4[_ ]7[ _]IPS)'
      model: 'Evolution $1'
    - regex: 'Ul(?:ti|it)mate (X4 10\.1 3G IPS|X4 8s 3G|7i)'
      model: 'Ultimate $1'
    - regex: 'PHABLET 7'
      model: 'Phablet 7'
    - regex: 'Phablet 6\.0'
      model: 'Phablet 6.0'
      device: 'smartphone'
    - regex: 'Bjorn[_ ]SP-500'
      model: 'Bjorn SP-500'
      device: 'smartphone'
    - regex: 'Cirrus[ _](4\.5|[45])'
      model: 'Cirrus $1'
      device: 'smartphone'
    - regex: 'Lark[ _](Stratus[_ ]5)'
      model: '$1'
      device: 'smartphone'
    - regex: 'Impress_Noda'
      model: 'Impress Noda'
      device: 'smartphone'

# lct
LCT:
  regex: 'LCT_([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# Le Pan
'Le Pan':
  regex: 'Le ?Pan|TC970 ([^;/]+)Build'
  device: 'tablet'
  models:
    - regex: 'TC802A'
      model: 'Le Pan Mini'
    - regex: 'TC970 ([^;/]+)Build'
      model: 'TC970 $1'
    - regex: 'Le ?Pan ?(II|S)(?:[);/ ]|$)'
      model: 'Le Pan $1'
    - regex: 'Le ?Pan ?([^;/]+) Build'
      model: '$1'

# Leagoo
Leagoo:
  regex: '(?:MY)?LEAGOO[ _-]?|(?:XRover(?: C)?|Shark (5000|1|6300)|M5 EDGE|KIICAA (POWER|MIX)|Leapad[ _](?:X|7s|7Pro)|Alfa [125]|Elite [15]|Venture 1|Z10-E|M9 Pro|Power 5|Power[ _]2(?: Pro)?|Android 9;(?: [\w-]+;)? M1[23]|Android 8(?:[\d.]*);(?: [\w-]+;)? (?:Z9A|T8s)|Lead 3| T5c)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:LEAGOO[- _])?M([89])[_-]?Pro(?:[);/ ]|$)'
      model: 'M$1 Pro'
    - regex: 'LEAGOO[- _](Z[156]|Z5c|M[58]|T1)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'M5 EDGE'
      model: 'M5 Edge'
    - regex: '(?:LEAGOO[_ ])?Lead ?([357])'
      model: 'Lead $1'
    - regex: 'KIICAA POWER'
      model: 'KICCAA Power'
    - regex: 'KIICAA MIX'
      model: 'KICCAA Mix'
    - regex: 'Elite ([15])(?:[);/ ]|$)'
      model: 'Elite $1'
    - regex: 'Shark (1|5000|6300)(?:[);/ ]|$)'
      model: 'Shark $1'
    - regex: 'Power 2 Pro(?:[);/ ]|$)'
      model: 'Power 2 Pro'
    - regex: '(?:leagoo-)?Power[ _]([25])(?:[);/ ]|$)'
      model: 'Power $1'
    - regex: 'Venture 1(?:[);/ ]|$)'
      model: 'Venture 1'
    - regex: 'Alfa ([125])(?:[);/ ]|$)'
      model: 'Alfa $1'
    - regex: 'XRover( C)?(?:[);/ ]|$)'
      model: 'XRover$1'
    - regex: '(?:LEAGOO[- _])?(Z10-E|M6|M1[23]|T5c|T8s|Z9A)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(?:My)?Leagoo[- _](E4)(?:[);/ ]|$)'
      model: '$1'

    - regex: 'Leapad 7Pro'
      device: 'tablet'
      model: 'LeaPad 7 Pro'
    - regex: '(?:LEAGOO_)?Leapad[ _](7s|10|X|7I)'
      model: 'LeaPad $1'
      device: 'tablet'

# Ledstar
Ledstar:
  regex: '(?:Ledstar[_ ])?(?:Trendy 5.0|Novus_Premium_6.0)'
  device: 'smartphone'
  models:
    - regex: 'Trendy 5.0'
      model: 'Trendy 5.0'
    - regex: 'Ledstar_Novus_Premium_6.0(?:[);/ ]|$)'
      model: 'Novus Premium 6.0"'

# Leelbox
Leelbox:
  regex: 'Leelbox(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'Leelbox(?:[);/ ]|$)'
      model: ''

# LeEco
LeEco:
  regex: 'Letv|LeEco|Le ?X[0-9][^;/]+|Le Max|Le [12]|Le2[_ ]x527|X900 Build|(?:X[89]00\+|X52[67]|lineage_c106)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'X800\+'
      model: 'Le 1 Pro'
    - regex: 'X900\+'
      model: 'Max X900+'
    - regex: 'X50[10]'
      model: 'Le 1S'
    - regex: 'LE ?(X62[26]|X522)'
      model: 'Le 3S $1'
    - regex: '(X910)'
      model: '$1'
    - regex: 'X900 Build'
      model: 'Le X900'
    - regex: 'LEX72[07](?:[);/ ]|$)'
      model: 'Le Pro 3'
    - regex: 'LEX65[0137](?:[);/ ]|$)'
      model: 'Le Pro 3 AI'
    - regex: 'LE(X620)(?:[);/ ]|$)'
      model: 'Le 2 $1'
    - regex: '(?:Le ?X526|Le2[_ ]x527|Le 2|X52[67])(?:[);/ ]|$)'
      model: 'Le 2'
    - regex: 'lineage_c106'
      model: 'Cool 1'
    - regex: 'LEX82[019]'
      model: 'Le Max 2'
    - regex: 'Le ?X([^;/]+) Build'
      model: 'Le X$1'
    - regex: 'Le ?X([^) ;/]+)'
      model: 'Le X$1'
    - regex: 'Le ?([12][^;/]+) Build'
      model: 'Le $1'
    - regex: 'Le Max([^;/]*) Build'
      model: 'Le Max$1'
    - regex: 'Le Max([^ ;/]*)'
      model: 'Le Max$1'
    - regex: 'LeEco ([^;/]+) Build'
      model: '$1'

# Lephone
Lephone:
  regex: 'lephone[ _]|lephoneP1|S104G(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'lephone[ _](K7|K10)'
      device: 'feature phone'
      model: '$1'
    - regex: 'S104G'
      model: 'S104G'
    - regex: 'lephone_W7_plus|lephone W7+'
      model: 'W7 Plus'
    - regex: 'lephone(?:[ _])?([^/);]*)(?: Build|[);])'
      model: '$1'

# lenco
Lenco:
  regex: 'Lenco ([^/);]*)(?: Build|[);])'
  device: 'tablet'
  models:
    - regex: 'LENCO Diverso-700'
      device: 'portable media player'
      model: 'Diverso 700'
    - regex: 'Lenco ([^/);]*)(?: Build|[);])'
      model: '$1'

# Aligator
Aligator:
  regex: 'ALIGATOR[_ ]|(?:RX[67]00|S5710|RX460)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:ALIGATOR[ _])?(S4080|S50(?:6[56]|[678]0)|S55[24]0|S5710|RX510|S6[05]00|RX710|RX[678]00|RX460)(?:[);/ ]|$)'
      model: '$1'

# lenovo (lenovo.com)
Lenovo:
  regex: '(?:LNV-)?Lenovo|IdeaTab|IdeaPad|Thinkpad|Yoga Tablet|Tab2A[0-9]-[0-9]{2}[a-z]?|ZUK[ -_]|(?:TB2-X30L|TB3-710I|TB328FU|TB128FU|YT3-X50[ML]|K50a40|TB-(?:X103F|8504F|X304F|X704V|X704A)|A5500-H|A2107A-H|A3500-HV|A2109A|S6000|Z2 Plus|Vibe[ _](?:P1|S6i Plus|S[23567]i|C|[ZX]2|K5(?: Plus)?|V7)|P2A42|L38011|L18011|[5-8]01LV|[67]02LV|Z2131|K350t|K31-t3|TAB 2 A8-50LC|S90-A|A101LV|P70-A|VR-1541F|d-42A|lineage_A6020|EveryPad2|A2010l36|F0CU0028RK|TB132FU|TB328XU|TB138FC|PB-6505Y)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Lenovo ?G780'
      model: 'G780'
      device: 'desktop'
    - regex: 'Lenovo ?A3500-FL'
      model: 'IdeaTab A7-40'
      device: 'tablet'
    - regex: '(?:Lenovo ?)?A3500-(?:H|HV|F)'
      model: 'IdeaTab A7-50'
      device: 'tablet'
    - regex: '(?:Lenovo[ _])?A5500-[HF]'
      model: 'IdeaTab A8-50'
      device: 'tablet'
    - regex: 'Lenovo ?A7600'
      model: 'IdeaTab A10-70'
      device: 'tablet'
    - regex: 'A2107A-H'
      model: 'A2107'
      device: 'tablet'
    - regex: 'A2109A'
      model: 'IdeaTab A2109A'
      device: 'tablet'
    - regex: 'TB2-X30[FL]'
      model: 'Tab 2 A10-30'
      device: 'tablet'
    - regex: 'TB-X6C6[XF]'
      model: 'Tab K10'
      device: 'tablet'
    - regex: 'YT3-X50[FLM]'
      model: 'Yoga Tab 3'
      device: 'tablet'
    - regex: 'YT-J706[XF]'
      model: 'Yoga Tab 11'
      device: 'tablet'
    - regex: 'YT-K606F'
      model: 'Yoga Pad Pro'
      device: 'tablet'
    - regex: 'TB3-730X'
      model: 'TAB3 7'
      device: 'tablet'
    - regex: 'TB3-710[IF]'
      model: 'TAB3 7 Essential'
      device: 'tablet'
    - regex: 'TB-7703X'
      model: 'TAB3 7 Plus'
      device: 'tablet'
    - regex: 'TB3-X70L'
      model: 'TAB3 10 Plus'
      device: 'tablet'
    - regex: 'TB-8703[XF]'
      model: 'TAB3 8 Plus'
      device: 'tablet'
    - regex: 'TB-8X04F'
      model: 'TAB4 8 REL'
      device: 'tablet'
    - regex: 'TAB 2 A8-50LC'
      model: 'TAB2 A8-50LC'
      device: 'tablet'
    - regex: '501LV(?:[);/ ]|$)'
      model: 'TAB2 8.0"'
      device: 'tablet'
    - regex: 'TAB 2 A10-70L(?:[);/ ]|$)'
      model: 'TAB 2 A10'
      device: 'tablet'
    - regex: '(?:TB3-850[FM]|601LV)(?:[);/ ]|$)'
      model: 'TAB3 8'
      device: 'tablet'
    - regex: '602LV(?:[);/ ]|$)'
      model: 'TAB3 8 Dual'
      device: 'tablet'
    - regex: 'TB-X304[FL]'
      model: 'TAB4 10'
      device: 'tablet'
    - regex: 'TB-8504[XL]'
      model: 'TAB4 8'
      device: 'tablet'
    - regex: 'TB-8704X'
      model: 'TAB4 8 Plus'
      device: 'tablet'
    - regex: '(?:TB-X704[FVL]|70[12]LV)(?:[);/ ]|$)'
      model: 'TAB4 10 Plus'
      device: 'tablet'
    - regex: '801LV(?:[);/ ]|$)'
      model: 'TAB5 10.1"'
      device: 'tablet'
    - regex: 'TB-X103F(?:[);/ ]|$)'
      model: 'TAB10 10.1"'
      device: 'tablet'
    - regex: 'TB-X704A(?:[);/ ]|$)'
      model: 'Moto Tab'
      device: 'tablet'
    - regex: 'TB-X605F(?:[);/ ]|$)'
      model: 'Tab M10'
      device: 'tablet'
    - regex: 'TB-X705[FL](?:[);/ ]|$)'
      model: 'Tab P10'
      device: 'tablet'
    - regex: 'TB-J606[LF](?:[);/ ]|$)'
      device: 'tablet'
      model: 'Tab P11'
    - regex: 'TB-Q706[FZ](?:[);/ ]|$)'
      device: 'tablet'
      model: 'Tab P12 Pro'
    - regex: 'TB-J606[FN]'
      device: 'tablet'
      model: 'Tab K11'
    - regex: 'TB-J607F(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Tab QT K11 Pro WiFi'
    - regex: 'TB-J616[XF](?:[);/ ]|$)'
      model: 'Tab P11 Plus'
      device: 'tablet'
    - regex: 'TB-J706[LF](?:[);/ ]|$)'
      model: 'Tab P11 Pro'
      device: 'tablet'
    - regex: 'TB132FU(?:[);/ ]|$)'
      model: 'Tab P11 Pro (Gen 2)'
      device: 'tablet'
    - regex: 'TB-J607Z(?:[);/ ]|$)'
      model: 'Tab K11 Pro 5G'
      device: 'tablet'
    - regex: 'TB-7104[IF](?:[);/ ]|$)'
      model: 'Tab E7'
      device: 'tablet'
    - regex: 'TB-8304F1(?:[);/ ]|$)'
      model: 'Tab E8'
      device: 'tablet'
    - regex: 'TB-7304'
      model: 'Tab 7 Essential'
      device: 'tablet'
    - regex: 'TB-7504X(?:[);/ ]|$)'
      model: 'Tab 7'
      device: 'tablet'
    - regex: 'PB-6505'
      model: 'Tab V7'
      device: 'tablet'
    - regex: 'A101LV'
      model: 'Tab 6'
      device: 'tablet'
    - regex: 'TB-X606[FXV]A?(?:[);/ ]|$)'
      model: 'Tab M10 FHD Plus'
      device: 'tablet'
    - regex: 'TB-X605[FL]C'
      model: 'Tab M10 FHD Rel'
      device: 'tablet'
    - regex: 'TB-X605'
      model: 'Tab M10 FHD'
      device: 'tablet'
    - regex: 'Lenovo TB-X306'
      model: 'Tab M10 HD'
      device: 'tablet'
    - regex: '(?:Lenovo )?TB12[58][FX]U'
      model: 'Tab M10 Plus (Gen 3)'
      device: 'tablet'
    - regex: '(?:Lenovo )?TB328[FX]U'
      model: 'Tab M10 (Gen 3)'
      device: 'tablet'
    - regex: 'Lenovo TB-X505' # 2019
      model: 'Tab M10'
      device: 'tablet'
    - regex: 'TB-7305[IXF](?:[);/ ]|$)'
      model: 'Tab M7'
      device: 'tablet'
    - regex: 'TB-7306[XF](?:[);/ ]|$)'
      model: 'Tab M7 (Gen 3)'
      device: 'tablet'
    - regex: 'Lenovo ?B8000(-[FH])?'
      model: 'Yoga Tablet 10'
      device: 'tablet'
    - regex: 'YOGA Tablet 2 Pro-1380[FL]'
      model: 'Yoga Tablet 2 Pro 13.3"'
      device: 'tablet'
    - regex: 'YOGA Tablet 2-1050[FL]'
      model: 'Yoga Tablet 2 10.1"'
      device: 'tablet'
    - regex: 'YOGA Tablet 2-830(?:[FL]|LC)'
      model: 'Yoga Tablet 2 8.0"'
      device: 'tablet'
    - regex: 'Lenovo ?B6000(-[FH])?'
      model: 'Yoga Tablet 8'
      device: 'tablet'
    - regex: 'YT3-X90(L|F|X)'
      model: 'Yoga 3 Pro'
      device: 'tablet'
    - regex: 'YT3-850[FL]'
      model: 'Yoga Tab 3 8'
      device: 'tablet'
    - regex: 'YT3-850M'
      model: 'Yoga Tab 3 10'
      device: 'tablet'
    - regex: 'YT-X703[FL]'
      model: 'Yoga Tab 3 Plus'
      device: 'tablet'
    - regex: 'YT-X705[FL]'
      model: 'Yoga Smart Tab'
      device: 'tablet'
    - regex: 'YB1-X90[FL]'
      model: 'Yoga Book'
      device: 'tablet'
    - regex: 'TB-J716F'
      model: 'XiaoXin Pad Pro 11.5" (2021)'
      device: 'tablet'
    - regex: 'TB138FC'
      model: 'Xiaoxin Pad Pro 11" (2022)'
      device: 'tablet'
    - regex: 'EveryPad2'
      model: 'Yamada Every Pad 2'
      device: 'tablet'

    - regex: 'S6000(?:[);/ ]|$)'
      model: 'IdeaTab S6000'
      device: 'tablet'
    - regex: 'Lenovo ([ASB][0-9]{4})[A-Z]?\-[EHF]'
      model: 'IdeaTab $1'
      device: 'tablet'
    - regex: 'ThinkPadTablet_(A[0-9]{3})_'
      model: 'ThinkPad Tablet $1'
      device: 'tablet'
    - regex: 'ThinkPad ?Tablet([^;/]*) Build'
      model: 'ThinkPad Tablet$1'
      device: 'tablet'
    - regex: 'Lenovo ?A3300-(?:GV|H)'
      model: 'TAB 2 A7-30'
      device: 'tablet'
    - regex: 'TAB 2 A7-30[HGD]C'
      model: 'TAB 2 A7'
      device: 'tablet'
    - regex: 'TB-8504F'
      model: 'TAB 4 8'
      device: 'tablet'
    - regex: 'TB-8704F'
      model: 'Tab 4 8" Plus'
      device: 'tablet'
    - regex: 'TB-X304X'
      model: 'Tab 4 10.1"'
      device: 'tablet'
    - regex: 'TB-X304F'
      model: 'TAB4 10'
      device: 'tablet'
    - regex: 'TB-X505[FX]'
      model: 'M10'
      device: 'tablet'
    - regex: 'TB-X104[FXL]'
      model: 'E10'
      device: 'tablet'
    - regex: 'Tab2A([0-9]-[0-9]{2}[a-z]?)'
      model: 'TAB 2 A$1'
      device: 'tablet'
    - regex: 'IdeaTab[ \-_]?([a-z0-9]+)'
      model: 'IdeaTab $1'
      device: 'tablet'
    - regex: 'YB-Q501F' # tablet/pc
      model: 'Yoga A12'
      device: 'tablet'
    - regex: 'YT-X705X'
      model: 'Yoga Smart Tab'
      device: 'tablet'
    - regex: 'Yoga Tablet([^;/]+) Build'
      model: 'Yoga Tablet$1'
      device: 'tablet'
    - regex: 'TB-8505[FX]S'
      model: 'Smart Tab M8'
      device: 'tablet'
    - regex: 'TB-8505[FX]|TB-8506F'
      model: 'Tab M8'
      device: 'tablet'
    - regex: 'TB-8705[FX]'
      model: 'Tab M8 FHD'
      device: 'tablet'
    - regex: 'TB-9707F(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Legion Y700'
    - regex: 'Lenovo (TB[0-9]?\-[a-z0-9\-]+) Build'
      model: '$1'
      device: 'tablet'

    - regex: 'L71061'
      model: 'Legion Y90'
    - regex: 'L71091'
      model: 'Legion Y70'
    - regex: 'Lenovo S60-?a'
      model: 'S60'
    - regex: 'Lenovo K30-W(?:[);/ ]|$)'
      model: 'K3'
    - regex: 'L18011(?:[);/ ]|$)'
      model: 'A5'
    - regex: 'L18081(?:[);/ ]|$)'
      model: 'A5s'
    - regex: 'L19111(?:[);/ ]|$)'
      model: 'A7'
    - regex: 'L10041(?:[);/ ]|$)'
      model: 'A8'
    - regex: 'L78121(?:[);/ ]|$)'
      model: 'Z6'
    - regex: 'Z2 Plus'
      model: 'Z2 Plus'
    - regex: 'Z2151'
      model: 'ZUK Edge'
    - regex: 'Z213[12]'
      model: 'ZUK Z2'
    - regex: 'Z2121'
      model: 'ZUK Z2 Pro'
    - regex: 'ZUK[ -_]([^/;]*)(?: Build|\))'
      model: 'ZUK $1'
    - regex: 'K10a40(?:[);/ ]|$)'
      model: 'C2'
    - regex: '(?:k50a40|K50-t5)(?:[);/ ]|$)'
      model: 'K3 Note'
    - regex: 'K(1[30]) Note(?:[);/ ]|$)'
      model: 'K$1 Note'
    - regex: 'A7010(?:a48)?(?:[);/ ]|$)'
      model: 'K4 Note'
    - regex: 'K350t(?:[);/ ]|$)'
      model: 'K5'
    - regex: 'L38011(?:[);/ ]|$)'
      model: 'K5 Play'
    - regex: '(?:L38041|K5 Pro)(?:[);/ ]|$)'
      model: 'K5 Pro'
    - regex: 'L39051(?:[);/ ]|$)'
      model: 'K10 Plus'
    - regex: '(?:A7020a4[08]|L38012|K52e78)(?:[);/ ]|$)'
      model: 'K5 Note'
    - regex: 'L19041(?:[);/ ]|$)'
      model: 'A6 Note'
    - regex: 'K31-t3(?:[);/ ]|$)'
      model: 'K31'
    - regex: 'A6010Pro(?:[);/ ]|$)'
      model: 'A6010 Pro'
    - regex: '(?:A6020a46|Vibe K5 Plus|lineage_A6020)(?:[);/ ]|$)'
      model: 'Vibe K5 Plus'
    - regex: '(?:Lenovo-)?(?:A6020(?:a40|l36)|Vibe K5)(?:[);/ ]|$)'
      model: 'Vibe K5'
    - regex: 'VIBE Z2(?:[);/ ]|$)'
      model: 'Vibe Z2'
    - regex: '(?:VIBE C|A2020a40)(?:[);/ ]|$)'
      model: 'Vibe C'
    - regex: '(?:VIBE X2|X2-(?:X+CU|TO|AP))(?:[);/ ]|$)'
      model: 'Vibe X2'
    - regex: 'X3(?:a40|c[57]0)(?:[);/ ]|$)'
      model: 'Vibe X3'
    - regex: 'Lenovo X3 Lite(?:[);/ ]|$)'
      model: 'Vibe X3 Lite'
    - regex: 'VIBE V7(?:[);/ ]|$)'
      model: 'Vibe V7'
    - regex: 'VIBE S6i Plus(?:[);/ ]|$)'
      model: 'Vibe S6i Plus'
    - regex: 'VIBE[ _]S([23567])i(?:[);/ ]|$)'
      model: 'Vibe S$1i'
    - regex: 'L79031(?:[);/ ]|$)'
      model: 'Legion Pro'
    - regex: 'L70081(?:[);/ ]|$)'
      model: 'Legion 2 Pro'
    - regex: 'k33a48(?:[);/ ]|$)'
      model: 'K6'
    - regex: 'L38043(?:[);/ ]|$)'
      model: 'K9'
    - regex: 'L3808[23](?:[);/ ]|$)'
      model: 'K11'
    - regex: 'P2A42(?:[);/ ]|$)'
      model: 'P2'
    - regex: 'L38031(?:[);/ ]|$)'
      model: 'K5S'
    - regex: 'k53a48(?:[);/ ]|$)'
      model: 'K6 Note'
    - regex: 'K33a42(?:[);/ ]|$)'
      model: 'K6 Power'
    - regex: 'P1ma40(?:[);/ ]|$)'
      model: 'Vibe P1m'
    - regex: 'Vibe P1 Turbo(?:[);/ ]|$)'
      model: 'Vibe P1 Turbo'
    - regex: '(?:P1(?:a42|c72)|Vibe P1)(?:[);/ ]|$)'
      model: 'Vibe P1'
    - regex: 'A2016a40(?:[);/ ]|$)'
      model: 'Vibe B'
    - regex: 'A1010a20(?:[);/ ]|$)'
      model: 'A Plus'
    - regex: '(?:Z90a40|Z90-7)(?:[);/ ]|$)'
      model: 'Vibe Shot'
    - regex: 'S1a40(?:[);/ ]|$)'
      model: 'Vibe S1'
    - regex: 'S1La40(?:[);/ ]|$)'
      model: 'Vibe S1 Lite'
    - regex: 'L78071(?:[);/ ]|$)'
      model: 'Z5s'
    - regex: 'L78011(?:[);/ ]|$)'
      model: 'Z5'
    - regex: 'L78031(?:[);/ ]|$)'
      model: 'Z5 Pro'
    - regex: '(?:Z6 Pro|L78051)(?:[);/ ]|$)'
      model: 'Z6 Pro'
    - regex: 'L78032(?:[);/ ]|$)'
      model: 'Z5 Pro GT'
    - regex: 'L38111(?:[);/ ]|$)'
      model: 'Z6 Youth'
    - regex: 'L58041(?:[);/ ]|$)'
      model: 'S5 Pro'
    - regex: 'L58091(?:[);/ ]|$)'
      model: 'S5 Pro GT'
    - regex: 'L18021(?:[);/ ]|$)'
      model: 'A3'
    - regex: 'PB2-6(?:70M|50[YM])(?:[);/ ]|$)'
      model: 'Phab 2'
    - regex: 'PB1-750M(?:[);/ ]|$)'
      model: 'Phab'
    - regex: 'PB1-770M(?:[);/ ]|$)'
      model: 'Phab Plus'
    - regex: '(S90-A|P70-A)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'IdeaPad ?([^;/]*) Build'
      model: 'IdeaPad $1'
      device: 'tablet'
    - regex: 'd-42A(?:[);/ ]|$)'
      model: 'dtab Compact 42A' # NNT Docomo
      device: 'tablet'

    - regex: 'XT2081-4'
      model: 'K12'
    - regex: 'A2010l36'
      model: 'A2010'
    - regex: 'Lenovo K12 Pro'
      model: 'K12 Pro'
    - regex: 'Lenovo X2(?:-[ER]U)?'
      model: 'X2'

    - regex: 'VR-1541F'  # VR headset
      device: 'wearable'
      model: 'Mirage Solo'

    - regex: 'LENOVO/81W8(?:[);/ ]|$)'
      device: 'desktop'
      model: 'IdeaPad S145-15IIL'
    - regex: 'LENOVO/81MV(?:[);/ ]|$)'
      device: 'desktop'
      model: 'IdeaPad S145-15IWL'
    - regex: 'LENOVO/81SS(?:[);/ ]|$)'
      device: 'desktop'
      model: 'Flex 14API 81SS'
    - regex: 'F0CU0028RK(?:[);/ ]|$)'
      device: 'desktop'
      model: 'IdeaCentre 520S-23IKU'

    - regex: 'Lenovo TAB ?([^/);]*)(?: Build|[;)])'
      model: 'TAB $1'
      device: 'tablet'
    - regex: 'Lenovo ([^/);]*)(?: Build|[;)])'
      model: '$1'
    - regex: '(?:LNV-|Lenovo-)?Lenovo[ \-_]?([a-z0-9_+\-]+)'
      model: '$1'

# Lexand or LEXAND (lexand.ru)
Lexand:
  regex: 'Lexand[ _]|(?:S[BC]7 PRO HD|S5A[1-4]|S4A[1-5]|S6A1|A811|A802|LPH7_Smarty)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'A(811|802)'
      device: 'tablet'
      model: 'A$1'

    - regex: 'S4A1'
      model: 'Vega'
    - regex: 'S4A2'
      model: 'Irida'
    - regex: 'S4A3'
      model: 'Pallada'
    - regex: 'S4A5'
      model: 'Oxygen'
    - regex: 'S4A4 NEON'
      model: 'S4A4 Neon'
    - regex: 'S5A1'
      model: 'Callisto'
    - regex: 'S5A2'
      model: 'Overon'
    - regex: 'S5A3'
      model: 'Capella'
    - regex: 'S5A4'
      model: 'Argon'
    - regex: 'S6A1'
      model: 'Antares'
    - regex: '(S[CB]7) PRO HD'
      device: 'tablet'
      model: '$1 PRO HD'
    - regex: 'LPH7_Smarty'
      model: 'LPH7 Smarty'
    - regex: 'Lexand[ _]([^;/)]+)(?: Build|[;)])'
      model: '$1'

# lexibook
Lexibook:
  regex: '(MFC[0-9]{3}[a-z]{2,})'
  device: 'tablet'
  models:
    # Explicit tablet models
    - regex: 'MFC191FR'
      model: 'Tablet Ultra 3 XL'
    - regex: 'MFC045FR'
      model: 'TabTab'
    - regex: 'MFC163FR'
      model: 'Tablet Master 3'
    - regex: 'MFC142FR'
      model: 'Tablet Kids'
    - regex: 'MFC250FR'
      model: 'Tablet Junior'
    - regex: 'MFC270FR'
      model: 'Tablet Junior Power Touch'
    - regex: 'MFC280FR'
      model: 'Tablet Junior 2'
    - regex: 'MFC156FR'
      model: 'Tablet One'
    - regex: 'MFC155FR'
      model: 'Tablet Master'
    - regex: 'MFC157FR'
      model: 'Tablet Master 2'
    - regex: 'MFC17[05]FR'
      model: 'Tablet Ultra'
    - regex: 'MFC375FR'
      model: 'Tablet Ultra 2'
    - regex: 'MFC162FR'
      model: 'Power Tablet'
    - regex: 'MFC180FR'
      model: 'Tablet Advanced'
    - regex: 'MFC181FR'
      model: 'Tablet Advanced 2'
    - regex: 'MFC500FR'
      model: 'Tablet XL'
    - regex: 'MFC190BBFR'
      model: 'Barbie Tablet'
    - regex: 'MFC195DCFR'
      model: 'Tablet Disney Cars HD'
    - regex: 'MFC195FUFR'
      model: 'Furby Tablet'
    - regex: 'MFC195DPFR'
      model: 'Tablet Disney Princesse HD'
    - regex: 'MFC140FR'
      model: 'LapTab'
    - regex: 'MFC141FR'
      model: 'LapTab 2'

    - regex: '(MFC[0-9]{3}[a-z]{2,})'
      model: '$1'

# LG or LGE (lg.com)
LG:
  regex: '(?<!TECNO )LG|Web0S; Linux/SmartTV|portalmmm/2\.0 (?:KE|KG|KP|L3)|(?:VX[0-9]+|L-0[12]D|L-07C|P713|(LM-[A-Z][0-9]{3}[A-Z]{0,3}(?:\(FGN?\)|\(G\)|\.FN|\.F(?:GN?)?)?)|LM-(X625N1|G820QM[0127])|G Watch)(?:[);/ ]|$)|NetCast|RS98[78]|RS500|VS(?:50[01]|835|876|880|98[05-8]|99[056]|(410|415|425|500|880)PP)|VS820|VS870 4G|Nexsus 5|LML(41[34]D|211B|713D|212V)L|VK810 4G|VK815|X5-LG|L-05[DE]|L-03K|L-01[LJK]|L-52A|L-[45]1A|901LG|A001LG|80[12]LG|402LG|LGT32|L-02K|L-01F|LM-V40|DM-01K|DM-02H|LMX130IM|VS810PP|VS425|VM670|VS930 4G'
  device: 'smartphone'
  models:
    - regex: 'DM-(01K|02H)'
      model: 'Disney Mobile DM-$1'
    - regex: 'LG-D32[015]|LG-?AS323|LG-?LS620'
      model: 'L70'
    - regex: 'LG-?(D315|L31L|F370)'
      model: 'F70'
    - regex: 'LG-D4(?:[01]5|10)'
      model: 'L90'
    - regex: 'LG-D37[35]'
      model: 'L80'
    - regex: 'LG-D340F8'
      model: 'L70 Tri'
    - regex: 'LG-D12[05]'
      model: 'L30'
    - regex: 'LG-D160'
      model: 'L40'
    - regex: 'LG-D107'
      model: 'L20'
    - regex: 'LG-X145'
      model: 'L60'
    - regex: 'LG-X135'
      model: 'L60i'
    - regex: 'LG-D285'
      model: 'L65'
    - regex: 'LM-X210APM'
      model: 'Phoenix 4'
    - regex: 'LG-P505R'
      model: 'Phoenix'
    - regex: 'LM-X210VPP'
      model: 'Zone 4'
    - regex: 'LM-X220PM'
      model: 'Tribute Empire'
    - regex: 'LG-SP200'
      model: 'Tribute Dynasty'
    - regex: 'LGLS675'
      model: 'Tribute 5'
    - regex: 'LG-F570'
      model: 'Band Play'
    - regex: 'VS930 4G'
      model: 'Spectrum II 4G'
    - regex: 'VS980|L-01F|LG-(?:F320[LK]|D80[02]|LS980)'
      model: 'G2'
    - regex: 'LG-D6(?:1[08]|2[05])'
      model: 'G2 Mini'
    - regex: 'LG-(?:D85[012568]|AS990)|(?:LG-)?(?:VS985|LGLS990|LGUS990|LGL24)(?:[);/ ]|$)'
      model: 'G3'
    - regex: 'LG-D722'
      model: 'G3S'
    - regex: 'LG-D693n?|LG-D690n'
      model: 'G3 Stylus'
    - regex: 'LG-(?:D72[23568]|F470K)'
      model: 'G3 Beat'
    - regex: 'LG-F460'
      model: 'G3 Cat. 6'
    - regex: 'LG-D724'
      model: 'G3s'
    - regex: 'LG-?H81[012589]|LG-?[LU]S991|LGV32|LG-F500[LSK]|VS986'
      model: 'G4'
    - regex: 'LG-H525n?'
      model: 'G4c'
    - regex: 'LG-(?:H540|H542|H630)'
      model: 'G4 Stylus'
    - regex: 'LG-H736'
      model: 'G4s'
    - regex: 'LG-H735'
      model: 'G4 Beat'
    - regex: 'LG-H8(?:20|3[01]|5[08]|6[08])|VS987|(?:LG-)?RS988|LG-F700[SKL]|LG-?(?:[LU]S992|AS992)'
      model: 'G5'
    - regex: 'LG-H84[05]'
      model: 'G5 SE'
    - regex: 'VS988|LG-H87(?:[01](?:DS|[SI]|AR)?|[23])|LG-?US997|LGM-G600[SKL]|LG-[AL]S993'
      model: 'G6'
    - regex: 'LM-Q850'
      model: 'G7 Fit'
    - regex: 'LM-Q910'
      model: 'G7 One'
    - regex: 'LG-?(?:L23|D950|F340S)(?:[);/ ]|$)'
      model: 'G Flex'
    - regex: 'LG-(?:H950|F510L)'
      model: 'G Flex 2'
    - regex: 'LG-D68[056]'
      model: 'G Pro Lite'
    - regex: 'LM-G820([NV]|QM[0127]|UMB)?'
      model: 'G8'
    - regex: 'LG-F430L'
      model: 'Gx2'
    - regex: 'LM-G850'
      model: 'G8X ThinQ'
    - regex: 'LM-G810'
      model: 'G8S ThinQ'
    - regex: '901LG(?:[);/ ]|$)'
      model: 'G8X ThinQ'
    - regex: 'LG-H410(?:[);/ ]|$)'
      model: 'Wine Smart H410'
    - regex: 'VS501|LM-X120'
      model: 'K20'
    - regex: 'LGMS395'
      model: 'F60'
    - regex: 'LG-(?:F520[KS]|H788)'
      model: 'AKA'
    - regex: 'LM-K920'
      model: 'K92'
    - regex: 'LGL41C'
      model: 'Ultimate 2'
    - regex: 'LGLS660'
      model: 'Tribute'
    - regex: '(?:LG-)?H50[02]'
      model: 'Magna'
    - regex: 'LGL63BL'
      model: 'Fiesta'
    - regex: 'LGL163BL'
      model: 'Fiesta 2'
    - regex: 'LG-(?:X15[05]|X165g)'
      model: 'Bello 2'
    - regex: 'LG-D33[15]'
      model: 'L Bello'
    - regex: 'LG-D29[05]'
      model: 'L Fino'
    - regex: '(?:LG-)?H343'
      model: 'Risio'
    - regex: '(?:LG-)?H650'
      model: 'Zero'
    - regex: '(?:LG-)?M154'
      model: 'Risio 2'
    - regex: 'LGM-K120[LSK]'
      model: 'X300'
    - regex: 'LG-K120(?:[);/ ]|$)'
      model: 'Spree'
    - regex: 'LGM-X401S'
      model: 'X400'
    - regex: 'LGM-X320[SKL]?(?:[);/ ]|$)'
      model: 'X500'
    - regex: 'LG-F620[KL]'
      model: 'Class'
    - regex: '(?:LG-)?P500H'
      model: 'Optimus One'
    - regex: '(?:LG-)?VS450PP'
      model: 'Optimus Exceed 2'
    - regex: 'LG-(?:E97[57]|F180S|E987)'
      model: 'Optimus G'
    - regex: 'LG-(?:F240[KLS]|E986)'
      model: 'Optimus G Pro'
    - regex: 'LG-E435f?'
      model: 'Optimus L3 II'
    - regex: 'LG-E4(?:70f|40|65f)'
      model: 'Optimus L4 II'
    - regex: 'LG-E4(?:67f|45)'
      model: 'Optimus L4 II Dual'
    - regex: 'LG-E4[56]0'
      model: 'Optimus L5 II'
    - regex: 'LG-(?:E4[17]5f|E410)'
      model: 'Optimus L1 II'
    - regex: 'LG-P875'
      model: 'Optimus F5'
    - regex: 'LG-P655H'
      model: 'Optimus F3'
    - regex: 'LGMS500'
      model: 'Optimus F6'
    - regex: 'LG-US780'
      model: 'Optimus F7'
    - regex: '(L-05[DE])(?:[);/ ]|$)'
      model: 'Optimus it $1'
    - regex: 'LG-L160L(?:[);/ ]|$)'
      model: 'Optimus LTE 2'
    - regex: '(?:P713|LG-P71[0245])(?:[);/ ]|$)'
      model: 'Optimus L7 II'
    - regex: 'L-01D(?:[);/ ]|$)'
      model: 'Optimus LTE L-01D'
    - regex: 'L-02D(?:[);/ ]|$)'
      model: 'PRADA phone L-02D'
    - regex: 'L-07C'
      model: 'Optimus Bright L-07C'
    - regex: '(?:LG-?)?(?:F800[SKL]?|H990|H910(?:PR)?|US996|V34|LS997)(?:[);/ ]|$)'
      model: 'V20'
    - regex: 'LM-Q710(?:\(FGN\)|[\.]?FGN)'
      model: 'Q Stylus Plus'
    - regex: 'LG-LS840'
      model: 'Viper 4G LTE'
    - regex: '801LG'
      model: 'Q Stylus'
    - regex: 'LG-M400'
      model: 'Stylus 3'
    - regex: 'LG-?(?:K520|F720[SL])'
      model: 'Stylus 2'
    - regex: 'LG-(?:K53[05])'
      model: 'Stylus 2 Plus'
    - regex: 'LM-Q[67]10\.FG(?:[);/ ]|$)'
      model: 'Q7'
    - regex: 'LM-(Q72[57][KLS]|Q610.FGN)(?:[);/ ]|$)'
      model: 'Q7+'
    - regex: 'LM-Q815[KSL](?:[);/ ]|$)'
      model: 'Q8+'
    - regex: 'LGM-X800[KL]|LG-H970'
      model: 'Q8'
    - regex: 'LM-Q925[LKS](?:[);/ ]|$)'
      model: 'Q9'
    - regex: 'LM-(?:Q730N|Q620)(?:[);/ ]|$)'
      model: 'Q70'
    - regex: 'LM-Q520N(?:[);/ ]|$)'
      model: 'Q52'
    - regex: 'LGV33(?:[);/ ]|$)'
      model: 'Qua Phone PX'
    - regex: 'LG-MS870'
      model: 'Sprint 4G'
    - regex: 'L-03K(?:[);/ ]|$)'
      model: 'Style'
    - regex: 'L-01L(?:[);/ ]|$)'
      model: 'Style 2'
    - regex: 'LGLS775'
      model: 'Stylo 2'
    - regex: 'VS835(?:[);/ ]|$)'
      model: 'Stylo 2 V'
    - regex: 'LG-?(?:MS550|K55[07])'
      model: 'Stylo 2 Plus'
    - regex: 'L-41A(?:[);/ ]|$)'
      model: 'Style 3'
    - regex: 'LG-?(?:MS63[14]|H63[45]|F560K)(?:[);/ ]|$)'
      model: 'G Stylo'
    - regex: 'LG-?(?:LS777|L84VL|M430|L83BL)(?:[);/ ]|$)'
      model: 'Stylo 3'
    - regex: 'LG-?([TM]P450|M470F?)(?:[);/ ]|$)'
      model: 'Stylo 3 Plus'
    - regex: 'LM-Q710|LML713DL|LG-Q710[AP]L'
      model: 'Stylo 4'
    - regex: '(?:LM-Q720|LGL722DL)(?:[);/ ]|$)'
      model: 'Stylo 5'
    - regex: 'LM-Q730(?:[);/ ]|$)'
      model: 'Stylo 6'
    - regex: 'LM-G710(N|VM)?|LG-G710'
      model: 'G7 ThinQ'
    - regex: 'LG-M153'
      model: 'Fortune'
    - regex: 'LM-X210CM'
      model: 'Fortune 2'
    - regex: 'LM-X410\.FG?(?:[);/ ]|$)'
      model: 'Premier Pro'
    - regex: 'LGL455DL(?:[);/ ]|$)'
      model: 'Premier Pro Plus'
    - regex: 'LML41[34]DL(?:[);/ ]|$)'
      model: 'Premier Pro LTE'
    - regex: 'LM-X525'
      model: 'Q60'
    - regex: 'LM-K315IM'
      model: 'W31'
    - regex: 'LG-?L355DL'
      model: 'K31'
    - regex: 'LGL423DL'
      model: 'Solo LTE'
    - regex: 'LG-F820L'
      model: 'U'
    - regex: 'LM-X210[KLS]'
      model: 'X2'
    - regex: 'LG-(?:K580|F690[LS])'
      model: 'X Cam'
    - regex: 'LG-?K600'
      model: 'X Mach'
    - regex: 'LG-(?:SP320|M32[27]|US601)'
      model: 'X Charge'
    - regex: 'LG-?(?:LS676|L56VL|L53BL|K200)'
      model: 'X Style'
    - regex: 'LG-F740L'
      model: 'X Skin'
    - regex: 'LG-?(?:K500|F650|S02)'
      model: 'X Screen'
    - regex: 'LG-(?:M710|H700|US701)'
      model: 'X Venture'
    - regex: 'LM-X510WM'
      model: 'X Power 3'
    - regex: 'LM-X(?:41[05]K|410S)'
      model: 'X4'
    - regex: 'LM-X(415[LS]|410L)'
      model: 'X4+'
    - regex: 'LM-X410(?:\.FN|\(FG\))'
      model: 'K11'
    - regex: 'LM-X(?:320|410[UP]M)|LGL322DL'
      model: 'K30'
    - regex: 'LMX130IM'
      model: 'W10'
    - regex: 'LM-K310IM'
      model: 'W11'
    - regex: 'LM-X600IM'
      model: 'W30 Pro'
    - regex: 'LM-X440ZMW'
      model: 'W30'
    - regex: 'LM-K610IM'
      model: 'W41'
    - regex: 'LG-H522'
      model: 'Prime Plus 4G'
    - regex: 'LGL58VL'
      model: 'Rabel 2'
    - regex: 'LG-X190'
      model: 'Ray'
    - regex: 'LGLS740'
      model: 'Volt'
    - regex: 'LM-X410'
      model: 'LM-X410'
    - regex: 'LGM-K121'
      model: 'X400'
    - regex: 'LGM-X401L'
      model: 'X401'
    - regex: 'LM-X420N'
      model: 'X4 (2019)'
    - regex: '(?:LG-X230|VS425|LG-M151)(?:[);/ ]|$)'
      model: 'K4'
    - regex: 'LG-K130(?:[);/ ]|$)'
      model: 'K4 LTE'
    - regex: '(?:LG-?)?(?:M160|L57BL)(?:[);/ ]|$)'
      model: 'K4 (2017)'
    - regex: 'LM-X420'
      model: 'K40'
    - regex: 'LM-X430(?:[);/ ]|$)'
      model: 'K40S'
    - regex: 'LM-K410'
      model: 'K41S'
    - regex: 'LG-X220'
      model: 'K5'
    - regex: 'LM-X540'
      model: 'K50S'
    - regex: '(?:802LG|LM-X520)(?:[);/ ]|$)'
      model: 'K50'
    - regex: '402LG'
      model: 'Spray'
    - regex: 'L-02K'
      model: 'JoJo'
    - regex: '(?:LM-X510[KLS]|X5-LG)'
      model: 'X5'
    - regex: 'LM-X625N1'
      model: 'X6'
    - regex: 'LM-X625N'
      model: 'X6 (2019)'
    - regex: 'LGMS210|LG-M210'
      model: 'Aristo'
    - regex: 'LM-X210[G]?'
      model: 'Aristo 2'
    - regex: 'LM-X220(?:[);/ ]|$)'
      model: 'Aristo 3'
    - regex: 'LM-X220N(?:[);/ ]|$)'
      model: 'X2 (2019)'
    - regex: 'LM-V40(?:5|9N|5EBW)?(?:[);/ ]|$)'
      model: 'V40 ThinQ'
    - regex: 'LM-(?:V500N?|V450)(?:[);/ ]|$)'
      model: 'V50 ThinQ'
    - regex: 'LM-V510N'
      model: 'V50S ThinQ'
    - regex: 'LM-Q920N'
      model: 'Q92'
    - regex: 'LM-Q927L'
      model: 'Q9 One'
    - regex: '(?:LG-)?(?:RS987|H90[01]|H96[0218]|VS990|F600[LK]|K428)'
      model: 'V10'
    - regex: 'LG-(?:X240|M200)'
      model: 'K8 (2017)'
    - regex: 'LM-X220QMA'
      model: 'K8s'
    - regex: '(?:LG-)?RS500'
      model: 'K8 4G'
    - regex: '(?:LG-)?VS500'
      model: 'K8 V'
    - regex: 'LM-X212\(G\)|LGUS215'
      model: 'K8 (2018)'
    - regex: '(?:LG-)?(?:VS995|F800K|US999|LS997|H91[058]|H990(?:DS|[NT])?)'
      model: 'V20'
    - regex: '(?:VS996|LG-(?:H933|H93[012]|H930RE|H932PR|[LU]S998|AS998)|LGM-V300[KLS])(?:[);/ ]|$)'
      model: 'V30'
    - regex: 'L-01J(?:[);/ ]|$)'
      model: 'V20 Pro'
    - regex: '(?:L-01K|LGV35|LG-H930DS)(?:[);/ ]|$)'
      model: 'V30 Plus'
    - regex: 'L-51A(?:[);/ ]|$)'
      model: 'V60'
    - regex: '(?:L-52A|LM-G900(?:[NV]|TM)?)(?:[);/ ]|$)'
      model: 'Velvet 5G'
    - regex: 'LM-V700N(?:[);/ ]|$)'
      model: 'Velvet 2 Pro'
    - regex: 'LM-G910'
      model: 'Velvet 4G'
    - regex: '(?:A001LG|LM-V600V?)(?:[);/ ]|$)'
      model: 'V60 ThinQ 5G'
    - regex: '(?:LG-)?VS410PP'
      model: 'Optimus Zone'
    - regex: 'LM-V350[N]?'
      model: 'V35'
    - regex: '(?:LG-)?VS415PP'
      model: 'Optimus Zone 2'
    - regex: '(?:LG-)?VS425PP'
      model: 'Optimus Zone 3'
    - regex: '(?:LG-?)?(?:K100|LS450)'
      model: 'K3'
    - regex: 'LG-AS110|LGUS110'
      model: 'K3 (2017)'
    - regex: '(?:LG-?)?(?:K|MS)33[02]|LG-X210'
      model: 'K7'
    - regex: '(?:LG-?)?(?:K|MS)350'
      model: 'K8'
    - regex: 'VS500PP'
      model: 'K8 V'
    - regex: '(?:LG-?)?(?:K420(?:N)?|K425|F670[KLS]?|K430(?:DS|DSF|DSY)?|K410|MS428)'
      model: 'K10'
    - regex: '(?:LG-)?(?:M250N?|M257PR)'
      model: 'K10 (2017)'
    - regex: '(?:LG-)?M255'
      model: 'K20'
    - regex: '(?:LG-?)?[MT]P260'
      model: 'K20 Plus'
    - regex: 'LM-K200(?:[);/ ]|$)'
      model: 'K22'
    - regex: 'LM-K300(?:[);/ ]|$)'
      model: 'K31'
    - regex: 'LM-K330(?:[);/ ]|$)'
      model: 'K33'
    - regex: 'LM-K420(?:[);/ ]|$)'
      model: 'K42'
    - regex: '(?:LM-K500|LGL555DL)(?:[);/ ]|$)'
      model: 'K51'
    - regex: 'LM-K510(?:[);/ ]|$)'
      model: 'K51S'
    - regex: 'LM-K520(?:[);/ ]|$)'
      model: 'K52'
    - regex: 'LM-K525(?:[);/ ]|$)'
      model: 'K56'
    - regex: 'LM-K526(?:[);/ ]|$)'
      model: 'K56 Plus'
    - regex: 'LM-Q510N(?:[);/ ]|$)'
      model: 'Q51'
    - regex: ' LM-Q310N(?:[);/ ]|$)'
      model: 'Q31'
    - regex: 'LM-Q630N?(?:[);/ ]|$)'
      model: 'Q61'
    - regex: '(?:LG-)?M700(?:N|A|DSK|AN)?|LGM-X600[SLK]|LG-M703|LG-US700'
      model: 'Q6'
    - regex: 'LM-X440'
      model: 'W30'
    - regex: 'LGV36(?:[);/ ]|$)'
      model: 'it'
    - regex: 'LG-M257(?:[);/ ]|$)'
      model: 'Harmony'
    - regex: 'LM-K400(?:[);/ ]|$)'
      model: 'Harmony 4'
    - regex: '(?:LG-?)?(?:K220|LS755|F750K|US610)'
      model: 'X Power'
    - regex: '(?:LG-?)?M320'
      model: 'X Power 2'
    - regex: '(?:LG-)?K371'
      model: 'Phoenix 2'
    - regex: '(?:LG-)?M150'
      model: 'Phoenix 3'
    - regex: '(?:LG-)?F100[SL]'
      model: 'Optimus Vu'
    - regex: '(?:LG-)?F200K'
      model: 'Optimus Vu II'
    - regex: '(?:LG-)?VM670'
      model: 'Optimus V'
    - regex: '(?:LG-)?P880'
      model: 'Optimus 4X HD'
    - regex: '(?:LG-)?(H340n?|H32[04])'
      model: 'Leon'
    - regex: '(?:LG-)?H342|LGMS345'
      model: 'Leon 4G LTE'
    - regex: '(?:LG-)?H4(?:40|2[02])'
      model: 'Spirit'
    - regex: '(?:LG)?C660'
      model: 'Optimus Pro'
    - regex: 'LGL158VL'
      model: 'Rebel 3'
    - regex: 'LML21(?:1B|2V)L'
      model: 'Rebel 4'
    - regex: 'VS876'
      model: 'Lucid 3'
    - regex: 'VS880(PP)?|LG-D690'
      model: 'G Vista'
    - regex: 'VS820'
      model: 'Lancet'
    - regex: 'VS870 4G'
      model: 'Lucid 2'
    - regex: 'VS810PP'
      model: 'Transpyre'
    - regex: 'LG-D838'
      model: 'G Pro 2'

    - regex: 'LM-F100N?(?:[);/ ]|$)'
      device: 'phablet'
      model: 'WING'

    - regex: 'LM-T60[05]'
      model: 'G Pad 5 10.1" FHD'
      device: 'tablet'
    - regex: 'LG-?(?:UK|V)410'
      model: 'G Pad 7.0" LTE'
      device: 'tablet'
    - regex: 'LG-V533'
      model: 'G Pad IV 8.0"'
      device: 'tablet'
    - regex: 'LG-?(?:LK430|V400)'
      model: 'G Pad F 7.0"'
      device: 'tablet'
    - regex: 'LGLK430'
      model: 'G Pad F 7.0"'
      device: 'tablet'
    - regex: 'LG-V49[56]'
      model: 'G Pad F 8.0"'
      device: 'tablet'
    - regex: 'LG-LK460'
      model: 'G Pad F2 8.0"'
      device: 'tablet'
    - regex: 'LG-V4[89]0'
      model: 'G Pad 8.0'
      device: 'tablet'
    - regex: 'LGT01'
      model: 'G Pad 8.0" LTE'
      device: 'tablet'
    - regex: 'LG-V500'
      model: 'G Pad 8.3'
      device: 'tablet'
    - regex: 'LG-V700'
      model: 'G Pad 10.1'
      device: 'tablet'
    - regex: 'LG-V497'
      model: 'G Pad II 8.0"'
      device: 'tablet'
    - regex: 'LG-V935'
      model: 'G Pad II 10.1'
      device: 'tablet'
    - regex: 'LGT02|LG-?V522'
      model: 'G Pad III 8.0'
      device: 'tablet'
    - regex: 'LG-V525(?:S[13])?(?:[);/ ]|$)'
      model: 'G Pad III 8.0" FHD'
      device: 'tablet'
    - regex: 'LG-?[VP]755'
      model: 'G Pad III 10.1" FHD LTE'
      device: 'tablet'
    - regex: 'LG-P530L'
      model: 'G Pad IV 8.0" FHD LTE'
      device: 'tablet'
    - regex: 'VK810'
      model: 'G Pad 8.3 LTE'
      device: 'tablet'
    - regex: 'VK815'
      model: 'G Pad X 8.3'
      device: 'tablet'
    - regex: 'LG-V52[01]'
      model: 'G Pad X 8.0"'
      device: 'tablet'
    - regex: 'LG-V530'
      model: 'G Pad X2 8.0" Plus'
      device: 'tablet'
    - regex: 'LG-?UK750'
      model: 'G Pad X2 10.1"'
      device: 'tablet'
    - regex: 'LGT32'
      model: 'Qua Tad PZ'
      device: 'tablet'
    - regex: 'LGT31'
      model: 'Qua Tad PX'
      device: 'tablet'

    - regex: '\(LGE?, WEBOS[123], (?:wired|wireless)'
      device: 'tv'
      model: 'WebOS TV'
    - regex: 'Web0S; Linux/SmartTV.+\( ?;LGE? ?;(\d{2}\w+) ?;'
      device: 'tv'
      model: '$1'
    - regex: '\(LGE?, ([a-z0-9_ \-]+), (?:wired|wireless)'
      model: '$1'
      device: 'tv'
    - regex: 'Media/BP740'
      model: 'BP740'
      device: 'tv'
    - regex: '47LA790W-ZA'
      model: '47LA790W-ZA'
      device: 'tv'
    - regex: 'webOS.TV'
      device: 'tv'
      model: 'WebOS TV'
    - regex: 'LGE_DLNA_SDK|NetCast'
      device: 'tv'
      model: 'NetCast'

    - regex: 'LG Watch Urbane'
      device: 'wearable'
      model: 'Watch Urbane'
    - regex: 'G Watch( R)?'
      device: 'wearable'
      model: 'G Watch$1'

    # general detections
    - regex: '(LM-[A-Z]{1}[0-9]{3}([A-Z]{1,3})?)'
      model: '$1'
    - regex: 'LGE(?: |-LG| LG-AX|-)([a-z0-9]+)'
      model: '$1'
    - regex: 'FBDV/LG-([a-z0-9]+);FBSV'
      model: '$1'
    - regex: 'LGE;([a-z0-9\-]+)'
      model: '$1'
    - regex: 'LG[ _\-](V90.*|Optimus[ _\-]Pad.*) Build'
      device: 'tablet'
      model: '$1'
    - regex: 'LGM-([^/;]*)( Build|[;)])'
      model: '$1'
    - regex: 'LG(?:/|-LG| |-)?([^/;]*) Build'
      model: '$1'
    - regex: 'LG(?:/|-LG| |-)?([a-z0-9]+)'
      model: '$1'
    - regex: 'LG; ([a-z0-9 ]+)'
      model: '$1'
    - regex: 'portalmmm/2.0 ((?:KE|KG|KP|L3)[a-z0-9]+)'
      model: '$1'
    - regex: '(VX[0-9]+)'
      model: '$1'

    - regex: 'Web0S; Linux/SmartTV'
      device: 'tv'
      model: ''

# Lifemaxx
Lifemaxx:
  regex: 'LIFEMAXX, ([a-z0-9_ \-]+), (?:wired|wireless)'
  device: 'tv'
  model: ''

# Lingwin
Lingwin:
  regex: 'Lingwin[ _\-]'
  device: 'smartphone'
  models:
    - regex: 'Lingwin[ _\-]?([^/;]+) Build'
      model: '$1'
    - regex: 'Lingwin[ _\-]?([^);/ ]+)'
      model: '$1'

# Logic Instrument (https://logic-instrument.com/)
Logic Instrument:
  regex: 'Logic Instrument'
  device: 'smartphone'
  models:
    - regex: 'Fieldbook F1(?:[);/ ]|$)'
      model: 'Fieldbook F1'

# Logicom (logicom-europe.com)
Logicom:
  regex: 'LOGICOM[_ ]|(TAB950|TAB1062|E731|E812|E912|E1031|POWER BOT|La[ _]?Tab[ _]?(?:7[24]|10[57]|11[345]|12[4789]|292|Stand(?:RB)?)|(?:[BCM]|ID|VR)[ _]?BOT[ _]?(?:TAB[ _])?([0-9]+\+?)(?:PLUS)?|KT712A_4\.4|L-?IXIR[0-9]*|L_IXIR_TAB_1047HD|L-ITE|L-EGANTONE(?:-R)?|Le Fizz|L-?EMENT.+|Le[ _]?(?:Up|Connect|Omega|Hop|Hello|Lift|Pulse|Prime|Swipe|Wave|Hola|Moov[2]?|Must(?: 2)?|Starter L|Fit FR|Spark|Prime|Smooth(?: FR)?)|LeFit|logikids4)(?:[);/ ]|$|_)'
  device: 'tablet'
  models:
    - regex: 'La[ _]?Tab[ _]?(7[24]|10[57]|11[345]|127 HD|12[89]|105_P|292|Stand)(?:[);/ ]|$)'
      model: 'La Tab $1'
    - regex: 'LaTabStandRB(?:[);/ ]|$)'
      model: 'La Tab Stand'
    - regex: 'La[_ ]Tab[_ ]124[_ ]HD[_ ]Plus(?:[);/ ]|$)'
      model: 'La Tab 124 HD Plus'
    - regex: 'LOGICOM_LA_TAB_LINK_71'
      model: 'La Tab Link 71'
    - regex: 'logikids4'
      model: 'Logikids 4'
    - regex: 'KT712A_4.4|L-IXIR TAB 701 3G'
      model: 'L-ixir Tab 701 3G'
    - regex: 'L_IXIR_TAB_1047HD'
      model: 'L-ixir Tab 1047 HD'
    - regex: 'LIXIR1041'
      model: 'L-ixir Tab 1041'
    - regex: 'L-?IXIR[ _]TAB[ _]([^);/]+)( Build|[);])'
      model: 'L-ixir Tab $1'
    - regex: 'L-ITE[ _](400M|452|50[46] HD|506R HD|552 HD)(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'L-ite $1'
    - regex: 'L-ITE[ _]([^;/]+) Build'
      model: 'L-ite Tab $1'
    - regex: 'L-?EMENT[ _]?(350|451|40[103]|55[013]|50[15]|500L?)(?:[);/ ]|$)'
      model: 'L-ement $1'
      device: 'smartphone'
    - regex: 'L-?EMENT[ _](?:TAB)[ )]?([^);/]+)(?: Build|[);])'
      model: 'L-ement Tab $1'
    - regex: 'L-?EMENT[ _]?(74[01])(?:[);/ ]|$)'
      model: 'L-ement Tab $1'
    - regex: '(TAB950|TAB1062|E731|E812|E912|E1031)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'POWER BOT'
      model: 'POWER BOT'
    - regex: 'M bot (5[14])'
      device: 'smartphone'
      model: 'M BOT $1'
    - regex: 'VR bot (552) Plus'
      device: 'smartphone'
      model: 'VR BOT $1 Plus'
    - regex: 'VR bot (552)'
      device: 'smartphone'
      model: 'VR BOT $1'
    - regex: '((?:[BCM]|ID|VR))[ _]?BOT[ _]?TAB[ _]([0-9]+(?:PLUS|\+)?)'
      model: '$1 BOT Tab $2'
    - regex: '((?:[BCM]|ID|VR))[ _]?BOT[ _]?((?:TAB[ _])?([0-9]+\+?)(?:PLUS)?)'
      model: '$1 BOT $2'
    - regex: 'Le Lift'
      model: 'Le Lift'
      device: 'smartphone'
    - regex: 'Le Wave'
      model: 'Le Wave'
      device: 'smartphone'
    - regex: 'Le Swipe'
      model: 'Le Swipe'
      device: 'smartphone'
    - regex: 'Le Omega'
      model: 'Le Omega'
      device: 'smartphone'
    - regex: 'Le[ _]Connect'
      model: 'Le Connect'
      device: 'smartphone'
    - regex: 'Le[ _]Pulse'
      model: 'Le Pulse'
      device: 'smartphone'
    - regex: 'Le[ _]Prime'
      model: 'Le Prime'
      device: 'smartphone'
    - regex: 'Le Hola FR(?:[);/ ]|$)'
      model: 'Le Hola FR'
      device: 'smartphone'
    - regex: 'Le[ _]Hola(?:[);/ ]|$)'
      model: 'Le Hola'
      device: 'smartphone'
    - regex: 'LeMoov2(?:[);/ ]|$)'
      model: 'Le Moov 2'
      device: 'smartphone'
    - regex: 'LeMoov(?:[);/ ]|$)'
      model: 'Le Moov'
      device: 'smartphone'
    - regex: 'Le Fit FR(?:[);/ ]|$)'
      model: 'Le Fit FR'
      device: 'smartphone'
    - regex: 'Le[ _]?Fit'
      model: 'Le Fit'
      device: 'smartphone'
    - regex: 'Le Fizz'
      model: 'Le Fizz'
      device: 'smartphone'
    - regex: 'Le Hop(?:[);/ ]|$)'
      model: 'Le Hop'
      device: 'smartphone'
    - regex: 'Le[ _]Hello(?:[);/ ]|$)'
      model: 'Le Hello'
      device: 'smartphone'
    - regex: 'Le Smooth FR(?:[);/ ]|$)'
      model: 'Le Smooth FR'
      device: 'smartphone'
    - regex: 'Le Smooth(?:[);/ ]|$)'
      model: 'Le Smooth'
      device: 'smartphone'
    - regex: 'Le Must 2(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Le Must 2'
    - regex: 'Le Must(?:[);/ ]|$)'
      model: 'Le Must'
      device: 'smartphone'
    - regex: 'Le Starter L(?:[);/ ]|$)'
      model: 'Le Starter L'
      device: 'smartphone'
    - regex: 'Le[ _]Spark(?:[);/ ]|$)'
      model: 'Le Spark'
      device: 'smartphone'
    - regex: 'Le[ _]Prime(?:[);/ ]|$)'
      model: 'Le Prime'
      device: 'smartphone'
    - regex: 'L-EGANTONE-R'
      model: 'L-Egant One R'
      device: 'smartphone'
    - regex: 'L-EGANTONE'
      model: 'L-Egant One'
      device: 'smartphone'
    - regex: 'Le Up(?:[);/ ]|$)'
      model: 'Le Up'
      device: 'smartphone'

# Konka (https://konka.com.ar/)
Konka:
  regex: 'KONKA[_ ]([a-z0-9]+)|(?: R[EU]1|KC516(?: Pro)?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    # Explicit smartphone models
    - regex: 'KC516 Pro'
      model: 'Phoenix Pro'
    - regex: 'KC516'
      model: 'Phoenix'
    - regex: 'E5660S'
      model: 'Viva 5660s'
    - regex: 'W830'
      model: 'Tango 830'
    - regex: 'W(9[67]0)'
      model: 'Expose $1'
    - regex: 'W990'
      model: 'Tuxedo 990'
    - regex: '( R[EU]1)(?:[);/ ]|$)'
      model: '$1'

    - regex: 'KONKA[_ ]([a-z0-9]+)'
      device: 'feature phone'
      model: '$1'

# Konrow (konrow.com)
Konrow:
  regex: 'KONROW[_ ]|(?:KTAB_1003|BIGCOOL|SOFT5|COOLFIVE|COOL-K|Just5|Link5|EASY ?(?:5|62|K55)|EASY_5_EEA|EASY55|CITY55?|Cool55|SKY_?55_EEA|android 11;(?: [\w-]+;)? SWEET5|SWEET 55)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'BIGCOOL(?:[);/ ]|$)'
      model: 'BigCool'
    - regex: 'COOL-K(?:[);/ ]|$)'
      model: 'Cool-K'
    - regex: 'Cool55(?:[);/ ]|$)'
      model: 'Cool 55'
    - regex: 'SOFT5(?:[);/ ]|$)'
      model: 'Soft 5'
    - regex: 'COOLFIVE(?:[);/ ]|$)'
      model: 'Cool Five'
    - regex: 'Just5(?:[);/ ]|$)'
      model: 'Just 5'
    - regex: 'Link5(?:[);/ ]|$)'
      model: 'Link 5'
    - regex: 'EASY ?(55?|62|K55)(?:[);/ ]|$)'
      model: 'Easy $1'
    - regex: 'EASY_5_EEA(?:[);/ ]|$)'
      model: 'Easy 5'
    - regex: 'CITY5(?:[);/ ]|$)'
      model: 'City 5'
    - regex: 'CITY55(?:[);/ ]|$)'
      model: 'City 55'
    - regex: 'SKY_?55_EEA(?:[);/ ]|$)'
      model: 'Sky 55'
    - regex: 'SWEET ?(55?)(?:[);/ ]|$)'
      model: 'Sweet $1'
    - regex: 'KONROW[_ ](701X)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: 'KTAB_1003(?:[);/ ]|$)'
      device: 'tablet'
      model: 'K-Tab 1003'

# K-Lite
K-Lite:
  regex: 'NAVTECH_TOUCHY_F2'
  device: 'smartphone'
  models:
    - regex: 'NAVTECH_TOUCHY_F2'
      model: 'Navtech Touchy F2'

# Karbonn (karbonnmobiles.com)
Karbonn:
  regex: '(?:Browser-)?Karbonn|K9 Kavach 4G|K9[_ ](?:Viraat|Smart)[_ ]Plus|K9 Music 4G|K9 Smart|K9 VIRAAT 4G|Aura (?:Sleek Plus|Power 4G Plus|Note Play|Note 2)|Titanium[ _](?:3D-Plex|Octane Plus|Vista 4G|Jumbo|S360|S1[059]|S35|S20[13]|S22|S[15]|S200 HD|Frames S7|MOGHUL|S9)|MACHFIVE|MACHONE|Sparkle V|Alfa A114 Quad|Quattro[ _]L(?:45|5[025])[ _](?:HD|IPS|VR)|A(?:9|4[05])[ _]Indian|S2052GB|MACH SIX VR|K-Lite F3|Titanium Vista'
  device: 'smartphone'
  models:
    - regex: 'K9 Kavach 4G'
      model: 'K9 Kavach 4G'
    - regex: 'K9 Music 4G'
      model: 'K9 Music 4G'
    - regex: 'K9 Smart Eco Plus'
      model: 'K9 Smart Eco Plus'
    - regex: 'K9 Smart Eco'
      model: 'K9 Smart Eco'
    - regex: 'K9 Smart 4G'
      model: 'K9 Smart 4G'
    - regex: 'K9 Smart Selfie'
      model: 'K9 Smart Selfie'
    - regex: 'K9 Smart Grand'
      model: 'K9 Smart Grand'
    - regex: 'K9 Smart Yuva'
      model: 'K9 Smart Yuva'
    - regex: 'K9[_ ]Smart[_ ]Plus'
      model: 'K9 Smart Plus'
    - regex: 'K9 Smart(?: 1GB)?'
      model: 'K9 Smart'
    - regex: 'A40 Indian Plus'
      model: 'A40 Indian Plus'
    - regex: 'A(9|4[05])[ _]Indian'
      model: 'A$1 Indian'
    - regex: 'K9[_ ]Viraat[_ ]Plus'
      model: 'K9 Viraat Plus'
    - regex: 'Aura Sleek Plus'
      model: 'Aura Sleek Plus'
    - regex: 'Aura Power 4G Plus'
      model: 'Aura Power 4G Plus'
    - regex: 'Aura Note Play'
      model: 'Aura Note Play'
    - regex: 'Aura Note 2'
      model: 'Aura Note 2'
    - regex: 'Alfa A114 Quad'
      model: 'Alfa A114 Quad'
    - regex: 'karbonnK9 Viraat 4G|K9 VIRAAT 4G'
      model: 'K9 Viraat 4G'
    - regex: 'MACHFIVE'
      model: 'Mach Five'
    - regex: 'MACHONEPLUS'
      model: 'Titanium Mach One Plus'
    - regex: 'MACHONE'
      model: 'Titanium Mach One'
    - regex: 'MACH SIX VR'
      model: 'Titanium Mach Six VR'
    - regex: 'Titanium[ _]S([29])[ _]?Plus'
      model: 'Titanium S$1 Plus'
    - regex: 'Titanium[_ ]S(99|360|1[059]|109|35|200 HD|20[13]|22|[15])(?:[);/ ]|$)'
      model: 'Titanium S$1'
    - regex: 'Titanium Vista(?: 4G)?'
      model: 'Titanium Vista 4G'
    - regex: 'Titanium Jumbo 2'
      model: 'Titanium Jumbo 2'
    - regex: 'Titanium Jumbo'
      model: 'Titanium Jumbo'
    - regex: 'Titanium[ _]MOGHUL'
      model: 'Titanium Moghul'
    - regex: 'Titanium Frames S7'
      model: 'Titanium Frames S7'
    - regex: 'Titanium Octane Plus'
      model: 'Titanium Octane Plus'
    - regex: 'Titanium[ _]3D-Plex'
      model: 'Titanium 3D Plex'
    - regex: 'S2052GB'
      model: 'Titanium S250 2GB'
    - regex: 'K-lite F3'
      model: 'K-Lite F3'
    - regex: 'Sparkle V'
      model: 'Sparkle V'
    - regex: 'Quattro[ _]L(5[05])[ _]HD'
      model: 'Quattro L$1 HD'
    - regex: 'Quattro[ _]L(45)[ _]IPS'
      model: 'Quattro L$1 IPS'
    - regex: 'Quattro[ _]L(52)[ _]VR'
      model: 'Quattro L$1 VR'
    - regex: 'Karbonn ([a-z0-9]+) WAP-Browser'
      model: '$1'
      device: 'feature phone'
    - regex: 'WAP Browser-Karbonn ([a-z0-9]+)/'
      model: '$1'
      device: 'feature phone'
    - regex: 'Karbonn_([^;/)]+)'
      model: '$1'
    - regex: 'Karbonn ([^;/)]+)(?: Build|[);])'
      model: '$1'
    - regex: 'Karbonn ([^;/]+)/'
      model: '$1'

# Sagem
Sagem:
  regex: 'SAGEM|portalmmm/2.0 (?:SG|my)'
  device: 'smartphone'
  models:
    - regex: 'SAGEM-(my[a-z0-9\-]+)'
      model: '$1'
      device: 'feature phone'
    - regex: 'SAGEM ([a-z0-9]+)'
      model: '$1'
    - regex: 'SAGEM-([a-z0-9\-]+)'
      model: '$1'
    - regex: 'portalmmm/2.0 ((?:SG|my)[a-z0-9]+)'
      model: '$1'
    - regex: 'DI384_UHD_TKC'
      model: 'DI384'
      device: 'tv'
    - regex: 'DIW350_TP'
      model: 'DIW350'
      device: 'tv'
    - regex: 'Sagemcom_Broadband_SAS,([a-z0-9_ \-]+),(?:wired|wireless)'
      model: '$1'
      device: 'tv'

# Coby Kyros
Coby Kyros:
  regex: '(MID(?:1024|112[56]|1045|1048|106[05]|4331|701[26]|7015A?|70[32]2|703[56]|704[278]|7052|7065|7120|8024|80[47]2|8048|8065|8125|812[78]|9724|974[02])|CTB761)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Mpman (mpmaneurope.com)
Mpman:
  regex: '(?:MPQC|MPDC)[0-9]+|PH(?:150|340|350|360|451|500|520|544|604)|(?:MID(?:7C|74C|82C|84C|801|811|701|711|170|77C|43C|102C|103C|104C|114C)|MP100i OCTA|MP(?:843|717|718|1010|7007|7008|843|888|959|969|QCG(1[01]|77)(?: 3G)?)|MGP7)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '((?:MPQC|MPDC)[0-9]+[^/;)]*)(?: Build|[;)])'
      model: '$1'
    - regex: 'MP100i OCTA(?:[);/ ]|$)'
      model: 'MP100i OCTA'
    - regex: 'MPQCG10(?: 3G)?(?:[);/ ]|$)'
      model: 'MPQCG10 3G'
    - regex: '(MID(?:7C|74C|82C|84C|801|811|701|711|170|77C|43C|102C|103C|104C|114C)|MP(?:843|717|718|1010|7007|7008|843|888|959|969|QCG(?:11|77))|MGP7)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(PH(?:150|340|350|360|451|500|520|544|604))'
      model: '$1'
      device: 'smartphone'

# Majestic (www.newmajestic.com)
Majestic:
  regex: 'MAJESTIC[ _-]|CRONO ?[0-9]+|(?:TAB (?:647|411) 3G|TAB_911_3G|TAB_811_4G|TAB_912_4G|TAB-714|TAB 711 4G|URANO27|URANO 47|URANO 77LTE|PLUTO__?26N?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'URANO 77LTE(?:[);/ ]|$)'
      model: 'Urano 77 LTE'
    - regex: 'URANO ?([24]7)(?:[);/ ]|$)'
      model: 'Urano $1'
    - regex: 'PLUTO__?(26N?)(?:[);/ ]|$)'
      model: 'Pluto $1'
    - regex: 'TAB[ _](647|[478]11|91[12])[ _]([34])G'
      model: 'Tab $1 $2G'
      device: 'tablet'
    - regex: 'TAB-714'
      model: 'Tab 714 WiFi'
      device: 'tablet'
    - regex: 'MAJESTIC[ _]Tab([^;/]+)Build'
      model: 'Tab$1'
      device: 'tablet'
    - regex: 'MAJESTIC[ _]Tab([^);/]+)(?:[);/]|$)'
      model: 'Tab$1'
      device: 'tablet'
    - regex: 'MAJESTIC[ _]([^;/]+)Build'
      model: '$1'
    - regex: 'MAJESTIC[ _]([^);/]+)(?:(?:[);/ ]|$)|$)'
      model: '$1'
    - regex: 'CRONO ?([0-9]+) Build'
      model: 'Crono $1'
    - regex: 'CRONO ?([0-9]+)(?:[);/]|$)'
      model: 'Crono $1'

# Manta Multimedia or Manta
Manta Multimedia:
  regex: 'MSP950(1[245]|2[01])|MSP96017|MSP94501|MSP95009|MSP96002|MSP450[79]|((?<!/)MID713|MID(?:06[SN]|08[S]?|12|13|14|15|701|702|703|704|705(?:DC)?|706[AS]?|707|708|709|711|712|714|717|781|801|802|901|1001|1002|1003|1004(?: 3G)?|1005|1009|1010|7802|9701|9702))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '((?<!/)MID713|MID(?:06[SN]|08[S]?|12|13|14|15|701|702|703|704|705(?:DC)?|706[AS]?|707|708|709|711|712|714|717|781|801|802|901|1001|1002|1003|1004(?: 3G)?|1005|1009|1010|7802|9701|9702))(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: 'MSP95012'
      model: 'Titano 1'
    - regex: 'MSP95014'
      model: 'Titano 3'
    - regex: 'MSP95015'
      model: 'Mezo 2'
    - regex: 'MSP95020'
      model: 'Rocky 2'
    - regex: 'MSP95021'
      model: 'Rocky 3 Pro'
    - regex: 'MSP96017'
      model: 'Forto 2'
    - regex: 'MSP96002'
      model: 'Forto 1'
    - regex: 'MSP94501'
      model: 'Easy Selfie'
    - regex: '(MSP450[79]|MSP95009)(?:[);/ ]|$)'
      model: '$1'

# Masstel (masstel.vn)
Masstel:
  regex: 'Masstel|(?:Juno[ _]Q[567]|Tab10Ultra|Tab(?:[78]|10)Plus|Hapi10)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Masstel[_ ]Juno[_ ]Q5Plus'
      model: 'Juno Q5 Plus'
    - regex: 'Hapi10(?:[);/ ]|$)'
      model: 'Hapi 10'
    - regex: 'Masstel[_ ]N660s'
      model: 'N660S'
    - regex: 'Masstel[_ ]\((M18)\)'
      model: '$1'
    - regex: 'Masstel_Tab7LTE(?:[);/ ]|$)'
      model: 'Tab 7 LTE'
      device: 'tablet'
    - regex: 'Tab10 WiFi(?:[);/ ]|$)'
      model: 'Tab 10 WiFi'
      device: 'tablet'
    - regex: 'Masstel_Tab10_?4G(?:[);/ ]|$)'
      model: 'Tab 10 4G'
      device: 'tablet'
    - regex: 'Tab10Ultra'
      model: 'Tab 10 Ultra'
      device: 'tablet'
    - regex: 'Tab([78]|10)Plus'
      model: 'Tab $1 Plus'
      device: 'tablet'
    - regex: '(?:Masstel[ _])?Tab[ _]?([^/);]+)(?: Build|[);])'
      model: 'Tab $1'
      device: 'tablet'
    - regex: '(?:Masstel[_ ]*)?(Juno[_ ]Q[3567]|Juno_S6|[MNXB]\d+|LT52|N600S)(?:[);/ ]|$)'
      model: '$1'

# Mastertech (https://mastertechhome.com/)
Mastertech:
  regex: 'MASTERTECH,([a-z0-9_ \-]+),(?:wired|wireless)|QC77QPS(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'MASTERTECH,([a-z0-9_ \-]+),(?:wired|wireless)'
      model: '$1'
    - regex: '(QC77QPS)(?:[);/ ]|$)'
      model: '$1'
      device: 'tablet'

# Talius
Talius:
  regex: '(Nitro 551)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Maxwest
Maxwest:
  regex: '(?:Astro[_ ](?:Phablet_9|55?N[_ ]LTE|55R|5 PRO|5[sTX]|[45]P|X4|5_GO_LTE|X55s?|4\.5|4|X5)|Astro6|Virtue Z5|Nitro[_ ](?:4S?|55[RCMN]|5[XRPNM]|[45] GO|4[sN] LTE|55[ _]LTE)|Gravity_(?:55?_GO|6P)|Nitro_Phablet_9s|Nitro Phablet 7N)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Astro[_ ](55?)N[_ ]LTE'
      model: 'Astro $1N LTE'
    - regex: 'Astro[_ ]X55[_ ]LTE'
      model: 'Astro X55 LTE'
    - regex: 'Astro_5_GO_LTE'
      model: 'Astro 5 Go LTE'
    - regex: 'Astro 5 PRO'
      model: 'Astro 5 Pro'
    - regex: 'Astro[_ ](55R|X55s?|5[sTX]|4|X[45]|[45]P)(?:[);/ ]|$)'
      model: 'Astro $1'
    - regex: 'Astro[_ ](4\.5)'
      model: 'Astro $1"'
    - regex: 'Virtue Z5'
      model: 'Virtue Z5'
    - regex: 'Astro[_ ]X4'
      model: 'Astro X4'
    - regex: 'Nitro ([45]) GO'
      model: 'Nitro $1 GO'
    - regex: 'Nitro 4s LTE'
      model: 'Nitro 4s LTE'
    - regex: 'Nitro[ _]4s'
      model: 'Nitro 4s'
    - regex: 'Nitro[_ ]((?:55|4N)[_ ]LTE|4|55[RCNM]|5[XRPNM])'
      model: 'Nitro $1'
    - regex: 'Gravity_(55?)_GO'
      model: 'Gravity $1 GO'
    - regex: 'Gravity_6P'
      model: 'Gravity 6P'

    - regex: 'Astro6'
      device: 'phablet'
      model: 'Astro 6'

    - regex: 'Nitro[_ ]Phablet[_ ](9s|7N)'
      device: 'tablet'
      model: 'Nitro Phablet $1'
    - regex: 'Astro_Phablet_9'
      device: 'tablet'
      model: 'Astro Phablet 9'

# True Slim (ssbphones.com)
True Slim:
  regex: '(SSB-508[ED])(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Maze Speed (ssbphones.com)
Maze Speed:
  regex: '(SSB-(?:500|508)|SSB408D|SSB504R)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'SSB-?(500|508|408D|504R)(?:[);/ ]|$)'
      model: 'SSB-$1'

# Maze (mazephone.com)
Maze:
  regex: '(?:Alpha[_ ]X|Maze Alpha)(?:[);/ ]|$)|(?:Android [78].+ Blade|Comet)(?: Build|[;)])'
  device: 'smartphone'
  models:
    - regex: 'Alpha[_ ]X(?:[);/ ]|$)'
      model: 'Alpha X'
    - regex: 'Maze Alpha(?:[);/ ]|$)'
      model: 'Alpha'
    - regex: '(Blade|Comet)(?:[);/ ]|$)'
      model: '$1'

# Mediacom (mediacomeurope.it)
Mediacom:
  regex: '(?:SmartPad7503G|M-SP10MXA|M-PPAB500|SmartPad970s2(?:3G)?|M[_-][MPS]P[0-9a-z]+|M-IPRO[0-9a-z]+|10edge|1AZ2[TP]| (?:7[BCD]Y|8[AD]Y|1[AB]EC|1CY|1AZ|1[DI]Y4G|1AZ2TW|1EY4G|1HY4G)(?:_eea)?|Azimut 3 Lite|M-WPW801)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'SmartPad7503G(?:[);/ ]|$)'
      model: 'SmartPad 750 3G'
    - regex: 'SmartPad970s23G(?:[);/ ]|$)'
      model: 'SmartPad 970 S2 3G'
    - regex: 'SmartPad970s2(?:[);/ ]|$)'
      model: 'SmartPad 970 S2'
    - regex: 'M-MP84[02]M(?:[);/ ]|$)'
      model: 'SmartPad 8.0" Mobile'
    - regex: 'M-MP940M(?:[);/ ]|$)'
      model: 'SmartPad 9.7" Mobile'
    - regex: 'M-SP10MXA(?:[);/ ]|$)'
      model: 'SmartPad MX 10.1"'
    - regex: 'M-SP8MXA(?:[);/ ]|$)'
      model: 'SmartPad MX 8.0"'
    - regex: 'M-SP7HXAH(?:[);/ ]|$)'
      model: 'SmartPad HX 7.0"'
    - regex: 'M-SP7MXAH?(?:[);/ ]|$)'
      model: 'SmartPad MX 7.0"'
    - regex: 'M-SP8HXAH(?:[);/ ]|$)'
      model: 'SmartPad HX 8.0" HD'
    - regex: 'M-MP(?:710|720|725|726|740)GOx?(?:[);/ ]|$)'
      model: 'SmartPad 7.0" Go'
    - regex: 'M-MP876S2(?:[);/ ]|$)'
      model: 'SmartPad 8.0" S2'
    - regex: 'M-MP8S2[AB]?3G(?:[);/ ]|$)'
      model: 'SmartPad 8.0" S2 3G'
    - regex: 'M-MP(101|102|860|875)S2[BW]?(?:[);/ ]|$)'
      model: 'SmartPad $1 S2'
    - regex: 'M-MP85S23G(?:[);/ ]|$)'
      model: 'SmartPad 875 S2 3G'
    - regex: 'M-SP1AGO3G'
      model: 'SmartPad 10 Go 3G'
    - regex: 'M-SP7xGO3G'
      model: 'SmartPad 10.1" iPro 3G'
    - regex: '1AEC'
      model: 'SmartPad 10 Eclipse'
    - regex: '1[DEHI]Y4G'
      model: 'SmartPad iyo 10 4G'
    - regex: 'M-MP10[45][01]S2(?:[);/ ]|$)'
      model: 'SmartPad 10.1" S2'
    - regex: 'M-MP1S2[AB]3G(?:[);/ ]|$)'
      model: 'SmartPad 10.1" S2 3G'
    - regex: 'M-MP8[24]S4(?:[);/ ]|$)'
      model: 'SmartPad 8.0" S4'
    - regex: 'M-MP8S4[AB]3G(?:[);/ ]|$)'
      model: 'SmartPad 8.0" S4 3G'
    - regex: 'M-MP9S4A3G(?:[);/ ]|$)'
      model: 'SmartPad 9.7" S4 3G'
    - regex: 'M-MP1[02]S4(?:[);/ ]|$)'
      model: 'SmartPad 10.1" S4'
    - regex: 'M-MP7S4A3G(?:[);/ ]|$)'
      model: 'SmartPad 7.0" S4 HD'
    - regex: 'M-MP1040MC?(?:[);/ ]|$)'
      model: 'SmartPad 10.1" HD S4 3G'
    - regex: 'M-MP1S4[AB]3G(?:[);/ ]|$)'
      model: 'SmartPad 10.1" S4 3G'
    - regex: 'M-SP10HXxH(?:[);/ ]|$)'
      model: 'SmartPad 10.1" HX HD'
    - regex: 'M-SP10MXHA(?:[);/ ]|$)'
      model: 'SmartPad 10.1" MX'
    - regex: 'M-SP10MXHL(?:[);/ ]|$)'
      model: 'SmartPad 10.1" MX Lite'
    - regex: 'M-MP8PA3G(?:[);/ ]|$)'
      model: 'SmartPad 8.0" HD Pro 3G'
    - regex: 'M-MP10PA(?:[);/ ]|$)'
      model: 'SmartPad 10.1" HD Pro'
    - regex: 'M-MP10PA3G(?:[);/ ]|$)'
      model: 'SmartPad 10.1" HD Pro 3G'
    - regex: 'M-IPRO([18][01]0)[BW](?:[);/ ]|$)'
      model: 'SmartPad 8.0" HD iPro$1 3G'
    - regex: '1AZ2[TP](?:[);/ ]|$)'
      model: 'SmartPad 10.0" Azimut 2'
    - regex: 'Azimut 3 Lite(?:[);/ ]|$)'
      model: 'SmartPad 10.1" Azimut 3 Lite'
    - regex: '8DY(?:[);/ ]|$)'
      model: 'SmartPad iyo 8"'
    - regex: '10edge(?:[);/ ]|$)'
      model: 'SmartPad 10 Edge'
    - regex: 'M-WPW801(?:[);/ ]|$)'
      model: 'WinPad W801'
    - regex: ' (7[BCD]Y|8AY|1BEC|1CY|1AZ|1AZ2TW)(?:_eea)?(?:[);/ ]|$)'
      model: '$1'

    - regex: '(?:M-MP75S23G|M-MP72[01]M)(?:[);/ ]|$)'
      model: 'SmartPad 7.0" Mobile'
      device: 'phablet'
    - regex: 'M-MP7S2[ABDK]3G(?:[);/ ]|$)'
      model: 'SmartPad 7.0" S2 3G'
      device: 'phablet'
    - regex: 'M-MP5303G(?:[);/ ]|$)'
      model: 'SmartPad Mini Mobile'
      device: 'phablet'
    - regex: 'M-PPxB400(?:[);/ ]|$)'
      model: 'PhonePad Duo B400'
      device: 'phablet'
    - regex: 'M-PPAG550(?:[);/ ]|$)'
      model: 'PhonePad Duo G550'
      device: 'phablet'
    - regex: 'M-PPAB500(?:[);/ ]|$)'
      model: 'PhonePad Duo B500'
      device: 'phablet'
    - regex: 'M-PP2G530(?:[);/ ]|$)'
      model: 'PhonePad Duo G530'
      device: 'phablet'
    - regex: 'M-PPG700(?:[);/ ]|$)'
      model: 'PhonePad Duo G700'
      device: 'phablet'
    - regex: 'M-PPxS531(?:[);/ ]|$)'
      model: 'PhonePad Duo S531'
      device: 'phablet'
    - regex: 'M-PP2S550(?:[);/ ]|$)'
      model: 'PhonePad Duo S550'
      device: 'phablet'
    - regex: 'M-PP2S650C?(?:[);/ ]|$)'
      model: 'PhonePad Duo S650'
      device: 'phablet'
    - regex: 'M-PPxS551U(?:[);/ ]|$)'
      model: 'PhonePad Duo S551U'
      device: 'phablet'

    - regex: 'M-PPAG4(?:[);/ ]|$)'
      model: 'PhonePad Duo G4'
      device: 'smartphone'
    - regex: 'M-PP[ABC]G500(?:[);/ ]|$)'
      model: 'PhonePad Duo G500'
      device: 'smartphone'
    - regex: 'M-PP2S500[BC]?(?:[);/ ]|$)'
      model: 'PhonePad Duo S500'
      device: 'smartphone'
    - regex: 'M[_-]PP[Ax]X(470|510|555|520)U(?:[);/ ]|$)'
      model: 'PhonePad Duo X$1U'
      device: 'smartphone'
    - regex: 'M-PPxG(400|501|[457][PM]?)(?:[);/ ]|$)'
      model: 'PhonePad Duo G$1'
      device: 'smartphone'
    - regex: 'M-PPxS(532[LU]|470|501|5P?|7P?)(?:[);/ ]|$)'
      model: 'PhonePad Duo S$1'
      device: 'smartphone'
    - regex: 'M-PPxG(450)(?:[);/ ]|$)'
      model: 'PhonePad Duo G$1'
      device: 'smartphone'

    - regex: 'M-MP([0-9a-z]+)'
      model: 'SmartPad $1'

# Medion
Medion:
  regex: 'Medion|(?:MD_)?LIFETAB|([SPX]10[0-9]{2}X|E10[45]1X|X5001|P851X|P850X|E691X|E10[56]0X)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:MD_)?LIFETAB[_ ]([a-z0-9]+)'
      device: 'tablet'
      model: 'Lifetab $1'
    - regex: '(E450[46]|E5004|S5004|X5001|E5020|P5015|P500[45]|X6001)(?:[);/ ]|$)'
      model: 'Life $1'
    - regex: '(B5530)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(E10[45]1X)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: '([SPX]10[0-9]{2}X|P851X|P850X|E691X|E10[56]0X)(?:[);/ ]|$)'
      model: 'Lifetab $1'
      device: 'tablet'
    - regex: 'Medion(?: Smartphone)? ([^/;]+) Build'
      model: '$1'
    - regex: 'MEDION, ([a-z0-9_ \-]+), (?:wired|wireless)'
      model: ''
      device: 'tv'

# MEEG
MEEG:
  regex: 'MEEG[ _-]'
  device: 'smartphone'
  models:
    - regex: 'MEEG[ _\-]?([^/;]+) Build'
      model: '$1'
    - regex: 'MEEG[ _\-]?([^);/ ]+)'
      model: '$1'

# Fourel
Fourel:
  regex: '(?:EASYSMARTM3|EasySmart M2)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'EASY ?SMART ?M([32])'
      model: 'Easy Smart M$1'

# Meitu
Meitu:
  regex: '(?:(?<!MI CC 9 )Meitu[2]?|MP1503|MP1512|MP160[235]|MP170[19]|MP171[138]|MP1801)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'MP1503(?:[);/ ]|$)'
      model: 'M6'
    - regex: '(?:MP1512|Meizu M6s)(?:[);/ ]|$)'
      model: 'M6s'
    - regex: 'MP1602(?:[);/ ]|$)'
      model: 'T8'
    - regex: 'MP1605(?:[);/ ]|$)'
      model: 'V6'
    - regex: 'MP1801(?:[);/ ]|$)'
      model: 'V7'
    - regex: 'MP17(?:01|13)(?:[);/ ]|$)'
      model: 'T8s'
    - regex: 'MP1718(?:[);/ ]|$)'
      model: 'T9'
    - regex: 'MP1603(?:[);/ ]|$)'
      model: 'M8'
    - regex: 'MP17(?:09|11)(?:[);/ ]|$)'
      model: 'M8s'
    - regex: 'Meitu2(?:[);/ ]|$)'
      model: '2'
    - regex: 'Meitu (Kiss|[MV]4)(?:[);/ ]|$)'
      model: '$1'

# Memup
Memup:
  regex: 'SlidePad ?([^;/]*) Build|SPNG?[0-9]{2,4}[a-z]{0,2}(?:[);/ ]|$)|SP704CE?|SP-NG708-3G'
  device: 'tablet'
  models:
    - regex: 'SlidePad ?([^;/]*) Build'
      model: 'SlidePad $1'
    - regex: 'SPNG([0-9]{2,4}[a-z]{0,2})(?:[);/ ]|$)'
      model: 'SlidePad NG$1'
    - regex: 'SP-NG(708)-3G(?:[);/ ]|$)'
      model: 'SlidePad NG$1 3G'
    - regex: 'SP704(CE?)'
      model: 'SlidePad 704$1'

# Mecer (mecer.co.za)
Mecer:
  regex: '(MF716\+?|M785|800P3[12]C|101P51C|X1010|M7[67]QF6|M17QF[67]_[43]G)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'M785(?:[);/ ]|$)'
      model: 'Xpress Smartlife M785'
    - regex: 'X1010(?:[);/ ]|$)'
      model: 'X1010'
    - regex: 'M17QF([67])_([34])G(?:[);/ ]|$)'
      model: 'M17QF$1 $2G'
    - regex: '800P31C'
      model: 'Xpress Smartlife 800P31C'
    - regex: '800P32C'
      model: 'Xpress Smartlife 800P32C'
    - regex: '101P51C'
      model: 'Xpress Smartlife 101P51C'
    - regex: 'M7([76])QF6'
      model: 'Xpress Smartlife M7$1QF6'
    - regex: 'MF716\+'
      model: 'Xpress Smartlife M716 Plus'
    - regex: 'MF716'
      model: 'Xpress Smartlife M716'

# Mione
Mione:
  regex: 'Mione[_ ]'
  device: 'smartphone'
  models:
    - regex: 'Hero (\d+)'
      model: 'Hero $1'
    - regex: 'Mione III'
      model: 'Hero 3'
    - regex: 'Mione_PUBG_1'
      model: 'PUBG 1'
    - regex: 'Mione_Pro(?:[);/ ]|$)'
      model: 'Pro'
    - regex: 'Mione[_ ]N10pro(?:[);/ ]|$)'
      model: 'N10 Pro'

# mio
Mio:
  regex: 'MIO(?:/)?([a-z0-9]+)|(?:MOBIX M6|Mio TouchPad 7 Quad Core)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'MOBIX M6(?:[);/ ]|$)'
      model: 'Mobix M6'
    - regex: 'MIO(?:/)?([a-z0-9]+)'
      model: '$1'
    - regex: 'Mio TouchPad 7 Quad Core'
      device: 'tablet'
      model: 'TouchPad 7 Quad Core'

# Miray
Miray:
  regex: 'MIDM[_-]|MPM[_-]|TPM4G_WT8'
  device: 'smartphone'
  models:
    - regex: 'TPM4G_WT8'
      device: 'tablet'
      model: 'TPM4G WT8'
    - regex: 'MIDM[_-]([a-z0-9]+)'
      model: 'MIDM $1'
      device: 'tablet'
    - regex: 'MPM[_-]([a-z0-9]+)'
      model: 'MPM $1'

# mitsubishi
Mitsubishi:
  regex: 'MITSU|portalmmm/[12]\.0 M'
  device: 'feature phone'
  models:
    - regex: 'MITSU/[a-z0-9.]+ \(([a-z0-9]+)\)'
      model: '$1'
    - regex: 'MITSU[ \-]?([a-z0-9]+)'
      model: '$1'
    - regex: 'portalmmm/[12]\.0 (M[a-z0-9]+)'
      model: '$1'

# MIXC
MIXC:
  regex: '(M35|M20|G7106|G7108)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(M[0-9]{1,2})(?:[);/ ]|$)'
      model: '$1'
    - regex: '(G[0-9]{4})(?:[);/ ]|$)'
      model: '$1'

# Mobiola
Mobiola:
  regex: '(MS5[50]X6|MS55X5|MS55L1|MS50L1|MS43A3000|MS45A4000|MS50A4000|MS50A4500|MS50A5000|MS50A6000|MS50B11000|MB-2900 QUATTRO|POLYS[_ ]MS45L1|Wave5)'
  device: 'smartphone'
  models:
    - regex: 'MS50X6'
      model: 'Atmos II'
    - regex: 'POLYS[_ ]MS45L1'
      model: 'Polys MS45L1'
    - regex: 'MS55X6'
      model: 'Atmos Pro II'
    - regex: 'MS55X5'
      model: 'Atmos Pro'
    - regex: 'MS55L1'
      model: 'GAIA'
    - regex: 'MS50L1'
      model: 'Inti'
    - regex: 'MB-2900 QUATTRO'
      model: 'MB-2900 Quattro'
    - regex: 'MS43A3000'
      model: 'MS43A3000'
    - regex: 'MS45A4000'
      model: 'eOn 45'
    - regex: 'MS50A4000'
      model: 'eOn 50'
    - regex: 'MS50A4500'
      model: 'eOn 50 Elegance'
    - regex: 'MS50A5000'
      model: 'eOn 50 Quad 8'
    - regex: 'MS50A6000'
      model: 'eOn 50 Quad 16'
    - regex: 'MS50B11000'
      model: 'MS50B11000'
    - regex: 'Wave5'
      model: 'Wave 5'

# Matrix
Matrix:
  regex: '(?:7116-A5|818 3G|MATRIX GRAVITY|Matrix7116)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'MATRIX GRAVITY'
      device: 'smartphone'
      model: 'Gravity'
    - regex: '(7116-A5|818 3G)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Matrix7116(?:[);/ ]|$)'
      model: '7116 A5'

# Mobicel or Mobicell
Mobicel:
  regex: 'Mobicel[_ ](R1|METRO2)|ASTRO(?: Build|[;)]|$)|(?:Android 8(?:[\d.]*);(?: [\w-]+;)? (?:BEAM|ZOOM)|FAME(?:_DS)?|CLIK|R7_1|(?<!INTENSE )HYPE(?:_X)?|DANDY(?:_ZAM)?|(?<!SMADL )Matrix|VENUS_G|TRENDY PLUS|FENDY_DS|TANGO_LITE|BLINK|BERRY|BERRY[_ ]?(?:[12]|PLUS)|R1PLUS_1|ZOOM-H|REBEL|LEGEND (?:MAX|PRO_1)|HERO_DS|Switch[ _]GO|SWITCH1|switch plus|PULSE_1|TRENDY 2|TRENDY_LITE|FEVER_PLUS(?:_[HJ])?|RIO_(?:SS|ZAM|RW|BN)|Clik plus|(PURE|Fendy) PLUS|Neo[ _]LTE|Titan_1|ZOOM_1|R4 LTE|NEO_1|EPIC_[12]| GLO|EPIC PRO_1|OREO|Neo_Plus)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'EPIC PRO_1'
      model: 'Epic Pro 1'
    - regex: 'Matrix'
      model: 'Matrix'
    - regex: 'LEGEND MAX'
      model: 'Legend Max'
    - regex: 'LEGEND PRO_1'
      model: 'Legend Pro 1'
    - regex: 'BLINK'
      model: 'Blink'
    - regex: 'EPIC_([12])'
      model: 'Epic $1'
    - regex: 'BERRY1'
      model: 'Berry 1'
    - regex: 'BERRY 2'
      model: 'Berry 2'
    - regex: 'TRENDY 2'
      model: 'Trendy 2'
    - regex: 'BERRY[_ ]PLUS'
      model: 'Berry Plus'
    - regex: 'BERRY'
      model: 'Berry'
    - regex: 'TRENDY PLUS'
      model: 'Trendy Plus'
    - regex: 'TRENDY_LITE'
      model: 'Trendy Lite'
    - regex: 'R4 LTE'
      model: 'R4 LTE'
    - regex: 'HYPE_X'
      model: 'Hype X'
    - regex: 'HYPE'
      model: 'Hype'
    - regex: 'DANDY_ZAM'
      model: 'Dandy Zam'
    - regex: 'DANDY'
      model: 'Dandy'
    - regex: 'METRO2'
      model: 'Metro 2'
    - regex: 'ASTRO'
      model: 'Astro'
    - regex: 'VENUS_G'
      model: 'Venus Go'
    - regex: 'TANGO_LITE'
      model: 'Tango Lite'
    - regex: 'FENDY_DS'
      model: 'Fendy DS'
    - regex: 'REBEL'
      model: 'Rebel'
    - regex: 'R7_1'
      model: 'R7'
    - regex: 'OREO'
      model: 'Oreo'
    - regex: 'GLO(?:[);/ ]|$)'
      model: 'GLO'
    - regex: 'Titan_1'
      model: 'Titan 1'
    - regex: 'ZOOM_1'
      model: 'Zoom 1'
    - regex: 'HERO_DS'
      model: 'Hero DS'
    - regex: 'FAME_DS'
      model: 'Fame DS'
    - regex: 'FAME'
      model: 'Fame'
    - regex: 'BEAM'
      model: 'Beam'
    - regex: 'Neo[ _]LTE'
      model: 'Neo LTE'
    - regex: 'NEO_1'
      model: 'Neo'
    - regex: 'Neo_Plus'
      model: 'Neo Plus'
    - regex: 'RIO_(SS|ZAM|RW|BN)'
      model: 'Rio $1'
    - regex: 'switch plus'
      model: 'Switch Plus'
    - regex: 'Switch[ _]GO'
      model: 'Switch Go'
    - regex: 'Switch1'
      model: 'Switch'
    - regex: 'R1PLUS_1'
      model: 'R1 Plus'
    - regex: 'Clik plus'
      model: 'Clik Plus'
    - regex: 'CLIK'
      model: 'Clik'
    - regex: 'PULSE_1'
      model: 'Pulse 1'
    - regex: 'PURE PLUS'
      model: 'Pure Plus'
    - regex: 'Fendy plus'
      model: 'Fendy Plus'
    - regex: 'Mobicel_(R1)'
      model: '$1'
    - regex: 'ZOOM-H'
      device: 'tablet'
      model: 'Zoom H'
    - regex: 'ZOOM'
      device: 'tablet'
      model: 'Zoom'
    - regex: 'FEVER_PLUS_([HJ])'
      device: 'tablet'
      model: 'Fever Plus $1'
    - regex: 'FEVER_PLUS'
      device: 'tablet'
      model: 'Fever Plus'

# iStar
iStar:
  regex: '(I-T60)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Mobiistar
Mobiistar:
  regex: 'Mobiistar|Zumbo[ _]S|(?:PRIME X MAX|X1 (?:Notch|Dual)|E1 Selfie|XQ[_ ]Dual|C1 Lite)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'X1 (Notch|Dual)(?:[);/ ]|$)'
      model: 'X1 $1'
    - regex: 'E1 Selfie(?:[);/ ]|$)'
      model: 'E1 Selfie'
    - regex: 'XQ[_ ]Dual(?:[);/ ]|$)'
      model: 'XQ Dual'
    - regex: 'mobiistar_LAI_Zumbo(?:[);/ ]|$)'
      model: 'Zumbo'
    - regex: 'Zumbo[_ ]S[_ ]2017[_ ]Lite(?:[);/ ]|$)'
      model: 'Lai Zumbo S Lite (2017)'
    - regex: 'Zumbo[_ ]S[_ ]2017(?:[);/ ]|$)'
      model: 'Lai Zumbo S (2017)'
    - regex: 'mobiistar ZUMBO S2( Dual)'
      model: 'Zumbo S2'
    - regex: 'Mobiistar_LAI_Zumbo_J_2017(?:[);/ ]|$)'
      model: 'Lai Zumbo J (2017)'
    - regex: 'Mobiistar_LAI_Zumbo_J(?:[);/ ]|$)'
      model: 'Lai Zumbo J'
    - regex: 'Mobiistar[_ ]Zumbo[_ ]J2'
      model: 'Lai Zumbo J2'
    - regex: 'Mobiistar[_ ]Zumbo[_ ]S2'
      model: 'Zumbo S2'
    - regex: 'mobiistar ZUMBO Power'
      model: 'Zumbo Power'
    - regex: 'mobiistar[ _]LAI[ _]YUNA[ _]([1XCS])'
      model: 'Lai Yuna $1'
    - regex: 'mobiistar LAI Yuki'
      model: 'Lai Yuki'
    - regex: 'mobiistar[ _](?:LAI[ _])?ZORO[ _]([235])'
      model: 'Lai Zoro $1'
    - regex: 'mobiistar[ _]LAI[ _]Zena'
      model: 'Lai Zena'
    - regex: 'mobiistar[ _]LAI[ _]Z([12])?'
      model: 'Lai Z$1'
    - regex: 'mobiistar_ZORO_4G'
      model: 'Zoro 4G'
    - regex: 'mobiistar touch LAI 512'
      model: 'Touch Lai 512'
    - regex: 'mobiistar LAI 504([KC])'
      model: 'Lai 504$1'
    - regex: 'mobiistar LAI Y'
      model: 'Lai Y'
    - regex: 'mobiistar PRIME X 2017'
      model: 'Prime X'
    - regex: 'C1 Lite'
      model: 'C1 Lite'
    - regex: 'mobiistar[ _]PRIME[ _](X1|558|X[ _]Plus|X[ _]Grand) Build'
      model: 'Prime $1'
    - regex: 'PRIME X MAX 2018'
      model: 'Prime X Max'
    - regex: 'mobiistar[ _]KOOL([ _]Lite)?'
      model: 'Kool$1'
    - regex: 'mobiistar KAT 452 Build'
      model: 'Kat 452'
    - regex: 'mobiistar_LAI_YOLLO Build'
      model: 'Lai Yollo'
    - regex: 'Mobiistar[ _]([^;/)]+)(?: Build|[;)])'
      model: '$1'

# Mobile Kingdom
Mobile Kingdom:
  regex: 'GENESIS_126(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Génesis 126'

# MSI (msi.com)
MSI:
  regex: 'Primo ?(?:9[13]|81|76)|Enjoy 7 Plus'
  device: 'tablet'
  models:
    # explicit tablet models
    - regex: 'Primo ?(9[13]|76|81)'
      model: 'Primo $1'
    - regex: 'Enjoy 7 Plus'
      model: 'Enjoy 7 Plus'

# MLLED
MLLED:
  regex: 'MLLED[ _]'
  device: 'smartphone'
  models:
    - regex: 'MLLED[ _]([^;/]+)Build'
      model: '$1'
    - regex: 'MLLED[ _]([^);/]+)(?:[);/]|$)'
      model: '$1'

# Mobistel
Mobistel:
  regex: '(Cynus[ _][^/;)]+)( Build|\))'
  device: 'smartphone'
  model: '$1'

# MobiIoT (https://mobi-iot.com/)
MobiIoT:
  regex: '(?:MobiGo2|MobiPrint 4\+)(?:[);/ ]|$)'
  device: 'peripheral'
  models:
    - regex: 'MobiGo2(?:[);/ ]|$)'
      model: 'MobiGo 2'
    - regex: 'MobiPrint 4\+(?:[);/ ]|$)'
      model: 'MobiPrint 4 Plus'

# Mecool
Mecool:
  regex: 'Mecool[ _-]|(?:KM9 ?PRO|BB2 PRO|K[I]{1,3} PRO|KI PLUS|KM9_TV_BOX|M8SPROW|M8S (?:PLUS|PRO) (?:DVB|[LW]|PLUS)|M8S (?:MAX|PRO)| KM[13569])(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'KM9 ?PRO(?:[);/ ]|$)'
      model: 'KM9 Pro'
    - regex: 'KM9_TV_BOX(?:[);/ ]|$)'
      model: 'KM9 TV Box'
    - regex: 'BB2 PRO(?:[);/ ]|$)'
      model: 'BB2 Pro'
    - regex: '(K[I]{1,3}) PRO(?:[);/ ]|$)'
      model: '$1 Pro'
    - regex: 'KI PLUS(?:[);/ ]|$)'
      model: 'KI Plus'
    - regex: 'M8SPROW(?:[);/ ]|$)'
      model: 'M8S Pro W'
    - regex: 'M8S PLUS DVB(?:[);/ ]|$)'
      model: 'M8S Plus DVB'
    - regex: 'M8S PLUS ([LW])(?:[);/ ]|$)'
      model: 'M8S Plus $1'
    - regex: 'M8S PRO ([LW])(?:[);/ ]|$)'
      model: 'M8S Pro $1'
    - regex: 'M8S PRO PLUS(?:[);/ ]|$)'
      model: 'M8S Pro Plus'
    - regex: 'M8S PRO(?:[);/ ]|$)'
      model: 'M8S Pro'
    - regex: 'M8S MAX(?:[);/ ]|$)'
      model: 'M8S Max'
    - regex: ' KM(\d+)(?:[);/ ]|$)'
      model: 'KM$1'
    - regex: 'Mecool[ _-]([^/);]+)(?: Build|[;)])'
      model: '$1'

# Modecom
Modecom:
  regex: 'Modecom|Free(?:Way )?Tab|xino z[\d]+ x[\d]+'
  device: 'tablet'
  models:
    - regex: 'xino Z([\d]+) X([\d]+)'
      model: 'Xino Z$1 X$2'
      device: 'smartphone'

    - regex: 'FreeTab[ _\-]?([^/;]+)? Build'
      model: 'FreeTab $1'
    - regex: 'FreeTab[ _\-]?((?!Build)[^);/ ]+)?'
      model: 'FreeTab $1'
    - regex: 'FreeWay Tab[ _\-]?([^/;]+) Build'
      model: 'FreeWay Tab $1'
    - regex: 'FreeWay Tab[ _\-]?((?!Build)[^);/ ]+)'
      model: 'FreeWay Tab $1'

# Mofut
Mofut:
  regex: 'Mofut'
  device: 'smartphone'
  models:
    - regex: 'Mofut[ _\-]?([^/;]+) Build'
      model: '$1'
    - regex: 'Mofut[ _\-]?((?!Build)[^);/ ]+)'
      model: '$1'

# BrightSign (brightsign.biz)
BrightSign:
  regex: 'BrightSign'
  device: 'tv'
  models:
    - regex: '(HD1023|XD233|XD230|XD1030|XD1132|XT114[34]|4K1142|LS424)'
      model: '$1'

# Verssed
Verssed:
  regex: 'MotionE11(?:[);/ ]|$)'
  device: 'tablet'
  model: 'Motion E1.1'

# Torque
Torque:
  regex: '(?:EGO[ _](?:Max[ _]S|Surf[_ ][iS]|Phab 3G)|DROIDZ (?:Drive\+|ATOM [SX]|Portal(?: X)?|Swivel|Smart|Trend|Force|Span|Play|Blast|Sport|Excel|Motion|Sky 3g|Rotate|Duo(?: Slim)?|Dash(?: X)?|Quad|Match TV|Beat TV|Avatar TV|Easy|Push i|Edge\+))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'DROIDZ (Duo(?: Slim)?|Dash(?: X)?|Push i|Edge\+|Drive\+|Portal(?: X)?)'
      device: 'tablet'
      model: 'DROIDZ $1'
    - regex: 'DROIDZ Sky 3g'
      model: 'DROIDZ Sky 3G'
    - regex: 'DROIDZ ATOM S'
      model: 'DROIDZ Atom S'
    - regex: 'DROIDZ (Swivel|Trend|Force|Span|Smart|Atom X|Blast|Sport|Quad|Beat TV|Avatar TV|Match TV|Easy|Excel|Play|Rotate|Motion)'
      model: 'DROIDZ $1'
    - regex: 'EGO[ _](Max[ _]S|Surf[_ ][iS])'
      model: 'EGO $1'
    - regex: 'EGO Phab 3G'
      device: 'phablet'
      model: 'EGO Phab 3G'

# motorola
Motorola:
  regex: 'MOT(?!TO)|(?<!AN)DROID ?(?:Build|[a-z0-9]+)|portalmmm/2.0 (?:E378i|L6|L7|v3)|XOOM [^;/]*Build|XT1941-2|XT1924-9|XT1925-10|XT1965-6|XT1970-5|XT1799-2|XT1021|XT2171-3|XT2071-4|XT2201-6|XT2175-2|XT2125-4|XT2143-1|XT2153-1|XT2201-2|XT2241-1|XT2137-2|XT1710-08|XT180[3-5]|XT194[23]-1|XT1929-15|(?<!Xtreme )(?:XT|MZ|MB|ME)[0-9]{3,4}[a-z]?(?:\(Defy\)|-0[1-5])?(?:[;]? Build|\))|lineage_osprey|ATRIX HD'
  device: 'smartphone'
  models:
    # Explicit feature phone models
    - regex: 'MOT-V360'
      model: 'V360'
      device: 'feature phone'
    # Explicit tablets models
    - regex: 'moto tab g70'
      device: 'tablet'
      model: 'Moto Tab G70'
    # Explicit smartphone models
    - regex: '(?:MOT-|Motorola-)?XT300'
      model: 'Spice'
    - regex: '(?:MOT-|Motorola-)?XT30[35]'
      model: 'Motosmart ME'
    - regex: '(?:MOT-|Motorola-)?XT31[16]'
      model: 'Fire'
    - regex: '(?:MOT-|Motorola-)?XT2125-4'
      model: 'Edge S'
    - regex: '(?:MOT-|Motorola-)?XT2175-2'
      model: 'Edge S30'
    - regex: 'motorola edge 30 ultra'
      model: 'Edge 30 Ultra'
    - regex: 'motorola edge 30 neo'
      model: 'Edge 30 Neo'
    - regex: '(?:MOT-|Motorola-)?XT2143-1'
      model: 'Edge 20'
    - regex: '(?:MOT-|Motorola-)?XT2153-1'
      model: 'Edge S Pro'
    - regex: '(?:MOT-|Motorola-)?XT32[01]'
      model: 'Defy Mini'
    - regex: '(?:MOT-|Motorola-)?XT3(?:89|90)'
      model: 'Motosmart'
    - regex: '(?:MOT-|Motorola-)?XT502'
      model: 'Quench'
    - regex: '(?:MOT-|Motorola-)?XT531'
      model: 'Fire XT'
    - regex: '(?:MOT-|Motorola-)?XT535'
      model: 'Defy'
    - regex: '(?:MOT-|Motorola-)?XT55[567]C?'
      model: 'Defy XT'
    - regex: '(?:MOT-|Motorola-)?XT603'
      model: 'Admiral'
    - regex: '(?:MOT-|Motorola-)?XT610'
      model: 'Droid Pro'
    - regex: '(?:MOT-|Motorola-)?XT615'
      model: 'Motoluxe'
    - regex: '(?:MOT-|Motorola-)?XT621'
      model: 'Primus'
    - regex: '(?:MOT-|Motorola-)?XT626'
      model: 'IronRock'
    - regex: '(?:MOT-|Motorola-)?XT682'
      model: 'Atrix'
    - regex: '(?:MOT-|Motorola-)?XT685'
      model: 'Motoluxe Dual-SIM'
    - regex: '(?:MOT-|Motorola-)?XT687'
      model: 'Atrix TV'
    - regex: '(?:MOT-|Motorola-)?Atrix HD'
      model: 'Atrix HD'
    - regex: '(?:MOT-|Motorola-)?XT720'
      model: 'Milestone'
    - regex: '(?:MOT-|Motorola-)?XT800W'
      model: 'Glam'
    - regex: '(?:MOT-|Motorola-)?XT860'
      model: 'Milestone 3'
    - regex: '(?:MOT-|Motorola-)?XT881'
      model: 'Electrify 2'
    - regex: '(?:MOT-|Motorola-)?XT882'
      model: 'Moto XT882'
    - regex: '(?:MOT-|Motorola-)?XT88[56]'
      model: 'Droid RAZR V'
    - regex: '(?:MOT-|Motorola-)?XT890'
      model: 'Droid RAZR i'
    - regex: '(?:MOT-|Motorola-)?XT894'
      model: 'Droid 4'
    - regex: '(?:MOT-|Motorola-)?XT897'
      model: 'Photon Q'
    - regex: '(?:MOT-|Motorola-)?XT901'
      model: 'Electrify M'
    - regex: '(?:MOT-|Motorola-)?XT90[567]'
      model: 'Droid RAZR M'
    - regex: '(?:MOT-|Motorola-)?XT910S?'
      model: 'Droid RAZR'
    - regex: '(?:MOT-|Motorola-)?XT91[4568]'
      model: 'Droid RAZR D1'
    - regex: '(?:MOT-|Motorola-)?XT9(?:19|20)'
      model: 'Droid RAZR D3'
    - regex: '(?:MOT-|Motorola-)?XT925'
      model: 'Droid RAZR HD'
    - regex: '(?:MOT-|Motorola-)?XT912'
      model: 'Droid RAZR Maxx'
    - regex: 'moto g52j 5G'
      model: 'Moto G52j 5G'
    - regex: '(?:MOT-|Motorola-)?(?:XT102[12]|XT830C|XT15[12]4|XT152[67])' # 2015
      model: 'Moto E'
    - regex: 'Moto E \(XT2052DL\)'
      model: 'Moto E (2020)'
    - regex: '(?:MOT-|Motorola-)?XT1706'
      model: 'Moto E3 Power'
    - regex: 'MotoE2\(4G-LTE\)'
      model: 'Moto E2 (4G-LTE)'
    - regex: '(?:MOT-|Motorola-)?XT1924-9'
      model: 'Moto E5 Plus'
    - regex: 'moto e\(?([0-9])\)? plus'
      model: 'Moto E$1 Plus'
    - regex: 'Moto E([0-9]) Play'
      model: 'Moto E$1 Play'
    - regex: 'moto e6 \(XT2005DL\)'
      model: 'Moto E6 (XT2005DL)'
    - regex: 'moto e5 cruise(?:[);/ ]|$)'
      model: 'Moto E5 Cruise'
    - regex: 'moto e5 supra(?:[);/ ]|$)'
      model: 'Moto E5 Supra'
    - regex: 'Moto E5 go(?:[);/ ]|$)'
      model: 'Moto E5 Go'
    - regex: 'Moto E\(?(\di?)\)? Power(?:[);/ ]|$)'
      model: 'Moto E$1 Power'
    - regex: 'Moto E\(?((?:[567]|22)i?)\)?(?:[);/ ]|$)'
      model: 'Moto E$1'
    - regex: 'Moto E\(?([567])s\)?(?:[);/ ]|$)'
      model: 'Moto E$1s'
    - regex: 'Moto E(\d+)\(?s\)?'
      model: 'Moto E$1s'
    - regex: 'Moto E(?: Build|[;)])'
      model: 'Moto E'
    - regex: '(?:MOT-|Motorola-)?XT1030'
      model: 'Droid Mini'
    - regex: '(?:MOT-|Motorola-)?XT1565'
      model: 'Droid Maxx 2'
    - regex: '(?:MOT-|Motorola-)?XT1096'
      model: 'Moto X2'
    - regex: '(?:MOT-|Motorola-)?XT175[046]'
      model: 'Moto C'
    - regex: '(?:MOT-|Motorola-)?XT172[135]'
      model: 'Moto C Plus'
    - regex: 'Moto G4 Plus'
      model: 'Moto G4 Plus'
    - regex: '(?:MOT-|Motorola-)?XT1254'
      model: 'Droid Turbo'
    - regex: '(?:MOT-|Motorola-)?XT10(?:28|3[12349]|68|69)|lineage_osprey'
      model: 'Moto G'
    - regex: '(?:MOT-|Motorola-)?XT106[34]'
      model: 'Moto G2'
    - regex: '(?:MOT-|Motorola-)?g\(?(\d+)\)? 5G'
      model: 'Moto G$1 5G'
    - regex: '(?:MOT-|Motorola-)?XT1609'
      model: 'Moto G4 Play'
    - regex: '(?:MOT-|Motorola-)?XT180[1-6]|Moto G ?5S Plus|Moto G \(5S\) Plus'
      model: 'Moto G5s Plus'
    - regex: '(?:MOT-|Motorola-)?XT1799-2|Moto G \(5S\)'
      model: 'Moto G5s'
    - regex: '(?:MOT-|Motorola-)?XT168[57]'
      model: 'Moto G5 Plus'
    - regex: '(?:MOT-|Motorola-)?XT167[06]' #XT1671 XT1677
      model: 'Moto G5'
    - regex: '(?:MOT-|Motorola-)?XT1925-10'
      model: 'Moto G6'
    - regex: '(?:MOT-|Motorola-)?XT1965-6'
      model: 'Moto G7 Plus'
    - regex: 'XT2137-2'
      model: 'Moto G50'
    - regex: 'XT2171-3'
      model: 'Moto G51'
    - regex: '(?:MOT-|Motorola-)?(?:XT10(?:49|5[23568]|6[04]|9[23457])|XT1093)'
      model: 'Moto X'
    - regex: '(?:MOT-|Motorola-)?XT156[234]|Moto X Play(?:[);/ ]|$)'
      model: 'Moto X Play'
    - regex: '(?:MOT-|Motorola-)?XT157[02]'
      model: 'Moto X Style'
    - regex: '(?:MOT-|Motorola-)?XT1575'
      model: 'Moto X Pure Edition'
    - regex: '(?:MOT-|Motorola-)?XT158[01]'
      model: 'Moto X Force'
    - regex: '(?:MOT-|Motorola-)?XT1080'
      model: 'Droid Ultra'
    - regex: '(?:MOT-|Motorola-)?XT1585'
      model: 'Droid Turbo 2'
    - regex: '(?:MOT-|Motorola-)?XT1650(?:-05)?'
      model: 'Moto Z'
    - regex: 'moto z4(?:[);/ ]|$)'
      model: 'Moto Z4'
    - regex: 'Moto Z3 Play(?:[);/ ]|$)'
      model: 'Moto Z3 Play'
    - regex: '(?:MOT-|Motorola-)?XT1635(?:-0[1-3])?'
      model: 'Moto Z Play'
    - regex: '(?:MOT-|Motorola-)?XT1710-(?:-0[28])?'
      model: 'Moto Z2 Play'
    - regex: '(?:MOT-|Motorola-)?XT1789-05|Moto Z2 Force(?:[);/ ]|$)'
      model: 'Moto Z2 Force'
    - regex: '(?:MOT-|Motorola-)?XT1929-15|moto z3(?:[);/ ]|$)'
      model: 'Moto Z3'
    - regex: '(?:MOT-|Motorola-)?XT166[23]'
      model: 'Moto M'
    - regex: '(?:MOT-|Motorola-)?XT2241-1'
      model: 'Moto X30 Pro'
    - regex: '(?:MOT-|Motorola-)?XT2201-6'
      model: 'Moto X30'
    - regex: '(?:MOT-|Motorola-)?XT1943-1'
      model: 'P30'
    - regex: '(?:MOT-|Motorola-)?XT1941-2'
      model: 'P30 Play'
    - regex: '(?:MOT-|Motorola-)?XT1942-1|P30 Note(?:[);/ ]|$)'
      model: 'P30 Note'
    - regex: '(?:MOT-|Motorola-)?edge plus'
      model: 'Edge Plus'
    - regex: 'XT2201-2'
      model: 'Edge X30'
    - regex: '(?:MOT-|Motorola-)?edge ([23]0) fusion'
      model: 'Edge $1 Fusion'
    - regex: '(?:MOT-|Motorola-)?edge 20 lite'
      model: 'Edge 20 Lite'
    - regex: '(?:MOT-|Motorola-)?edge (\d+) pro'
      model: 'Edge $1 Pro'
    - regex: '(?:MOT-|Motorola-)?edge 5G UW \(2021\)'
      model: 'Edge 5G UW (2021)'
    - regex: '(?:MOT-|Motorola-)?edge (\d+)'
      model: 'Edge $1'
    - regex: '(?:MOT-|Motorola-)?edge \(2021\)'
      model: 'Edge (2021)'
    - regex: '(?:MOT-|Motorola-)?edge'
      model: 'Edge'
    - regex: '(?:MOT-|Motorola-)?one vision plus'
      model: 'One Vision Plus'
    - regex: '(?:MOT-|Motorola-)?(?:XT1970-5|one vision)'
      model: 'One Vision'
    - regex: '(?:MOT-|Motorola-)?one power'
      model: 'One Power'
    - regex: '(?:MOT-|Motorola-)?one hyper'
      model: 'One Hyper'
    - regex: '(?:MOT-|Motorola-)?one zoom'
      model: 'One Zoom'
    - regex: '(?:MOT-|Motorola-)?one fusion\+'
      model: 'One Fusion Plus'
    - regex: '(?:MOT-|Motorola-)?one fusion'
      model: 'One Fusion'
    - regex: 'motorola one action'
      model: 'One Action'
    - regex: 'motorola one macro'
      model: 'One Macro'
    - regex: 'motorola one 5G UW ace'
      model: 'One 5G UW Ace'
    - regex: 'motorola one 5G UW'
      model: 'One 5G UW'
    - regex: 'motorola one 5G ace'
      model: 'One 5G Ace'
    - regex: 'motorola one vision'
      model: 'One Vision'
    - regex: 'moto g stylus \(XT2115DL\)'
      model: 'Moto G Stylus (XT2115DL)'
    - regex: 'moto g stylus \((202[12])\)'
      model: 'Moto G Stylus ($1)'
    - regex: 'moto g stylus 5G \((2022)\)' #gen-2
      model: 'Moto G Stylus 5G ($1)'
    - regex: 'moto g stylus 5G'
      model: 'Moto G Stylus 5G'
    - regex: 'moto g stylus'
      model: 'Moto G Stylus'
    - regex: 'moto g play \(XT2093DL\)'
      model: 'Moto G Play (XT2093DL)'
    - regex: 'moto g play \(2021\)'
      model: 'Moto G Play (2021)'
    - regex: 'moto g power \(XT2041DL\)'
      model: 'Moto G Power'
    - regex: 'moto g power \(2021\)'
      model: 'Moto G Power (2021)'
    - regex: 'moto g power \(2022\)'
      model: 'Moto G Power (2022)'
    - regex: 'moto g power'
      model: 'Moto G Power'
    - regex: 'moto g pro'
      model: 'Moto G Pro'
    - regex: 'moto g pure'
      model: 'Moto G Pure'
    - regex: 'moto g fast'
      model: 'Moto G Fast'
    - regex: 'moto g 5G plus'
      model: 'Moto G 5G Plus'
    - regex: 'moto g 5G \(2022\)'
      model: 'Moto G 5G (2022)'
    - regex: 'moto g 5G'
      model: 'Moto G 5G'
    - regex: 'moto g\(?40\)? fusion'
      model: 'Moto G40 Fusion'
    - regex: 'moto g\(?60\)?s'
      model: 'Moto G60s'
    - regex: 'moto g(\d+)\((\w)\)'
      model: 'Moto G$1$2'

    - regex: 'moto g\(([0-9]+)\) \(XT1925DL\)'
      model: 'Moto G$1 (XT1925DL)'
    - regex: 'moto g\(([0-9]+)\) forge'
      model: 'Moto G$1 Forge'
    - regex: 'moto g\(([0-9]+)\) optimo \(XT1952DL\)'
      model: 'Moto G$1 Optimo (XT1952DL)'
    - regex: 'moto g\(([0-9]+)\) optimo maxx\(XT1955DL\)'
      model: 'Moto G$1 Optimo Maxx (XT1955DL)'
    - regex: 'moto g\(([0-9])\) power lite'
      model: 'Moto G$1 Power Lite'
    - regex: 'moto g\(([0-9]|10)\) power'
      model: 'Moto G$1 Power'
    - regex: 'moto g\(([0-9])\) supra'
      model: 'Moto G$1 Supra'
    - regex: 'moto g\(([0-9])\) plus'
      model: 'Moto G$1 Plus'
    - regex: 'moto g\(([0-9]+)\) play'
      model: 'Moto G$1 Play'
    - regex: 'moto g\(([0-9]+)\)'
      model: 'Moto G$1'
    - regex: 'moto g(\d+)(?:[);/ ]|$)'
      model: 'Moto G$1'
    - regex: 'moto e\(?([0-9]+)\)?(?: Build|[;)])'
      model: 'Moto E$1'
    - regex: 'moto x\(?(4+)\)?(?: Build|[;)])'
      model: 'Moto X$1'
    - regex: 'moto(?:rola)? one 5G'
      model: 'One 5G'
    - regex: 'Moto MAXX|XT1225'
      model: 'Moto Maxx'

    - regex: 'Moto ([CGEXZ]) ?\(([a-z0-9]+)\)( Plus| Play)?'
      model: 'Moto $1$2$3'
    - regex: 'Moto ?([CGEXZ])([0-9]+)( Plus| Play)?'
      model: 'Moto $1$2$3'
    - regex: '(?:Motorola-)?Moto[ _]?([CGEXZ])([ _](?:Plus|Play))?'
      model: 'Moto $1$2'
    - regex: 'MotoroiX'
      model: 'MotoroiX'

    - regex: 'Moto 360'
      device: 'wearable'
      model: 'Moto 360'
    - regex: 'Moto(?:rola)?[- _]F100'
      device: 'wearable'
      model: 'Moto ACTV'

    - regex: 'XT2071-4'
      model: 'RAZR 5G'
    - regex: 'razr \(2020\)'
      model: 'RAZR (2020)'
    - regex: 'MOTORAZR[ _-]([a-z0-9]+)'
      model: 'RAZR $1'
    - regex: 'MOTORIZR[ _\-]([a-z0-9]+)'
      model: 'RIZR $1'
    - regex: 'Motorola[ _-]([^/);]+)(?: Build|[);])'
      model: '$1'
    - regex: 'Moto[ _-]([^/);]+)(?: Build|[);])'
      model: '$1'
    - regex: 'MOT(?!OROLA)[O]?[_-]?([a-z0-9.]+)'
      model: '$1'
    - regex: '(?<!AN)DROID ?([a-z0-9 ]*) Build'
      model: 'DROID $1'
    - regex: '(?<!AN)DROID ?([a-z0-9]+)'
      model: 'DROID $1'
    - regex: 'portalmmm/2.0 ((?:E378i|L6|L7|V3)[a-z0-9]+)'
      model: '$1'
    - regex: '(XOOM [^;/]*)Build'
      device: 'tablet'
      model: '$1'
    - regex: '(MZ[0-9]{3})(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: '((?:ME|MB|XT)[0-9]{3,4}(?:\(Defy\))?)(?:[);/ ]|$)'
      model: '$1'

# Movic
Movic:
  regex: 'MOVIC|F4502'
  device: 'smartphone'
  models:
    - regex: 'MOVIC[ -]K(2)'
      model: 'K$1'
    - regex: 'MOVIC[ -]W([2345])'
      model: 'W$1'
    - regex: 'F4502'
      model: 'F4502'

# Movitel
Movitel:
  regex: 'M(?:8421|9106)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'M(8421|9106)(?:[);/ ]|$)'
      model: 'M$1'

# MTN
MTN:
  regex: 'MTN-|(?:Kafit V900|Faith29)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Faith29(?:[);/ ]|$)'
      model: 'Faith 29'
    - regex: 'Kafit V900'
      model: 'KaFit V900'
    - regex: 'MTN-(L860|S620)'
      model: 'Sm@rt Mini $1'
    - regex: 'MTN-8978P'
      device: 'tablet'
      model: 'Steppa'
    - regex: 'MTN-([a-z0-9_\-]+)'
      model: 'MTN-$1'

# Hammer (hammerphones.com) sub brand MyPhone
Hammer:
  regex: '(?:Hammer[_ ](?:Explorer[_ ](?:Plus|Pro)|FORCE|Blade_3|Blade2_PRO|Blade_5G|IRON_[23](?:[_ ]LTE)?|IRON|Explorer|ENERGY(?:_18x9|_2_2022|_2)?|Titan 2|Active2?(?:_LTE)?)|Iron[_ ]2)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Hammer[_ ]Explorer[_ ]Plus'
      model: 'Explorer Plus'
    - regex: 'Hammer[_ ]Explorer[_ ]Pro'
      model: 'Explorer Pro'
    - regex: 'HAMMER[ _]ENERGY_2_2022'
      model: 'Energy 2 (2022)'
    - regex: 'HAMMER[ _]ENERGY[ _](18x9|3G|\d+)'
      model: 'Energy $1'
    - regex: 'HAMMER[ _]ENERGY'
      model: 'Energy'
    - regex: 'Hammer Titan 2'
      model: 'Titan 2'
    - regex: 'Hammer[_ ]FORCE'
      model: 'Force'
    - regex: '(?:Hammer[ _])?Iron[ _]([23])'
      model: 'Iron $1'
    - regex: 'Hammer[ _]Iron'
      model: 'Iron'
    - regex: 'Hammer[ _]Explorer'
      model: 'Explorer'
    - regex: 'Hammer Active(?:[);/ ]|$)'
      model: 'Active'
    - regex: 'Hammer_Active2(?:[);/ ]|$)'
      model: 'Active 2'
    - regex: 'Hammer_Active2_LTE(?:[);/ ]|$)'
      model: 'Active 2 LTE'
    - regex: 'Hammer_Blade_5G'
      model: 'Blade 5G'
    - regex: 'Hammer_Blade2_PRO'
      model: 'Blade 2 Pro'
    - regex: 'Hammer_Blade_3'
      model: 'Blade 3'

# myphone (myphone.com.ph)
MyPhone:
  regex: '(?:MyPhone|MyPad|MyTab)[ _][^;/)]+( Build|[);])|(?:HAMMER_)?AXE[_ ]M[_ ]LTE|Hammer[_ ](?:Axe)|Cube_LTE|myTab10II|LUNA_II|C-Smart_pix|myPhone_Fun_8|FUN_18x9|MyPhoneMY27|Prime_4_Lite|myA1[78]|myX12|Pocket_2|Prime_18x9|Prime3Lite|myG1|myA10|myA(10|[789]) DTV|myT[356] DTV|myWX1 Plus|myXI1(?:[ _](?:Plus|Pro))?|my(?:XI[3]|NX1|X[23589]|A1[12356]|29S|807)|Q_Smart_BE|Brown [12]|Q-Smart_Plus|Q-Smart_III_Plus|SmartView_(?:[78]|9_6)_(?:LTE|[34]G)|Android 6(?:[\d.]*);(?: [\w-]+;)? Pocket|Infinit 2'
  device: 'smartphone'
  models:
    # explicit table models
    - regex: 'myTab_10III'
      model: 'MyTab 10 III'
      device: 'tablet'
    - regex: 'myTab10II'
      model: 'MyTab 10 II'
      device: 'tablet'
    - regex: 'myT([356]) DTV'
      model: 'myT$1 DTV'
      device: 'tablet'
    - regex: 'SmartView_7_3G'
      model: 'SmartView 7" 3G'
      device: 'tablet'
    - regex: 'SmartView_8_LTE'
      model: 'SmartView 8" LTE'
      device: 'tablet'
    - regex: 'SmartView_9_6_3G'
      model: 'SmartView 9.6" 3G'
      device: 'tablet'

    # explicit smartphones models
    - regex: 'myA([789]|10) DTV'
      model: 'myA$1 DTV'
    - regex: 'Cube_LTE|Cube 16GB'
      model: 'Cube LTE'
    - regex: 'INFINITY (LTE|3G)'
      model: 'Infinity $1'
    - regex: 'Infinit 2'
      model: 'Infinit 2'
    - regex: 'Prime_4_Lite'
      model: 'Prime 4 Lite'
    - regex: 'C-Smart_pix'
      model: 'C-Smart Pix'
    - regex: 'Pocket_2(?:[);/ ]|$)'
      model: 'Pocket 2'
    - regex: 'Pocket(?:[);/ ]|$)'
      model: 'Pocket'
    - regex: '(?:myPhone_)?Fun[_ ]?(\d)[_ ]?Lite'
      model: 'FUN $1 Lite'
    - regex: '(?:myPhone_)?Fun[_ ]?(\d)[_ ]?LTE'
      model: 'FUN $1 LTE'
    - regex: '(?:myPhone_)?Fun_?([48]|18x9)'
      model: 'FUN $1'
    - regex: 'Hammer AXE Pro'
      model: 'Hammer Axe Pro'
    - regex: 'myPhone AXE 3G'
      model: 'Hammer Axe 3G'
    - regex: '(?:HAMMER_)?AXE[_ ]M[_ ]LTE'
      model: 'Hammer Axe M LTE'
    - regex: 'MyPhoneMY27'
      model: 'my27'
    - regex: 'MY807'
      model: 'myX1'
    - regex: 'myXI1 Plus(?:[);/ ]|$)'
      model: 'myXI1 Plus'
    - regex: 'myXI1 Pro(?:[);/ ]|$)'
      model: 'myXI1 Pro'
    - regex: 'myXI([13])(?:[);/ ]|$)'
      model: 'myXI$1'
    - regex: 'my(X[23589]|NX1|A1[12356]i?|29S|G1|X12|A1[078])(?:[);/ ]|$)'
      model: 'my$1'
    - regex: 'myWX1 Plus(?:[);/ ]|$)'
      model: 'myWX1 Plus'
    - regex: 'Q_Smart_BE(?:[);/ ]|$)'
      model: 'Q-Smart BE'
    - regex: 'Q-Smart_Plus(?:[);/ ]|$)'
      model: 'Q-Smart Plus'
    - regex: 'Prime_18x9(_LTE)?(?:[);/ ]|$)'
      model: 'Prime 18x9$1'
    - regex: 'Prime3Lite(?:[);/ ]|$)'
      model: 'Prime 3 Lite'
    - regex: 'Brown 1(?:[);/ ]|$)' # ARK Brown 1
      model: 'Brown 1'
    - regex: 'brown 2(?:[);/ ]|$)' # ARK Brown 1
      model: 'Brown 2'
    - regex: 'myPhone[_ ]Pocket[_ ]Pro'
      model: 'Pocket Pro'
    - regex: 'Q-Smart_III_Plus'
      model: 'Q-Smart III Plus'
    - regex: 'LUNA_II'
      model: 'Luna II'

    # general detections
    - regex: 'MyPhone[ _]([^;/)]+)( Build|[;)])'
      model: '$1'
    - regex: 'MyPad[ _]([^;/(]+)(?: Build|[;)])'
      model: 'MyPad $1'
      device: 'tablet'
    - regex: 'MyTab[ _]([^;/]+)(?: Build|[;)])'
      model: 'MyTab $1'
      device: 'tablet'

# MyWigo
MyWigo:
  regex: 'MyWigo '
  device: 'smartphone'
  models:
    - regex: 'City3'
      model: 'City 3'
    - regex: 'Excite GIII'
      model: 'Excite G3'
    - regex: 'MyWigo[ _]([^;/)]+)( Build|\))'
      model: '$1'

# Myros (myrosworld.com)
Myros:
  regex: '(E70 Ultra)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Myria
Myria:
  regex: ' (Myria[_ ][^/;]+|502M|Cozy|Easy tab 9|Grand|Compact_E2_Plus)(?: Build|[;)])|Myria_FIVE|Myria_Grand_4G|Myria_Wide_2|Myria_Wide_4G'
  device: 'smartphone'
  models:
    - regex: 'Myria_FIVE'
      model: 'Five'
    - regex: '(502M|Grand|Compact_E2_Plus)'
      model: '$1'
    - regex: 'Myria_Grand_4G'
      model: 'Grand 4G'
    - regex: 'Myria_Wide_4G'
      model: 'Wide 4G'
    - regex: 'Myria_Wide_2'
      model: 'Wide 2'
    - regex: '(Cozy|Easy tab 9)'
      model: '$1'
      device: 'tablet'
    - regex: 'Myria[_ ]([^/);]+)(?: Build|[);])'
      model: '$1'

# M.T.T or MTT
M.T.T.:
  regex: 'M\.T\.T\.|MTT IDEAL'
  device: 'smartphone'
  models:
    - regex: 'MTT IDEAL'
      model: 'Ideal'
    - regex: 'M\.T\.T\. ?Tablet([^;/)]+)?(?: Build|[;)])'
      device: 'tablet'
      model: 'Tablet$1'
    - regex: 'M\.T\.T\. ?([^;/)]+)(?: Build|[;)])'
      model: '$1'

# Navon
Navon:
  regex: 'Navon[_ ]|(?:Vision_Tab_(?:7|10)|Pure Micro|Superme_Max|Raptor3G8GB|Predator (?:10|3G)|Platinum[_ ]?10[_ ]?3G(?:_V2|2019)?|Supreme[_ ](?:Fine(?:[_ ]Micro)?|Chief|Pure|Pro)(?:[_ ](?:Mini|Plus))?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'M505 LTE(?:[);/ ]|$)'
      model: 'Mizu M505 LTE'
    - regex: '(F552|D504)(?:[);/ ]|$)'
      model: 'Mizu $1'
    - regex: 'Superme_Max(?:[);/ ]|$)'
      model: 'Supreme Max'
    - regex: 'Supreme_Fine_Mini(?:[);/ ]|$)'
      model: 'Supreme Fine Mini'
    - regex: 'Supreme_Fine_Micro(?:[);/ ]|$)'
      model: 'Supreme Fine Micro'
    - regex: 'Supreme[_ ]Fine[_ ]Plus(?:[);/ ]|$)'
      model: 'Supreme Fine Plus'
    - regex: 'Supreme_Fine(?:[);/ ]|$)'
      model: 'Supreme Fine'
    - regex: 'Supreme[_ ]Chief(?:[);/ ]|$)'
      model: 'Supreme Chief'
    - regex: 'Supreme[_ ]Pure[ _]Plus(?:[);/ ]|$)'
      model: 'Supreme Pure Plus'
    - regex: 'Supreme Pure(?:[);/ ]|$)'
      model: 'Supreme Pure'
    - regex: 'Supreme[_ ]Pro(?:[);/ ]|$)'
      model: 'Supreme Pro'
    - regex: 'Pure Micro(?:[);/ ]|$)'
      model: 'Pure Micro'
    - regex: 'Navon[_ ]Infinity(?:[);/ ]|$)'
      model: 'Infinity'
    - regex: 'Navon[_ ](D405)(?:[);/ ]|$)'
      model: '$1'

    - regex: '(?:Navon[_ ])?Platinum[ _]10[ _]3G(_V2)?(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Platinum 10.1" 3G$1'
    - regex: '(?:Navon[_ ])?Platinum103G2019(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Platinum 10.1" 3G (2019)'
    - regex: '(?:Navon[_ ])?Orpheus[ _]3G(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Orpheus 3G'
    - regex: '(?:Navon_)?Predator[_ ](3G|10|7)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Predator $1'
    - regex: 'Raptor3G8GB(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Raptor 3G 8GB'

    - regex: 'Vision_Tab_(7|10)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Vision Tab $1'

# C5 Mobile
C5 Mobile:
  regex: '(?:noa X2 Plus|noa_G1|noaXPower|NOATAB)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'noa X2 Plus'
      model: 'Noa X2 Plus'
    - regex: 'noa_G1'
      model: 'Noa G1'
    - regex: 'noaXPower'
      model: 'Noa X Power'
    - regex: 'NOATAB'
      device: 'tablet'
      model: 'Noa Tab'

# NOA or NOA Mobile (noa-mobile.eu)
NOA:
  regex: '(?:NOA-)?NOA[ _]|Hummer(?:_2019_R|LE)|NextSE|Vivo 4G_r|SPRINT4G|SparkSE'
  device: 'smartphone'
  models:
    - regex: 'NOA[_ ]CORE[_ ]FORTE'
      model: 'Core Forte'
    - regex: 'HummerLE'
      model: 'Hummer LE'
    - regex: 'Hummer_2019_R'
      model: 'Hummer R (2019)'
    - regex: 'NOA[_ ]Hummer[_ ]Lite'
      model: 'Hummer Lite'
    - regex: 'NOA[_ ]HUMMER'
      model: 'Hummer'
    - regex: 'NOA[_ ]MOVEse'
      model: 'Move SE'
    - regex: 'NextSE'
      model: 'Next SE'
    - regex: 'NOA[_ ]NEXT'
      model: 'Next'
    - regex: 'NOA[_ ]VISION[_ ]H3SE'
      model: 'Vision H3SE'
    - regex: 'NOA[_ ]VISION[_ ]H3'
      model: 'Vision H3'
    - regex: 'NOA[_ ]LOOP'
      model: 'Loop'
    - regex: '(?:NOA-)?NOA[_ ]H4se'
      model: 'H4SE'
    - regex: 'NOA[_ ]Mg12'
      model: 'MG12'
    - regex: 'NOA[_ ]H44SE'
      model: 'H44SE'
    - regex: 'NOA[_ ]H10LE'
      model: 'H10LE'
    - regex: 'SPRINT4G'
      model: 'Sprint 4G'
    - regex: 'SparkSE'
      model: 'Spark SE'
    - regex: 'NOA[_ ](M108K|P497)'
      device: 'tablet'
      model: '$1'

    - regex: '(?:NOA[_ ])?Vivo 4G_r'
      model: 'Vivo 4G'
    - regex: 'NOA[_ ]([^;)/ ]+)'
      model: '$1'

# Nobby (nobby.ru)
Nobby:
  regex: 'Nobby[ ](S500|X800(?: Pro)?|S300(?: Pro)?)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Novey (https://www.novey.com.pa/)
Novey:
  regex: 'Novey'
  device: 'smartphone'
  models:
    - regex: 'Novey (L2)(?:[);/ ]|$)'
      model: '$1'

# nec or nec lavie (www.nec-lavie.jp)
NEC:
  regex: 'NEC[ _\-]|KGT/2\.0|portalmmm/1\.0 (?:DB|N)|(?:portalmmm|o2imode)/2.0[ ,]N|(?:PC-T[SE]\d{3}[\w]{2,3}|N-06C|N-02E|LAVIE T11 (?:11QHD1|112K1)|LAVIE Tab E (?:10|8)FHD[12]|7SD1|8HD1)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'N-06C(?:[);/ ]|$)'
      model: 'Medias Amadana'
    - regex: 'N-02E(?:[);/ ]|$)'
      model: 'Medias U'
    - regex: '(?:NEC[ _\-]|KGT/2\.0 )([a-z0-9]+)'
      model: '$1'
    - regex: 'portalmmm/1\.0 ((?:DB|N)[a-z0-9]+)'
      model: '$1'
    - regex: '(?:portalmmm|o2imode)/2\.0[ ,](N[a-z0-9]+)'
      model: '$1'
    - regex: 'LAVIE Tab E ((?:10|8)FHD[12]|7SD1|8HD1)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'LAVIE Tab E $1'
    - regex: 'LAVIE T11 (11QHD1|112K1)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'LAVIE Tab T11 $1'
    - regex: 'LAVIE T8 (8HD1)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'LAVIE Tab T8 $1'
    - regex: 'PC-TE(\d+)'
      device: 'tablet'
      model: 'LAVIE Tab E TE$1'
    - regex: 'PC-TS(\d+)'
      device: 'tablet'
      model: 'LAVIE Tab S TS$1'

# Neffos (sub brand TP-Link) (neffos.com)
Neffos:
  regex: 'Neffos|(TP601[ABCE])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:C57|TP601[ABCE])(?:[);/ ]|$)'
      model: 'C5L'
    - regex: 'Neffos[_ ]Y50'
      model: 'Y50'
    - regex: 'Neffos X20 Pro'
      model: 'X20 Pro'
    - regex: 'Neffos[_ ]((?:[YNCXA])[0-9][A-Z]?(?: Max| Lite| Plus)?)'
      model: '$1'

# Nextbit
Nextbit:
  regex: 'Nextbit|(?:Robin)(?: Build|\))'
  device: 'smartphone'
  models:
    - regex: '(Robin)(?:[);/ ]|$)'
      model: '$1'

# newgen
Newgen:
  regex: 'NEWGEN\-([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# Netgear
Netgear:
  regex: 'GTV100'
  device: 'tv'
  models:
    - regex: 'GTV100'
      model: 'NeoTV Prime'

# Gear Mobile (gear.cl)
Gear Mobile:
  regex: '(Feel_7013N)'
  device: 'tablet'
  model: '$1'

# NeuImage
NeuImage:
  regex: 'NIM-'
  device: 'smartphone'
  models:
    - regex: 'NIM-(450D|550O|600Q)'
      model: '$1'

# NextBook
NextBook:
  regex: 'Next[0-9]|NX(?:785QC8G|M900MC|008HD8G|010HI8G|M908HC|M726|16A8116K|A8QC116|A8LTE116|16A10132S|16A11264|A116QC164|A101LTE116)'
  device: 'tablet'
  models:
    - regex: 'NX008HD8G'
      model: 'Premium 8 HD'
    - regex: 'NXA8QC116'
      model: 'Ares 8'
    - regex: 'NXA8LTE116'
      model: 'Ares 8L'
    - regex: 'NX16A8116K'
      model: 'Ares A8'
    - regex: 'NX16A10132S'
      model: 'Ares A10'
    - regex: 'NX16A11264'
      model: 'Ares A11'
    - regex: 'NEXT1015BAP'
      model: 'Ares 10'
    - regex: 'NXA101LTE116'
      model: 'Ares 10L'
    - regex: 'NXA116QC164'
      model: 'Ares 11'
    - regex: 'NXM908HC'
      model: 'Premium 9'
    - regex: 'NX010HI8G'
      model: 'Premium 10 Hi'
    - regex: 'NX785QC8G'
      model: '8'
    - regex: 'NXM900MC'
      model: '8 HD'
    - regex: 'NXM726'
      model: 'Premium 7'

    - regex: 'Next([0-9]+[^;/]+) Build'
      model: 'Next $1'

# ngm or new generation mobile (www.ngm.eu)
NGM:
  regex: 'NGM[_ ][a-z0-9]+|(Forward|Dynamic)[ _]?[^/;]+(?:Build|/)|Smart5Plus32GB|Android 5(?:[\d.]*);(?: [\w-]+;)? (?:P50[89]|P55[01])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Smart5Plus32GB'
      model: 'Smart 5 Plus'
    - regex: 'P(50[89]|55[01])'
      model: 'You Color P$1'
    - regex: 'Dynamic JumpL'
      model: 'Dynamic Jump L'
    - regex: '(Forward|Dynamic)[ _]?([^/;)]+)(?: Build|[;)])'
      model: '$1 $2'
    - regex: '(Forward|Dynamic)[ _]?([^/;]+)/'
      model: '$1 $2'
    - regex: 'NGM ([^;/]+) Build'
      model: '$1'
    - regex: 'NGM_([a-z0-9]+)'
      model: '$1'

# nexian
Nexian:
  regex: 'S?Nexian'
  device: 'smartphone'
  models:
    - regex: 'S?Nexian[ ]?([a-z0-9\-]+)'
      model: '$1'
    - regex: 'S?Nexian-([a-z0-9]+)'
      model: '$1'

# Noain
Noain:
  regex: 'NOAIN'
  device: 'smartphone'
  models:
    - regex: 'NOAIN[ _-]([^;/]+) Build'
      model: '$1'
    - regex: 'NOAIN[ _-]([^;/)]+)(?:[;/)]|$)'
      model: '$1'

# Noblex (https://noblex.com.ar/)
Noblex:
  regex: 'Noblex|NBX-|(?:A[56]0UNS|T7A6INC)(?:[;/)]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:Noblex|NBX)[ _-]([^;/]+) Build'
      model: '$1'
    - regex: '(?:Noblex|NBX)[ _-]([^;/)]+)(?:[;/)]|$)'
      model: '$1'
    - regex: '(A[56]0)UNS'
      model: '$1'
    - regex: '(T7A6INC)'
      device: 'tablet'
      model: '$1'

# NOGA (https://noganet.ar/)
NOGA:
  regex: '(?:NOGAPC (?:LIVE|PRO)|NOGAPAD ?7G)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'NOGAPAD ?7G(?:[);/ ]|$)'
      device: 'tablet'
      model: 'NOGAPAD 7G'
    - regex: 'NOGAPC PRO(?:[);/ ]|$)'
      device: 'tv'
      model: 'PC Pro'
    - regex: 'NOGAPC LIVE(?:[);/ ]|$)'
      device: 'tv'
      model: 'PC Live'

# Nomu
Nomu:
  regex: '(?:Nomu[ _-](?:T18|S30mini|S10)|(?:V1600S|S10 PRO|S50_Pro)|LMCV1)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Nomu[ _-]T18(?:[);/ ]|$)'
      model: 'T18'
    - regex: 'Nomu[ _-]s10(?:[);/ ]|$)'
      model: 'S10'
    - regex: 'Nomu[ _-]S30mini(?:[);/ ]|$)'
      model: 'S30 Mini'
    - regex: 'LMCV1(?:[);/ ]|$)'
      model: 'S30'
    - regex: 'S([15]0)[_ ]PRO(?:[);/ ]|$)'
      model: 'S$1 Pro'
    - regex: '(V1600S)(?:[);/ ]|$)'
      model: '$1'

# Noontec (http://www.noontec.com.au/)
Noontec:
  regex: 'Noontec '
  device: 'tv'
  model: ''

# Opsson
Opsson:
  regex: '(?<!SANTIN )Opsson|IUSAI'
  device: 'smartphone'
  models:
    - regex: 'IUSAI[ _]([^/;]+) Build'
      model: 'Iusai $1'
    - regex: 'IUSAI[ _]([^/;\)]+)[/;\)]'
      model: 'Iusai $1'
    - regex: 'Opsson[ _]([^/;]+) Build'
      model: '$1'
    - regex: '(?:Opsson-)?Opsson[ -_]([^/;]+)/'
      model: '$1'

# Nomi (nomi-electronics.com)
Nomi:
  regex: 'Nomi[ _-]|(C101010 Ultra2|i501[234]|i5032|i50[537]0|i5031|i55[13]0|i5532|C0(700(?:[02358]|2HD)|7850)|C1010[0-3]|i(?:50[0158]|450|40[01]|55[02]))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'i501[23](?:[);/ ]|$)'
      model: 'Evo M2'
    - regex: 'Nomi[ _]i5010(?:[);/ ]|$)'
      model: 'Evo M'
    - regex: 'Nomi[ _]i5001(?:[);/ ]|$)'
      model: 'Evo M3'
    - regex: 'Nomi[ _]i5011(?:[);/ ]|$)'
      model: 'Evo M1'
    - regex: 'Nomi[ _]i506(?:[);/ ]|$)'
      model: 'i506 Shine'
    - regex: 'Nomi[ _]i5730(?:[);/ ]|$)'
      model: 'i5730 Infinity'
    - regex: 'Nomi[ _]i6030(?:[);/ ]|$)'
      model: 'Note-X'
    - regex: 'I5070(?:[);/ ]|$)'
      model: 'Iron-X'
    - regex: 'i5071(?:[);/ ]|$)'
      model: 'Iron-X1'
    - regex: 'Nomi[_ ]I4070(?:[);/ ]|$)'
      model: 'Iron-M'
    - regex: 'i5014(?:[);/ ]|$)'
      model: 'Evo M4'
    - regex: 'i5032(?:[);/ ]|$)'
      model: 'Evo X2'
    - regex: 'i5030(?:[);/ ]|$)'
      model: 'Evo X'
    - regex: 'i5031(?:[);/ ]|$)'
      model: 'Evo X1'
    - regex: 'i5050(?:[);/ ]|$)'
      model: 'Evo Z'
    - regex: '(?:Nomi_)?i4510(?:[);/ ]|$)'
      model: 'Beat M'
    - regex: '(?:Nomi_)?i4500(?:[);/ ]|$)'
      model: 'Beat M1'
    - regex: 'i5532(?:[);/ ]|$)'
      model: 'Space X2'
    - regex: 'i5510(?:[);/ ]|$)'
      model: 'Space M'
    - regex: 'i5530(?:[);/ ]|$)'
      model: 'Space X'
    - regex: 'Nomi[_ ]i5511(?:[);/ ]|$)'
      model: 'Space M1'
    - regex: '(?:Nomi_)?i5710(?:[);/ ]|$)'
      model: 'Infinity X1'
    - regex: 'i508(?:[);/ ]|$)'
      model: 'Energy'
    - regex: '(?:Nomi[ _])?i(50[015]|450|40[01]|55[02])(?:[);/ ]|$)'
      model: 'i$1'
    - regex: 'Nomi[ _]i507(?:[);/ ]|$)'
      model: 'Spark'
    - regex: 'Nomi[ _]i503(?:[);/ ]|$)'
      model: 'Jump'
    - regex: 'Nomi[ _]i504(?:[);/ ]|$)'
      model: 'Dream'
    - regex: 'Nomi[ _](\w+)[ _]PLUS(?:[);/ ]|$)'
      model: '$1 Plus'

    - regex: 'C101010 Ultra2'
      model: 'Ultra 2'
      device: 'tablet'
    - regex: '(?:Nomi_)?C101040'
      model: 'Ultra 3 Pro'
      device: 'tablet'
    - regex: '(?:Nomi_)?C101030'
      model: 'Ultra 3 LTE'
      device: 'tablet'
    - regex: '(?:Nomi_)?C101012'
      model: 'Ultra 3 3G'
      device: 'tablet'
    - regex: '(?:Nomi_)?C101014'
      model: 'Ultra 4 3G'
      device: 'tablet'
    - regex: '(?:Nomi_)?C101034'
      model: 'Ultra 4 LTE'
      device: 'tablet'
    - regex: '(?:Nomi_)?C101044'
      model: 'Ultra 4 Pro LTE'
      device: 'tablet'
    - regex: '(?:Nomi_)?C070010'
      device: 'tablet'
      model: 'Corsa'
    - regex: '(?:Nomi_)?C070020'
      model: 'Corsa Pro'
      device: 'tablet'
    - regex: '(?:Nomi_)?C070011'
      model: 'Corsa 2'
      device: 'tablet'
    - regex: '(?:Nomi_)?C070030'
      model: 'Corsa 3 LTE'
      device: 'tablet'
    - regex: '(?:Nomi_)?C070012'
      model: 'Corsa 3 3G'
      device: 'tablet'
    - regex: '(?:Nomi_)?C070014L'
      model: 'Corsa 4 Light 3G'
      device: 'tablet'
    - regex: '(?:Nomi_)?C0700[13]4'
      model: 'Corsa 4 LTE'
      device: 'tablet'
    - regex: '(?:Nomi_)?C070044'
      model: 'Corsa 4 Pro LTE'
      device: 'tablet'
    - regex: '(?:Nomi_)?C080012'
      model: 'Libra 3 3G'
      device: 'tablet'
    - regex: '(?:Nomi_)?C080010'
      model: 'Libra 2 3G'
      device: 'tablet'
    - regex: '(?:Nomi_)?C080034'
      model: 'Libra 4 LTE'
      device: 'tablet'
    - regex: '(?:Nomi_)?C080014'
      model: 'Libra 4 3G'
      device: 'tablet'
    - regex: '(?:Nomi_)?C07008'
      model: 'Sigma'
      device: 'tablet'
    - regex: '(?:Nomi_)?C10105'
      model: 'Stella Plus'
      device: 'tablet'
    - regex: '(?:Nomi[ _])?(C0(?:700(?:[0235]|2HD)|7850|9600)|C1010[0-3])(?:[);/ ]|$)'
      model: '$1'
      device: 'tablet'
    - regex: 'Nomi[ _-]([^;/]+) Build'
      model: '$1'
    - regex: 'Nomi[ _-]([^;/)]+)(?:[;/)]|$)'
      model: '$1'

# NUU Mobile
NUU Mobile:
  regex: 'NUU_|(?:(?:N(570[24]|500[12])L|S5701L|S6001L|[SN]5501L)|A6L-[CG]|N5502L)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'NUU_A([13]L?)'
      model: 'A$1'
    - regex: 'NUU_M([32])(?:[);/ ]|$)'
      model: 'M$1'
    - regex: 'NUU_X5(?:[);/ ]|$)'
      model: 'X5'
    - regex: 'N5704L'
      model: 'G1'
    - regex: 'S6001L'
      model: 'G2'
    - regex: 'S5501L'
      model: 'M19'
    - regex: 'N5702L'
      model: 'G3'
    - regex: 'N5501L'
      model: 'A5L'
    - regex: 'N5002L'
      model: 'A7L'
    - regex: 'N5502L'
      model: 'A10L'
    - regex: 'S5701L'
      model: 'M4X Pro'
    - regex: '(?:NUU_)?(N5001L|A6L-[CG]|Q500)(?:[);/ ]|$)'
      model: '$1'

# NYX Mobile or NYX
NYX Mobile:
  regex: 'NYX[ _]|(?:GLAM|ARGON|TQ14|GO-X|orbis)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'NYX_A1'
      model: 'A1'
    - regex: 'NYX[_ ]ALTER'
      model: 'Alter'
    - regex: 'NYX_Blink'
      model: 'Blink'
    - regex: 'NYX_EGO'
      model: 'Ego'
    - regex: 'NYX_FENIX'
      model: 'Fenix'
    - regex: 'NYX_FLY_II'
      model: 'Fly II'
    - regex: 'NYX_FLY_MINI'
      model: 'Fly Mini'
    - regex: 'NYX_FLY'
      model: 'Fly'
    - regex: 'NYX_HIT'
      model: 'Hit'
    - regex: 'NYX_JAK'
      model: 'Jak'
    - regex: 'NYX_JOIN'
      model: 'Join'
    - regex: 'NYX_NOBA_II'
      model: 'Noba II'
    - regex: 'NYX_NOBA'
      model: 'Noba'
    - regex: 'NYX_ORBIS'
      model: 'Orbis'
    - regex: 'NYX[ _]REX'
      model: 'Rex'
    - regex: 'NYX_SHADE'
      model: 'Shade'
    - regex: 'NYX_SKY'
      model: 'Sky'
    - regex: 'NYX_SPARK'
      model: 'Spark'
    - regex: 'NYX_VOX'
      model: 'Vox'
    - regex: 'NYX_ZEUZ_HD'
      model: 'Zeus HD'
    - regex: 'GLAM'
      model: 'Glam'
    - regex: 'ARGON'
      model: 'Argon'
    - regex: '(TQ14|GO-X)'
      model: '$1'
    - regex: 'orbis'
      model: 'Orbis'

# Nous
Nous:
  regex: '(?:NS(?:[356]|500[2-68]|5511|5502)|NS 5511)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'NS 5511(?:[);/ ]|$)'
      model: 'NS5511'
    - regex: '(NS[0-9]{1,4})(?:[);/ ]|$)'
      model: '$1'

# Nvidia
Nvidia:
  regex: 'NVIDIA|SHIELD|Tegra(Note-P1640| Note 7)|wx_na_wf|wx_un_do'
  device: 'tablet'
  models:
    - regex: 'TegraNote-P1640'
      model: 'Tegra Note P1640'
    - regex: 'wx_na_wf|wx_un_do'
      model: 'SHIELD Tablet'
    - regex: '(SHIELD Tablet(?: K1)?|Tegra Note 7)(?: Build|[;)])'
      model: '$1'
    - regex: 'SHIELD Andr[o0]id TV'
      model: 'SHIELD Android TV'
      device: 'tv'
    - regex: 'NVIDIA_SHIELD_PRO_2019'
      model: 'SHIELD TV Pro'
      device: 'tv'
    - regex: 'NVIDIA Shield'
      model: 'SHIELD TV'
      device: 'tv'
    - regex: 'SHIELD'
      model: 'SHIELD Portable'
      device: 'console'

# O+ (OPlus)
O+:
  regex: 'O\+[ _](Presto 700 LTE|FAB GO|360|8\.(?:3[178]z|[15]2|37y|3[38]|9[12378]|1[75]|6)|Air|Grande|Crunch|Ultra|Xfinit|Upsized|Venti|EVO 4G|Sonic|360[ _]ALPHA[ _]PLUS[ _]2\.0|360[ _]HD[ _]2\.0|Stream HDTV)'
  device: 'smartphone'
  models:
    - regex: 'O\+[ _](Presto 700 LTE|Grande|Crunch|Ultra 2.0|Xfinit|Ultra Lite|Ultra|Sonic|Upsized|Venti 4G|EVO 4G|8\.(?:3[178]z|37y|3[38]|[15]2|9[12378]|1[75]|6))'
      model: '$1'
    - regex: 'O\+_AIR'
      model: 'Air'
    - regex: 'O\+[ _]360[ _]HD[ _]2\.0'
      model: '360 HD 2.0'
    - regex: 'O\+[ _]360[ _]HD'
      model: '360 HD'
    - regex: 'O\+[ _]360[ _]ALPHA[ _]PLUS[ _]2\.0'
      model: '360 Alpha Plus 2.0'
    - regex: 'O\+[ _]360 ALPHA Plus'
      model: '360 Alpha Plus'
    - regex: 'O\+[ _]360 ALPHA'
      model: '360 Alpha'
    - regex: 'O\+[ _]360'
      model: '360'
    - regex: 'O\+ Stream HDTV'
      device: 'tablet'
      model: 'Stream HDTV'
    - regex: 'O\+ FAB GO'
      device: 'tablet'
      model: 'Fab Go'

# o2
O2:
  regex: 'Xda|(?<!FBCR/)O2[ \-]|COCOON'
  device: 'smartphone'
  models:
    - regex: '(Xda[ _][a-z0-9_]+)'
      model: '$1'
    - regex: '(COCOON)'
      model: '$1'
    - regex: 'O2 ([a-z0-9 ]+)'
      model: '$1'
    - regex: 'O2-([a-z0-9]+)'
      model: '$1'

# Funai (https://www2.funai.co.jp/)
Funai:
  regex: 'FUNAI, ([a-z0-9_ \-]+), (?:wired|wireless)'
  device: 'tv'
  model: ''

# Fusion5 (www.fusion5store.com)
Fusion5:
  regex: 'Fusion5|F104Bv2|F104EvII_PRO|F104EvII'
  device: 'tablet'
  models:
    - regex: '(?:Fusion5_)?(F104B)v2_PRO'
      model: '$1v2 Pro'
    - regex: '(?:Fusion5_)?(F104B)v2'
      model: '$1v2'
    - regex: '(?:Fusion5_)?F104EvII_PRO'
      model: 'F104EVII Pro'
    - regex: '(?:Fusion5_)?F104EvII(?:_EEA)?(?:[);/ ]|$)'
      model: 'F104EVII'
    - regex: '(?:Fusion5_)?(F704B|F105D|F104E)(?:_EEA)?(?:[);/ ]|$)'
      model: '$1'

# ZH&K Mobile (zhnkmobile.com)
'ZH&K':
  regex: '(?:Odyssey[_ ](?:evo|DTV[67]|J[59]|J10|GLAZE\+?|RANGE|ACE|AEON|VICTORY|SACRED|SAGA|SWIFT|O2|ULTRA|FLAME|POPO|PERRI|TYTAN)|ODYSSEY[ _]?NEXT|INTENSE (?:RISE|Hype|GAME))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'ODYSSEY[ _]J10[ _]Mini'
      model: 'Odyssey J10 Mini'
    - regex: 'ODYSSEY[ _](O2|J[95]|DTV[67]|J10)'
      model: 'Odyssey $1'
    - regex: 'ODYSSEY[_ ]AEON'
      model: 'Odyssey Aeon'
    - regex: 'ODYSSEY[_ ]ACE'
      model: 'Odyssey Ace'
    - regex: 'ODYSSEY[_ ]ULTRA'
      model: 'Odyssey Ultra'
    - regex: 'ODYSSEY[ _]?NEXT'
      model: 'Odyssey Next'
    - regex: 'ODYSSEY[ _]PERRI'
      model: 'Odyssey Perri'
    - regex: 'ODYSSEY[_ ]FLAME'
      model: 'Odyssey Flame'
    - regex: 'ODYSSEY[_ ]evo'
      model: 'Odyssey Evo'
    - regex: 'ODYSSEY[_ ]Victory'
      model: 'Odyssey Victory'
    - regex: 'ODYSSEY[_ ]SWIFT'
      model: 'Odyssey Swift'
    - regex: 'ODYSSEY[_ ]TYTAN'
      model: 'Odyssey Tytan'
    - regex: 'ODYSSEY[_ ]SAGA'
      model: 'Odyssey Saga'
    - regex: 'ODYSSEY[_ ]SACRED'
      model: 'Odyssey Sacred'
    - regex: 'ODYSSEY[_ ]POPO'
      model: 'Odyssey Popo'
    - regex: 'ODYSSEY[_ ]RANGE'
      model: 'Odyssey Range'
    - regex: 'Odyssey[_ ]GLAZE\+'
      model: 'Odyssey Glaze Plus'
    - regex: 'Odyssey[_ ]GLAZE'
      model: 'Odyssey Glaze'
    - regex: 'INTENSE RISE'
      model: 'Intense Rise'
    - regex: 'INTENSE Hype'
      model: 'Intense Hype'
    - regex: 'INTENSE GAME'
      model: 'Intense Game'

# Odys (odys.de)
Odys:
  regex: 'ODYS[ _-]|IEOS[_ ]([^/;]+)|NOON(?:_PRO)? Build|SPACE10_(?:PLUS|PRO)_3G|THOR_?10|TAO_X10|RAPID_?(?:10|7)_?LTE|MAVEN_?10_|CONNECT[78]|ELEMENT10_PLUS_3G|XELIO[_0-9P]|PACE_10_LTE|(?:ADM816HC|ADM8000KP|NEO6_LTE|EOS10|AEON|FALCON_10_PLUS_3G|SPACE_ONE10|FUSION|THANOS_10|MAVEN_X10_HD(?:_LTE)?|JUNIOR_8_PRO|JuniorT8Pro|(?:NOVA|PYRO)_X?7_PLUS_3G|UNO_X8|MAVEN_[GT]10(?:_pro)?|MAVEN_7_PLUS|SLADE_X55|XELIO_PRO_10_LTE|GOAL_10_PLUS_3G|NOTOSplus3G|PACE ?10|Titan_10_LTE|PEDI_PLUS_W|NoteTab_Pro)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'XELIO[_ ]HD10[_ ]LTE'
      model: 'Xelio HD10 LTE'
    - regex: 'XELIO[_ ](HD10|A10)'
      model: 'Xelio $1'
    - regex: 'XELIOPHONETAB3'
      model: 'Xelio Phonetab 3'
    - regex: 'THANOS_10'
      model: 'Thanos 10'
    - regex: 'XELIO_NEXT_10_PLUS_3G'
      model: 'Xelio Next 10 Plus 3G'
    - regex: 'XELIO_PHONE_TAB7_3G'
      model: 'Xelio Phonetab 7 3G'
    - regex: 'XELIO10EXTREME'
      model: 'Xelio 10 Xtreme'
    - regex: 'XELIO10_PLUS_3G'
      model: 'Xelio 10 Plus 3G'
    - regex: 'XELIO10_HD_PLUS_3G'
      model: 'Xelio 10 HD Plus 3G'
    - regex: 'XELIO_10_HD'
      model: 'Xelio 10 HD'
    - regex: 'XELIO_PRO_10_LTE'
      model: 'Xelio Pro 10 LTE'
    - regex: 'ELEMENT10_PLUS_3G'
      model: 'Element 10 Plus 3G'
    - regex: 'CONNECT8PLUS'
      model: 'Connect 8 Plus'
    - regex: 'CONNECT7PRO'
      model: 'Connect 7 Pro'
    - regex: 'MAVEN_X10_HD_LTE'
      model: 'Maven X10 HD LTE'
    - regex: 'Maven_T10_pro'
      model: 'Maven T10 Pro'
    - regex: 'MAVEN_X10_HD'
      model: 'Maven X10 HD'
    - regex: 'MAVEN_?10_PRO_PLUS_3G'
      model: 'Maven 10 Pro Plus 3G'
    - regex: 'MAVEN_?10_?PLUS'
      model: 'Maven 10 Plus'
    - regex: 'MAVEN_?10_?PRO'
      model: 'Maven 10 Pro'
    - regex: 'MAVEN_?10_?HD'
      model: 'Maven 10 HD'
    - regex: 'MAVEN_7_PLUS'
      model: 'Maven 7 Plus'
    - regex: 'RAPID_?7_?LTE'
      model: 'Rapid 7 LTE'
    - regex: 'RAPID_?10_?LTE'
      model: 'Rapid 10 LTE'
    - regex: 'TAO_X10'
      model: 'Tao X10'
    - regex: 'SPACE10_PLUS_3G'
      model: 'Space 10 Plus 3G'
    - regex: 'SPACE_ONE10'
      model: 'Space One 10'
    - regex: 'SPACE10_PRO_3G'
      model: 'Space 10 Pro 3G'
    - regex: 'THOR_?10 Build'
      model: 'Thor 10'
    - regex: 'JuniorT8Pro'
      model: 'Junior T8 Pro'
    - regex: 'JUNIOR_8_PRO'
      model: 'Junior 8 Pro'
    - regex: 'ADM816HC'
      model: 'Neo X'
    - regex: 'EOS10'
      model: 'EOS 10'
    - regex: 'PACE_10_LTE_V2'
      model: 'Pace 10 LTE V2'
    - regex: 'PACE ?10'
      model: 'Pace 10'
    - regex: 'AEON'
      model: 'Aeon'
    - regex: 'FALCON_10_PLUS_3G'
      model: 'Falcon 10 Plus 3G'
    - regex: 'FUSION'
      model: 'Fusion 7'
    - regex: 'UNO_X8'
      model: 'Uno X8'
    - regex: 'ADM8000KP'
      model: 'Titan'
    - regex: 'Titan_10_LTE'
      model: 'Titan 10 LTE'
    - regex: 'PYRO_7_PLUS_3G'
      model: 'Pyro 7 Plus 3G'
    - regex: 'NOVA_X7_PLUS_3G'
      model: 'Nova X7 Plus 3G'
    - regex: 'ODYS_NOVA_X7'
      model: 'Nova X7'
    - regex: 'THOR_?10_PLUS_3G'
      model: 'Thor 10 Plus 3G'
    - regex: 'NOTOSplus3G'
      model: 'Notos Plus 3G'
    - regex: 'MAVEN_G10'
      model: 'Maven G10'
    - regex: 'PEDI_PLUS_W'
      model: 'Pedi Plus W'
    - regex: 'NoteTab_Pro'
      model: 'NoteTab Pro'
    - regex: 'GOAL_10_PLUS_3G'
      model: 'Goal 10 Plus 3G'
    - regex: 'IEOS[_ ]QUAD[_ ]W'
      model: 'Ieos Quad W'
    - regex: 'IEOS[_ ]QUAD[_ ]PRO'
      model: 'Ieos Quad Pro'

    # explicit smartphones models
    - regex: 'NEO6[_ ]LTE'
      model: 'Neo 6 LTE'
      device: 'smartphone'
    - regex: 'SLADE_X55'
      model: 'Slade X55'
      device: 'smartphone'

    # general detections
    - regex: 'IEOS[ _]([^/;]+) Build'
      model: 'Ieos $1'
    - regex: '(?:ODYS[ _-])?NOON Build'
      model: 'Noon'
    - regex: '(?:ODYS[ _-])?NOON_PRO Build'
      model: 'Noon Pro'
    - regex: 'Odys[ _-]([^/;]+) Build'
      model: '$1'

# Astro (astro.ua)
Astro:
  regex: 'Astro[- ](S451|S501)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Obi or Obi Worldphone
Obi:
  regex: 'Obi[ _-]|(?:(?:SJ1\.5|SJ2\.6|(?<!verykool )S(400|452\+|45[13]|50[127]|503\+?|520|55[01])|falcon)|SJ1-5|SJ[23]\.2| SF1)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'SJ(\d)[.-](\d)'
      model: 'SJ$1.$2'
    - regex: '(?:Obi_)?S400'
      model: 'Skipper'
    - regex: '(?:Obi_)?S451|falcon'
      model: 'Flacon'
    - regex: '(?:Obi_)?S452\+'
      model: 'Python'
    - regex: '(?:Obi_)?S453'
      model: 'Fox'
    - regex: '(?:Obi[_ ])?(SF1)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(?:Obi_)?S501'
      model: 'Wolverine'
    - regex: '(?:Obi_)?S502'
      model: 'Leopard'
    - regex: '(?:Obi_)?S503\+'
      model: 'Boa Plus'
    - regex: '(?:Obi_)?S503'
      model: 'Boa'
    - regex: '(?:Obi_)?S507'
      model: 'Pelican'
    - regex: '(?:Obi_)?S520'
      model: 'Octopus'
    - regex: '(?:Obi_)?S550'
      model: 'Crane'
    - regex: '(?:Obi_)?S551'
      model: 'Hornbill'
    - regex: '(?:Obi_)?S454'
      model: 'Alligator'
    - regex: 'Obi[ _-]([^;/]+) Build'
      model: '$1'
    - regex: 'Obi[ _-]([^;/)]+)(?:[;/)]|$)'
      model: '$1'

# Okapia
Okapia:
  regex: 'Okapia|Signature (?:L|Pro|Touch)'
  device: 'smartphone'
  models:
    - regex: 'Signature (L|Pro|Touch)'
      model: 'Signature $1'
    - regex: 'Okapia X1(?:[);/ ]|$)'
      model: 'X1'

# Olax
Olax:
  regex: 'Olax '
  device: 'smartphone'
  models:
    - regex: 'Olax Prime 12(?:[);/ ]|$)'
      model: 'Prime 12'

# Olympia (https://www.olympia-vertrieb.de/)
Olympia:
  regex: 'TREK(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'TREK(?:[);/ ]|$)'
      model: 'Trek'

# onda (ondatlc.com)
Onda:
  regex: 'Onda|(?:(?:V820w|V891[w]?|V919(?: 3G)? Air)[ _-]DualOS|(?:V919 4G Air|V989 Air|V972) Core[48]|T2101L2B1C| V10 4G|OBOOK20[_ ]PLUS|OBOOK (?:20 SE|20 DualOS|20 PLUS(?: DUALOS)?)|OBOOK10 SE|V10_4G|V919 Air CH DualOS| T9S|V116w-DualOS|V80[ _]SE)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?: T9S)(?:[);/ ]|$)'
      model: 'T9 S'

    # explicit tablet models
    - regex: 'ONDA[ _]MID'
      model: 'MID'
      device: 'tablet'
    - regex: 'V820w[ _-]DualOS'
      model: 'V820W Dual OS'
      device: 'tablet'
    - regex: 'V891W[ _-]DualOS'
      model: 'V891W Dual OS'
      device: 'tablet'
    - regex: 'V891[ _-]DualOS'
      model: 'V891 Dual OS'
      device: 'tablet'
    - regex: 'V919 3G Air[ _-]DualOS'
      model: 'V919 3G Air Dual OS'
      device: 'tablet'
    - regex: 'V116w-DualOS'
      model: 'V116w 3G Dual OS'
      device: 'tablet'
    - regex: 'V919 Air[ _-]DualOS'
      model: 'V919 Air Dual OS'
      device: 'tablet'
    - regex: 'V919 Air CH DualOS'
      model: 'V919 Air CH Dual OS'
      device: 'tablet'
    - regex: 'V919 4G Air Core8'
      model: 'V919 4G Air Core 8'
      device: 'tablet'
    - regex: 'V972 Core4'
      model: 'V919 Core 4'
      device: 'tablet'
    - regex: 'V989 Air Core8'
      model: 'V989 Air Core 8'
      device: 'tablet'
    - regex: 'ONDA V989'
      model: 'V989 Core 8'
      device: 'tablet'
    - regex: 'T2101L2B1C|OBOOK 20 PLUS DUALOS'
      model: 'oBook 20 Plus Dual OS'
      device: 'tablet'
    - regex: 'OBOOK[_ ]?20[_ ]PLUS'
      device: 'tablet'
      model: 'oBook 20 Plus'
    - regex: ' V10 4G(?:[);/ ]|$)'
      model: 'V10 10.1" 4G'
      device: 'tablet'
    - regex: 'V80[ _]SE(?:[);/ ]|$)'
      model: 'V80 SE'
      device: 'tablet'
    - regex: 'OBOOK 20 DualOS(?:[);/ ]|$)'
      model: 'oBook 20 Dual OS'
      device: 'tablet'
    - regex: 'OBOOK 20 SE(?:[);/ ]|$)'
      model: 'oBook 20 SE'
      device: 'tablet'
    - regex: 'OBOOK10 SE(?:[);/ ]|$)'
      model: 'oBook 10 SE'
      device: 'tablet'
    - regex: 'V10_4G(?:[);/ ]|$)'
      model: 'V10 4G'
      device: 'tablet'

    - regex: '([a-z0-9]+)[ _]Onda'
      model: '$1'
    - regex: 'Onda ([a-z0-9]+)'
      model: '$1'

# OnePlus (www.oneplus.com or oneplus.com.ru)
OnePlus:
  regex: '(?:du_)?ONEPLUS|(?:PGKM10|CPH2447|CPH240[19]|CPH24[12]3|CPH2469|CPH241[15]|CPH2459|CPH2399|CPH2381|A0001|A200[135]|AC200[13]|A300[03]|A3010|A5000|A600[03]|A601[03]|BE201[1235]|BE202[5689]|E100[135]|GM191[03517]|GM190[0135]|GM192[05]|HD191[0137]|HD190[01357]|HD1925|IN201[013579]|IN202[0135]|KB200[01357]|LE211[01357]|LE212[035]|GN2200|Nord N10 5G|LE210[01]|LE212[17]|DE211[78]|DN210[13]|EB210[13]|MT211[01]|IV2201|NE221[01357]|PGZ110|PGP110|PHK110)(?: Build|\))'
  device: 'smartphone'
  models:
    - regex: 'CPH2447(?:[);/ ]|$)'
      model: '11'
    - regex: 'PGKM10(?:[);/ ]|$)'
      model: 'Ace'
    - regex: 'PHK110(?:[);/ ]|$)'
      model: 'Ace 2'
    - regex: 'PGP110(?:[);/ ]|$)'
      model: 'Ace Pro'
    - regex: 'PGZ110(?:[);/ ]|$)'
      model: 'Ace Racing Edition'
    - regex: 'AC200[13](?:[);/ ]|$)'
      model: 'Nord 5G'
    - regex: '(?:CPH2399|CPH2401)(?:[);/ ]|$)'
      model: 'Nord 2T'
    - regex: 'EB210[13](?:[);/ ]|$)'
      model: 'Nord CE 5G'
    - regex: 'CPH(?:2381|2409)(?:[);/ ]|$)'
      model: 'Nord CE 2 Lite'
    - regex: 'BE2012(?:[);/ ]|$)'
      model: 'Clover'
    - regex: 'BE201[135](?:[);/ ]|$)'
      model: 'Nord N100'
    - regex: 'DE211[78](?:[);/ ]|$)'
      model: 'Nord N200 5G'
    - regex: '(?:GN2200|CPH2459)(?:[);/ ]|$)'
      model: 'Nord N20 5G'
    - regex: 'CPH2469(?:[);/ ]|$)'
      model: 'Nord N20 SE'
    - regex: 'BE2025(?:[);/ ]|$)'
      model: 'Nord N10'
    - regex: '(BE202[69]|Nord N10 5G)(?:[);/ ]|$)'
      model: 'Nord N10 5G'
    - regex: 'BE2028(?:[);/ ]|$)'
      model: 'Nord N10 Lite'
    - regex: 'DN210[13](?:[);/ ]|$)'
      model: 'Nord 2 5G'
    - regex: 'IV2201(?:[);/ ]|$)'
      model: 'Nord CE 2'
    - regex: 'IN202[0135](?:[);/ ]|$)'
      model: '8 Pro'
    - regex: 'KB2000(?:[);/ ]|$)'
      model: '8T'
    - regex: 'OnePlus 8 Lite(?:[);/ ]|$)'
      model: '8 Lite'
    - regex: '(?:IN201[01357]|OnePlus 8)(?:[);/ ]|$)'
      model: '8'
    - regex: 'IN2019(?:[);/ ]|$)'
      model: '8 5G UW'
    - regex: 'LE211[01357](?:[);/ ]|$)'
      model: '9'
    - regex: 'MT211[01](?:[);/ ]|$)'
      model: '9RT 5G'
    - regex: 'LE210[01](?:[);/ ]|$)'
      model: '9R'
    - regex: 'CPH2423(?:[);/ ]|$)'
      model: '10R'
    - regex: 'CPH2411(?:[);/ ]|$)'
      model: '10R 5G'
    - regex: 'CPH241[3579](?:[);/ ]|$)'
      model: '10T 5G'
    - regex: 'LE212[01357](?:[);/ ]|$)'
      model: '9 Pro'
    - regex: 'NE2210(?:[);/ ]|$)'
      model: '10 Pro Extreme Edition'
    - regex: 'NE221[1357](?:[);/ ]|$)'
      model: '10 Pro'
    - regex: '(?:GM191[01357]|OnePlus 7 Pro)(?:[);/ ]|$)'
      model: '7 Pro'
    - regex: 'GM190[0135](?:[);/ ]|$)'
      model: '7'
    - regex: 'HD190[01357](?:[);/ ]|$)'
      model: '7T'
    - regex: '(?:HD191[0137]|OnePlus 7T Pro)(?:[);/ ]|$)'
      model: '7T Pro'
    - regex: '(?:HD1925|GM192[05])(?:[);/ ]|$)'
      model: '7T Pro 5G'
    - regex: 'KB200[1357](?:[);/ ]|$)'
      model: '8T'
    - regex: 'A0001(?:[);/ ]|$)'
      model: 'One'
    - regex: 'A200[135]|OnePlus2'
      model: '2'
    - regex: 'E100[135](?:[);/ ]|$)'
      model: 'X'
    - regex: 'A3010|OnePlus3T'
      model: '3T'
    - regex: 'A300[03]|OnePlus3'
      model: '3'
    - regex: 'A5010|OnePlus[ ]?5T'
      model: '5T'
    - regex: 'A5000|OnePlus5'
      model: '5'
    - regex: 'A600[03]|OnePlus6'
      model: '6'
    - regex: 'A601[03](?:[);/ ]|$)'
      model: '6T'
    - regex: '(?:du_)?ONEPLUS[ _]?([^;/,)]+)(?: Build|[;,)])'
      model: '$1'

# Realme (sub brand Oppo)
Realme:
  regex: 'Realme[ _]|(?:RMX(?:18(0[13579]|11|3[13]|2[1257]|[45]1|53|45)|19(03|4[1235]|19|9[23]|2[1579]|[01379]1|73)|20(?:[025-7]1|42|[0357]2|03|2[257]|63|7[56]|63L1|8[1356]|[2-5]0)|21(?:0[13]|1[27]|[12]1|4[24]|5[156]|6[13]|7[036]|8[059]|9[345])|220[0125]|30(?:[3468]1|4[23]|9[23]|63|85)|31(?:15|2[125]|42|51|6[16]|71|9[1357])|32(?:0[13]|35|42|[346]1|6[0235689]|86)|33(?:[0157]0|[17]2|71|6[036]|[0186]1|57|88|9[12356])|34(?:30|78|[69]1|[67]2|7[145]|9[23])|35(?:0[1236]|1[1367]|21|[578]1|6[0123]|7[24])|36(?:1[012]|[39]0|2[34]|8[67]|6[13]))|(?:OPPO[ _]?)?CPH1861|RMP210[235-8])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:OPPO[ _]?)?RMX3142(?:[);/ ]|$)'
      model: 'Q3 Pro Play'
    - regex: '(?:OPPO[ _]?)?CPH1861(?:[);/ ]|$)'
      model: '1'
    - regex: 'RMX3663'
      model: '10 Pro'
    - regex: 'RMX180[59]'
      model: '2'
    - regex: 'RMX180[137]'
      model: '2 Pro'
    - regex: 'RMX(1833|182[125])'
      model: '3'
    - regex: 'RMX1827'
      model: '3i'
    - regex: 'RMX185[13]'
      model: '3 Pro'
    - regex: 'RMX190[13]|Realme X(?:[);/ ]|$)'
      model: 'X'
    - regex: 'RMX199[12]'
      model: 'X2'
    - regex: 'RMX1993'
      model: 'X2 Dual'
    - regex: 'RMX1931|Realme X2 Pro(?:[);/ ]|$)'
      model: 'X2 Pro'
    - regex: 'RMX2117'
      model: 'Q2 5G'
    - regex: 'RMX2173'
      model: 'Q2 Pro'
    - regex: 'RMX2205'
      model: 'Q3 Pro 5G'
    - regex: 'RMX3161'
      model: 'Q3 5G'
    - regex: 'RMX3462'
      model: 'Q3t'
    - regex: 'RMX3372'
      model: 'Q5 Pro'
    - regex: 'RMX3478'
      model: 'Q5'
    - regex: 'RMX3574'
      model: 'Q5i'
    - regex: 'RMX2176(?:[);/ ]|$)'
      model: 'X7 5G'
    - regex: 'RMX2121(?:[);/ ]|$)'
      model: 'X7 Pro 5G'
    - regex: 'RMX1921|Realme XT(?:[);/ ]|$)'
      model: 'XT'
    - regex: 'RMX19(1[19]|27)'
      model: '5'
    - regex: 'RMX197[13]'
      model: '5 Pro'
    - regex: 'RMX203[02]'
      model: '5i'
    - regex: 'RMX1929'
      model: '5s'
    - regex: 'RMX200[13]'
      model: '6'
    - regex: 'RMX204[02]'
      model: '6i'
    - regex: 'RMX2002'
      model: '6S'
    - regex: 'RMX206[13](?:L1)?(?:[);/ ]|$)'
      model: '6 Pro'
    - regex: 'RMX215[15]'
      model: '7'
    - regex: 'RMX2103'
      model: '7I'
    - regex: 'RMX2170'
      model: '7 Pro'
    - regex: 'RMX3115'
      model: 'X7 Pro Extreme Edition'
    - regex: 'RMX3081'
      model: '8 Pro'
    - regex: 'RMX3085'
      model: '8'
    - regex: 'RMX3151|Realme 8i(?:[);/ ]|$)'
      model: '8i'
    - regex: 'RMX3381'
      model: '8s'
    - regex: 'RMX3241'
      model: '8 5G'
    - regex: 'RMX349[123]'
      model: '9i'
    - regex: 'RMX3612'
      model: '9i 5G'
    - regex: 'RMX3521'
      model: '9'
    - regex: 'RMX3388|RMX3474'
      model: '9 5G'
    - regex: 'RMX339[23]'
      model: '9 Pro+ 5G'
    - regex: 'RMX347[12]'
      model: '9 Pro 5G'
    - regex: 'RMX3630'
      model: '10'
    - regex: 'RMX3661'
      model: '10 Pro 5G'
    - regex: 'RMX368[67]'
      model: '10 Pro+ 5G'
    - regex: 'RMX1925(?:[);/ ]|$)'
      model: '5S'
    - regex: 'RMX1811(?:[);/ ]|$)'
      model: 'C1'
    - regex: 'RMX194[1235](?:[);/ ]|$)'
      model: 'C2'
    - regex: '(?:RMX202[1207]|Realme G70 Series)(?:[);/ ]|$)'
      model: 'C3'
    - regex: 'RMX2185(?:[);/ ]|$)'
      model: 'C11'
    - regex: 'RMX2189(?:[);/ ]|$)'
      model: 'C12'
    - regex: 'RMX2180(?:[);/ ]|$)'
      model: 'C15'
    - regex: 'RMX219[45](?:[);/ ]|$)'
      model: 'C15 Qualcomm Edition'
    - regex: 'RMX2101(?:[);/ ]|$)'
      model: 'C17'
    - regex: 'RMX306[13](?:[);/ ]|$)'
      model: 'C20'
    - regex: 'RMX320[13]'
      model: 'C21'
    - regex: 'RMX326[123]'
      model: 'C21Y'
    - regex: 'RMX319[13]'
      model: 'C25'
    - regex: 'RMX319[57]'
      model: 'C25s'
    - regex: 'RMX326[589]'
      model: 'C25Y'
    - regex: 'RMX350[123]'
      model: 'C31'
    - regex: 'RMX(?:3581|3623)'
      model: 'C30'
    - regex: 'RMX3690'
      model: 'C30s'
    - regex: 'RMX3624'
      model: 'C33'
    - regex: 'RMX351[13]'
      model: 'C35'
    - regex: 'RMX3231'
      model: 'C11 (2021)'
    - regex: 'RMX330[01]'
      model: 'GT 2 Pro'
    - regex: 'RMX331[012]'
      model: 'GT 2'
    - regex: 'RMX3551'
      model: 'GT 2 Explorer Master'
    - regex: 'RMX3031(?:[);/ ]|$)'
      model: 'GT Neo'
    - regex: 'RMX3370(?:[);/ ]|$)'
      model: 'GT Neo 2'
    - regex: 'RMX356[012](?:[);/ ]|$)'
      model: 'GT Neo 3'
    - regex: 'RMX3563(?:[);/ ]|$)'
      model: 'GT Neo 3 150W'
    - regex: 'RMX3371(?:[);/ ]|$)'
      model: 'GT Neo 3T'
    - regex: 'RMX3357(?:[);/ ]|$)'
      model: 'GT Neo 2T'
    - regex: 'RMX336[0136]'
      model: 'GT Master Edition'
    - regex: 'RMX3350(?:[);/ ]|$)'
      model: 'GT Neo Flash'
    - regex: 'RMX216[13](?:[);/ ]|$)'
      model: 'Narzo 20 Pro'
    - regex: 'RMX2193'
      model: 'Narzo 20'
    - regex: 'RMX2050'
      model: 'Narzo 20A'
    - regex: 'RMX3171'
      model: 'Narzo 30A'
    - regex: 'RMX2156'
      model: 'Narzo 30'
    - regex: 'RMX3242'
      model: 'Narzo 30 5G'
    - regex: 'RMX3430'
      model: 'Narzo 50A'
    - regex: 'RMX3286'
      model: 'Narzo 50'
    - regex: 'RMX3572'
      model: 'Narzo 50 5G'
    - regex: 'RMX3395'
      model: 'Narzo 50 Pro'
    - regex: 'RMX3396'
      model: 'Narzo 50 Pro 5G'
    - regex: 'RMX351[67]'
      model: 'Narzo 50A Prime'
    - regex: 'RMX3235'
      model: 'Narzo 50i'
    - regex: 'RMX3506'
      model: 'Narzo 50i Prime'
    - regex: 'RMX1831(?:[);/ ]|$)'
      model: 'U1'
    - regex: 'RMX(?:20(?:51|[2]5)|2144)(?:[);/ ]|$)'
      model: 'X50 5G'
    - regex: 'RMX2052(?:[);/ ]|$)'
      model: 'X50t 5G'
    - regex: 'RMX2071(?:[);/ ]|$)'
      model: 'X50 Pro'
    - regex: 'RMX207[56](?:[);/ ]|$)'
      model: 'X50 Pro 5G'
    - regex: 'RMX2072(?:[);/ ]|$)'
      model: 'X50 Pro Player'
    - regex: 'RMX(2142|2081)(?:[);/ ]|$)'
      model: 'X3'
    - regex: 'RMX208[56]'
      model: 'X3 Super Zoom'
    - regex: 'RMX2083'
      model: 'X3'
    - regex: 'RMX2173'
      model: 'Q2 Pro'
    - regex: 'RMX346[12]'
      model: 'Q3s'
    - regex: 'RMX211[12]'
      model: 'V5 5G'
    - regex: 'RMX220[01]'
      model: 'V3 5G'
    - regex: 'RMX312[12]'
      model: 'V11 5G'
    - regex: 'RMX3125'
      model: 'V11s 5G'
    - regex: 'RMX304[123]'
      model: 'V13 5G'
    - regex: 'RMX309[23]'
      model: 'V15 5G'
    - regex: 'RMX361[01]'
      model: 'V20'
    - regex: 'RMX3571'
      model: 'V23'
    - regex: 'RMX3475'
      model: 'V25'
    - regex: 'RMX2202'
      model: 'GT 5G'
    - regex: 'Realme[ _]([1-9])[ _]Pro(?:[);/ ]|$)'
      model: '$1 Pro'
    - regex: 'RMP210[23](?:[);/ ]|$)'
      device: 'tablet'
      model: 'Pad'
    - regex: 'RMP210[78]'
      device: 'tablet'
      model: 'Pad X'
    - regex: 'RMP210[56](?:[);/ ]|$)'
      device: 'tablet'
      model: 'Pad Mini'

# Oppo (oppo.com)
OPPO:
  regex: '(?:OB-)?OPPO[ _]?([a-z0-9]+)|N1T|R8001|R820[16]|A101OP|OPG0[1-4]|A00[12]OP|(?:X90[07][0679]|U70[57]T?|X909T?|R(?:10[01]1|2001|201[07]|6007|7005|7007|80[13579]|81[13579]|82[01379]|83[013]|800[067]|8015|810[679]|811[13]|820[057])[KLSTW]?|N520[79]|N5117|A33[wf]|A33fw|A37fw?|PAAM00|PAAT00|PAC[TM]00|R7kf|R7plus[fmt]?|A1601|CPH[0-9]{4}|CPH19(69|79|23|1[179])|PB(A[TM]00|CT10|BT30|CM[13]0|[FD]M00)|P(E[RFHG]M\d{2}|E[GH]T\d{2}|DAM10|ADM00|AF[TM]00|ADT00|AHM00|BBM[03]0|BBT00|BDT00|BFT00|[CB]E[MT]00|CA[MT]00|C[CDG]M00|CA[MT]10|[CD]PM00|CRM00|CDT00|CD[TM]10|CHM[013]0|CKM[08]0|CLM[15]0|DEM[13]0|DHM00|D[RK][TM]00|DPT00|DB[TM]00|DCM00|[CD]NM00|DVM00|DY[TM][12]0|DNT00|EA[TM]00|CRT01|EDM00)|PFDM00|PEG[MT]10|PEM[MT][02]0|PDCT00|PDET10|PDS[TM]00|PEC[MT]30|PE[QYPEXNLU]M00|PCHT30|PCRT00|PFGM00|PF[VU]M10|A102OP|PFCM00|PFJM10|PGCM10|PECM20|PDAT10|A103OP|PCCT00|PFTM[12]0|PFFM20|OW19W[123]|OW20W1|PGJM10|PGAM10|PF[EF]M10|Reno[45] Z 5G|Reno5 Pro 5G|Reno5 5G|Find X[23]|Find N| R7sf| 1201|[56].*; (?:R7[gf])|OPD210[12]A?|OPD2201|PFZM10|PGIM10|A1603|A201OP|PESM10|PGBM10|PHA120|PGGM10|PHM110|PG[WX]110|PGU110|PHJ110|PCCM40|PHQ110)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'PCHM10(?:[);/ ]|$)'
      model: 'A11'
    - regex: 'PHQ110(?:[);/ ]|$)'
      model: 'A1 Pro'
    - regex: 'PCHT30(?:[);/ ]|$)'
      model: 'A11x'
    - regex: '(?:CPH2083|CPH2077)(?:[);/ ]|$)'
      model: 'A12'
    - regex: '(?:CPH2179)(?:[);/ ]|$)'
      model: 'A15s'
    - regex: '(?:CPH2271)(?:[);/ ]|$)'
      model: 'A16s'
    - regex: 'CPH2421'
      model: 'A16e'
    - regex: 'CPH2349'
      model: 'A16k'
    - regex: 'CPH2477'
      model: 'A17'
    - regex: 'CPH2471'
      model: 'A17k'
    - regex: '(?:CPH2185)(?:[);/ ]|$)'
      model: 'A15'
    - regex: 'PCHM00(?:[);/ ]|$)'
      model: 'A11x'
    - regex: 'CPH1923(?:[);/ ]|$)'
      model: 'A1k'
    - regex: 'CPH2071(?:[);/ ]|$)'
      model: 'A11k'
    - regex: 'CPH1925(?:[);/ ]|$)'
      model: 'A1s'
    - regex: 'CPH22(?:69|75)(?:[);/ ]|$)'
      model: 'A16'
    - regex: '(?:OPPO[ _]?)?(CPH1837|PAD[TM]00)(?:[);/ ]|$)'
      model: 'A3'
    - regex: '(?:OPPO[ _]?)?A37f(w)(?:[);/ ]|$)'
      model: 'A37f$1'
    - regex: 'A37f(?:[);/ ]|$)'
      model: 'A37f'
    - regex: '(?:OPPO[ _]?)?CPH1605(?:[);/ ]|$)'
      model: 'A39'
    - regex: 'PESM10(?:[);/ ]|$)'
      model: 'A36'
    - regex: 'CPH20(?:81|73|31|15)(?:[);/ ]|$)'
      model: 'A31'
    - regex: 'CPH2137(?:[);/ ]|$)'
      model: 'A33'
    - regex: '(?:OPPO[ _]?)?(?:CPH18(?:0[35]|53)|PBBM30)(?:[);/ ]|$)'
      model: 'A3s'
    - regex: '(?:OPPO[ _]?)?(?:CPH1809|PBA[TM]00|PBBT30)(?:[);/ ]|$)'
      model: 'A5'
    - regex: 'CPH19(?:3[13]|43)(?:[);/ ]|$)'
      model: 'A5 (2020)'
    - regex: '(?:PEC[MT]30|PECM20)(?:[);/ ]|$)'
      model: 'A53 5G'
    - regex: 'PDVM00(?:[);/ ]|$)'
      model: 'A32'
    - regex: 'PEFM00(?:[);/ ]|$)'
      model: 'A35'
    - regex: '(?:PDA[TM]10|CPH2069|CPH2061)(?:[);/ ]|$)'
      model: 'A52'
    - regex: 'CPH(?:2127|213[19])(?:[);/ ]|$)'
      model: 'A53'
    - regex: 'CPH2135(?:[);/ ]|$)'
      model: 'A53s'
    - regex: 'CPH2321(?:[);/ ]|$)'
      model: 'A53s 5G'
    - regex: '(?:CPH2195|OPG02|CPH2303)(?:[);/ ]|$)'
      model: 'A54 5G'
    - regex: '(?:CPH2239|CPH2241)(?:[);/ ]|$)'
      model: 'A54'
    - regex: 'CPH2273(?:[);/ ]|$)'
      model: 'A54s'
    - regex: 'PEM[MT][02]0(?:[);/ ]|$)'
      model: 'A55 5G'
    - regex: 'CPH2325(?:[);/ ]|$)'
      model: 'A55'
    - regex: '(?:A102OP|CPH2309)(?:[);/ ]|$)'
      model: 'A55s 5G'
    - regex: 'PFVM10'
      model: 'A56 5G'
    - regex: '(?:OPPO[ _]?)?(?:CPH170[15])(?:[);/ ]|$)'
      model: 'A57'
    - regex: 'PFTM20|CPH2387'
      model: 'A57 (2022)'
    - regex: 'PHJ110'
      model: 'A58 5G'
    - regex: 'PFTM10'
      model: 'A97'
    - regex: 'PHA120'
      model: 'A96'
    - regex: 'CPH19(?:09|1[02])(?:[);/ ]|$)'
      model: 'A5S'
    - regex: '(?:OPPO[ _]?)?(?:CPH190[15]|PBF[TM]00)(?:[);/ ]|$)'
      model: 'A7'
    - regex: '(?:OPPO[ _]?)?CPH1717(?:[);/ ]|$)'
      model: 'A71'
    - regex: '(?:OPPO[ _]?)?CPH1801(?:[);/ ]|$)'
      model: 'A71 (2018)'
    - regex: '(?:OPPO[ _]?)?(?:PDY[TM]20|CPH2067)(?:[);/ ]|$)'
      model: 'A72'
    - regex: 'CPH(?:2161|2099)(?:[);/ ]|$)'
      model: 'A73 5G'
    - regex: 'CPH2219(?:[);/ ]|$)'
      model: 'A74'
    - regex: 'CPH2263(?:[);/ ]|$)'
      model: 'A74 5G'
    - regex: '(?:OPPO[ _]?)?(?:PDY[TM]10)(?:[);/ ]|$)'
      model: 'A72n 5G'
    - regex: 'CPH2375'
      model: 'A76'
    - regex: '(?:OPPO[ _]?)?(?:CPH1715)(?:[);/ ]|$)'
      model: 'A77'
    - regex: '(?:OPPO[ _]?)?(?:CPH2339|CPH2385)'
      model: 'A77 5G'
    - regex: '(?:OPPO[ _]?)?(?:CPH2495)'
      model: 'A78 5G'
    - regex: '(?:OPPO[ _]?)?A79kt'
      model: 'A79'
    - regex: '(?:OPPO[ _]?)?CPH2473'
      model: 'A77s'
    - regex: 'PCD[TM]00(?:[);/ ]|$)'
      model: 'A7n'
    - regex: '(PBBT00|PBBM00)(?:[);/ ]|$)'
      model: 'A7x'
    - regex: '(?:OPPO[ _]?)?(?:PDBM00)(?:[);/ ]|$)'
      model: 'A8'
    - regex: '(?:OPPO[ _]?)?CPH1729(?:[);/ ]|$)'
      model: 'A83'
    - regex: '(?:OPPO[ _]?)?CPH1827(?:[);/ ]|$)'
      model: 'A83 (2018)'
    - regex: '(?:OPPO[ _]?)?(?:PCA[TM]10|CPH193[89])(?:[);/ ]|$)'
      model: 'A9'
    - regex: '(CPH1937|CPH1941|PCHM30)(?:[);/ ]|$)'
      model: 'A9 (2020)'
    - regex: '(?:PCPM00|CPH20[02]1)(?:[);/ ]|$)'
      model: 'A91'
    - regex: 'CPH2059(?:[);/ ]|$)'
      model: 'A92'
    - regex: 'PDK[TM]00(?:[);/ ]|$)'
      model: 'A92s'
    - regex: '(?:PEH[MT]00|CPH212[13])(?:[);/ ]|$)'
      model: 'A93'
    - regex: '(?:PFGM00)(?:[);/ ]|$)'
      model: 'A93s'
    - regex: 'PFUM10'
      model: 'A96 5G'
    - regex: '(?:CPH2203|CPH2333)(?:[);/ ]|$)'
      model: 'A94'
    - regex: '(?:CPH2197)(?:[);/ ]|$)'
      model: 'A74 5G'
    - regex: 'CPH2365|PELM00'
      model: 'A95'
    - regex: 'PCE[TM]00(?:[);/ ]|$)'
      model: 'A9x'
    - regex: '(?:OPPO[ _]?)?CPH1851(?:[);/ ]|$)'
      model: 'AX5'
    - regex: 'CPH1920(?:[);/ ]|$)'
      model: 'AX5s'
    - regex: '(?:OPPO[ _]?)?CPH1903(?:[);/ ]|$)'
      model: 'AX7'
    - regex: 'CPH2341'
      model: 'F21 Pro'
    - regex: 'CPH2455|CPH2461'
      model: 'F21s Pro'
    - regex: '(?:OPPO[ _]?)?X9009(?:[);/ ]|$)'
      model: 'F1 Plus'
    - regex: 'CPH191[135](?:[);/ ]|$)'
      model: 'F11'
    - regex: 'CPH19(?:69|87)(?:[);/ ]|$)'
      model: 'F11 Pro'
    - regex: '(?:OPPO[ _]?)?CPH2095'
      model: 'F17'
    - regex: '(?:OPPO[ _]?)?(?:CPH2119)(?:[);/ ]|$)'
      model: 'F17 Pro'
    - regex: '(?:OPPO[ _]?)?A1601(?:[);/ ]|$)'
      model: 'F1s'
    - regex: '(?:OPPO[ _]?)?CPH1609(?:[);/ ]|$)'
      model: 'F3'
    - regex: '(?:OPPO[ _]?)?CPH1613(?:[);/ ]|$)'
      model: 'F3 Plus'
    - regex: '(?:OPPO[ _]?)?CPH172[37](?:[);/ ]|$)'
      model: 'F5'
    - regex: '(?:OPPO[ _]?)?CPH1725(?:[);/ ]|$)'
      model: 'F5 Youth'
    - regex: '(?:OPPO[ _]?)?CPH18(?:[15]9|21)(?:[);/ ]|$)'
      model: 'F7'
    - regex: '(?:OPPO[ _]?)?(?:CPH1825|CPH1881)(?:[);/ ]|$)'
      model: 'F9'
    - regex: '(?:OPPO[ _]?)?CPH1823(?:[);/ ]|$)'
      model: 'F9 Pro'
    - regex: '(?:OPPO[ _]?)?CPH2223(?:[);/ ]|$)'
      model: 'F19s'
    - regex: '(?:OPPO[ _]?)?CPH2285(?:[);/ ]|$)'
      model: 'F19 Pro'
    - regex: '(?:OPPO[ _]?)?CPH2213(?:[);/ ]|$)'
      model: 'F19 Pro Plus'
    - regex: '(?:OPPO[ _]?)?X909T?(?:[);/ ]|$)'
      model: 'Find 5'
    - regex: '(?:OPPO[ _]?)?R827T?(?:[);/ ]|$)'
      model: 'Find 5 Mini'
    - regex: '(?:OPPO[ _]?)?X907[067](?:[);/ ]|$)'
      model: 'Find 7'
    - regex: '(?:OPPO[ _]?)?X900[067](?:[);/ ]|$)'
      model: 'Find 7a'
    - regex: '(?:OPPO[ _]?)?PEUM00'
      model: 'Find N 5G'
    - regex: '(?:OPPO[ _]?)?Find N(?:[);/ ]|$)'
      model: 'Find N'
    - regex: '(?:OPPO[ _]?)?PGU110(?:[);/ ]|$)'
      model: 'Find N2'
    - regex: '(?:OPPO[ _]?)?R815[TW]?(?:[);/ ]|$)'
      model: 'Find Clover'
    - regex: '(?:OPPO[ _]?)?R8015(?:[);/ ]|$)'
      model: 'Find Guitar'
    - regex: '(?:OPPO[ _]?)?R8111(?:[);/ ]|$)'
      model: 'Find Melody'
    - regex: '(?:OPPO[ _]?)?R821T?(?:[);/ ]|$)'
      model: 'Find Muse'
    - regex: '(?:OPPO[ _]?)?U707T?(?:[);/ ]|$)'
      model: 'Find Way S'
    - regex: '(?:OPPO[ _]?)?U705T(?:[);/ ]|$)'
      model: 'Ulike 2'
    - regex: '(?:OPPO[ _]?)?(?:CPH187[15]|PAF[MT]00)(?:[);/ ]|$)'
      model: 'Find X'
    - regex: '(?:OPPO[ _]?)?(?:PAHM00)(?:[);/ ]|$)'
      model: 'Find X Lamborghini'
    - regex: '(?:OPPO[ _]?)?(?:PDE[TM]10|CPH2023)(?:[);/ ]|$)'
      model: 'Find X2'
    - regex: '(?:OPPO[ _]?)?(?:CPH2005|Find X2 Lite)(?:[);/ ]|$)'
      model: 'Find X2 Lite'
    - regex: '(?:OPPO[ _]?)?(?:PDEM30|OPG01|CPH2025|Find X2 Pro)(?:[);/ ]|$)'
      model: 'Find X2 Pro'
    - regex: 'PEDM00(?:[);/ ]|$)'
      model: 'Find X3'
    - regex: 'Find X3 Neo(?:[);/ ]|$)'
      model: 'Find X3 Neo'
    - regex: '(?:PEEM00|CPH2173|OPG03)(?:[);/ ]|$)'
      model: 'Find X3 Pro'
    - regex: 'CPH2307|PFFM10'
      model: 'Find X5'
    - regex: 'CPH2305|PFEM10|PFFM20'
      model: 'Find X5 Pro'
    - regex: '(?:OPPO[ _]?)?R1011 Build'
      model: 'Joy Plus'
    - regex: '(?:OPPO[ _]?)?(PBC(?:M30|T10))(?:[);/ ]|$)'
      model: 'K1'
    - regex: 'A1603(?:[);/ ]|$)'
      model: 'C1'
    - regex: 'CPH1955(?:[);/ ]|$)'
      model: 'K3'
    - regex: '(?:OPPO[ _]?)?(PCNM00)(?:[);/ ]|$)'
      model: 'K5'
    - regex: '(?:OPPO[ _]?)?(PCLM50)(?:[);/ ]|$)'
      model: 'K7'
    - regex: '(?:OPPO[ _]?)?(PERM00)(?:[);/ ]|$)'
      model: 'K7x'
    - regex: '(?:OPPO[ _]?)?PGCM10'
      model: 'K9x'
    - regex: '(?:OPPO[ _]?)?PGGM10'
      model: 'K10x'
    - regex: '(?:OPPO[ _]?)?PERM10'
      model: 'K9s'
    - regex: '(?:OPPO[ _]?)?CPH2373'
      model: 'K10'
    - regex: '(?:OPPO[ _]?)?(?:PGJM10|CPH2337)'
      model: 'K10 5G'
    - regex: '(?:OPPO[ _]?)?PGIM10'
      model: 'K10 Pro 5G'
    - regex: '(?:OPPO[ _]?)?N5117(?:[);/ ]|$)'
      model: 'N1 Mini'
    - regex: '(?:OPPO[ _]?)?N520[79](?:[);/ ]|$)'
      model: 'N3'
    - regex: '(?:OPPO[ _]?)?R831T?(?:[);/ ]|$)'
      model: 'Neo'
    - regex: '(?:OPPO[ _]?)?R831K(?:[);/ ]|$)'
      model: 'Neo 3'
    - regex: '(?:OPPO[ _]?)?(?:R831[SL]|1201)(?:[);/ ]|$)'
      model: 'Neo 5'
    - regex: '(?:OPPO[ _]?)?A33[wf](?:[);/ ]|$)'
      model: 'Neo 7'
    - regex: '(?:OPPO[ _]?)?A33fw(?:[);/ ]|$)'
      model: 'Neo 7s'
    - regex: '(?:OPPO[ _]?)?R8113(?:[);/ ]|$)'
      model: 'Piano'
    - regex: '(?:OPPO[ _]?)?CPH1707(?:[);/ ]|$)'
      model: 'R11'
    - regex: '(?:OPPO[ _]?)?R11 Plusk?t?(?:[);/ ]|$)'
      model: 'R11 Plus'
    - regex: 'R8001(?:[);/ ]|$)'
      model: 'R1K'
    - regex: 'R820[16](?:[);/ ]|$)'
      model: 'R1x'
    - regex: '(?:OPPO[ _]?)?(?:CPH1721|R11s Plust?)(?:[);/ ]|$)'
      model: 'R11s Plus'
    - regex: '(?:OPPO[ _]?)?(?:CPH1719|R11st?)(?:[);/ ]|$)'
      model: 'R11s'
    - regex: '(?:OPPO[ _]?)?(?:CPH1835|PAC[TM]00|PAAM00)(?:[);/ ]|$)'
      model: 'R15'
    - regex: '(?:OPPO[ _]?)?(?:CPH183[13]|PAAT00)(?:[);/ ]|$)'
      model: 'R15 Pro'
    - regex: 'PBCM10(?:[);/ ]|$)'
      model: 'R15x'
    - regex: '(?:OPPO[ _]?)?(?:CPH1879|PBE[MT]00)(?:[);/ ]|$)'
      model: 'R17'
    - regex: '(?:OPPO[ _]?)?(?:CPH1893)(?:[);/ ]|$)'
      model: 'R17 Neo'
    - regex: '(?:OPPO[ _]?)?(?:CPH1877|PBD[MT]00)(?:[);/ ]|$)'
      model: 'R17 Pro'
    - regex: '(?:OPPO[ _]?)?R8006(?:[);/ ]|$)'
      model: 'R1L'
    - regex: '(?:OPPO[ _]?)?R800[07](?:[);/ ]|$)'
      model: 'R1S'
    - regex: '(?:OPPO[ _]?)?R810[679](?:[);/ ]|$)'
      model: 'R5'
    - regex: '(?:OPPO[ _]?)?R7kf(?:[);/ ]|$)'
      model: 'R7 Lite'
    - regex: '(?:OPPO[ _]?)?R7sPlus(?:[);/ ]|$)'
      model: 'R7s Plus'
    - regex: '(?:OPPO[ _]?)?R7sf(?:[);/ ]|$)'
      model: 'R7s'
    - regex: '(?:OPPO[ _]?)?R7[gf](?:[);/ ]|$)'
      model: 'R7'
    - regex: '(?:OPPO[ _]?)?R7Plus[mt]?(?:[);/ ]|$)'
      model: 'R7 Plus'
    - regex: '(?:OPPO[ _]?)?R7Plusf(?:[);/ ]|$)'
      model: 'R7 Plus F'
    - regex: '(?:OPPO[ _]?)?X9079(?:[);/ ]|$)'
      model: 'R9 Plus'
    - regex: '(?:OPPO[ _]?)?(?:CPH1607|R9sk)(?:[);/ ]|$)'
      model: 'R9s'
    - regex: '(?:OPPO[ _]?)?(?:CPH1611|R9s Plus)(?:[);/ ]|$)'
      model: 'R9s Plus'
    - regex: '(?:CPH1917|PCA[MT]00)(?:[);/ ]|$)'
      model: 'Reno'
    - regex: 'CPH1983(?:[);/ ]|$)'
      model: 'Reno A'
    - regex: '(?:CPH1919|PCCM00)(?:[);/ ]|$)'
      model: 'Reno 10X Zoom'
    - regex: 'PCCT00'
      model: 'Reno 10X'
    - regex: '(?:PCKM00|CPH1907)(?:[);/ ]|$)'
      model: 'Reno 2'
    - regex: 'CPH1989(?:[);/ ]|$)'
      model: 'Reno 2F'
    - regex: '(?:PCKM80|CPH1945|CPH1951)(?:[);/ ]|$)'
      model: 'Reno 2Z'
    - regex: '(?:CPH2043|PDCT00)(?:[);/ ]|$)'
      model: 'Reno 3'
    - regex: '(?:CPH2013|A002OP)(?:[);/ ]|$)'
      model: 'Reno 3A'
    - regex: '(?:PDCM00|A001OP)(?:[);/ ]|$)'
      model: 'Reno 3 5G'
    - regex: '(?:PCR[MT]00|CPH203[567]|CPH2009)'
      model: 'Reno 3 Pro'
    - regex: 'PCRT01(?:[);/ ]|$)'
      model: 'Reno 3 Lite'
    - regex: 'CPH2113(?:[);/ ]|$)'
      model: 'Reno 4 4G'
    - regex: 'CPH2125(?:[);/ ]|$)'
      model: 'Reno 4 Lite'
    - regex: 'CPH2109(?:[);/ ]|$)'
      model: 'Reno 4 Pro 4G'
    - regex: '(?:PDP[TM]00|CPH2091)(?:[);/ ]|$)'
      model: 'Reno 4 5G'
    - regex: 'PEA[TM]00(?:[);/ ]|$)'
      model: 'Reno 4 SE 5G '
    - regex: '(?:PDN[TM]00|CPH2089)(?:[);/ ]|$)'
      model: 'Reno 4 Pro 5G'
    - regex: 'CPH2065|Reno4 Z 5G'
      model: 'Reno 4Z 5G'
    - regex: 'CPH2209(?:[);/ ]|$)'
      model: 'Reno 4F'
    - regex: 'CPH2159(?:[);/ ]|$)'
      model: 'Reno 5'
    - regex: '(?:CPH2199|A10[13]OP)(?:[);/ ]|$)'
      model: 'Reno 5A'
    - regex: 'CPH2205(?:[);/ ]|$)'
      model: 'Reno 5 Lite'
    - regex: '(?:PEG[MT]00|CPH2145|Reno5 5G)(?:[);/ ]|$)'
      model: 'Reno 5 5G'
    - regex: 'PEG[MT]10(?:[);/ ]|$)'
      model: 'Reno 5K'
    - regex: 'CPH2217(?:[);/ ]|$)'
      model: 'Reno 5F'
    - regex: '(?:CPH2211|Reno5 Z 5G)(?:[);/ ]|$)'
      model: 'Reno 5Z'
    - regex: '(?:PDS[TM]00|CPH220[17]|Reno5 Pro 5G)(?:[);/ ]|$)'
      model: 'Reno 5 Pro 5G'
    - regex: 'PDR[TM]00(?:[);/ ]|$)'
      model: 'Reno 5 Pro Plus 5G'
    - regex: '(?:CPH1921|PCCM40)(?:[);/ ]|$)'
      model: 'Reno 5G'
    - regex: '(?:CPH2235|PEQM00|CPH2251)(?:[);/ ]|$)'
      model: 'Reno 6'
    - regex: 'CPH2237(?:[);/ ]|$)'
      model: 'Reno 6 Z 5G'
    - regex: 'PEPM00(?:[);/ ]|$)'
      model: 'Reno 6 Pro'
    - regex: 'CPH224[79](?:[);/ ]|$)'
      model: 'Reno 6 Pro 5G'
    - regex: 'PENM00(?:[);/ ]|$)'
      model: 'Reno 6 Pro Plus'
    - regex: 'PFJM10|CPH2371|CPH2363'
      model: 'Reno 7'
    - regex: 'CPH2343'
      model: 'Reno 7Z'
    - regex: 'CPH2353|OPG04|A201OP'
      model: 'Reno 7A'
    - regex: 'PFCM00'
      model: 'Reno 7 SE'
    - regex: '(?:PFDM00|CPH2293)(?:[);/ ]|$)'
      model: 'Reno 7 Pro'
    - regex: 'CPH235[79]|PGAM10'
      model: 'Reno 8 Pro'
    - regex: 'PFZM10'
      model: 'Reno 8 Pro+'
    - regex: 'CPH2457'
      model: 'Reno 8 Z'
    - regex: 'PGBM10'
      model: 'Reno 8'
    - regex: 'CPH2481'
      model: 'Reno 8T'
    - regex: 'PHM110'
      model: 'Reno 9'
    - regex: 'PGW110'
      model: 'Reno 9 Pro+'
    - regex: 'PGX110'
      model: 'Reno 9 Pro'
    - regex: '(?:PEYM00)(?:[);/ ]|$)'
      model: 'K9 Pro 5G'
    - regex: '(?:PEXM00)(?:[);/ ]|$)'
      model: 'K9 5G'
    - regex: 'PCLM10(?:[);/ ]|$)'
      model: 'Reno Ace'
    - regex: 'PDHM00(?:[);/ ]|$)'
      model: 'Reno Ace 2'
    - regex: 'PCGM00(?:[);/ ]|$)'
      model: 'Reno K3'
    - regex: '(?:OPPO[ _]?)?(?:CPH1979|PCD[TM]10)(?:[);/ ]|$)'
      model: 'Reno Z'
    - regex: 'A59st(?:[);/ ]|$)'
      model: 'A59s'

    - regex: 'OPD2102A?'
      model: 'Pad Air'
      device: 'tablet'
    - regex: 'OPD2201'
      model: 'Pad 2'
      device: 'tablet'
    - regex: 'OPD2101'
      model: 'Pad WiFi'
      device: 'tablet'

    - regex: 'OW19W[13]'
      model: 'Watch 46mm'
      device: 'wearable'
    - regex: 'OW19W2'
      model: 'Watch 41mm'
      device: 'wearable'
    - regex: 'OW20W1'
      model: 'Watch 2 46mm'
      device: 'wearable'

    - regex: 'N1T?(?:[);/ ]|$)'
      model: 'N1T'
      device: 'phablet'
    - regex: 'R([0-9]{3,4}[KSTW]?)(?:[);/ ]|$)' # valid model numbers are filtered in main regex
      model: 'R$1'

    # general detections
    - regex: '(CPH[0-9]{4})'
      model: '$1'

    - regex: '(?:OB-)?OPPO[ _]?((?!Browser)[a-z0-9]+)'
      model: '$1'

# orange
Orange:
  regex: 'SPV[ \-]?([a-z0-9]+)|(?<!FBCR/)Orange[ _-](?!Tahiti-LS\))([^/;]+)( Build|\))(?<!Tahiti-LS\))|SC/IHD92|Nura 2|FunTab ([^/;]+) Build|Orange Mahpee|Dive 50|MouveTab7WIFI'
  device: 'smartphone'
  models:
    - regex: 'SC/IHD92'
      device: 'tv' # set top box
      model: 'Livebox Play'
    - regex: 'Nola play'
      model: 'Nola Play'
    - regex: 'Nola fun'
      model: 'Nola Fun'
    - regex: 'Neva zen'
      model: 'Neva Zen'
    - regex: 'Neva start'
      model: 'Neva Start'
    - regex: 'Nura 2'
      model: 'Nura 2'
    - regex: 'Sego'
      model: 'Sego'
      device: 'tablet'
    - regex: 'FunTab ([^/;]+) Build'
      model: 'FunTab $1'
      device: 'tablet'
    - regex: 'Orange Mouve 2'
      device: 'tablet'
      model: 'Mouve Tab II'
    - regex: 'MouveTab7WIFI'
      model: 'Mouve Tab 7 WiFi'
      device: 'tablet'
    - regex: 'orange_Tab_7_4G'
      model: 'Tab 7 4G'
      device: 'tablet'
    - regex: 'Orange[ _-](Rise)(3[12]|5[12])(?:[);/ ]|$)'
      model: '$1 $2'
    - regex: '(?:Orange[ _-])?Dive ?(\d+) Dual(?:[);/ ]|$)'
      model: 'Dive $1 Dual'
    - regex: '(?:Orange[ _-])?Dive ?(\d+)(?:[);/ ]|$)'
      model: 'Dive $1'
    - regex: 'Orange[ _-](Daytona|Dublin|Fova|Gova|Hi 4G|Hiro|Kivo|Monte Carlo|Neva 80|Neva play|Nura|Reyo|Rise[_ ](3[034]|40|5[345])|Rono|Roya|San Francisco|Tactile internet 2|Tado|Yomi|Yumo|Zali|Mahpee|Neva leaf|Sanza touch|Viking L508)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'SPV[ \-]?([a-z0-9]+)'
      model: 'SPV $1'

# Oukitel
Oukitel:
  regex: 'OUKITEL|(?:Android 10;(?: [\w-]+;)? (?:C19|C22)|Android 8(?:[\d.]*);(?: [\w-]+;)? U23|Android 7(?:[\d.]*);(?: [\w-]+;)? (?:U1[78]|U22)|(?:C1[569]|K10000|K[46]000)(?:[ _]Pro)|K4000Pro|C1[18]_Pro|C1[0237] Pro|C2[13] Pro|C12 Plus|[UK]15 Pro|K15_Plus|U16 Max|C11_F|U7 Max|U7 Plus|U11[_ ]Plus|U20_Plus|OK6000 Plus|WP5000|WP[58] Pro|K[46]000[ _](?:Plus|Lite)|Y4800|K10000|K7 Power|K[4-8]000| RT[12]| WP(?:[15-79]|1[02356789]|2[01])|K[37]_Pro|K13_Pro|U25_Pro|OKT1|UniverseTap)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(C1[0-9]|C2[13]|K10000|K[46]000|WP[258]|WP1[28]|WP20|U[12]5|K[37]|K1[35])[ _]?Pro(?:[);/ ]|$)'
      model: '$1 Pro'
    - regex: 'OUKITEL K([37])(?:[);/ ]|$)'
      model: 'K$1'
    - regex: '(K10000|U16|U7)[ _]Max(?:[);/ ]|$)'
      model: '$1 Max'
    - regex: '(U20|K[46]000|U7|U11|OK6000|K15|C12)[_ ]?Plus(?:[);/ ]|$)'
      model: '$1 Plus'
    - regex: '(K4000)[_ ]Lite(?:[);/ ]|$)'
      model: '$1 Lite'
    - regex: '(K10000)[_ ]Mix(?:[);/ ]|$)'
      model: '$1 Mix'
    - regex: 'K7 Power(?:[);/ ]|$)'
      model: 'K7 Power'
    - regex: 'UniverseTap(?:[);/ ]|$)'
      model: 'U8 Universe Tap'
    - regex: '(?:Oukitel-)?(Y4800|K10000|K[4-8]000|WP5000|[CU]2|U1[078]|U2[23]|C19|C22|C3|WP15 S)(?:[);/ ]|$)'
      model: '$1'

    - regex: ' (RT[12]|OKT1)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'

    - regex: '(?:OUKITEL)? (WP\d+|C11_F)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'OUKITEL; ([^;]+);'
      model: '$1'

# OKWU
OKWU:
  regex: '(?:OKWU SIGMA|PI[_ ]Plus)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'SIGMA'
      model: 'Sigma'
    - regex: 'PI[_ ]Plus'
      model: 'PI Plus'

# Orion
Orion:
  regex: 'ORION, ([a-z0-9_ \-]+), (?:wired|wireless)|CRANE-EVB'
  device: 'tv'
  models:
    - regex: 'ORION, ([a-z0-9_ \-]+), (?:wired|wireless)'
      model: ''
    - regex: '(CRANE-EVB)'
      model: 'CRANE-EVB'
      device: 'tablet'

# Ouki
Ouki:
  regex: 'OUKI|OK[AU][0-9]+[a-z]* Build|OKP6 Pro'
  device: 'smartphone'
  models:
    - regex: 'OKP6 Pro'
      model: 'OKP6 Pro'
    - regex: 'OUKI[ _-]?([^;/]+) Build'
      model: '$1'
    - regex: '([^;/)]+) Build/OUKI'
      model: '$1'
    - regex: 'OUKI[ _-]?([^;/)]+)(?:[;/)]|$)'
      model: '$1'
    - regex: '(OK[AU][0-9]+[a-z]*) Build'
      model: '$1'

# Overmax
Overmax:
  regex: 'OV-[a-z]+(?:[^;(/]*)[();/ ]|Qualcore 10(?:10|27)|Livecore7032|Vertis 5021 Aim|Vertis 4004 You|OV1027[34]G'
  device: 'tablet'
  models:
    - regex: 'OV-V10'
      model: 'Vertis Yard'
      device: 'smartphone'
    - regex: 'Vertis 5021 Aim'
      model: 'Vertis 5021 Aim'
      device: 'smartphone'
    - regex: 'Vertis 4004 You'
      model: 'Vertis 4004 You'
      device: 'smartphone'
    - regex: 'OV-Vertis[ _-]([^;/]+) Build'
      model: 'Vertis $1'
      device: 'smartphone'
    - regex: 'Livecore7032'
      model: 'Livecore 7032'
    - regex: 'Qualcore 1010'
      model: 'Qualcore 1010'
    - regex: 'OV(\d+)([34])G'
      model: 'Qualcore $1 $2G'
    - regex: '(?:OV-)?Qualcore[-_ ](\d+)[-_ ]([34])G'
      model: 'Qualcore $1 $2G'

    - regex: '(OV-[a-z]+(?:[^/();]+))(?: Build|[();])'
      model: '$1'

# Oysters
Oysters:
  regex: 'Oysters|T84ERI[ _]3G|T72HM(s_)?3G|T102MS_3G|T102ER3G|T72ER3G|(T74HMi|T84Bi)[_ ]4G|T74MR4G|T74RD|T84Ni[_ ][34]G|Pacific(?:[ ]?800i|E)|T104B_[34]G|IndianV|T72HA_3G|T12V? 3G|T74D_3G|T74N_3G|T74SC_3G|T74Mai_3G|T74MRi3G|T104MBi_3G|T104SCi_3G|T104ER4G|Arctic450|Atlantic(?:4G|454|[EV])|AntarcticE|Life4G|T7V 3G|Pacific(?:VS?|I?4G|454)'
  device: 'tablet'
  models:
    - regex: 'Pacific[ ]?800i'
      device: 'smartphone'
      model: 'Pacific 800i'
    - regex: 'PacificE'
      device: 'smartphone'
      model: 'Pacific E'
    - regex: 'IndianV'
      device: 'smartphone'
      model: 'Indian V'
    - regex: '(?:Oysters[_ ])?Pacific(VS?|I?4G|454)'
      device: 'smartphone'
      model: 'Pacific $1'
    - regex: 'Atlantic(454|[EV]|4G)(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Atlantic $1'
    - regex: 'Arctic(450)(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Arctic $1'
    - regex: 'AntarcticE(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Antarctic E'
    - regex: 'Life4G(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Life 4G'
    - regex: 'Oysters ((?:Arctic|Indian|Atlantic|Pacific)[^/;]+) Build'
      device: 'smartphone'
      model: '$1'
    - regex: '(T84ERI[ _]3G|T72HM(s_)?3G|(?:(T74HMi|T84Bi)[_ ]4G)|T84Ni[_ ][34]G)'
      model: '$1'
    - regex: '(T74MR|T102MS|T104B|T74SC|T74[DN]|T72HA|T102ER|T72ER|T104SCi|T104MBi|T104ER|T7V|T12V?|T74MRi)[ _]?([34]G)'
      model: '$1 $2'
    - regex: 'T74Mai_3G'
      model: 'T74MAi 3G'
    - regex: '(T74RD)'
      model: '$1'
    - regex: 'Oysters ([^/;]+)( Build|\))'
      model: '$1'

# öwn (own mobile)
öwn:
  regex: 'OWN[ _]|(?:S4035[ _][34]G|Smart8|SMART PLUS LTE|FUN VALUE 4G)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'FUN ([67])'
      model: 'Fun $1'
    - regex: 'FUN 5\(4G\)'
      model: 'Fun 5 4G'
    - regex: '(?:OWN[ _])?(S3000D|S3010|S3020D|S4010|S4025|S4035[ _][34]G)'
      model: '$1'
    - regex: 'One Plus'
      model: 'One Plus'
    - regex: 'One'
      model: 'One'
    - regex: 'FUN VALUE 4G'
      model: 'Fun Value 4G'
    - regex: 'Smart ?(8|9)(?:[);/ ]|$)'
      model: 'Smart $1'
    - regex: 'SMART PLUS LTE(?:[);/ ]|$)'
      model: 'Smart Plus LTE'

# Panacom
Panacom:
  regex: 'T-i708D'
  device: 'smartphone'
  models:
    - regex: 'T-i708D'
      device: 'tablet'
      model: 'T-i708D'

# panasonic
Panasonic:
  regex: 'Panasonic|PANATV[0-9]+|Viera/|(?:P902i|P-0[28]D|FZ-B2D|FZ-[NX]1|DMC-CM1|P-01[JK]|P-0[23]E|P55 Max)(?:[);/ ]|$)|Eluga[ _]|P55 Novo 4G'
  device: 'smartphone'
  models:
    - regex: 'P-01J(?:[);/ ]|$)'
      model: 'P-smart Keitai'
    - regex: '(P-01K)(?:[);/ ]|$)'
      model: 'Toughbook $1'
    - regex: 'P-03E(?:[);/ ]|$)'
      model: 'Eluga P'
    - regex: 'P-02E(?:[);/ ]|$)'
      model: 'Eluga X'
    - regex: 'Eluga[ _]I7(?:_EE)?'
      model: 'Eluga I7'
    - regex: '(?:Panasonic_)?Eluga[ _-]([^;/]+) Build'
      model: 'Eluga $1'
    - regex: '(?:Panasonic_)?Eluga[ _-]([^);/]+)[;/)]'
      model: 'Eluga $1'
    - regex: '(DMC-CM1)'
      model: 'Lumix $1'
      device: 'camera'
    - regex: 'P-02D(?:[);/ ]|$)'
      model: 'Lumix Phone P-02D'
    - regex: '(FZ-[XN]1)(?:[);/ ]|$)'
      model: 'Toughpad $1'
    - regex: 'FZ-B2D(?:[);/ ]|$)'
      model: 'Toughpad FZ-B2D'
      device: 'tablet'
    - regex: 'P55 Novo 4G'
      model: 'P55 Novo 4G'
    - regex: 'P55 Max'
      model: 'P55 Max'
    - regex: 'P(\d*) NXT'
      model: 'P$1 NXT'
    - regex: 'P902i(?:[);/ ]|$)'
      device: 'feature phone'
      model: 'P902i'
    - regex: 'Panasonic MIL DLNA'
      device: 'tv'
      model: 'Viera Cast'
    - regex: 'PANATV[0-9]+|Viera/'
      device: 'tv'
      model: 'Smart TV'
    - regex: '(43D1200|(?:32|43)D1270|32D1280)'
      device: 'tv'
      model: '$1'
    - regex: 'PANASONIC, ([a-z0-9_ \-]+), (?:wired|wireless)'
      model: ''
      device: 'tv'
    - regex: 'Panasonic[ _\-]?([a-z0-9]+)'
      model: '$1'
    - regex: 'portalmmm/2.0 (P[a-z0-9]+)'
      model: '$1'

    - regex: 'P-08D(?:[);/ ]|$)'
      model: 'Eluga Live 10.1"'
      device: 'tablet'

# PCBOX
PCBOX:
  regex: 'Art-PCB-V116|Bee-PCB-V216|Clap-PCB-I316|PCB-T(?:103|715|750)|Kova[ _-]PCB-\w+|Kova_Plus_PCB_T735'
  device: 'smartphone'
  models:
    - regex: 'Art-PCB-V116'
      model: 'Art'
    - regex: 'Bee-PCB-V216'
      model: 'Bee'
    - regex: 'Clap-PCB-I316'
      model: 'Clap'
    - regex: 'PCB-T103'
      device: 'tablet'
      model: 'Curi Lite'
    - regex: 'PCB-T(715|750)'
      device: 'tablet'
      model: 'T$1'
    - regex: 'Kova[ _-]PCB-T730'
      device: 'tablet'
      model: 'Kova T730'
    - regex: 'Kova_Plus_PCB_T735'
      device: 'tablet'
      model: 'Kova Plus T735'

# PCD or PCD Argentina
PCD:
  regex: 'PH4001|PCD[ _](?:PL5507|PH4002|PH3501|E400)'
  device: 'smartphone'
  models:
    - regex: '(?:PCD[ _])?(P[HL]\d{4}|E400)'
      model: '$1'

# PCD Argentina
PCD Argentina:
  regex: 'PCD[ ]?50[689]|PL620(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'PCD[ ]?(50[689])'
      model: '$1'
    - regex: '(PL620)'
      model: '$1'

# ArmPhone
ArmPhone:
  regex: '(TSD Octa A0520P|TSD Quadra A050[59]P)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Pentagram
Pentagram:
  regex: 'Pentagram|Quadra|Monster X5'
  device: 'tablet'
  models:
    - regex: '(?:PENTAGRAM[_ ])?EON[_ ]PRIX'
      model: 'Eon Prix'
    - regex: 'Quadra 7(?: UltraSlim)?'
      model: 'Quadra 7 UltraSlim'
    - regex: 'Monster X5?'
      model: 'Monster X5'
      device: 'smartphone'
    - regex: 'Quadra ?([^);/]*) Build'
      model: 'Quadra $1'
    - regex: 'Pentagram ?TAB ?([^);/]*) Build'
      model: 'Tab $1'
    - regex: 'Pentagram ?([^);/]*) Build'
      model: '$1'
      device: 'smartphone'

# Tcl (tcl.com)
TCL:
  regex: 'TCL,|TCL[_ -][a-z0-9]+|(?:TCL[_ -][^;/]+ Build)|(?:TCLGalaG60(?:\(9108A\))?|4163D|4187[DMU]|4188[CLRS]|5004S|5087Z|5101A|5102[BKLMOP]|5107G|5124J|5130[JM]|5133A|5148A|5152D|5159[AJ]|5164D|5199I|6102[ADH]|6125[ADFH]|6127[AI]|6156[ADH]|6159[AK]|6165[AHS]|7040N|8491X|9048S|9060[GX]|9080G|9081X|9295G|9296[GQ]|A(?:50[2789]|600)DL|T(?:60[123]|701)DL|T(?:506D|671[EFGHO]|676[HJK]|766[AHJSU]|767[GHW]|770[BH]|771K|773O|774[BH]|775[BH]|776[HO]|779W|780H|781SPP|781S|781|782H|790[SY]|799[BH]|810[HS])|Percee TV|9317X1|9161G| 9061| 8182| 8167|BeyondTV\d?|T507U)(?:_(?:RU|EEA|TR))?(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'TCLGalaG60(?:\(9108A\))?(?:[);/ ]|$)'
      model: 'Gala G60'
    - regex: '5004S(?:[);/ ]|$)'
      model: 'Signa'
    - regex: 'T779W(?:[);/ ]|$)'
      model: 'Stylus 5G'
    - regex: '4187D(?:[);/ ]|$)'
      model: '205'
    - regex: '(?:4163D|4188S)(?:[);/ ]|$)'
      model: '304'
    - regex: '6102[AD](?:[);/ ]|$)'
      model: '305'
    - regex: '5164D(?:[);/ ]|$)'
      model: '305i'
    - regex: '6102H(?:[);/ ]|$)'
      model: '306'
    - regex: 'T506D(?:[);/ ]|$)'
      model: '405'
    - regex: 'T507U(?:[);/ ]|$)'
      model: '408'
    - regex: 'T774[BH](?:[);/ ]|$)'
      model: '20L'
    - regex: 'T775B(?:[);/ ]|$)'
      model: '20L Plus Premium Edition'
    - regex: 'T775H(?:[);/ ]|$)'
      model: '20L Plus'
    - regex: '6125[ADFH]'
      model: '20E'
    - regex: '6127[AI]'
      model: '30E'
    - regex: '6156[ADH]'
      model: '20Y'
    - regex: '6159[AK]'
      model: '20B'
    - regex: '5199I(?:[);/ ]|$)'
      model: 'C9'
    - regex: 'A509DL(?:[);/ ]|$)'
      model: 'A3'
    - regex: 'A600DL(?:[);/ ]|$)'
      model: 'A3X'
    - regex: '5102[LO](?:[);/ ]|$)'
      model: 'A30'
    - regex: '5152D(?:[);/ ]|$)'
      model: 'C5'
    - regex: '5133A(?:[);/ ]|$)'
      model: 'L5'
    - regex: '5102[BKMP](?:[);/ ]|$)'
      model: 'L7'
    - regex: '5159[AJ](?:[);/ ]|$)'
      model: 'L9'
    - regex: '5101A(?:[);/ ]|$)'
      model: 'L9 Plus'
    - regex: '5107G(?:[);/ ]|$)'
      model: 'L9S'
    - regex: '5124J(?:[);/ ]|$)'
      model: 'L10'
    - regex: '5130J(?:[);/ ]|$)'
      model: 'L10+'
    - regex: '4187[MU](?:[);/ ]|$)'
      model: 'L10 Lite'
    - regex: '5148A(?:[);/ ]|$)'
      model: 'T9'
    - regex: '5130M(?:[);/ ]|$)'
      model: 'T Pro'
    - regex: 'T780H(?:[);/ ]|$)'
      model: 'Plex'
    - regex: 'T782H(?:[);/ ]|$)'
      model: '10 Plus'
    - regex: 'T790Y(?:[);/ ]|$)'
      model: '10 5G'
    - regex: 'T790S(?:[);/ ]|$)'
      model: '10 5G UW'
    - regex: 'TCL[_ -]([^;/]+) Build'
      model: '$1'
    - regex: 'TCL[_ -]([a-z0-9]+)'
      model: '$1'
    - regex: '(7040N)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'A502DL(?:[);/ ]|$)'
      model: 'LX'
    - regex: 'A507DL(?:[);/ ]|$)' # TracFone A507DL
      model: 'A2'
    - regex: 'A508DL(?:[);/ ]|$)'
      model: 'A2X'
    - regex: 'T601DL(?:[);/ ]|$)'
      model: 'X4 5G'
    - regex: 'T770[HB](?:[);/ ]|$)'
      model: '10L'
    - regex: 'T766[AHJSU](?:_(?:EEA|TR|RU))?(?:[);/ ]|$)'
      model: '10 SE'
    - regex: 'T671[HFEO](?:_EEA)?(?:[);/ ]|$)'
      model: '20 SE'
    - regex: '6165[AHS]'
      model: '30 SE'
    - regex: 'T676[KJ]'
      model: '30+'
    - regex: 'T676H'
      model: '30'
    - regex: '(?:4188[CLR]|T602DL)(?:[);/ ]|$)'
      model: '30 Z'
    - regex: '(?:T781S|T781SPP)(?:[);/ ]|$)'
      model: '30 V 5G'
    - regex: 'T603DL'
      model: '30 T'
    - regex: 'T776[HO]'
      model: '30 5G'
    - regex: 'T767[GW](?:[);/ ]|$)'
      model: '30 XE 5G'
    - regex: '(?:T671G|T701DL)(?:[);/ ]|$)'
      model: '30 XL'
    - regex: 'T767H(?:[);/ ]|$)'
      model: '20R 5G'
    - regex: 'T773O(?:[);/ ]|$)'
      model: '20S'
    - regex: '5087Z(?:[);/ ]|$)'
      model: '20 XE'
    - regex: 'T781(?:[);/ ]|$)'
      model: '20 5G'
    - regex: 'T810[SH](?:[);/ ]|$)'
      model: '20 Pro 5G'
    - regex: 'T799[BH]'
      model: '10 Pro'
    - regex: 'T771K(?:[);/ ]|$)'
      model: '40R 5G'

    - regex: '9317X1'
      device: 'tablet'
      model: 'Smart Tab 7'
    - regex: '9048S(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Tab 8" 4G'
    - regex: '9295G'
      device: 'tablet'
      model: '10 TabMax 4G'
    - regex: '9296G'
      device: 'tablet'
      model: '10 TabMax WiFi'
    - regex: '9296Q'
      device: 'tablet'
      model: '10 TabMax'
    - regex: ' (?:9061|9081X)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Tab 10s'
    - regex: ' (?:8167)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Tab 7L WiFi'
    - regex: ' (?:8182)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Tab 10L WiFi'
    - regex: '9060G|9161G'
      device: 'tablet'
      model: 'Tab 10 FHD 4G'
    - regex: '9060X'
      device: 'tablet'
      model: 'Tab 10 HD 4G'
    - regex: '8491X'
      device: 'tablet'
      model: 'Tab 10L'
    - regex: '9080G'
      device: 'tablet'
      model: 'Tab 10s 4G'

    - regex: '(Percee TV)(?:[);/ ]|$)'
      device: 'tv'
      model: '$1'
    - regex: 'BeyondTV(\d)?(?:[);/ ]|$)'
      device: 'tv'
      model: 'Beyond TV $1'
    - regex: '((?:43|55)S62FS|(?:43|50)P65US|U(?:43|60|65)P60|65P4USM|(?:40|49)S62|L32S6|55P610|50P8S|55S62|(?:43|50)P6US|55DP60)'
      device: 'tv'
      model: '$1'

# JVC
JVC:
  regex: 'JVC[;,]|AV-10NT310|AFTSO001'
  device: 'tv'
  models:
    - regex: 'JVC[;,](32D1290)'
      model: '$1'
    - regex: 'AFTSO001'
      model: 'Fire TV 4K (2019)'
    - regex: 'JVC, ([a-z0-9_ \-]+), (?:wired|wireless)'
      model: ''
      device: 'tv'
    - regex: '(AV-10NT310)'
      device: 'tablet'
      model: '$1'

# phoneOne
phoneOne:
  regex: 'phoneOne[ \-]?([a-z0-9]+)'
  device: 'smartphone'
  model: '$1'

# Primepad
Primepad:
  regex: 'PD\-(3127NC|3127) Build'
  device: 'tablet'
  models:
    - regex: 'PD\-3127NC Build'
      model: 'PD-3127NC'
    - regex: 'PD\-3127 Build'
      model: 'PD-3127'

# Pioneer Computers (www.pioneercomputers.com.au)
Pioneer Computers:
  regex: 'PIONEER COMPUTERS (DreamBook)'
  device: 'tablet'
  model: '$1'

# Pioneer
Pioneer:
  regex: 'Pioneer|.*; R1 Build|(?:dvr700pi|XDP-300R|F9212[AB]|SDA-835TAB|SDA-80TAB)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '.*; R1 Build'
      model: 'R1'
      device: 'tablet'
    - regex: 'dvr700pi'
      model: 'DVR700PI 7.0"'
      device: 'tablet'
    - regex: '(XDP-300R)'
      device: 'portable media player'
      model: '$1'
    - regex: '(F9212[AB]|SDA-835TAB|SDA-80TAB)'
      device: 'car browser'
      model: '$1'
    - regex: 'BDP-160'
      device: 'tv'
      model: 'BDP-160'
    - regex: 'Pioneer, ?([a-z0-9_ \-]+), ?(?:wired|wireless)'
      device: 'tv'
      model: ''
    - regex: 'Pioneer[ _-]?([^;/]+) Build'
      model: '$1'
    - regex: 'Pioneer[ _-]?([^;/)]+)(?:[;/)]|$)'
      model: '$1'

# Pixus
Pixus:
  regex: 'Pixus|(hiPower|Touch_7_3G|Ride[_ ][34]G|Play[ _]Three[ _]v(?:[234].0|3.1))(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'Ride[_ ]([34])G'
      model: 'Ride $1G'
    - regex: 'Play[ _]Three[ _]v([234].0|3.1)'
      model: 'Play Three v$1'
    - regex: 'Play Two'
      model: 'Play Two'
    - regex: 'Play Five'
      model: 'Play Five'
    - regex: 'hiPower'
      model: 'hiPower'
    - regex: 'Pixus[ _]Sprint'
      model: 'Sprint'
    - regex: '(?:Pixus_)?Touch[ _]7[ _]3G'
      model: 'Touch 7 3G'
    - regex: 'Pixus[ _]hiMax'
      model: 'HiMax 9.6"'
    - regex: 'Pixus[ _]Blast'
      model: 'Blast 10.1"'
    - regex: 'Pixus[ _]Joker'
      model: 'Joker 10.1"'
    - regex: 'Pixus Blaze 10.1 3G'
      model: 'Blaze 10.1" 3G'

    - regex: 'Raze'
      model: 'Raze'
      device: 'smartphone'
    - regex: 'Pixus_Jet'
      model: 'Jet'
      device: 'smartphone'
    - regex: 'pixus hit 2'
      model: 'Hit 2'
      device: 'smartphone'

# PULID
PULID:
  regex: 'PULID[ _]|F1[01357]\+? Build'
  device: 'smartphone'
  models:
    - regex: 'F(1[01357]\+?) Build'
      model: 'F$1'
    - regex: 'PULID[ _]([^;/]+) Build'
      model: '$1'
    - regex: 'PULID[ _]([a-z0-9_]+)\)'
      model: '$1'

# Purism (https://puri.sm/)
Purism:
  regex: 'Librem 5'
  device: 'smartphone'
  models:
    - regex: 'Librem 5'
      model: 'Librem 5'

# Point Mobile (https://pointmobile.com/)
'Point Mobile':
  regex: 'PM80'
  device: 'peripheral'
  models:
    - regex: 'PM80'
      model: 'PM80'

# Point of View (pointofview.eu)
'Point of View':
  regex: 'POV_TV|POV_TAB|MOB-5045|TAB-P10232-3G'
  device: 'tablet'
  models:
    - regex: 'POV_TV-HDMI-KB-01'
      model: 'HDMI Smart TV Dongle'
      device: 'tv'
    - regex: 'POV_TV-HDMI-200BT'
      model: 'Mini PC HDMI Dongle'
      device: 'tv'
    - regex: 'MOB-5045'
      model: 'Mobii Phone 5045'
      device: 'smartphone'
    - regex: 'POV_TAB-P506'
      model: 'ONYX 506 Navi'
    - regex: 'POV_TAB[_-]NAVI7[_-]3G[_-]M'
      model: 'ONYX 507 Navi'
    - regex: 'POV_TAB-P527S'
      model: 'ONYX 527S'
    - regex: 'POV_TAB-P547'
      model: 'ONYX 547 Navi'
    - regex: 'POV_TAB-PROTAB26'
      model: 'ProTab 26 XXL IPS'
    - regex: 'POV_TAB-PROTAB25XXL8?'
      model: 'ProTab 25XXL'
    - regex: 'POV_TAB-PL1015'
      model: 'Mobii 1015'
    - regex: 'TAB-P10232-3G'
      model: 'Tab P10232 3G'

    - regex: 'POV_TAB-PROTAB([a-z0-9]+)'
      model: 'ProTab $1'
    - regex: 'POV_TAB-P?([a-z0-9]+)'
      model: 'Mobii $1'

# Pomp
Pomp:
  regex: 'POMP[ _-]'
  device: 'smartphone'
  models:
    - regex: 'POMP[ _-]([^;/]+) Build'
      model: '$1'
    - regex: 'POMP[ _-]([^;/)]+)(?:[;/)]|$)'
      model: '$1'

# PPTV
PPTV:
  regex: '(KING 7S?)'
  device: 'smartphone'
  model: '$1'

# ProScan
ProScan:
  regex: 'PLT([^;/]+) Build|PLT(?:777[45]|9774|1074)G(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'PLT([^;/]+) Build'
      model: 'PLT$1'
    - regex: 'PLT(777[45]|9774|1074)G'
      model: 'PLT$1G'

# RCA Tablets (RCA) (www.rca.com)
'RCA Tablets':
  regex: 'RCT([^;/]+) Build|RCA RLTP4028|RLTP5567|RLTP5573|RC7T3G21|RCT6B06P23|RCT6613W23P|RCT6513W87|DRP(?:29101|2091)|RCT6973W43(?:MD)?|RCT6703W12|RCT(?:6A06P22|6603W47M7|6303W87(?:DK|M)|6773W22B|6203W46L|6873W42B?M|6K03W13|6876Q22N|6A06Q22)'
  device: 'smartphone'
  models:
    - regex: '(?:RCA[ _])?(RLTP4028|RLTP5567|RLTP5573)'
      model: '$1'
    - regex: 'RCT6513W87'
      device: 'tablet'
      model: 'Galileo Pro 11.5"'
    - regex: 'RCT6873W42M|RCT6876Q22N?|RCT6873W42BMF9E'
      device: 'tablet'
      model: 'Voyager 7.0"'
    - regex: 'RCT6973W43(?:MD)?'
      device: 'tablet'
      model: 'Voyager III 7.0"'
    - regex: 'RCT6773W22B'
      device: 'tablet'
      model: 'Voyager II 7.0"'
    - regex: 'RCT6703W12|RCT6B06P23'
      device: 'tablet'
      model: 'Atlas 10.0"'
    - regex: 'RCT6203W46L'
      device: 'tablet'
      model: 'Pro 10 Edition II'
    - regex: 'RCT6A06P22'
      device: 'tablet'
      model: 'Endeavor 10.0" HD'
    - regex: 'RCT(?:6303W87(?:DK|M)|6K03W13)'
      device: 'tablet'
      model: 'Viking Pro 10.0"'
    - regex: 'RCT6603W47M7'
      device: 'tablet'
      model: 'Viking II 10.0"'
    - regex: 'RCT6613W23P'
      device: 'tablet'
      model: 'Delta Pro 11.6"'
    # tablet + dvd player
    - regex: '(DRP29101|DRP2091)'
      device: 'portable media player'
      model: '$1'
    # general detections
    - regex: 'RCT([^;/)]+)(?: Build|[;)])'
      device: 'tablet'
      model: 'RCT$1'
    - regex: 'RC([^;/)]+)(?: Build|[;)])'
      device: 'tablet'
      model: 'RC$1'

# Readboy
Readboy:
  regex: 'Readboy[ _-]'
  device: 'tablet'
  models:
    - regex: 'Readboy[ _-]C18Max'
      model: 'C18 Max'
    - regex: 'Readboy[ _-]C(\d+)Pro'
      model: 'C$1 Pro'
    - regex: 'Readboy[ _-]([^;/)]+)(?: Build|[;)])'
      model: '$1'

# Roku
Roku:
  regex: 'Roku(?:OS|4640X)?/(?:DVP|Pluto)?-?|QSP; Roku'
  device: 'tv'
  models:
    - regex: '3930X'
      model: 'Express'
    - regex: 'Roku4640X'
      model: 'Ultra'
    - regex: ''
      model: 'Digital Video Player'

# Rokit (rokitphones.com)
Rokit:
  regex: 'IO (?:Pro|3D|Light)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'IO Pro'
      model: 'IO Pro'
    - regex: 'IO Light'
      model: 'IO Light'
    - regex: 'IO 3D'
      model: 'IO 3D'

# Rombica (rumbica.ru)
Rombica:
  regex: 'Rombica[_ ]|(SSQ-A0500|Smart Box v[0-9]+|Smart Box (?:[ABCDXYZ]1|[GDFQ]2|[AF]3|H4))(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'SSQ-A0500(?:[);/ ]|$)'
      model: 'Smart Stick 4K'
    - regex: '(?:Rombica[_ ])?Cinema4K_v01'
      model: 'Cinema 4K v01'
    - regex: '(Infinity K8|Smart Box (?:Q1|v00[3-9]|Quad|Ultra HD v002|4K V001|[ABCDXYZ]1|[GDFQL]2|[AF]3|H4)|TV (?:Ultima|Fly)|Smart Stick Pro|TV Mercury|TV Air)(?:[);/ ]|$)'
      model: '$1'

# Rover
Rover:
  regex: 'Rover ([0-9]+)'
  device: 'feature phone'
  model: '$1'

# RoverPad or Rover Pad
RoverPad:
  regex: '(?:Rover[ ]?Pad|RoverPhone|(?:Air|Art|Sky) 7.85 3G|Pro_Q(?:8|10)_LTE)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'RoverPhone(?:[);/ ]|$)'
      model: ''
      device: 'smartphone'
    - regex: 'Pro_Q(8|10)_LTE(?:[);/ ]|$)'
      model: 'Pro Q$1 LTE'
    - regex: '(?:Rover[ ]?Pad)?sky 7.85(?: 3G)?(?:[);/ ]|$)'
      model: 'Sky 7.85" 3G'
    - regex: '(Air|Art) 7.85 3G'
      model: '$1 7.85" 3G'
    - regex: 'RoverPad (10.4|Air S70|9.7 3G|Sky 9.7|3W A73|3W7|3WT70|3W9.4)(?:[);/ ]|$)'
      model: '$1'

# Roadrover
Roadrover:
  regex: 'Roadrover ChangAn S'
  device: 'tablet'
  model: 'ChangAn S'

# RT Project
RT Project:
  regex: '(?:Shock ?(?:5|5\.5)|popper2)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Shock ?(5\.5|5)'
      model: 'Shock $1'
    - regex: 'popper2'
      model: 'Popper 2'

# S-TELL
S-TELL:
  regex: 'S-TELL|(?:M630|M55[78]|P760|P750i|M555i|M655)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(P760|P750i)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(?:S-TELL[ _])?M([0-9]{3}|555i|M655)(?:[);/ ]|$)'
      model: 'M$1'

# Safaricom
Safaricom:
  regex: 'NEON[_ ]RAY|(?:NEON_NOVA|NEON PLUS|NEON PLUS|NEON LITE|Neon Storm)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'NEON_RAY_PRO'
      model: 'Neon Ray Pro'
    - regex: 'NEON_RAY'
      model: 'Neon Ray'
    - regex: 'NEON RAY 2'
      model: 'Neon Ray 2'
    - regex: 'NEON_NOVA'
      model: 'Neon Nova'
    - regex: 'NEON PLUS'
      model: 'Neon Plus'
    - regex: 'NEON LITE'
      model: 'Neon Lite'
    - regex: 'Neon Storm'
      model: 'Neon Storm'

# Santin
Santin:
  regex: 'SANTIN|(?:BiTBiZ_V58|ACTOMA ACE|DREAMPLUS03A|Candy U7 Pro|GAAMII|RS635H|HY-002 Plus|HongQi HQ1|G101-OG)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'BiTBiZ_V58(?:[);/ ]|$)'
      model: 'BiTBiZ V58'
    - regex: 'GAAMII G1(?:[);/ ]|$)'
      model: 'GAAMII G1'
    - regex: 'GAAMII(?:[);/ ]|$)'
      model: 'GAAMII'
    - regex: 'Candy U7 Pro(?:[);/ ]|$)'
      model: 'Candy U7 Pro'
    - regex: 'DREAMPLUS03A(?:[);/ ]|$)'
      model: 'Dream Plus 03A'
    - regex: 'GreenOrange(?:[);/ ]|$)'
      model: 'Green Orange'
    - regex: 'CLASSONE(?:[);/ ]|$)'
      model: 'Class One'
    - regex: 'halove(?:[);/ ]|$)'
      model: 'Halove'
    - regex: 'ACTOMA ACE(?:[);/ ]|$)'
      model: 'Actoma Ace'
    - regex: 'monica(?:[);/ ]|$)'
      model: 'Monica'
    - regex: 'HongQi HQ1(?:[);/ ]|$)'
      model: 'HongQi HQ1'
    - regex: 'POWER(?:[);/ ]|$)'
      model: 'Power'
    - regex: 'GALAZ(?:[);/ ]|$)'
      model: 'Galaz'
    - regex: 'NEWDUN(?:[);/ ]|$)'
      model: 'Newdun'
    - regex: 'HEXIN[_ -](H2-A|H3)(?:[);/ ]|$)'
      model: 'Hexin $1'
    - regex: 'HY-002 Plus(?:[);/ ]|$)'
      model: 'HY-002 Plus'
    - regex: 'G101-OG(?:[);/ ]|$)'
      device: 'tablet'
      model: 'G101-OG'
    - regex: 'SANTIN[ _][#]?(Dante|Candy U7|Armor(?: 2)?|YSL-Y7|ANT.W|N[13]|JS|S6|V9(?:[ _]Pro)?|Life Shine|ovvi|D|11 XS Max|SHUGUO)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(RS635H)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Santin[ _#]?([^;/)]+)(?: Build|[;)])'
      model: '$1'

# Siemens
Siemens:
  regex: 'SIEMENS|SIE-|portalmmm/2\.0 SI|(?:S55(?! Nova)|SL45i)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:SIE-)?(S[56]5|S40|C45|ME45|SLIK)(?:[);/ ]|$)'
      device: 'feature phone'
      model: '$1'

    - regex: 'SIEMENS[ \-]([a-z0-9]+)'
      model: '$1'
    - regex: 'SIE(?:MENS )?[\-]?([a-z0-9]+)'
      model: '$1'
    - regex: '(?:SIE-)?(SL45i)'
      model: '$1'
    - regex: 'portalmmm/2.0 (SI[a-z0-9]+)'
      model: '$1'

# Soundmax
Soundmax:
  regex: '((?:SM-LED32M(?:11|04)S)|SM-LED40M04S)(?:_-Ver01)?(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Samsung
Samsung:
  regex: 'SAMSUNG(?! ?(?:Browser|Redmi))|FamilyHub|Maple (?!III)|Gear Live|(?:SEC_)?SC-(?:001|01[EFGHKLM]|02[CGHJKLMF]|03[EFJKL]|04[EFJLG]|05[GL]|(?:4[12]|5[1-4])A|5[1-5]B|5[1-5]C|56C)|N[57]100|N5110|N9100|S(?:CH|GH|PH|EC|AM|HV|HW|M)-|SMART-TV|GT-|(?<!GOG|GOG )Galaxy|(?:portalmmm|o2imode)/2\.0 [SZ]|sam[rua]|vollo Vi86(?:[);/ ]|$)|(?:lineage_|aokp_|rr_)?(?:serranoltexx|j5y17lte|Santos103G|fortuna3g)|(?:OTV-)?SMT-E5015|ISW11SC|40[34]SC|SC(?:G1[678]|V3[1-9]|V4[0-9]|51Aa|-56B|T21|G0[1-9]|G1[0-5]|L2[234])(?:-[uj])?(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    # explicit tv models
    - regex: 'GT-B9150'
      device: 'tv'
      model: 'Home Sync'
    - regex: '(?:OTV-)?SMT-E5015'
      device: 'tv'
      model: 'SMT-E5015' # set top box
    - regex: 'Maple '
      device: 'tv'
      model: ''
    - regex: 'Samsung, ([a-z0-9_ \-]+), (?:wired|wireless)'
      device: 'tv'
      model: '$1'

    # explicit tablet models
    - regex: '(?:SAMSUNG-)?(?:GT-)?N5100'
      device: 'tablet'
      model: 'Galaxy Note 8.0"'
    - regex: '(?:SAMSUNG-)?SM-T677(?:[ATV]|N[KL])?(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy View 18.4" LTE'
    - regex: '(?:SAMSUNG-)?SM-T670(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy View 18.4" WiFi'
    - regex: '(?:SAMSUNG-)?(?:GT-)?N5110'
      device: 'tablet'
      model: 'Galaxy Note 8.0" WiFi'
    - regex: '(?:SAMSUNG-)?GT-N5120'
      device: 'tablet'
      model: 'Galaxy Note 8.0" LTE'
    - regex: '(?:SAMSUNG-)?(?:GT|SM)-N8000'
      device: 'tablet'
      model: 'Galaxy Note 10.1"'
    - regex: '(?:SAMSUNG-)?GT-N8010'
      device: 'tablet'
      model: 'Galaxy Note 10.1" WiFi'
    - regex: '(?:SAMSUNG-)?GT-N8020'
      device: 'tablet'
      model: 'Galaxy Note 10.1" LTE'
    - regex: '(?:SAMSUNG-)?GT-P1000M?|SCH-I800'
      device: 'tablet'
      model: 'Galaxy Tab'
    - regex: '(?:SAMSUNG-)?GT-P3100B?'
      device: 'tablet'
      model: 'Galaxy Tab 2 7"'
    - regex: '(?:SAMSUNG-)?GT-P311[03]'
      device: 'tablet'
      model: 'Galaxy Tab 2 7" WiFi'
    - regex: '(?:SAMSUNG-)?GT-P5100|SCH-I915'
      device: 'tablet'
      model: 'Galaxy Tab 2 10.1"'
    - regex: '(?:SAMSUNG-)?GT-P511[03]'
      device: 'tablet'
      model: 'Galaxy Tab 2 10.1" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T217T'
      device: 'tablet'
      model: 'Galaxy Tab 3 7.0" 4G'
    - regex: '(?:SAMSUNG-)?GT-P5200|Santos103G'
      device: 'tablet'
      model: 'Galaxy Tab 3 10.1"'
    - regex: '(?:SAMSUNG-)?GT-P5210'
      device: 'tablet'
      model: 'Galaxy Tab 3 10.1" WiFi'
    - regex: '(?:SAMSUNG-)?GT-P5220'
      device: 'tablet'
      model: 'Galaxy Tab 3 10.1" LTE'
    - regex: '(?:SAMSUNG-)?GT-P6200'
      device: 'tablet'
      model: 'Galaxy Tab 7" Plus'
    - regex: '(?:SAMSUNG-)?GT-P6201'
      device: 'tablet'
      model: 'Galaxy Tab 7" Plus N'
    - regex: '(?:SAMSUNG-)?GT-P6810'
      device: 'tablet'
      model: 'Galaxy Tab 7.7"'
    - regex: 'SC-01E'
      device: 'tablet'
      model: 'Galaxy Tab 7.7" Plus'
    - regex: '(?:SAMSUNG-)?GT-P7100'
      device: 'tablet'
      model: 'Galaxy Tab 10.1v'
    - regex: '(?:SAMSUNG-)?GT-P75[01]0'
      device: 'tablet'
      model: 'Galaxy Tab 10.1"'
    - regex: '(?:SAMSUNG-)?SM-T321'
      device: 'tablet'
      model: 'Galaxy Tab Pro 8.4" 3G'
    - regex: '(?:SAMSUNG-)?SM-T905'
      device: 'tablet'
      model: 'Galaxy Tab Pro 12.2" LTE'
    - regex: '(?:SAMSUNG-)?SM-P600'
      device: 'tablet'
      model: 'Galaxy Note 10.1" 2014 Edition WiFi'
    - regex: '(?:SAMSUNG-)?SM-P60[12]'
      device: 'tablet'
      model: 'Galaxy Note 10.1" 2014 Edition'
    - regex: '(?:SAMSUNG-)?SM-(?:P605|P607T)'
      device: 'tablet'
      model: 'Galaxy Note 10.1" 2014 Edition LTE'
    - regex: '(?:SAMSUNG-)?SM-P900'
      device: 'tablet'
      model: 'Galaxy NotePRO 12.2" WiFi'
    - regex: '(?:SAMSUNG-)?SM-P901'
      device: 'tablet'
      model: 'Galaxy NotePRO 12.2"'
    - regex: '(?:SAMSUNG-)?SM-P905'
      device: 'tablet'
      model: 'Galaxy NotePRO 12.2" LTE'
    - regex: '(?:SAMSUNG-)?SM-(?:P587|P588C)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab A 10.1" with S Pen (2016) LTE'
    - regex: '(?:SAMSUNG-)?SM-P583(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab A 10.1" with S Pen (2016) WiFi'
    - regex: '(?:SAMSUNG-)?SM-P205(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab A 8.0" with S Pen (2019) LTE'
    - regex: '(?:SAMSUNG-)?SM-P200(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab A 8.0" with S Pen (2019) WiFi'
    - regex: '(?:SAMSUNG-)?SM-T307U(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab A 8.4" (2020) LTE'
    - regex: '(?:SAMSUNG-)?SM-T297'
      device: 'tablet'
      model: 'Galaxy Tab A 8.0" (2019) LTE'
    - regex: '(?:SAMSUNG-)?SM-(?:T505[CN]?|T507)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab A7 10.4" (2020) LTE'
    - regex: '(?:SAMSUNG-)?SM-T50[03](?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab A7 10.4" (2020) WiFi'
    - regex: '(?:SAMSUNG-)?SM-T22[57]'
      device: 'tablet'
      model: 'Galaxy Tab A7 Lite 8.7" (2021) LTE'
    - regex: '(?:SAMSUNG-)?SM-T220(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab A7 Lite 8.7" (2021) WiFi'
    - regex: '(?:SAMSUNG-)?SM-T11[03]'
      device: 'tablet'
      model: 'Galaxy Tab 3 Lite 7.0" WiFi'
    - regex: '(?:SAMSUNG-)?SM-X205'
      device: 'tablet'
      model: 'Galaxy Tab A8 10.5" LTE'
    - regex: '(?:SAMSUNG-)?SM-X200'
      device: 'tablet'
      model: 'Galaxy Tab A8 10.5" WiFi'
    - regex: '(?:SAMSUNG-)?SM-(?:T830[X]?|T837R4)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S4 10.5" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T837P(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S4 10.5" with S Pen'
    - regex: '(?:SAMSUNG-)?SM-(?:T835[CN]?|T837[VTA]?)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S4 10.5"'
    - regex: '(?:SAMSUNG-)?SM-(?:T725[CN]?|T720X|T727(?:R4|[AUV])?)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S5e 10.5"'
    - regex: '(?:SAMSUNG-)?SM-T720(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S5e 10.5" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T865N?(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S6 10.5"'
    - regex: '(?:SAMSUNG-)?SM-T867(?:R4|[VU])?(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S6 10.5" LTE'
    - regex: '(?:SAMSUNG-)?SM-(?:P615[CN]?|P61[379])(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S6 Lite 10.4"'
    - regex: '(?:SAMSUNG-)?SM-P610X?(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S6 Lite 10.4" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T860X?(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S6 10.5" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T866N(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S6 10.5" 5G'
    - regex: '(?:SAMSUNG-)?SM-X700'
      device: 'tablet'
      model: 'Galaxy Tab S8 11.0" WiFi'
    - regex: '(?:SAMSUNG-)?SM-X900'
      device: 'tablet'
      model: 'Galaxy Tab S8 Ultra 14.6" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T111'
      device: 'tablet'
      model: 'Galaxy Tab 3 Lite 7.0"'
    - regex: '(?:SAMSUNG-)?SM-T116(?:BU|NU|NY)?'
      device: 'tablet'
      model: 'Galaxy Tab 3 V'
    - regex: '(?:SAMSUNG-)?SM-(?:T2105|T212)'
      device: 'tablet'
      model: 'Galaxy Tab 3 7.0" Kids'
    - regex: '(?:SAMSUNG-)?SM-T210R?'
      device: 'tablet'
      model: 'Galaxy Tab 3 7.0" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T21(?:[15]|7[AS])'
      device: 'tablet'
      model: 'Galaxy Tab 3 7.0"'
    - regex: '(?:SAMSUNG-)?SM-T230(?:NU)?'
      device: 'tablet'
      model: 'Galaxy Tab 4 7.0" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T23[15]|403SC|SM-T321'
      device: 'tablet'
      model: 'Galaxy Tab 4 7.0" 3G'
    - regex: '(?:SAMSUNG-)?SM-(?:T239|T237[PV])'
      device: 'tablet'
      model: 'Galaxy Tab 4 7.0" LTE'
    - regex: '(?:SAMSUNG-)?SM-T232(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab 4 7.0" WiFi + 3G'
    - regex: '(?:SAMSUNG-)?SM-T310'
      device: 'tablet'
      model: 'Galaxy Tab 3 8.0" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T312'
      device: 'tablet'
      model: 'Galaxy Tab 3 8.0" 3G'
    - regex: '(?:SAMSUNG-)?SM-T311'
      device: 'tablet'
      model: 'Galaxy Tab 3 8.0"'
    - regex: '(?:SAMSUNG-)?SM-T315'
      device: 'tablet'
      model: 'Galaxy Tab 3 8.0" LTE'
    - regex: '(?:SAMSUNG-)?SM-T330'
      device: 'tablet'
      model: 'Galaxy Tab 4 8.0" WiFi'
    - regex: '(?:SAMSUNG-)?SM-(?:T33[215]|T337[AVT])'
      device: 'tablet'
      model: 'Galaxy Tab 4 8.0" LTE'
    - regex: '(?:SAMSUNG-)?SM-T520'
      device: 'tablet'
      model: 'Galaxy TabPRO 10.1" WiFi'
    - regex: '(?:SAMSUNG-)?SM-(?:T53[15]|T537[AV])'
      device: 'tablet'
      model: 'Galaxy Tab 4 10.1" LTE'
    - regex: '(?:SAMSUNG-)?SM-T536(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab 4 10.1" Advanced'
    - regex: '(?:SAMSUNG-)?SM-T532(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab 4 10.1"'
    - regex: '(?:SAMSUNG-)?SM-T320'
      device: 'tablet'
      model: 'Galaxy TabPRO 8.4" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T325'
      device: 'tablet'
      model: 'Galaxy TabPRO 8.4" LTE'
    - regex: '(?:SAMSUNG-)?SM-T525'
      device: 'tablet'
      model: 'Galaxy TabPRO 10.1" LTE'
    - regex: '(?:SAMSUNG-)?SM-(?:T530(?:NU)?|T533)'
      device: 'tablet'
      model: 'Galaxy Tab 4 10.1" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T700'
      device: 'tablet'
      model: 'Galaxy Tab S 8.4" WiFi'
    - regex: '(?:SAMSUNG-)?SM-(?:T705|T707[AV])'
      device: 'tablet'
      model: 'Galaxy Tab S 8.4" LTE'
    - regex: '(?:SAMSUNG-)?SM-T800'
      device: 'tablet'
      model: 'Galaxy Tab S 10.5" WiFi'
    - regex: '(?:SAMSUNG-)?(?:SM-(?:T805|T807[PV]?)|SCT21)'
      device: 'tablet'
      model: 'Galaxy Tab S 10.5" LTE'
    - regex: '(?:SAMSUNG-)?SM-(?:T813|T810)'
      device: 'tablet'
      model: 'Galaxy Tab S2 9.7" WiFi'
    - regex: '(?:SAMSUNG-)?SM-(?:T719[CY]?|T715(?:N0|[CY])?)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S2 8.0" LTE'
    - regex: '(?:SAMSUNG-)?SM-(?:T71[03]|T710X)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S2 8.0" WiFi'
    - regex: '(?:SAMSUNG-)?SM-(?:T815|T817[ATW]?|T818[ATVW]?|T819[Y]?)'
      device: 'tablet'
      model: 'Galaxy Tab S2 9.7" LTE'
    - regex: '(?:SAMSUNG-)?SM-T820'
      device: 'tablet'
      model: 'Galaxy Tab S3 9.7" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T82[57]'
      device: 'tablet'
      model: 'Galaxy Tab S3 9.7" LTE'
    - regex: '(?:SAMSUNG-)?SM-T975N?(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S7+ 12.4" LTE'
    - regex: '(?:SAMSUNG-)?SM-T970(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S7+ 12.4" WiFi'
    - regex: '(?:SAMSUNG-)?SM-(?:T976[BN]|T978U)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S7+ 12.4" 5G'
    - regex: '(?:SAMSUNG-)?SM-T870(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S7 11.0" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T875N?(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S7 11.0" LTE'
    - regex: '(?:SAMSUNG-)?SM-T878U(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab S7 11.0" 5G'
    - regex: '(?:SAMSUNG-)?SM-T73[57]'
      device: 'tablet'
      model: 'Galaxy Tab S7 FE 12.4" LTE'
    - regex: '(?:SAMSUNG-)?(?:SM-T736|SM-T738U)'
      device: 'tablet'
      model: 'Galaxy Tab S7 FE 12.4" 5G'
    - regex: '(?:SAMSUNG-)?SM-T733'
      device: 'tablet'
      model: 'Galaxy Tab S7 FE 12.4" WiFi'
    - regex: '(?:SAMSUNG-)?SM-X906'
      device: 'tablet'
      model: 'Galaxy Tab S8 Ultra 14.6" 5G'
    - regex: '(?:SAMSUNG-)?SM-X80[68]'
      device: 'tablet'
      model: 'Galaxy Tab S8+ 12.4" 5G'
    - regex: '(?:SAMSUNG-)?SM-X800'
      device: 'tablet'
      model: 'Galaxy Tab S8+ 12.4" WiFi'
    - regex: '(?:SAMSUNG-)?SM-X706'
      device: 'tablet'
      model: 'Galaxy Tab S8 11.0" 5G'
    - regex: '(?:SAMSUNG-)?SM-T900'
      device: 'tablet'
      model: 'Galaxy TabPRO 12.2" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T280'
      device: 'tablet'
      model: 'Galaxy Tab A 7.0" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T285'
      device: 'tablet'
      model: 'Galaxy Tab A 7.0" LTE'
    - regex: '(?:SAMSUNG-)?SM-T3[58]0'
      device: 'tablet'
      model: 'Galaxy Tab A 8.0" WiFi'
    - regex: '(?:SAMSUNG-)?SM-(?:P350|T3[58]5|T357[TW])'
      device: 'tablet'
      model: 'Galaxy Tab A 8.0" LTE'
    - regex: '(?:SAMSUNG-)?SM-T387(?:AA|R4|VK|[TPVW])'
      device: 'tablet'
      model: 'Galaxy Tab A 8.0" LTE (2018)'
    - regex: '(?:SAMSUNG-)?SM-T295'
      device: 'tablet'
      model: 'Galaxy Tab A 8.0" LTE (2019)'
    - regex: '(?:SAMSUNG-)?SM-T290'
      device: 'tablet'
      model: 'Galaxy Tab A 8.0" WiFi (2019)'
    - regex: '(?:SAMSUNG-)?SM-(?:P355([MY])?|T550)'
      device: 'tablet'
      model: 'Galaxy Tab A 9.7" WiFi'
    - regex: '(?:SAMSUNG-)?SM-(?:P550|P555(M)?|T555)'
      device: 'tablet'
      model: 'Galaxy Tab A 9.7" LTE'
    - regex: '(?:SAMSUNG-)?SM-(?:T58[05]|P58[05])'
      device: 'tablet'
      model: 'Galaxy Tab A 10.1" WiFi (2016)'
    - regex: '(?:SAMSUNG-)?SM-T587[P]?'
      device: 'tablet'
      model: 'Galaxy Tab A 10.1" LTE (2016)'
    - regex: '(?:SAMSUNG-)?SM-T59[057]'
      device: 'tablet'
      model: 'Galaxy Tab A 10.5" LTE (2018)'
    - regex: '(?:SAMSUNG-)?SM-T51(?:7P|[057])'
      device: 'tablet'
      model: 'Galaxy Tab A 10.1" (2019)'
    - regex: '(?:SAMSUNG-)?SM-(?:T37[57]|T378[KLSV])'
      device: 'tablet'
      model: 'Galaxy Tab E 8.0"'
    - regex: '(?:SAMSUNG-)?SM-T56[02]'
      device: 'tablet'
      model: 'Galaxy Tab E 9.6" WiFi'
    - regex: '(?:SAMSUNG-)?SM-T561'
      device: 'tablet'
      model: 'Galaxy Tab E 9.6" 3G'
    - regex: '(?:SAMSUNG-)?SM-T567V'
      device: 'tablet'
      model: 'Galaxy Tab E 9.6" 4G'
    - regex: '(?:SAMSUNG-)?SM-T365(?:F0|[MY])?(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab Active 8.0"'
    - regex: '(?:SAMSUNG-)?SM-T360(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab Active 8.0" WiFi'
    - regex: '(?:SAMSUNG-)?SM-(?:T395[CN]?|T397U)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab Active 2 8.0"'
    - regex: '(?:SAMSUNG-)?SM-T390(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab Active 2 8.0" WiFi'
    - regex: '(?:SAMSUNG-)?SM-(?:T575N?|T577U?)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab Active 3 8.0"'
    - regex: '(?:SAMSUNG-)?SM-T570(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab Active 3 8.0" WiFi'
    - regex: '(?:SAMSUNG-)?SM-(?:T545|T547U?)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab Active Pro 10.1"'
    - regex: '(?:SAMSUNG-)?SM-T540(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Tab Active Pro 10.1" WiFi'
    - regex: '(?:SAMSUNG-)?SM-(?:P902|P907A)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Galaxy Note Pro 12.2"'
    - regex: '(?:SAMSUNG[- ])?SM-T2519'
      model: 'Galaxy Tab Q'
      device: 'tablet'

    # explicit wearable models
    - regex: 'SM-R820'
      device: 'wearable'
      model: 'Galaxy Watch Active 2 44mm'
    - regex: 'SM-V7000'
      device: 'wearable'
      model: 'Galaxy Gear'
    - regex: 'SM-R3500'
      device: 'wearable'
      model: 'Galaxy Gear Fit'
    - regex: 'SM-R3800'
      device: 'wearable'
      model: 'Galaxy Gear 2'
    - regex: 'SSM-R3810'
      device: 'wearable'
      model: 'Galaxy Gear 2 Neo'
    - regex: 'SM-R825'
      device: 'wearable'
      model: 'Galaxy Watch Active 2 44mm LTE'
    - regex: 'SM-R830'
      device: 'wearable'
      model: 'Galaxy Watch Active 2 40mm'
    - regex: 'SM-R835'
      device: 'wearable'
      model: 'Galaxy Watch Active 2 40mm LTE'
    - regex: 'SM-R800'
      device: 'wearable'
      model: 'Galaxy Watch 46mm'
    - regex: 'SM-R805'
      device: 'wearable'
      model: 'Galaxy Watch 46mm LTE'
    - regex: 'SM-R810'
      device: 'wearable'
      model: 'Galaxy Watch 42mm'
    - regex: 'SM-R815'
      device: 'wearable'
      model: 'Galaxy Watch 42mm LTE'
    - regex: 'SM-R500'
      device: 'wearable'
      model: 'Galaxy Watch Active'
    - regex: 'SM-R600'
      device: 'wearable'
      model: 'Galaxy Gear Sport 43mm'
    - regex: 'SM-R760'
      device: 'wearable'
      model: 'Galaxy Gear S3 Frontier 46mm'
    - regex: 'SM-R750'
      device: 'wearable'
      model: 'Gear S 40mm'
    - regex: 'SM-R732'
      device: 'wearable'
      model: 'Gear S2 42mm'
    - regex: 'SM-R765'
      device: 'wearable'
      model: 'Galaxy Gear S3 Frontier 33mm'
    - regex: 'SM-R770'
      device: 'wearable'
      model: 'Galaxy Gear S3 Classic 41mm'
    - regex: 'SM-R845'
      device: 'wearable'
      model: 'Galaxy Watch 3 45mm LTE'
    - regex: 'SM-R840'
      device: 'wearable'
      model: 'Galaxy Watch 3 45mm'
    - regex: 'SM-R850'
      device: 'wearable'
      model: 'Galaxy Watch 3 41mm'
    - regex: 'SM-R855'
      device: 'wearable'
      model: 'Galaxy Watch 3 41mm 4G'
    - regex: 'Gear Live'
      device: 'wearable'
      model: 'Gear Live'

    # smart fridge models
    - regex: 'Family ?Hub'
      device: 'peripheral'
      model: 'Family Hub'

    # explicit smartphone models
    - regex: '(?:SAMSUNG-)?SM-G850(?:8S|[AFKLMSWXY])'
      model: 'Galaxy Alpha'
    - regex: '(?:SAMSUNG-)?GT-B5330'
      model: 'Galaxy Chat'
    - regex: '(?:SAMSUNG-)?SM-A605K'
      model: 'Galaxy Jean'
    - regex: '(?:SAMSUNG-)?SM-A202K'
      model: 'Galaxy Jean 2'
    - regex: '(?:SAMSUNG-)?GT-B5510'
      model: 'Galaxy Y Pro'
    - regex: '(?:SAMSUNG-)?GT-B5512'
      model: 'Galaxy Y Pro Duos'
    - regex: '(?:SAMSUNG-)?GT-B7510'
      model: 'Galaxy Pro'
    - regex: '(?:SAMSUNG-)?GT-I5700'
      model: 'Galaxy Spica'
    - regex: '(?:SAMSUNG-)?GT-I5801'
      model: 'Galaxy Apollo'
    - regex: '(?:SAMSUNG-)?GT-I5800'
      model: 'Galaxy 3'
    - regex: '(?:SAMSUNG-)?GT-I8000'
      model: 'Omnia II'
    - regex: '(?:SAMSUNG-)?GT-S7530'
      model: 'Omnia M'
    - regex: '(?:SAMSUNG-)?GT-I8350'
      model: 'Omnia W'
    - regex: '(?:SAMSUNG-)?OMNIA7'
      model: 'Omnia 7'
    - regex: '(?:SAMSUNG-)?SGH-i677'
      model: 'Focus Flash'
    - regex: '(?:SAMSUNG-)?SGH-i917'
      model: 'Focus'
    - regex: '(?:SAMSUNG-)?SGH-i937'
      model: 'Focus S'
    - regex: '(?:SAMSUNG-)?(?:GT-I8150|SM-T255S)'
      model: 'Galaxy W'
    - regex: 'SC-01H(?:[);/ ]|$)'
      model: 'Galaxy Active Neo'
    - regex: '(?:SAMSUNG-)?GT-S5830'
      model: 'Galaxy Ace'
    - regex: '(?:SAMSUNG-)?SM-(?:G357(?:FZ|M)|G310HN)'
      model: 'Galaxy Ace Style'
    - regex: '(?:SAMSUNG-)?GT-I8160'
      model: 'Galaxy Ace 2'
    - regex: '(?:SAMSUNG-)?SM-G313(?:HY|M[LUY]|[FM])'
      model: 'Galaxy Ace 4'
    - regex: '(?:SAMSUNG-)?SM-G316M'
      model: 'Galaxy Ace 4 Duos'
    - regex: '(?:SAMSUNG-)?SM-G313[HU]'
      model: 'Galaxy Ace 4 Lite'
    - regex: '(?:SAMSUNG-)?SM-(?:G316U|G318(?:H|ML))(?:[);/ ]|$)'
      model: 'Galaxy Ace 4 Neo'
    - regex: '(?:SAMSUNG-)?SM-G9100(?:[);/ ]|$)'
      model: 'Galaxy S II'
    - regex: '(?:SAMSUNG-)?SHV-E120'
      model: 'Galaxy S II HD LTE'
    - regex: '(?:SAMSUNG-)?GT-I8190'
      model: 'Galaxy S III mini'
    - regex: '(?:SAMSUNG-)?GT-I8200'
      model: 'Galaxy S III mini Value Edition'
    - regex: '(?:SAMSUNG-)?GT-I826[02]'
      model: 'Galaxy Core'
    - regex: '(?:SAMSUNG-)?SHW-M570S'
      model: 'Galaxy Core Advance'
    - regex: '(?:SAMSUNG-)?SM-G386W'
      model: 'Galaxy Core LTE'
    - regex: '(?:SAMSUNG-)?SM-G3589W'
      model: 'Galaxy Core Lite LTE'
    - regex: '(?:SAMSUNG-)?GT-I8320'
      model: 'H1'
    - regex: '(?:SAMSUNG-)?GT-I85[23]0'
      model: 'Galaxy Beam'
    - regex: '(?:SAMSUNG-)?SM-G3858'
      model: 'Galaxy Beam 2'
    - regex: '(?:SAMSUNG-)?SM-G600S'
      model: 'Galaxy Wide'
    - regex: '(?:SAMSUNG-)?SM-E426S'
      model: 'Galaxy Wide 5'
    - regex: '(?:SAMSUNG-)?GT-I855[028]'
      model: 'Galaxy Win'
    - regex: '(?:SAMSUNG-)?SM-G381[28]'
      model: 'Galaxy Win Pro'
    - regex: '(?:SAMSUNG-)?GT-I8580'
      model: 'Galaxy Core Advance'
    - regex: '(?:SAMSUNG-)?GT-I8730'
      model: 'Galaxy Express'
    - regex: '(?:SAMSUNG-)?SM-(?:E500(?:HQ|YZ|[0FHM])|S978L)'
      model: 'Galaxy E5'
    - regex: '(?:SAMSUNG-)?SM-E700[09FHM]'
      model: 'Galaxy E7'
    - regex: '(?:SAMSUNG-)?GT-I90(?:00|08|18|88)'
      model: 'Galaxy S'
    - regex: '(?:SAMSUNG-)?GT-I9001'
      model: 'Galaxy S Plus'
    - regex: '(?:SAMSUNG-)?GT-I9003'
      model: 'Galaxy SL'
    - regex: '(?:SAMSUNG-)?GT-I9010'
      model: 'Galaxy S Giorgio Armani'
    - regex: '(?:SAMSUNG-)?GT-I9070'
      model: 'Galaxy S Advance'
    - regex: '(?:SAMSUNG-)?GT-I910[08]'
      model: 'Galaxy S II'
    - regex: '(?:SAMSUNG-)?ISW11SC'
      model: 'Galaxy S II WiMAX'
    - regex: '(?:SAMSUNG-)?GT-I9103'
      model: 'Galaxy R'
    - regex: '(?:SAMSUNG-)?GT-I9105'
      model: 'Galaxy S II Plus'
    - regex: '(?:SAMSUNG-)?SM-G730(?:W8|[AV])'
      model: 'Galaxy S3 mini'
    - regex: '(?:SAMSUNG-)?(?:GT-I919[025]|SCH-I435)|(?:lineage_|aokp_)?serranoltexx'
      model: 'Galaxy S4 mini'
    - regex: '(?:SAMSUNG-)?GT-I9515'
      model: 'Galaxy S4 Value Edition'
    - regex: '(?:SAMSUNG-)?GT-I9295'
      model: 'Galaxy S4 ACTIVE'
    - regex: '(?:SAMSUNG-)?(?:GT-I9300|SCH-(?:I535|I939|L710))|SC-03E'
      model: 'Galaxy S III'
    - regex: '(?:SAMSUNG-)?(?:GT-I9305|SCH-R530)'
      model: 'Galaxy S III LTE'
    - regex: '(?:SAMSUNG-)?(?:SM-S975L|GT-I950[025]|SC-04E|SCH-(?:I545|I959|R970)|SGH-M919N?|Galaxy-S4|SHV-E300K)'
      model: 'Galaxy S4'
    - regex: '(?:SAMSUNG-)?(?:GT-I9506)'
      model: 'Galaxy S4 with LTE+'
    - regex: '(?:SAMSUNG-)?SHV-E330'
      model: 'Galaxy S4 LTE'
    - regex: '(?:SAMSUNG-)?GT-S5280'
      model: 'Galaxy STAR'
    - regex: '(?:SAMSUNG-)?GT-S5301'
      model: 'Galaxy POCKET Plus'
    - regex: '(?:SAMSUNG-)?GT-S5310'
      model: 'Galaxy POCKET Neo'
    - regex: '(?:SAMSUNG-)?SM-G110[BHM]'
      model: 'Galaxy POCKET 2'
    - regex: '(?:SAMSUNG-)?GT-S5360'
      model: 'Galaxy Y Hello Kitty'
    - regex: '(?:SAMSUNG-)?GT-S6310'
      model: 'Galaxy Young'
    - regex: '(?:SAMSUNG-)?GT-S6312'
      model: 'Galaxy Young DUOS'
    - regex: '(?:SAMSUNG-)?SM-G130(?:BT|HN|[EHMU])'
      model: 'Galaxy Young 2'
    - regex: '(?:SAMSUNG-)?SM-G130BU'
      model: 'Galaxy Young 2 Pro'
    - regex: '(?:SAMSUNG-)?GT-S6790'
      model: 'Galaxy FAME Lite with NFC'
    - regex: '(?:SAMSUNG-)?GT-S6810'
      model: 'Galaxy FAME'
    - regex: '(?:SAMSUNG-)?GT-S6812'
      model: 'Galaxy FAME Duos'
    - regex: 'SC-04J(?:[);/ ]|$)'
      model: 'Galaxy Feel'
    - regex: 'SC-02L(?:[);/ ]|$)'
      model: 'Galaxy Feel 2'
    - regex: '(?:SAMSUNG-)?GT-S7275'
      model: 'Galaxy ACE 3'
    - regex: '(?:SAMSUNG-)?GT-S7500'
      model: 'Galaxy ACE Plus'
    - regex: '(?:SAMSUNG-)?(?:GT-S7560|SCH-I699)'
      model: 'Galaxy Trend'
    - regex: '(?:SAMSUNG-)?GT-S7390'
      model: 'Galaxy Trend Lite'
    - regex: '(?:SAMSUNG-)?GT-S7580'
      model: 'Galaxy Trend Plus'
    - regex: '(?:SAMSUNG-)?SCH-I739'
      model: 'Galaxy Trend 2'
    - regex: '(?:SAMSUNG-)?(?:GT-S7562|SCH-I919)'
      model: 'Galaxy S DUOS'
    - regex: '(?:SAMSUNG-)?GT-S7582'
      model: 'Galaxy S DUOS 2'
    - regex: '(?:SAMSUNG-)?SM-(?:G31[36]HU|G313HZ)'
      model: 'Galaxy S DUOS 3'
    - regex: '(?:SAMSUNG-)?GT-S7710'
      model: 'Galaxy Xcover 2'
    - regex: '(?:SAMSUNG-)?SM-G388F'
      model: 'Galaxy Xcover 3'
    - regex: '(?:SAMSUNG-)?SM-G389F'
      model: 'Galaxy Xcover 3 VE'
    - regex: '(?:SAMSUNG-)?SM-G390[FWY]'
      model: 'Galaxy Xcover 4'
    - regex: '(?:SAMSUNG-)?SM-G398FN'
      model: 'Galaxy Xcover 4s'
    - regex: '(?:SAMSUNG-)?SM-G715(?:FN|U1|[AUW])'
      model: 'Galaxy Xcover Pro'
    - regex: '(?:SAMSUNG-)?SM-G889(?:YB|[AFG])'
      model: 'Galaxy Xcover FieldPro'
    - regex: '(?:SAMSUNG-)?SM-G525[FN]'
      model: 'Galaxy Xcover 5'
    - regex: '(?:SAMSUNG-)?SM-G736'
      model: 'Galaxy Xcover 6 Pro'
    - regex: '(?:SAMSUNG-)?GT-S8500'
      model: 'Wave'
    - regex: '(?:SAMSUNG-)?GT-S8530'
      model: 'Wave II'
    - regex: '(?:SAMSUNG-)?GT-S8600'
      model: 'Wave 3'
    - regex: '(?:SAMSUNG-)?GT-S5380'
      model: 'Wave Y'
    - regex: '(?:SAMSUNG-)?GT-S7250'
      model: 'Wave M'
    - regex: '(?:SAMSUNG-)?GT-S5250'
      model: 'Wave 525'
    - regex: '(?:SAMSUNG-)?GT-S5330'
      model: 'Wave 533'
    - regex: '(?:SAMSUNG-)?GT-S5780'
      model: 'Wave 578'
    - regex: '(?:SAMSUNG-)?GT-S7230'
      model: 'Wave 723'
    - regex: '(?:SAMSUNG-)?SM-(?:C101|C105([AL])?)'
      model: 'Galaxy S4 zoom'
    - regex: '(?:SAMSUNG-)?SM-(?:C111(M)?|C115)'
      model: 'Galaxy K zoom'
    - regex: '(?:SAMSUNG-)?SM-G318[HM]Z'
      model: 'Galaxy V Plus'
    - regex: '(?:SAMSUNG-)?SM-G355(?:6D|[89HM])'
      model: 'Galaxy Core 2'
    - regex: '(?:SAMSUNG-)?SM-G350'
      model: 'Galaxy Core Plus'
    - regex: '(?:SAMSUNG-)?SM-(?:G360[FH]?|S820L)'
      model: 'Galaxy Core Prime'
    - regex: '(?:SAMSUNG-)?SM-G361[FH]?'
      model: 'Galaxy Core Prime Value Edition'
    - regex: '(?:SAMSUNG-)?SM-(?:G386F|G3518(?:_TD)?|G3586V)'
      model: 'Galaxy Core LTE'
    - regex: '(?:SAMSUNG-)?SM-G3568V'
      model: 'Galaxy Core Mini 4G'
    - regex: '(?:SAMSUNG-)?SM-G5108Q?'
      model: 'Galaxy Core Max'
    - regex: '(?:SAMSUNG-)?SM-G3815'
      model: 'Galaxy EXPRESS II'
    - regex: '(?:SAMSUNG-)?SM-G80[01]'
      model: 'Galaxy S5 mini'
    - regex: '(?:SAMSUNG-)?SM-G9009D'
      model: 'Galaxy S5 Dual-SIM'
    - regex: '(?:SAMSUNG-)?SM-G900FD'
      model: 'Galaxy S5 Duos'
    - regex: '(?:SAMSUNG-)?SM-(?:G900|G906[KLS]|S902L|S903VL|G490F)|Galaxy-S5|SCL23|SC-04F'
      model: 'Galaxy S5'
    - regex: '(?:SAMSUNG-)?SM-G901F'
      model: 'Galaxy S5 LTE+'
    - regex: '(?:SAMSUNG-)?SM-G870[AFW]|SC-02G'
      model: 'Galaxy S5 Active'
    - regex: '(?:SAMSUNG-)?SM-G903[FMW]'
      model: 'Galaxy S5 Neo'
    - regex: '(?:SAMSUNG-)?SM-G860P'
      model: 'Galaxy S5 K Sport'
    - regex: '(?:SAMSUNG-)?(?:SM-G920(?:F[DQ]|W8|[089AFIKLPRSTVX])?|SM-S906L|SM-S907VL)|SC-05G'
      model: 'Galaxy S6'
    - regex: '(?:SAMSUNG-)?SM-G890A'
      model: 'Galaxy S5 Active'
    - regex: '(?:SAMSUNG-)?(?:SM-G925[0ADFJIKLPRSTVWX]|SCV31|404SC|SC-04G|SM-G828)'
      model: 'Galaxy S6 Edge'
    - regex: '(?:SAMSUNG-)?SM-G928(?:7C|N0|R4|W8|[07ACFGIKLPSTVX])'
      model: 'Galaxy S6 Edge+'
    - regex: '(?:SAMSUNG-)?SM-G930(?:AZ|FD|R[467]|T1|V[CL]|W8|[0AFKLPRSTUVX8])?(?:[);/ ]|$)'
      model: 'Galaxy S7'
    - regex: '(?:SAMSUNG-)?SM-G935(?:R4|W8|[0AFKLPSTUVX])|SC-02H|SCV33'
      model: 'Galaxy S7 Edge'
    - regex: '(?:SAMSUNG-)?SM-G891A'
      model: 'Galaxy S7 Active'
    - regex: '(?:SAMSUNG-)?SM-G950[08FNUW]?|SCV36|SC-02J'
      model: 'Galaxy S8'
    - regex: '(?:SAMSUNG-)?SM-G8750'
      model: 'Galaxy S8 Lite'
    - regex: '(?:SAMSUNG-)?SM-G892[AU]'
      model: 'Galaxy S8 Active'
    - regex: '(?:SAMSUNG-)?SM-G955[0AFKLNPRTUVWX]?|SCV35|SC-03J'
      model: 'Galaxy S8+'
    - regex: '(?:SAMSUNG-)?SM-G960[0FNUWX]?|SCV38|SC-02K'
      model: 'Galaxy S9'
    - regex: '(?:SAMSUNG-)?SM-G965[0FNUWX]|SCV39|SC-03K'
      model: 'Galaxy S9+'
    - regex: '(?:SAMSUNG-)?(?:SM-(?:G973|G977[BNPTU])|SCV41|SC-03L)'
      model: 'Galaxy S10'
    - regex: '(?:SAMSUNG-)?SM-(?:S10 Lite|G770(?:U1|F))'
      model: 'Galaxy S10 Lite'
    - regex: '(?:SAMSUNG-)?(?:SM-G975[08FUNWX]|SCV42|SC-04L)'
      model: 'Galaxy S10+'
    - regex: 'SC-05L'
      model: 'Galaxy S10+ Olympic Games Edition'
    - regex: '(?:SAMSUNG-)?SM-G970(?:U1|[08FUNWX])(?:[);/ ]|$)'
      model: 'Galaxy S10e'
    - regex: '(?:SAMSUNG-)?SM-G980F'
      model: 'Galaxy S20'
    - regex: '(?:SAMSUNG-)?SM-G981(?:U1|[0BNUVW])|SCG01|SC-51A|SC51Aa'
      model: 'Galaxy S20 5G'
    - regex: '(?:SAMSUNG-)?SM-G780'
      model: 'Galaxy S20 FE'
    - regex: '(?:SAMSUNG-)?SM-G781(?:U1|[0BNUVW])'
      model: 'Galaxy S20 FE 5G'
    - regex: '(?:SAMSUNG-)?SM-G988(?:U1|[0BNQUW])|SCG03'
      model: 'Galaxy S20 Ultra 5G'
    - regex: '(?:SAMSUNG-)?SM-G985F|SCG02'
      model: 'Galaxy S20+'
    - regex: '(?:SAMSUNG-)?SM-G986(?:U1|[0BNUW])|SC-52A'
      model: 'Galaxy S20+ 5G'
    - regex: '(?:SAMSUNG-)?SM-G991V'
      model: 'Galaxy S21 5G UW'
    - regex: '(?:SAMSUNG-)?SM-G991(?:U1|[0ABNWQU])|SCG09'
      model: 'Galaxy S21 5G'
    - regex: '(?:SAMSUNG-)?SM-G990'
      model: 'Galaxy S21 FE 5G'
    - regex: '(?:SAMSUNG-)?SC-51B'
      model: 'Galaxy S21 5G Olympic Games Edition'
    - regex: '(?:SAMSUNG-)?(?:SM-G998(?:U1|[0BNUWTP])|SC-52B)'
      model: 'Galaxy S21 Ultra 5G'
    - regex: '(?:SAMSUNG-)?SM-G996(?:U1|[0BNWUP])|SCG10'
      model: 'Galaxy S21+ 5G'
    - regex: '(?:SAMSUNG-)?SM-S901(?:U1|[0BENUW])|SC-51C|SCG13'
      model: 'Galaxy S22'
    - regex: '(?:SAMSUNG-)?SM-S908(?:U1|[0BENUW])|SCG14|SC-52C'
      model: 'Galaxy S22 Ultra'
    - regex: '(?:SAMSUNG-)?SM-S906(?:U1|[0BENUW])'
      model: 'Galaxy S22+'
    - regex: '(?:SAMSUNG-)?SM-S911'
      model: 'Galaxy S23'
    - regex: '(?:SAMSUNG-)?SM-S916'
      model: 'Galaxy S23+'
    - regex: '(?:SAMSUNG-)?SM-S918'
      model: 'Galaxy S23 Ultra'
    - regex: '(?:SAMSUNG-)?SM-F700(?:U1|[0FNUW])|SCV47'
      model: 'Galaxy Z Flip'
    - regex: '(?:SAMSUNG-)?SM-F707(?:U1|[0BNUW])|SCG04'
      model: 'Galaxy Z Flip 5G'
    - regex: '(?:SAMSUNG-)?SCH-I200'
      model: 'Galaxy Stellar'
    - regex: '(?:SAMSUNG-)?SCH-I829'
      model: 'Galaxy Style Duos'
    - regex: '(?:SAMSUNG-)?(?:SCH-R740|SGH-S730)'
      model: 'Galaxy Discover'
    - regex: '(?:SAMSUNG-)?SCH-S738'
      model: 'Galaxy Centura'
    - regex: 'vollo Vi86(?:[);/ ]|$)'
      model: 'Vollo Vi86'
    - regex: '(?:SAMSUNG-)?SM-G386(?:T1|T)'
      model: 'Galaxy Avant'
    - regex: '(?:SAMSUNG-)?SM-A716S'
      model: 'Galaxy A Quantum'
    - regex: '(?:SAMSUNG-)?SM-(?:A015(?:DL|[TU]1|[AFGMUV])|S111DL)'
      model: 'Galaxy A01'
    - regex: '(?:SAMSUNG-)?SM-A013[FGM]'
      model: 'Galaxy A01 Core'
    - regex: '(?:SAMSUNG-)?SM-(?:A025(?:[AFGM]|AZ)?|S124DL)'
      model: 'Galaxy A02s'
    - regex: '(?:SAMSUNG-)?(?:SM-A037[F]?|SM-S134DL)'
      model: 'Galaxy A03s'
    - regex: '(?:SAMSUNG-)?SM-A035[F]?'
      model: 'Galaxy A03'
    - regex: '(?:SAMSUNG-)?SM-A047'
      model: 'Galaxy A04s'
    - regex: '(?:SAMSUNG-)?SM-A042[FM]'
      model: 'Galaxy A04e'
    - regex: '(?:SAMSUNG-)?SM-A045'
      model: 'Galaxy A04'
    - regex: '(?:SAMSUNG-)?SM-A032[F]?'
      model: 'Galaxy A03 Core'
    - regex: '(?:SAMSUNG-)?SM-A022[GMF]?'
      model: 'Galaxy A02'
    - regex: '(?:SAMSUNG-)?SM-A260[FG]'
      model: 'Galaxy A2 Core'
    - regex: '(?:SAMSUNG-)?(?:SM-S115(?:DL)?|SM-A115V)'
      model: 'Galaxy A11'
    - regex: '(?:SAMSUNG-)?SM-A225[F]?'
      model: 'Galaxy A22'
    - regex: '(?:SAMSUNG-)?SM-A226L'
      model: 'Galaxy Buddy'
    - regex: '(?:SAMSUNG-)?SM-A226|SC-56B'
      model: 'Galaxy A22 5G'
    - regex: '(?:SAMSUNG-)?SM-A300(?:FU|YZ|XU|XZ|[09FGHMXY])'
      model: 'Galaxy A3 (2015)'
    - regex: '(?:SAMSUNG-)?SM-A310(?:N0|[FMXY])'
      model: 'Galaxy A3 (2016)'
    - regex: '(?:SAMSUNG-)?SM-A320(?:FL|[FXY])'
      model: 'Galaxy A3 (2017)'
    - regex: '(?:SAMSUNG-)?SM-A430F'
      model: 'Galaxy A4'
    - regex: '(?:SAMSUNG-)?(?:SM-A500(?:YZ|[9LSWY])?|SM-A5OOH)(?:[);/ ]|$)'
      model: 'Galaxy A5'
    - regex: '(?:SAMSUNG-)?SM-A500[0FGHKM]'
      model: 'Galaxy A5 Duos'
    - regex: '(?:SAMSUNG-)?SM-A500(?:FU|X)'
      model: 'Galaxy A5 (2015)'
    - regex: '(?:SAMSUNG-)?SM-A510[08FKLMSXY]'
      model: 'Galaxy A5 (2016)'
    - regex: '(?:SAMSUNG-)?SM-A520[FKLSWX]'
      model: 'Galaxy A5 (2017)'
    - regex: '(?:SAMSUNG-)?SM-A525'
      model: 'Galaxy A52'
    - regex: '(?:SAMSUNG-)?(?:SC-53B|SM-A526)'
      model: 'Galaxy A52 5G'
    - regex: '(?:SAMSUNG-)?SM-A528'
      model: 'Galaxy A52s 5G'
    - regex: '(?:SAMSUNG-)?SM-A600(?:AZ|FN|GN|T1|[AFGNPTUX])|SM-A6(?:[);/ ]|$)'
      model: 'Galaxy A6'
    - regex: '(?:SAMSUNG-)?SM-A605(?:[FG]N|[08FGX])|SM-A6\+'
      model: 'Galaxy A6+'
    - regex: '(?:SAMSUNG-)?SM-G6200'
      model: 'Galaxy A6s (2018)'
    - regex: '(?:SAMSUNG-)?SM-A606[0Y]'
      model: 'Galaxy A60'
    - regex: '(?:SAMSUNG-)?SM-A700(?:YD|[09FHKLSX])'
      model: 'Galaxy A7'
    - regex: '(?:SAMSUNG-)?SM-A710[08FKLMSXY]'
      model: 'Galaxy A7 (2016)'
    - regex: '(?:SAMSUNG-)?SM-A720[FMSX]'
      model: 'Galaxy A7 (2017)'
    - regex: '(?:SAMSUNG-)?SM-A750(?:GN|[CFGNX])'
      model: 'Galaxy A7 (2018)'
    - regex: '(?:SAMSUNG-)?SM-A71(?:5[FW])?(?:[);/ ]|$)'
      model: 'Galaxy A71'
    - regex: '(?:SAMSUNG-)?SM-A725[FM](?:[);/ ]|$)'
      model: 'Galaxy A72'
    - regex: '(?:SAMSUNG-)?SM-A736'
      model: 'Galaxy A73 5G'
    - regex: '(?:SAMSUNG-)?SM-A716(?:U1|[0BUV])(?:[);/ ]|$)'
      model: 'Galaxy A71 5G'
    - regex: '(?:SAMSUNG-)?SM-A(?:530F|800[0FISXY])|SCV32'
      model: 'Galaxy A8'
    - regex: '(?:SAMSUNG-)?SM-G885[FSY]'
      model: 'Galaxy A8 Star'
    - regex: '(?:SAMSUNG-)?SM-A810(?:YZ|[FS])'
      model: 'Galaxy A8 (2016)'
    - regex: '(?:SAMSUNG-)?SM-(?:A8s|G887[0F])'
      model: 'Galaxy A8s'
    - regex: '(?:SAMSUNG-)?SM-A530[MNWX]'
      model: 'Galaxy A8 (2018)'
    - regex: '(?:SAMSUNG-)?SM-A730[FX]'
      model: 'Galaxy A8+ (2018)'
    - regex: '(?:SAMSUNG-)?SM-A900[0F]'
      model: 'Galaxy A9'
    - regex: 'SM-A9\[7\]'
      model: 'Galaxy A9 7'
    - regex: '(?:SAMSUNG-)?SM-A920[0FXN]'
      model: 'Galaxy A9 (2018)'
    - regex: '(?:SAMSUNG-)?SM-G885[08]'
      model: 'Galaxy A9 Star'
    - regex: '(?:SAMSUNG-)?SM-(?:A9 Pro|A910[0F]|G887N)'
      model: 'Galaxy A9 Pro'
    - regex: '(?:SAMSUNG-)?SM-A105[FGMN]'
      model: 'Galaxy A10'
    - regex: '(?:SAMSUNG-)?SM-A107[FM]'
      model: 'Galaxy A10s'
    - regex: '(?:SAMSUNG-)?SM-(?:S102DL|A102[NUW])'
      model: 'Galaxy A10e'
    - regex: '(?:SAMSUNG-)?SM-A115(?:A[PZ]|U1|[AFMUW])'
      model: 'Galaxy A11'
    - regex: '(?:SAMSUNG-)?SM-(?:A12(?:5[AFMNUWTP]|7[FM])|S127DL)'
      model: 'Galaxy A12'
    - regex: '(?:SAMSUNG-)?SM-(?:A136(?:U1|[BMWU])|S136DL)'
      model: 'Galaxy A13 5G'
    - regex: '(?:SAMSUNG-)?(?:SM-A135|SM-A137F)'
      model: 'Galaxy A13'
    - regex: '(?:SAMSUNG-)?SM-(?:A205(?:U1|YN|[FGSWU])|S205DL)|SC-02M|SCV46'
      model: 'Galaxy A20'
    - regex: '(?:SAMSUNG-)?(?:SM-A215(?:DL|R4|U1|[UWTP])|SM-S215DL|SC-42A|SCV49|SM-A102J)(?:[);/ ]|$)'
      model: 'Galaxy A21'
    - regex: '(?:SAMSUNG-)?SM-A217[FMN](?:[);/ ]|$)'
      model: 'Galaxy A21s'
    - regex: '(?:SAMSUNG-)?SM-A202[FG]'
      model: 'Galaxy A20e'
    - regex: '(?:SAMSUNG-)?SM-A207[0FM]'
      model: 'Galaxy A20s'
    - regex: '(?:SAMSUNG-)?SM-A235'
      model: 'Galaxy A23'
    - regex: '(?:SAMSUNG-)?SM-A23[36]|SC-56C|SCG18'
      model: 'Galaxy A23 5G'
    - regex: '(?:SAMSUNG-)?(?:SM-A305(?:[FGY]N|GT|[FGN])|SCV43)'
      model: 'Galaxy A30'
    - regex: '(?:SAMSUNG-)?SM-A307(?:FN|GN|GT|[FG])'
      model: 'Galaxy A30s'
    - regex: '(?:SAMSUNG-)?SM-A315[FGN](?:[);/ ]|$)'
      model: 'Galaxy A31'
    - regex: '(?:SAMSUNG-)?SM-A325'
      model: 'Galaxy A32'
    - regex: '(?:SAMSUNG-)?(?:SM-(?:A326(?:BR|U1|[BUWJ])|S326DL)|SCG08)'
      model: 'Galaxy A32 5G'
    - regex: '(?:SAMSUNG-)?SM-A336'
      model: 'Galaxy A33 5G'
    - regex: '(?:SAMSUNG-)?SM-A405(?:F[NM]|S)'
      model: 'Galaxy A40'
    - regex: '(?:SAMSUNG-)?SM-A305[018](?:[);/ ]|$)'
      model: 'Galaxy A40s'
    - regex: '(?:SAMSUNG-)?(?:SM-A415F|SC-41A|SCV48)(?:[);/ ]|$)'
      model: 'Galaxy A41'
    - regex: '(?:SAMSUNG-)?SM-[AS]426'
      model: 'Galaxy A42 5G'
    - regex: '(?:SAMSUNG-)?SM-(?:A505(?:F[GN]|U1|YN|[FGNUWX])|S506DL|505FN)'
      model: 'Galaxy A50'
    - regex: '(?:SAMSUNG-)?SM-A5070(?:[);/ ]|$)'
      model: 'Galaxy A50s'
    - regex: '(?:SAMSUNG-)?SM-A507FN'
      model: 'Galaxy A50s'
    - regex: '(?:SAMSUNG-)?SM-(?:A515[FUW]|S515DL)'
      model: 'Galaxy A51'
    - regex: '(?:SAMSUNG-)?(?:SM-A516(?:U1|[0BNUV])|SC-54A|SCG07)'
      model: 'Galaxy A51 5G'
    - regex: '(?:SAMSUNG-)?SM-A536V'
      model: 'Galaxy A53 5G UW'
    - regex: '(?:SAMSUNG-)?(?:SM-A536|SC-53C|SCG15)'
      model: 'Galaxy A53 5G'
    - regex: '(?:SAMSUNG-)?SM-A705(?:GM|[MYF]N|[0FUWX])'
      model: 'Galaxy A70'
    - regex: '(?:SAMSUNG-)?SM-A707[0F]'
      model: 'Galaxy A70s'
    - regex: '(?:SAMSUNG-)?SM-A805[0FNX]'
      model: 'Galaxy A80'
    - regex: '(?:SAMSUNG-)?SM-A908[BN]'
      model: 'Galaxy A90'
    - regex: '(?:SAMSUNG-)?SM-A9080'
      model: 'Galaxy A90 5G'
    - regex: '(?:SAMSUNG-)?SM-E025F'
      model: 'Galaxy F02s'
    - regex: '(?:SAMSUNG-)?SM-F127G(?:[);/ ]|$)'
      model: 'Galaxy F12'
    - regex: '(?:SAMSUNG-)?SM-E135F'
      model: 'Galaxy F13'
    - regex: '(?:SAMSUNG-)?SM-E225F(?:[);/ ]|$)'
      model: 'Galaxy F22'
    - regex: '(?:SAMSUNG-)?SM-E236'
      model: 'Galaxy F23 5G'
    - regex: '(?:SAMSUNG-)?SM-F415F(?:[);/ ]|$)'
      model: 'Galaxy F41'
    - regex: '(?:SAMSUNG-)?SM-E426B(?:[);/ ]|$)'
      model: 'Galaxy F42 5G'
    - regex: '(?:SAMSUNG-)?SM-E5260(?:[);/ ]|$)'
      model: 'Galaxy F52 5G'
    - regex: '(?:SAMSUNG-)?SM-E625'
      model: 'Galaxy F62'
    - regex: '(?:SAMSUNG-)?GT-I9301I'
      model: 'Galaxy S III Neo'
    - regex: '(?:SAMSUNG-)?SM-S120VL(?:[);/ ]|$)'
      model: 'Galaxy Luna'
    - regex: '(?:SAMSUNG-)?SM-(?:J100(?:FN|VPP|MU|[FGHMY])|S777C)'
      model: 'Galaxy J1'
    - regex: '(?:SAMSUNG-)?SM-J105[BFHYM]'
      model: 'Galaxy J1 Mini'
    - regex: '(?:SAMSUNG-)?SM-J106[BFHM]'
      model: 'Galaxy J1 mini Prime'
    - regex: '(?:SAMSUNG-)?SM-(?:J120(?:ZN|[AFGHMPTW])|J05H)'
      model: 'Galaxy J1 (2016)'
    - regex: '(?:SAMSUNG-)?SM-(?:J110[FGHLM]|J111[FM])'
      model: 'Galaxy J1 Ace'
    - regex: '(?:SAMSUNG-)?SM-J200[FGHMY]'
      model: 'Galaxy J2'
    - regex: '(?:SAMSUNG-)?SM-J200BT'
      model: 'Galaxy J2 Duos'
    - regex: '(?:SAMSUNG-)?SM-J260AZ'
      model: 'Galaxy J2 Pure'
    - regex: '(?:SAMSUNG-)?SM-(?:J260([AFGMY]|T1)|S260DL)'
      model: 'Galaxy J2 Core'
    - regex: '(?:SAMSUNG-)?SM-J(?:210F|250[FGMNY])'
      model: 'Galaxy J2 Pro'
    - regex: '(?:SAMSUNG-)?SM-(?:S367VL|S357BL)'
      model: 'Galaxy J3 Orbit'
    - regex: '(?:SAMSUNG-)?SM-J311(?:[09]|9S)'
      model: 'Galaxy J3 Pro'
    - regex: '(?:SAMSUNG-)?SM-S320VL(?:[);/ ]|$)'
      model: 'Galaxy J3 Sky'
    - regex: '(?:SAMSUNG-)?SM-S327VL(?:[);/ ]|$)'
      model: 'Galaxy J3 Luna Pro'
    - regex: '(?:SAMSUNG-)?SM-J327(?:T1|[ATW])(?:[);/ ]|$)'
      model: 'Galaxy J3 Prime'
    - regex: '(?:SAMSUNG-)?SM-J327(?:[FP]|R4)'
      model: 'Galaxy J3 Emerge'
    - regex: '(?:SAMSUNG-)?SM-J337R4(?:[);/ ]|$)'
      model: 'Galaxy J3 Aura'
    - regex: '(?:SAMSUNG-)?SM-J337T(?:[);/ ]|$)'
      model: 'Galaxy J3 Star'
    - regex: '(?:SAMSUNG-)?SM-J327VPP'
      model: 'Galaxy J3 Mission'
    - regex: '(?:SAMSUNG-)?SM-J327V'
      model: 'Galaxy J3 Eclipse'
    - regex: '(?:SAMSUNG-)?SM-S337TL'
      model: 'Galaxy J3 Luna Pro'
    - regex: '(?:SAMSUNG-)?SM-J3109'
      model: 'Galaxy J3 (2015)'
    - regex: '(?:SAMSUNG-)?SM-(?:J300H|J320(?:[ZF]N|R4|W8|YZ|[AFGHMNPVY]))'
      model: 'Galaxy J3 (2016)'
    - regex: '(?:SAMSUNG-)?SM-(?:J330(?:FN|[08FGLN])|J327(?:R[76]|U))(?:[);/ ]|$)'
      model: 'Galaxy J3 (2017)'
    - regex: '(?:SAMSUNG-)?SM-J337(?:VPP|[AWPUV])(?:[);/ ]|$)'
      model: 'Galaxy J3 (2018)'
    - regex: '(?:SAMSUNG-)?SM-(?:G400[FG]|J400[FGM])'
      model: 'Galaxy J4'
    - regex: '(?:SAMSUNG-)?SM-J500(?:FN|N0|[78FGHMY])(?:[);/ ]|$)'
      model: 'Galaxy J5 (2015)'
    - regex: '(?:SAMSUNG-)?SM-(?:J510(?:[FGMU]N|FQ|[8FGHKLSY])?|5108|G510H)(?:[);/ ]|$)'
      model: 'Galaxy J5 (2016)'
    - regex: '(?:SAMSUNG-)?SM-J530|(?:lineage_)?j5y17lte'
      model: 'Galaxy J5 (2017)'
    - regex: '(?:SAMSUNG-)?SM-G570[0FMY]'
      model: 'Galaxy J5 Prime'
    - regex: '(?:SAMSUNG-)?SM-J600[FGLN]'  # 2018
      model: 'Galaxy J6'
    - regex: '(?:SAMSUNG-)?SM-J610[FG]'
      model: 'Galaxy J6+'
    - regex: '(?:SAMSUNG-)?SM-J410[FG]'
      model: 'Galaxy J4 Core'
    - regex: '(?:SAMSUNG-)?SM-J415(?:[FG]N|[FGN])'
      model: 'Galaxy J4+'
    - regex: '(?:SAMSUNG-)?SM-J710FN(?:[);/ ]|$)'
      model: 'Galaxy On8'
    - regex: '(?:SAMSUNG-)?SM-J7[01]0(?:FN|MN|[8FHKM])'
      model: 'Galaxy J7'
    - regex: '(?:SAMSUNG-)?SM-J700P'
      model: 'Galaxy J7 (2015)'
    - regex: '(?:SAMSUNG-)?SM-(?:J700(?:T1|T)|J710GN|J7109?)'
      model: 'Galaxy J7 (2016)'
    - regex: '(?:SAMSUNG-)?SM-(?:J730[K]|J727(?:R4|[AFSU]))(?:[);/ ]|$)'
      model: 'Galaxy J7 (2017)'
    - regex: '(?:SAMSUNG-)?SM-J737(?:R4|T1|VPP|[APSTUV])(?:[);/ ]|$)'
      model: 'Galaxy J7 (2018)'
    - regex: '(?:SAMSUNG-)?SM-C710F'
      model: 'Galaxy J7+ (C7)'
    - regex: '(?:SAMSUNG-)?SM-G610[FMY]'
      model: 'Galaxy J7 Prime'
    - regex: '(?:SAMSUNG-)?SM-G611(?:FF|MT|M)'
      model: 'Galaxy J7 Prime 2'
    - regex: '(?:SAMSUNG-)?SM-G615F'
      model: 'Galaxy J7 Max'
    - regex: '(?:SAMSUNG-)?SM-(?:S727VL|S737TL)'
      model: 'Galaxy J7 Sky Pro'
    - regex: '(?:SAMSUNG-)?SM-(?:J7 Pro|J730(?:GM|[FG]))'
      model: 'Galaxy J7 Pro'
    - regex: '(?:SAMSUNG-)?SM-J701[FM]'
      model: 'Galaxy J7 Core' # also Galaxy J7 Nxt and Galaxy J7 Neo
    - regex: '(?:SAMSUNG-)?SM-J720[FM]'
      model: 'Galaxy J7 Duo'
    - regex: '(?:SAMSUNG-)?SM-(?:S767VL|S757BL)'
      model: 'Galaxy J7 Crown'
    - regex: '(?:SAMSUNG-)?SM-J727[PTV]'
      model: 'Galaxy J7 V'
    - regex: 'SM-J7\[7\]'
      model: 'Galaxy J7 7'
    - regex: 'SM-J8 Plus'
      model: 'Galaxy J8 Plus'
    - regex: 'SM-J8 Pro'
      model: 'Galaxy J8 Pro'
    - regex: '(?:SAMSUNG-)?SM-J810|SM-J8(?:[);/ ]|$)'
      model: 'Galaxy J8'
    - regex: 'SM-J9\[7\] Prime'
      model: 'Galaxy J9 7 Prime'
    - regex: 'SM-J9\[8\] Pro'
      model: 'Galaxy J9 8 Pro'
    - regex: 'SM-A326'
      model: 'Galaxy Jump 5G'
    - regex: 'SM-M336K'
      model: 'Galaxy Jump 2'
    - regex: '(?:SAMSUNG-)?SM-M015[FG]'
      model: 'Galaxy M01'
    - regex: '(?:SAMSUNG-)?SM-M045F'
      model: 'Galaxy M04'
    - regex: '(?:SAMSUNG-)?SM-M013F'
      model: 'Galaxy M01 Core'
    - regex: '(?:SAMSUNG-)?SM-M017F'
      model: 'Galaxy M01s'
    - regex: '(?:SAMSUNG-)?SM-M025F'
      model: 'Galaxy M02s'
    - regex: '(?:SAMSUNG-)?SM-M022[FGM]'
      model: 'Galaxy M02'
    - regex: '(?:SAMSUNG-)?SM-M105[FGMY]'
      model: 'Galaxy M10'
    - regex: '(?:SAMSUNG-)?SM-M107F'
      model: 'Galaxy M10s'
    - regex: '(?:SAMSUNG-)?SM-M115[FM]'
      model: 'Galaxy M11'
    - regex: '(?:SAMSUNG-)?SM-M127[FGN]'
      model: 'Galaxy M12'
    - regex: '(?:SAMSUNG-)?SM-M135'
      model: 'Galaxy M13'
    - regex: '(?:SAMSUNG-)?SM-M136'
      model: 'Galaxy M13 5G'
    - regex: '(?:SAMSUNG-)?SM-(?:M205(?:[FGMN]|FN)|M20)(?:[);/ ]|$)'
      model: 'Galaxy M20'
    - regex: '(?:SAMSUNG-)?SM-M215F'
      model: 'Galaxy M21'
    - regex: '(?:SAMSUNG-)?SM-M215G'
      model: 'Galaxy M21 (2021)'
    - regex: '(?:SAMSUNG-)?SM-M225'
      model: 'Galaxy M22'
    - regex: '(?:SAMSUNG-)?SM-M236L'
      model: 'Galaxy Buddy 2'
    - regex: '(?:SAMSUNG-)?SM-M236'
      model: 'Galaxy M23 5G'
    - regex: '(?:SAMSUNG-)?SM-(?:M307(?:FN|[0F])|M30s)'
      model: 'Galaxy M30s'
    - regex: '(?:SAMSUNG-)?SM-M305?'
      model: 'Galaxy M30'
    - regex: '(?:SAMSUNG-)?SM-M315F'
      model: 'Galaxy M31'
    - regex: '(?:SAMSUNG-)?SM-M325F'
      model: 'Galaxy M32'
    - regex: '(?:SAMSUNG-)?SM-M326'
      model: 'Galaxy M32 5G'
    - regex: '(?:SAMSUNG-)?SM-M336'
      model: 'Galaxy M33 5G'
    - regex: '(?:SAMSUNG-)?SM-M317F'
      model: 'Galaxy M31s'
    - regex: '(?:SAMSUNG-)?SM-M405'
      model: 'Galaxy M40'
    - regex: '(?:SAMSUNG-)?SM-M426'
      model: 'Galaxy M42 5G'
    - regex: '(?:SAMSUNG-)?SM-M515F'
      model: 'Galaxy M51'
    - regex: '(?:SAMSUNG-)?SM-M526'
      model: 'Galaxy M52 5G'
    - regex: '(?:SAMSUNG-)?SM-M536S'
      model: 'Galaxy Quantum 3'
    - regex: '(?:SAMSUNG-)?SM-M536'
      model: 'Galaxy M53 5G'
    - regex: '(?:SAMSUNG-)?SM-M625'
      model: 'Galaxy M62'
    - regex: '(?:SAMSUNG-)?SM-W201([689])'
      model: 'Galaxy W201$1'
    - regex: '(?:SAMSUNG-)?SM-W2022'
      model: 'Galaxy W22'
    - regex: '(?:SAMSUNG-)?SM-W2021'
      model: 'Galaxy W21'

    - regex: '(?:SAMSUNG-)?SM-A826'
      model: 'Galaxy Quantum 2'
    - regex: '(?:SAMSUNG-)?SM-W2015'
      model: 'Galaxy Golden 2'
    - regex: '(?:SAMSUNG-)?SM-G910S'
      model: 'Galaxy Round'
    - regex: '(?:SAMSUNG-)?SM-(?:G550(?:FY|T[12]?)|S550TL|G55[01]0|G5520)'
      model: 'Galaxy On5'
    - regex: '(?:SAMSUNG-)?SM-G5528'
      model: 'Galaxy On5 (2016)'
    - regex: '(?:SAMSUNG-)?SM-G600(?:FY|[0F])'
      model: 'Galaxy On7'
    - regex: '(?:SAMSUNG-)?SM-G610[0KLS]'
      model: 'Galaxy On7 (2016)'
    - regex: '(?:SAMSUNG-)?SM-G611[FKLS]'
      model: 'Galaxy On7 Prime'
    - regex: '(?:SAMSUNG-)?SM-C500[0X]'
      model: 'Galaxy C5'
    - regex: '(?:SAMSUNG-)?SM-C501[08]'
      model: 'Galaxy C5 Pro'
    - regex: '(?:SAMSUNG-)?SM-C700[0X]'
      model: 'Galaxy C7'
    - regex: '(?:SAMSUNG-)?SM-C701[08FX]'
      model: 'Galaxy C7 Pro'
    - regex: '(?:SAMSUNG-)?SM-C710[08]'
      model: 'Galaxy C8'
    - regex: '(?:SAMSUNG-)?SM-C900[08FY]'
      model: 'Galaxy C9 Pro'
    - regex: '(?:SAMSUNG-)?SM-Z130H'
      model: 'Galaxy Z1'
    - regex: '(?:SAMSUNG-)?SM-Z200[FMY]'
      model: 'Galaxy Z2'
    - regex: '(?:SAMSUNG-)?SM-Z300H'
      model: 'Galaxy Z3'
    - regex: '(?:SAMSUNG-)?SM-Z400[FY]'
      model: 'Galaxy Z4'
    - regex: '(?:SAMSUNG-)?SM-(?:G150(?:N[0KLS])?|G155S)(?:[);/ ]|$)'
      model: 'Galaxy Folder'
    - regex: '(?:SAMSUNG-)?(?:SM-G16(?:0N|[05]0?|5N))(?:[);/ ]|$)'
      model: 'Galaxy Folder 2'
    - regex: '(?:SAMSUNG-)?SM-J321AZ(?:[);/ ]|$)'
      model: 'Galaxy Sol'
    - regex: '(?:SAMSUNG-)?SM-J326AZ(?:[);/ ]|$)'
      model: 'Galaxy Sol 2'
    - regex: '(?:SAMSUNG-)?SM-J336AZ(?:[);/ ]|$)'
      model: 'Galaxy Sol 3'
    - regex: '(?:SAMSUNG-)?SM-J727AZ(?:[);/ ]|$)'
      model: 'Galaxy Halo'
    - regex: '(?:SAMSUNG-)?SM-J327AZ'
      model: 'Galaxy Amp Prime 2'
    - regex: '(?:SAMSUNG-)?SM-J337AZ'
      model: 'Galaxy Amp Prime 3 (2018)'

    # explicit phablet models
    - regex: '(?:SAMSUNG-)?SM-(?:F900[0FUW]|F907[BN])|SCV44'
      model: 'Galaxy Fold'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-W9023'
      model: 'Galaxy W23 Fold'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?(?:SM-F711|SCG12|SC-54B)'
      model: 'Galaxy Z Flip 3'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?(?:SM-F721|SC-54C|SCG17)'
      model: 'Galaxy Z Flip 4'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-F916(?:U1|[0BNQUW])|SCG05'
      model: 'Galaxy Z Fold 2 5G'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?(?:SM-F926|SC-55B|SCG11)'
      model: 'Galaxy Z Fold 3 5G'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?(?:SM-F936|SCG16|SC-55C)'
      model: 'Galaxy Z Fold 4'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?GT-I9060(?:[);/ ]|$)'
      model: 'Galaxy Grand Neo'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?GT-I9063'
      model: 'Galaxy Grand Neo Duos'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?GT-I9(?:080|128)'
      model: 'Galaxy Grand'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?GT-I9168'
      model: 'Galaxy Grand Neo+'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?GT-I9082'
      model: 'Galaxy Grand Duos'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?GT-N7000'
      model: 'Galaxy Note'
      device: 'phablet'
    - regex: '(?:SC-01G|SCL24)(?:[);/ ]|$)'
      model: 'Galaxy Note Edge'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-N935[FSLK](?:[);/ ]|$)'
      model: 'Galaxy Note Fan Edition'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?(?:(?:GT-)?N7100|SCH-(?:I605|N719|R950)|SPH-L900)(?:[);/ ]|$)'
      model: 'Galaxy Note II'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?GT-N7105'
      model: 'Galaxy Note II LTE'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-G710(?:2T|5[HL]|[25689KLS])?(?:[);/ ]|$)'
      model: 'Galaxy Grand 2'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-G720(?:AX|N0|[02])(?:[);/ ]|$)'
      model: 'Galaxy Grand Max'
    - regex: '(?:(?:SAMSUNG-)?SM-(?:G530(?:[689]W|[AF]Z|BT|MU|R[47]|[AFHMPTWY])|G531[FH]|S920L)|(?:rr_)?fortuna3g)(?:[);/ ]|$)'
      model: 'Galaxy Grand Prime'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-G531(?:BT|[MY])(?:[);/ ]|$)'
      model: 'Galaxy Grand Prime VE Duos'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-G532F(?:[);/ ]|$)'
      model: 'Galaxy Grand Prime Plus' # also Galaxy J2 Prime
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-G532MT(?:[);/ ]|$)'
      model: 'Galaxy J2 Prime (TV)'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-G532[MG](?:[);/ ]|$)'
      model: 'Galaxy J2 Prime'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-N7502(?:[);/ ]|$)'
      model: 'Galaxy Note 3 Neo Duos'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-N750[05LQ]?'
      model: 'Galaxy Note 3 Neo'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-N9002(?:[);/ ]|$)'
      model: 'Galaxy Note 3 Duos'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-9005(?:[);/ ]|$)'
      model: 'Galaxy Note 3 LTE'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?(?:SM-N900(?:W8|[05689][VQ]?|[AKLPSTV])?|SCL22|SC-01F|SC-02F)'
      model: 'Galaxy Note 3'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-(?:N910|910U)|N9100(?:[);/ ]|$)'
      model: 'Galaxy Note 4'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-N916[KLS]'
      model: 'Galaxy Note 4 LTE'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-N915'
      model: 'Galaxy Note 4 Edge'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-N920(?:R[467]|W8|[0ACFGIKLPSTVX])'
      model: 'Galaxy Note 5'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-N9208'
      model: 'Galaxy Note 5 Duos'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?SM-G750(?:8Q|[9AFH])'
      model: 'Galaxy Mega 2'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?GT-I915[028]'
      model: 'Galaxy Mega 5.8'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?GT-I920[05]'
      model: 'Galaxy Mega 6.3'
      device: 'phablet'
    - regex: '(?:SAMSUNG-)?(?:SM-N930(?:R[467]|W8|[0AFKLPSTUVX])|SCV34)'
      model: 'Galaxy Note 7'
      device: 'phablet'
    - regex: '(?:SAMSUNG[- ])?SM-N950|SCV37|SC-01K'
      model: 'Galaxy Note 8'
      device: 'phablet'
    - regex: '(?:SAMSUNG[- ])?(?:SM-N960|SCV40|SC-01L)'
      model: 'Galaxy Note 9'
      device: 'phablet'
    - regex: '(?:SAMSUNG[- ])?SM-(?:N970(?:U1|W8|[089DFJKLSUWX])|N971N)'
      model: 'Galaxy Note 10'
      device: 'phablet'
    - regex: '(?:SAMSUNG[- ])?SM-N770[FX]'
      model: 'Galaxy Note 10 Lite'
      device: 'phablet'
    - regex: '(?:SAMSUNG[- ])?(?:SM-N975(?:U1|XU|[0CFUWX])|SM-N976[0BVNQU]|SC-01M|SCV45)'
      model: 'Galaxy Note 10+'
      device: 'phablet'
    - regex: '(?:SAMSUNG[- ])?(?:SM-N980(?:F/DS|F))'
      model: 'Galaxy Note 20'
      device: 'phablet'
    - regex: '(?:SAMSUNG[- ])?(?:SM-N981(?:B/DS|U1|[0BNUW]))'
      model: 'Galaxy Note 20 5G'
      device: 'phablet'
    - regex: '(?:SAMSUNG[- ])?(?:SM-N985(?:F/DS|F))'
      model: 'Galaxy Note 20 Ultra'
      device: 'phablet'
    - regex: '(?:SAMSUNG[- ])?(?:SM-N986(?:B/DS|U1|[0BCNUW])|SC-53A|SCG06)'
      model: 'Galaxy Note 20 Ultra 5G'
      device: 'phablet'

    - regex: '(?:SAMSUNG-)?SM-W750V'
      model: 'Ativ SE'
    - regex: '(?:SAMSUNG-)?SM-G310R5'
      model: 'GreatCall Touch 3'

    # explicit feature phones
    - regex: '(?:SAMSUNG-)?GT-E2152'
      model: 'E2152'
      device: 'feature phone'

    # explicit notebooks
    - regex: 'Chromebook 3'
      model: 'Chromebook 3'
      device: 'desktop'
    - regex: 'Chromebook Plus'
      model: 'Chromebook Plus'
      device: 'desktop'

    # general detections
    - regex: '(?:SAMSUNG-)?(GT-(P|N8|N5)[0-9]+[a-z]?)'
      device: 'tablet'
      model: '$1'
    - regex: 'SC-02C'
      model: 'Galaxy S II'
    - regex: '(?:SAMSUNG-)?((?:SM-[TNP]|GT-P)[a-z0-9_\-]+)'
      device: 'tablet'
      model: '$1'
    - regex: '((?:SCH|SGH|SPH|SHV|SHW|GT|SM)-[a-z0-9_\-]+)'
      model: '$1'
    - regex: 'SMART-TV'
      device: 'tv'
      model: 'Smart TV'
    - regex: 'Galaxy ([^/;)]+)(?: Build|[;)])'
      model: 'Galaxy $1'
    - regex: 'Galaxy ([a-z0-9]+)'
      model: 'Galaxy $1'
    - regex: 'SAMSUNG[\-][ ]?([a-z0-9]+[\-_][a-z0-9]+)'
      model: '$1'
    - regex: 'SAMSUNG;[ ]?([a-z0-9]+[\-_][a-z0-9]+)'
      model: '$1'
    - regex: 'SAMSUNG[ _/\-]?([a-z0-9\-]+)'
      model: '$1'
    - regex: 'SAMSUNG;[ ]?([a-z0-9 ]+)'
      model: '$1'
    - regex: 'SEC_SC-([a-z0-9]+)'
      model: 'SC-$1' # NTT DoCoMo
    - regex: 'SEC-([a-z0-9]+)'
      model: '$1'
    - regex: 'SAM-([a-z0-9]+)'
      model: 'SCH-$1'
    - regex: '(?:portalmmm|o2imode)/2\.0 ([SZ][a-z0-9]+)'
      model: '$1'
    - regex: 'sam([rua][0-9]+)'
      model: 'SCH-$1'

# Sanei
Sanei:
  regex: '(?:8312D|G(60[25]|70[3568]G?|785|803)|N83(?:-2cpu)?|N91) Build'
  device: 'smartphone'
  models:
    - regex: 'N83'
      model: 'N83'
    - regex: 'N91'
      model: 'N91'
    - regex: '8312D'
      model: 'G101'
    - regex: 'G(60[25]|70[3568]G?|785|803)'
      model: 'G$1'

# Selfix
Selfix:
  regex: 'SELFIX'
  device: 'smartphone'
  models:
    - regex: 'SELFIX_SLASH6'
      model: 'Slash 6'
    - regex: 'VOYAGER-V45'
      model: 'Voyager V45'
    - regex: 'SELFIX_ES732_EXPERIUS'
      model: 'ES732 Experius'
    - regex: 'SELFIX_Q5_URBAN'
      model: 'Q5 Urban'
    - regex: 'SELFIX_Q3_REBEL'
      model: 'Q3 Rebel'
    - regex: 'SELFIX_Q6_STALLION'
      model: 'Q6 Stallion'
    - regex: 'SELFIX_V41_PRO_MARDIGRAS'
      model: 'V41 Pro Mardigras'

# Sencor (sencor.cz or sencor.com)
Sencor:
  regex: 'Sencor|(?:ELEMENT[ _]?(?:(?:7|8|9\.7|10[ _]1)(?:[ _]?V[23])?|P[0-9]+|10.1 Q001)|10_1Q205|ELEMENT-P5501)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    # explicit tablet models
    - regex: '(?:SENCOR[ _])?Element (10\.1) (Q001)'
      model: 'Element $1" $2'
    - regex: '(?:SENCOR[ _])?ELEMENT[ _]?7[ _]?V3'
      model: 'Element 7 V3'
    - regex: '(?:SENCOR[ _])?ELEMENT[ _]?7[ _]?V2[ _]BASIC'
      model: 'Element 7 V2 Basic'
    - regex: '(?:SENCOR[ _])?ELEMENT[ _]?7[ _]?V2'
      model: 'Element 7 V2'
    - regex: '(?:SENCOR[ _])?ELEMENT[ _]8[ _]?V3'
      model: 'Element 8 V3'
    - regex: '(?:SENCOR[ _])?ELEMENT[ _]8[ _]?V2'
      model: 'Element 8 V2'
    - regex: '(?:SENCOR[ _])?ELEMENT8'
      model: 'Element 8'
    - regex: '(?:SENCOR[ _])?ELEMENT[ _]9\.7[ _]?V3'
      model: 'Element 9.7 V3'
    - regex: '(?:SENCOR[ _])?ELEMENT[ _]9\.7[ _]?V2'
      model: 'Element 9.7 V2'
    - regex: '(?:SENCOR[ _])?ELEMENT[ _]9\.7'
      model: 'Element 9.7'
    - regex: '(?:SENCOR[ _])?ELEMENT10[ _]1'
      model: 'Element 10.1'
    - regex: '(?:SENCOR[ _])?(7Q105)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(?:SENCOR[ _])?(10)_(1Q205|1Q102)(?:[);/ ]|$)'
      model: '$1.$2'

    - regex: '(?:SENCOR[ _])?ELEMENT[ _-]?P([0-9]+)'
      model: 'Element P$1'
      device: 'smartphone'

    - regex: 'Sencor[ _]([^;/]+) Build'
      model: '$1'

# Senwa (senwamobile.com)
Senwa:
  regex: 'Senwa|(?:S\-?(?:471|7[12]5|6[01]5|915|905TL|1000|5018)|V705B|LS50F| LS50?|LS5518H|LS5718|LS5018F)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'S-?471(?:[);/ ]|$)'
      model: 'Jazz'
    - regex: 'S-?605(?:[);/ ]|$)'
      model: 'City'
    - regex: 'S-?905TL(?:[);/ ]|$)'
      model: 'Odin'
    - regex: 'S-?1000(?:[);/ ]|$)'
      model: 'Odin'
    - regex: 'S-?5018(?:[);/ ]|$)'
      model: 'Inizio'
    - regex: 'LS5018F(?:[);/ ]|$)'
      model: 'Inizio LTE'
    - regex: 'S-?(615|7[12]5|915)(?:[);/ ]|$)'
      model: 'S$1'
    - regex: 'V705B(?:[);/ ]|$)'
      model: 'V705B'
    - regex: 'LS50F(?:[);/ ]|$)'
      model: 'Evolution'
    - regex: ' LS50(?:[);/ ]|$)'
      model: 'Pegasus'
    - regex: ' LS5(?:[);/ ]|$)'
      model: 'Thor'
    - regex: 'LS5518H(?:[);/ ]|$)'
      model: 'Sparkly'
    - regex: 'LS5718(?:[);/ ]|$)'
      model: 'Diamond'
    - regex: 'Senwa[ _-]*([^;/]+)(?: Build|[;)])'
      model: '$1'

# Sky or Sky Devices (skydevices.com)
Sky:
  regex: '(?:SKY|Elite|Fuego)[_ ][3-7]\.[05](?:[A-Z]{1,2})?|Elite[ _](?:PHOTOPRO|5_0T|M45|[45]T|45T|GO|M5Plus|T[46]|[ABCDHP]5|5_5_Octa|Octa|[BCEFGHJPTV]55|[AB]65)|Platinum[_ ](?:5.0M|5\.5C|[56]\.[05]\+?|[ABCMP]4|[ACGKV]55|[ABDEFGHJKM]5|A7|A57|P9|X|UNO|VIEW2|O|4\.0|4_0Plus)|PLATINUMVIEW|SKY[ _](?:55M|Pro_III)|SKYVISION|SKY Black| SKY[ _]Prestige|Sky Vision2|PRO_SELFIE|Premier5'
  device: 'smartphone'
  models:
    - regex: 'Platinum[_ ](?:5\.0M|M5)'
      model: 'Platinum 5.0M'
    - regex: 'Platinum[_ ]5\.5C'
      model: 'Platinum 5.5C'
    - regex: 'Platinum[_ ]([56])\.([05])\+'
      model: 'Platinum $1.$2 Plus'
    - regex: 'Platinum_4_0Plus'
      model: 'Platinum 4.0 Plus'
    - regex: 'Platinum[ _]4\.0'
      model: 'Platinum 4.0'
    - regex: 'Platinum[_ ](P9) Pro(?:[);/ ]|$)'
      model: 'Platinum $1 Pro'
    - regex: 'Platinum[_ ]([ABCMP]4|[ACGK]55|[ABDEFGHJKM]5|A7|A57|P9|X|UNO|O|6\.0)(?:[);/ ]|$)'
      model: 'Platinum $1'
    - regex: 'Platinum[_ ]?VIEW(2)?(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Platinum View$1'
    - regex: 'SKYVISION'
      device: 'tablet'
      model: 'Vision'
    - regex: 'Sky Vision2'
      device: 'tablet'
      model: 'Vision 2'
    - regex: 'Elite_Octaplus(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Elite OctaPlus'
    - regex: 'Elite_OctaXS(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Elite Octa XS'
    - regex: 'Elite Octa(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Elite Octa'
    - regex: 'Elite OctaMax(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Elite OctaMax'
    - regex: 'Elite_5_5_Octa'
      model: 'Elite 5.5 Octa'
    - regex: 'ELITE PHOTOPRO'
      model: 'Elite Photo Pro'
    - regex: 'Elite M5Plus'
      model: 'Elite M5 Plus'
    - regex: 'Elite E55Max'
      model: 'Elite E55 Max'
    - regex: 'Elite[ _](M45|Go|[45]T|T[46]|[ABCDHP]5|[ABCEFGHJPTV]55|[AB]65|45T)(?:[);/ ]|$)'
      model: 'Elite $1'
    - regex: 'Elite[_ ]([3-7])[\._]([05](?:[A-Z]{1,2})?\+?)'
      model: 'Elite $1.$2'
    - regex: 'Fuego[_ ]([3-7]\.[05](?:[A-Z]{1,2})?\+?)'
      model: 'Fuego $1'
    - regex: 'SKY Black ?(2)?'
      model: 'Black $1'
    - regex: 'SKY_Pro_III'
      model: 'Pro III'
    - regex: 'PRO_SELFIE'
      model: 'Pro Selfie'
    - regex: 'SKY 5.0Pro II'
      model: 'Pro II'
    - regex: 'SKY 55M'
      model: '55M'
    - regex: 'Premier5'
      model: 'Premier 5'
    - regex: 'SKY[ _]PrestigeX'
      model: 'Prestige X'
    - regex: 'SKY[ _]Prestige'
      model: 'Prestige'
    - regex: 'SKY[_ ]([3-7]\.[05](?:[A-Z]{1,2})?)'
      model: '$1'

# Skyworth
Skyworth:
  regex: 'Sky_?worth|FlowBox-F1'
  device: 'tv'
  models:
    - regex: 'FlowBox-F1'
      model: 'FlowBox-F1'
    - regex: 'Sky_?worth ([^;/]+) Build'
      model: '$1'

# Smartfren
Smartfren:
  regex: 'Smartfren|Androtab|Andromax|PD6D1J|AD682J|AD68[89]G|AD6B1H|AD9A1H|AD682H|AD683G'
  device: 'smartphone'
  models:
    # explicit tablet models
    - regex: 'S7 Build'
      model: 'Andromax Tab 7.0'
      device: 'tablet'

    # explicit smartphone models
    - regex: 'PD6D1J'
      model: 'Andromax V3s'
    - regex: 'AD682J'
      model: 'Andromax T'
    - regex: 'AD688G'
      model: 'Andromax C2'
    - regex: 'AD689G'
      model: 'Andromax i3'
    - regex: 'AD682H'
      model: 'Andromax i3s'
    - regex: 'AD6B1H'
      model: 'Andromax G2 Hot'
    - regex: 'AD9A1H'
      model: 'Andromax G2'
    - regex: 'AD683G'
      model: 'Andromax I'
    - regex: 'B26D2H'
      model: 'Andromax L'
    - regex: 'New Andromax-i'
      model: 'New Andromax I'

    - regex: 'Andromax[ _\-]([^/;]+) Build'
      model: 'Andromax $1'
    - regex: 'Andromax[ _\-]([a-z0-9]+)'
      model: 'Andromax $1'
    - regex: 'Smartfren[ _\-]([^/;\)]+)(?: Build|[/;\)])'
      model: '$1'
    - regex: '(Androtab[^/;]+) Build'
      model: '$1'
      device: 'tablet'

# Smartisan
Smartisan:
  regex: 'Smartisan[_ ]|(SM(?:70[15]|[89]01|919)|OD10[35]|YQ60[1357]|DT2002C|DE106|DT190[12]A|O[CE]106|OS103|O[CS]105)[ /;\)]'
  device: 'smartphone'
  models:
    - regex: 'SM70[15]'
      model: 'T1'
    - regex: 'SM801'
      model: 'T2'
    - regex: 'SM901'
      model: 'M1'
    - regex: 'SM919'
      model: 'M1L'
    - regex: 'YQ60[1357]'
      model: 'U1'
    - regex: 'OD10[35]'
      model: 'Pro'
    - regex: 'OS105[ /;\)]'
      model: 'Pro 2'
    - regex: 'DE106[ /;\)]'
      model: 'R1'
    - regex: 'OE106[ /;\)]'
      model: 'Nut Pro 2s'
    - regex: 'OC10[56][ /;\)]'
      model: 'Nut 3'
    - regex: 'DT2002C[ /;\)]'
      model: 'Nut 2'
    - regex: 'DT190[12]A[ /;\)]'
      model: 'Nut Pro 3'
    - regex: 'OS103[ /;\)]'
      model: 'JianGuo Pro 2'
    - regex: 'Smartisan U3 Pro'
      model: 'U3 Pro'

# STF Mobile
STF Mobile:
  regex: '(?:AERIAL(?: PLUS)?|BLOCK_MINI|BLOCK GO|BLOCK 3|Fractal|Joy Pro|Origins Pro|SLAY II)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Fractal'
      model: 'Fractal'
    - regex: 'Origins Pro'
      model: 'Origins Pro'
    - regex: 'AERIAL PLUS'
      model: 'Aerial Plus'
    - regex: 'AERIAL'
      model: 'Aerial'
    - regex: 'BLOCK_MINI'
      model: 'Block Mini'
    - regex: 'BLOCK 3 mini'
      model: 'Block 3 Mini'
    - regex: 'BLOCK 3'
      model: 'Block 3'
    - regex: 'BLOCK GO'
      model: 'Block Go'
    - regex: 'SLAY II'
      model: 'Slay II'
    - regex: 'Joy Pro'
      model: 'Joy Pro'

# STK
STK:
  regex: 'STK[_ ]|Storm 2e Pluz'
  device: 'smartphone'
  models:
    - regex: 'Life 8'
      model: 'Life 8'
    - regex: 'Storm 2e Pluz'
      model: 'Storm 2e Plus'
    - regex: 'Sync 5z Plus'
      model: 'Sync 5z Plus'
    - regex: 'STK[_ ]([^/;]+) Build'
      model: '$1'
    - regex: 'STK[_ ]([a-z0-9]+)'
      model: '$1'

# Stonex
Stonex:
  regex: 'STX[ -]([^;/]+)|STONE EVO'
  device: 'smartphone'
  models:
    - regex: 'STX[ -]([^;/]+) Build'
      model: '$1'
    - regex: 'STX[ -]([a-z0-9_-]+)'
      model: '$1'

# SuperBOX
SuperBOX:
  regex: 'SuperBOX_S2PRO(?:[);/ ]|$)'
  device: 'tv'
  model: 'S2 Pro'

# SuperSonic
SuperSonic:
  regex: '(SC-[0-9]+[a-z]+|SC-2110)'
  device: 'tablet'
  model: '$1'

# Supra
Supra:
  regex: 'SUPRA|NVTAB 7.0 3G|M74C 3G'
  device: 'smartphone'
  models:
    - regex: 'SUPRA[ _]([^;/)]+)(?: Build|[;)])'
      device: 'tablet'
      model: '$1'
    - regex: '(NVTAB 7.0 3G|M74C 3G)'
      device: 'tablet'
      model: '$1'

# Sumvision
Sumvision:
  regex: '(Cyclone [^/;]+) Build'
  device: 'tablet'
  model: '$1'

# SunVan
SunVan:
  regex: 'SUNVAN[ _\-]'
  device: 'smartphone'
  models:
    - regex: 'SUNVAN[ _\-]?([^/;]+) Build'
      model: '$1'
    - regex: 'SUNVAN[ _\-]?([^);/ ]+)'
      model: '$1'

# SWISSMOBILITY or Swiss Mobility
SWISSMOBILITY:
  regex: '(?:SCHR9G[RL]|PRA(?:U8|100|557|507)|ZUR(?:722M|70016W?|700[RW]|805A))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'SCHR9G[RL]'
      model: 'SCHON R9'
    - regex: 'PRA(U8|100|557|507)(?:[);/ ]|$)'
      model: 'PRA$1'
    - regex: 'ZUR722M'
      device: 'phablet'
      model: 'Z72 go'

    - regex: 'ZUR(70016W?|700[RW]|805A)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'ZUR$1'

# Thomson
Thomson:
  regex: '(?:Primo(7|8)|QM73[45]-8G|QM734-2|QM736-8G\(HD\)|(?<!\.)8950|MID1002|5014G|TEO(?:13P|10S|7RK|X10[23]|104G)|Friendly_TH101|Delight TH201|HERO10RK|SPTEO10BK16)(?:[);/ ]|$)|(?:Tlink|Every)[0-9]+|THOMSON[, ]'
  device: 'tablet'
  models:
    # already detected as manta device
    #- regex: 'MID1002'
    #  model: 'MID1002'
    - regex: 'Primo(7|8)'
      model: 'Primo $1'
    - regex: 'QM734-2'
      model: 'QM734-2'
    - regex: 'QM734-8G'
      model: 'QM734-8G'
    - regex: 'QM735-8G'
      model: 'QM735-8G'
    - regex: 'QM736-8G\(HD\)'
      model: 'QM736-8G (HD)'
    - regex: '(?<!\.)8950(?:[);/ ]|$)'
      model: '3G 8950'
    - regex: 'SPTEO10BK16'
      model: 'TEO10BK16'
    - regex: 'TEO(13P|10S|7RK|104G|X10[23])(?:[);/ ]|$)'
      model: 'TEO$1'
    - regex: 'HERO10RK'
      model: 'Hero 10RK'

    - regex: '(5014G|T510H)(?:[);/ ]|$)'
      device: 'smartphone'
      model: '$1'       # EGO-5014G
    - regex: 'Tlink([0-9]+)'
      device: 'smartphone'
      model: 'Tlink$1'
    - regex: 'Every([0-9]+)'
      device: 'smartphone'
      model: 'Every$1'
    - regex: 'Delight TH201'
      device: 'smartphone'
      model: 'Delight TH201'
    - regex: 'Friendly_TH101'
      device: 'smartphone'
      model: 'Friendly TH101'
    - regex: 'THOMSON[ _]SEREA500'
      device: 'smartphone'
      model: 'Serea 500'
    - regex: '((?:49|55)UC6306|55UC63|32HD55|40FD54|55UD63)'
      device: 'tv'
      model: '$1'

# Tanix
Tanix:
  regex: '(?:TX[53] MAX|TX[69]s|TX3 Mini|TX3MINI|TX5 Pro)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'TX([69])s'
      model: 'TX$1s'
    - regex: 'TX([35]) MAX'
      model: 'TX$1 Max'
    - regex: 'TX5 Pro'
      model: 'TX5 Pro'
    - regex: 'TX3 Mini|TX3MINI'
      model: 'TX3 Mini'

# pantech
Pantech:
  regex: 'Pantech|P[GN]-|PT-[a-z0-9]{3,}|(?<!Winmax )TX[T]?[0-9]+|IM-[a-z0-9]+(?:[);/ ]|$)|ADR910L'
  device: 'smartphone'
  models:
    # explicit smartphone models
    - regex: 'ADR910L'
      model: 'Star Q'
    - regex: 'IM-A870K'
      model: 'Vega Iron'
    - regex: 'Pantech[ -]?(P4100)'
      device: 'tablet'
      model: '$1'

    - regex: 'Pantech[ -]?([a-z0-9]+)'
      model: '$1'
    - regex: 'Pantech_([a-z0-9\-]+)'
      model: '$1'
    - regex: '(P[GTN]-[a-z0-9]+)'
      model: '$1'
    - regex: '(TX[T]?[0-9]+) Pro'
      model: '$1 Pro'
    - regex: '(TX[T]?[0-9]+)'
      model: '$1'
    - regex: '(IM-[a-z0-9]+)(?:[);/ ]|$)'
      model: '$1'

# Mosimosi
Mosimosi:
  regex: '(?:momo3s)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'momo3s'
      model: 'momo3S'

# Moxee (https://www.moxee.com/)
Moxee:
  regex: '(?:MH-T6000|MT-T800)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'MH-T6000(?:[);/ ]|$)'
      model: '2160'
    - regex: 'MT-T800(?:[);/ ]|$)'
      device: 'tablet'
      model: 'MT-T800'

# Ployer
Ployer:
  regex: 'MOMO([0-9]|[ ]?mini[ ]?(?:S|3GS)?)'
  device: 'tablet'
  models:
    - regex: 'MOMOminiS'
      model: 'MOMO mini S'
    - regex: 'momo mini 3GS'
      model: 'MOMO Mini 3GS'
    - regex: 'MOMO([0-9][^);/]*) Build'
      model: 'MOMO $1'
    - regex: 'MOMO([0-9][^);/]*)(?:[);/]|$)'
      model: 'MOMO $1'

# Plum (plum-mobile.com)
Plum:
  regex: 'PLUM[ _]|(?:Z51[89])(?:[);/]|$)'
  device: 'smartphone'
  models:
    - regex: 'Z405'
      model: 'Gator 3'
    - regex: 'Z407'
      model: 'Axe 4'
    - regex: 'Z516'
      model: 'Compass'
    - regex: 'Z518'
      model: 'Compass 2'
    - regex: 'Z519'
      model: 'Gator 5'
    - regex: 'Z811'
      device: 'tablet'
      model: 'Optimax 11'
    - regex: 'Z709'
      device: 'tablet'
      model: 'Optimax 7'
    - regex: 'Z712'
      device: 'tablet'
      model: 'Optimax 12'

# Polaroid
Polaroid:
  regex: 'Polaroid|POLPAROID|(?:PMID|MIDC)[0-9a-z]+(?:[);/ ]|$)|MID(?:1014|0714)|PRO[VG]?(?:[0-9]{3,}[a-z]*|[0-9]{2}[a-z])|(?:P(?:400[56]|4526|500[56]|502[56]|504[67]|552[56])A|P902/A900|PSPC(?:505|550|[MZL]20A0|K2[01]NA)|SIGMA 5|MIDI109PDE|MIDI156PDE|MIDB1048PHE|MIDS145PXE|MIDS747PX|MID4004JBL|MIDS185PR|PSPTD21NA|POMDTB00[56]|PSPCL30A0|PSN-H116|BDL0232PR|Mobility3G)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    # explicit smartphone models
    - regex: 'P4005A'
      model: 'Turbo C4'
    - regex: 'P5005A'
      model: 'Turbo C5'
    - regex: 'P4006A'
      model: 'Turbo D4'
    - regex: 'PSPTD21NA'
      model: 'Turbo D2 Plus'
    - regex: 'P4526A'
      model: 'Turbo E'
    - regex: 'PSPC(505|550)'
      model: 'Cosmo $1'
    - regex: 'PSPCL30A0'
      model: 'Cosmo C6'
    - regex: 'P5006A'
      model: 'Cosmo K'
    - regex: 'P5526A'
      model: 'Cosmo K Plus'
    - regex: 'PSPCK20NA'
      model: 'Cosmo K2'
    - regex: 'PSPCK21NA'
      model: 'Cosmo K2 Plus'
    - regex: 'P5026A'
      model: 'Cosmo L'
    - regex: 'PSPCL20A0'
      model: 'Cosmo L2'
    - regex: 'PSPCM20A0'
      model: 'Cosmo M2'
    - regex: 'P5046A'
      model: 'Cosmo P5s'
    - regex: 'P5525A'
      model: 'Cosmo Q5s'
    - regex: 'P5047A'
      model: 'Cosmo Z'
    - regex: 'PSPCZ20A0'
      model: 'Cosmo Z2'
    - regex: 'P5025A'
      model: 'L5s'
    - regex: 'PRO4611(?:PR201)?'
      model: 'Pro4611'
    - regex: 'PRO5023'
      model: 'Phantom 5'
    - regex: 'PROV400'
      model: 'Agate'
    - regex: 'PROV350'
      model: 'ProV350'
    - regex: 'SIGMA 5(?:[);/ ]|$)'
      model: 'Sigma 5'
    - regex: 'PRO([VG]?(?:[0-9]{3,}[a-z]*|[0-9]{2}[a-z]))'
      model: 'Pro$1'
    - regex: 'PSPT350'
      model: 'Turbo 350 Gris'
    - regex: 'PSN-H116'
      model: 'Snap'

    - regex: 'POLAROID, ([a-z0-9_ \-]+), (?:wired|wireless)'
      device: 'tv'
      model: ''

    - regex: 'MIDS185PR|POLPAROID PURE'
      model: 'Pure 10.1"'
      device: 'tablet'
    - regex: 'Mobility3G'
      model: 'Mobility 10.1" 3G'
      device: 'tablet'
    - regex: '(MID(?:1014|0714|S145PXE|S747PX|4004JBL|B1048PHE|I109PDE|I156PDE)|POMDTB00[56]|BDL0232PR)'
      model: '$1'
      device: 'tablet'

    - regex: '((?:PMID|MIDC)[0-9a-z]+)(?:[);/ ]|$)'
      model: '$1'
      device: 'tablet'
    - regex: '(P902/A900)(?:[);/ ]|$)'
      model: '$1'
      device: 'tablet'
    - regex: 'Polaroid'
      model: ''
      device: 'tablet'

# PolyPad
PolyPad:
  regex: 'POLY ?PAD'
  device: 'tablet'
  models:
    - regex: 'POLY ?PAD[_ \.]([a-z0-9]+)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'POLY ?PAD[_\.]([a-z0-9]+)'
      model: '$1'

# Polytron
Polytron:
  regex: 'POLYTRON|W8480|W7430|PW1100S|W7550|W7531|W8570|R2401|R255B'
  device: 'smartphone'
  models:
    - regex: 'R2508'
      model: 'Rocket'
    - regex: 'POLYTRON[ _]R1500'
      model: 'Rocket Q-Five'
    - regex: 'R2401'
      model: 'Rocket 2X'
    - regex: 'POLYTRON[ _-]R2402'
      model: 'Rocket R2402'
    - regex: 'POLYTRON[ _-]R2403'
      model: 'Rocket R1'
    - regex: 'POLYTRON[ _-]R2406'
      model: 'Rocket R2'
    - regex: 'POLYTRON[ _-]R2407'
      model: 'Rocket R3'
    - regex: 'POLYTRON[ _-]R2452'
      model: 'Rocket S1'
    - regex: 'POLYTRON[ _-]R2457'
      model: 'Rocket S2'
    - regex: 'POLYTRON[ _-]R2501'
      model: 'Rocket T1'
    - regex: 'POLYTRON[ _-]R2507'
      model: 'Rocket T3'
    - regex: 'POLYTRON[ _-]R2509SE'
      model: 'Rocket T6 SE'
    - regex: 'POLYTRON[ _-]R2509'
      model: 'Rocket T6'
    - regex: 'POLYTRON[ _-]R250A'
      model: 'Rocket T7'
    - regex: 'POLYTRON[ _-]R2506'
      model: 'Rocket T4'
    - regex: 'POLYTRON[ _-](?:R3450|W1400)'
      model: 'Rocket Jetz'
    - regex: 'POLYTRON[ _-]R3500'
      model: 'Rocket Jetz 5.0'
    - regex: '4G450'
      model: 'Zap 5'
    - regex: 'W6500'
      model: 'Quadra Rocket'
    - regex: 'W7452'
      model: 'Quadra S2'
    - regex: 'W7550'
      model: 'Quadra V5'
    - regex: 'W8570'
      model: 'Quadra V7'
    - regex: 'POLYTRON[ _]L501'
      model: 'Rocket L501'
    - regex: 'POLYTRON[ _]P520'
      model: 'Prime 7S'
    - regex: 'POLYTRON[ _]P552'
      model: 'Prime 7 Pro'
    - regex: '4G500'
      model: 'Zap 6 Cleo'
    - regex: 'W8480'
      model: 'Crystal 4 W8480'
    - regex: 'W7531'
      model: 'Wizard V'
    - regex: 'W7430'
      model: 'Quadra Mini W7430'
    - regex: 'POLYTRON[ _]4G501'
      model: 'Zap 6 Posh'
    - regex: 'POLYTRON[ _]4G502'
      model: 'Zap 6 Power'
    - regex: 'POLYTRON[ _]4G503'
      model: 'Zap 6 Flaz'
    - regex: 'POLYTRON[_ ]?[ _]4G550'
      model: 'Zap 6 Note'
    - regex: 'POLYTRON[ _]4G551'
      model: 'Zap 6 Posh Note'
    - regex: 'PW1100S'
      model: 'PW1100S'
    - regex: 'Q2352'
      model: 'Q2352'
    - regex: 'R255B'
      model: 'Prime T8'
    - regex: 'POLYTRON[ _]T7800'
      model: 'Cosmica T7800'
      device: 'tablet'
    - regex: 'POLYTRON[ _]T7700'
      model: 'Rocket Pad'
      device: 'tablet'

# Positivo (www.positivoempresas.com.br)
Positivo:
  regex: '(?:YPY_S450|Twist 4(?: Fit|Pro)?|Twist 4G|T1085|Positivo (?:Q20|Slim)|M10 4G PRO X|UP 32|YOLO)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'YPY_S450'
      model: 'YPY S450'
    - regex: 'Positivo (Q20|Slim)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Twist 4 (Fit|Pro)'
      model: 'Twist 4 $1'
    - regex: 'YOLO'
      model: 'Twist 4 Fit'
    - regex: 'UP 32'
      model: 'Twist 4 Pro'
    - regex: 'Twist 4G'
      model: 'Twist 4G'
    - regex: 'Twist 4'
      model: 'Twist 4'
    - regex: 'T1085'
      device: 'tablet'
      model: 'T1085'
    - regex: 'M10 4G PRO X'
      device: 'tablet'
      model: 'M10 4G Pro X'

# Prestigio (prestigio.ru)
Prestigio:
  regex: 'Prestigio 5500 DUO|(?:PMP|PAP|PMT|PSP|PGPS)[0-9]+[a-z0-9_]+(?:[);/ ]|$)|Muze C3|PTV50SS04X_CIS_BK|PTV40SS04Y_CIS_ML|PTV32SS04Z_CIS_(?:ML|BK)|SILVER POS|PAB4411'
  device: 'tablet'
  models:
    # explicit smartphone models
    - regex: 'Prestigio 5500 DUO'    # PAP5500DUO
      model: 'MultiPhone 5500 Duo'
      device: 'smartphone'
    - regex: 'P[AS]P(5517|5503|550[578])DUO(?:[);/ ]|$)'
      model: 'MultiPhone $1 Duo'
      device: 'smartphone'
    - regex: 'PAP(7500)(?:[);/ ]|$)'
      model: 'MultiPhone $1'
      device: 'smartphone'
    - regex: 'PSP5551DUO'
      device: 'smartphone'
      model: 'Grace S5'
    - regex: 'PSP7590DUO'
      device: 'smartphone'
      model: 'Grace V7 LTE'
    - regex: 'PSP7551DUO'
      device: 'smartphone'
      model: 'Grace S7 LTE'
    - regex: 'PSP5470DUO'
      device: 'smartphone'
      model: 'Grace X5'
    - regex: 'PSP5530DUO'
      device: 'smartphone'
      model: 'Grace Z5'
    - regex: 'PSP3533DUO'
      device: 'smartphone'
      model: 'Grace Z3'
    - regex: 'PSP5515DUO'
      device: 'smartphone'
      model: 'Grace P5'
    - regex: 'PSP5552DUO'
      device: 'smartphone'
      model: 'Grace R5 LTE'
    - regex: 'PSP5506DUO'
      device: 'smartphone'
      model: 'Grace Q5'
    - regex: 'PSP5511DUO'
      device: 'smartphone'
      model: 'Grace M5 LTE'
    - regex: 'PSP7501DUO'
      device: 'smartphone'
      model: 'Grace R7'
    - regex: 'PSP7570DUO'
      device: 'smartphone'
      model: 'Grace P7 LTE'
    - regex: 'PSP7572DUO'
      device: 'smartphone'
      model: 'Grace B7'
    - regex: 'PSP3552DUO'
      device: 'smartphone'
      model: 'Muze H3'
    - regex: 'PSP5523DUO'
      device: 'smartphone'
      model: 'Muze H5 LTE'
    - regex: 'PSP3515DUO'
      device: 'smartphone'
      model: 'Muze M3 LTE'
    - regex: 'PSP3495DUO'
      device: 'smartphone'
      model: 'Muze V3 LTE'
    - regex: 'PSP3534DUO'
      device: 'smartphone'
      model: 'Muze K3 LTE'
    - regex: 'PSP5513DUO'
      device: 'smartphone'
      model: 'Muze D5 LTE'
    - regex: 'PSP5520DUO'
      device: 'smartphone'
      model: 'Muze B5'
    - regex: 'PSP5518DUO'
      device: 'smartphone'
      model: 'Muze X5 LTE'
    - regex: 'PSP5553DUO'
      device: 'smartphone'
      model: 'Muze F5 LTE'
    - regex: 'PSP5502DUO'
      device: 'smartphone'
      model: 'Muze A5'
    - regex: 'PSP5545DUO'
      device: 'smartphone'
      model: 'Muze E5 LTE'
    - regex: 'PSP7512DUO'
      device: 'smartphone'
      model: 'Muze E7 LTE'
    - regex: 'PSP3511DUO'
      device: 'smartphone'
      model: 'Muze G3 LTE'
    - regex: 'PSP5522DUO'
      device: 'smartphone'
      model: 'Muze G5 LTE'
    - regex: 'PSP7550DUO'
      device: 'smartphone'
      model: 'Muze G7 LTE'
    - regex: 'PSP7510DUO'
      device: 'smartphone'
      model: 'Muze C7 LTE'
    - regex: '(?:Muze C3|PSP3504DUO)(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Muze C3'
    - regex: 'PSP3512DUO'
      device: 'smartphone'
      model: 'Muze B3'
    - regex: 'PSP3532DUO'
      device: 'smartphone'
      model: 'Muze F3'
    - regex: 'PSP3470DUO'
      device: 'smartphone'
      model: 'Muze J3'
    - regex: 'PSP5524DUO'
      device: 'smartphone'
      model: 'Muze J5'
    - regex: 'PSP7511DUO'
      device: 'smartphone'
      model: 'Muze B7'
    - regex: 'PSP3514DUO'
      device: 'smartphone'
      model: 'Wize U3'
    - regex: 'PSP3513DUO'
      device: 'smartphone'
      model: 'Wize V3'
    - regex: 'PSP3416DUO'
      device: 'smartphone'
      model: 'Wize YA3'
    - regex: 'PSP3406DUO'
      device: 'smartphone'
      model: 'Wize Y3'
    - regex: 'PSP3423DUO'
      device: 'smartphone'
      model: 'Wize R3'
    - regex: 'PSP3471DUO'
      device: 'smartphone'
      model: 'Wize Q3 LTE'
    - regex: 'PSP3510DUO'
      device: 'smartphone'
      model: 'Wize G3'
    - regex: 'PSP3537DUO'
      device: 'smartphone'
      model: 'Wize NV3'
    - regex: 'PSP3528DUO'
      device: 'smartphone'
      model: 'Wize PX3'
    - regex: 'PSP3527DUO'
      device: 'smartphone'
      model: 'Wize NK3'
    - regex: 'PSP3468DUO'
      device: 'smartphone'
      model: 'Wize OK3'
    # explicit tables models
    - regex: 'SILVER POS'
      model: 'Silver POS'
    - regex: 'PMT3277_3G'
      model: 'MultiPad Ranger 7.0" 3G'
    - regex: 'PMT4337_3G'
      model: 'Seed A7 3G'
    - regex: 'PMT3997_W_D'
      model: 'SmartKids'
    - regex: 'PMT3104_Wi_D'
      model: 'SmartKids Up'
    - regex: 'PMT4208'
      model: 'Node A8 3G'
    - regex: 'PMT4771'
      model: 'Root A10 3G'
    - regex: 'PMP7070C3G'
      model: 'MultiPad 4 Diamond 7.0" 3G'
    - regex: 'PGPS7799CIS08GBPG(?:[);/ ]|$)'
      model: 'Geo Vision Tour 3'
    - regex: 'PGPS7797(?:[);/ ]|$)'
      model: 'Geo Vision Tour 2'
    - regex: 'PMT(3118|38[74]8|3[123]01|3[12]57|778[18]|4[789]91|5588|5718|5791|577[18]|4327|3768)[_ ]([34])G'
      model: 'Grace $1 $2G'
    - regex: 'PMT3287_3G'
      model: 'MultiPad Ranger 8.0 3G'
    - regex: 'PMT4238_4G'
      model: 'Q Pro'
    - regex: 'PMT(1177|3208|3618|31[357]1|1157|1196|3[10]96|3[17]61|3407)[_ ]([34])GE?'
      model: 'MultiPad Wize $1 $2G'
    - regex: 'PMT(1107|3[456]37|3[34]27|3317|4638|4311|413[17]|411[178]|3771)[_ ]([34])GE?'
      model: 'Wize $1 $2G'
    - regex: 'PMT(3231|37[01]8|4231|4667|38[3678]1)[_ ]([34])GE?'
      model: 'Muze $1 $2G'
    - regex: 'PSP7546DUO([ _][A-Z]{2})?'
      model: 'X Pro'
    - regex: 'PSP7610DUO([ _][A-Z]{2})?'
      model: 'S Max'
    # explicit tv models
    - regex: 'PTV(\w+)_CIS_(ML|BK)'
      device: 'tv'
      model: 'PTV$1CIS$2'
    - regex: '(PAB4411)'
      device: 'tv'
      model: 'MultiCenter $1'
    # general detection
    - regex: '(PM[PT][0-9]+[a-z0-9_]+)(?:[);/ ]|$)'
      model: '$1'
    - regex: '((?:PAP|PSP)[0-9]+[a-z0-9_]+(?: DUO)?)(?:[);/ ]|$)'
      model: '$1'
      device: 'smartphone'

# Sanyo
Sanyo:
  regex: 'Sanyo|MobilePhone[ ;]'
  device: 'feature phone'
  models:
    # explicit feature phone models
    - regex: 'SCP-?6750'
      model: 'Katana Eclipse X'
    - regex: 'SCP-?6760'
      model: 'Incognito'
    - regex: 'SCP-?6780'
      model: 'Innuendo'

    - regex: 'SANYO[ /_-]([a-z0-9\-]+)'
      model: '$1'
    - regex: 'MobilePhone ([a-z0-9\-]+)'
      model: '$1'

# Qilive
Qilive:
  regex: 'Qilive [0-9][^;/]*|Q(7S5[5]?IN4G|T19101|T21101|7T10INP|T19101HV|8T10IN|8S55IN4G2|8S[56]IN4G|9T9IN|9T(?:7|10)IN4G|9S55IN4G|10S5[37]IN4G|10S[56]IN4G|10S[56]IN4GR|9S5IN4G|6T7IN)'
  device: 'smartphone'
  models:
    - regex: 'Q7S5IN4G'
      model: 'Q7 5.0" 4G'
    - regex: 'Q7S55IN4G'
      model: 'Q7 5.5" 4G'
    - regex: 'Q8S55IN4G2'
      model: 'Q8 5.5" 4G'
    - regex: 'Q8S6IN4G'
      model: 'Q8 6.0" 4G'
    - regex: 'Q8S5IN4GP'
      model: 'Q8 5.1" 4G'
    - regex: 'Q9S5IN4G'
      model: 'Q9 5.0" 4G'
    - regex: 'Q9S55IN4G'
      model: 'Q9 5.5" 4G'
    - regex: 'Q10S53IN4G'
      model: 'Q10 5.3" 4G'
    - regex: 'Q10S57IN4G'
      model: 'Q10 5.7" 4G'
    - regex: 'Q10S5IN4G[R]?'
      model: 'Q10 5.0" 4G'
    - regex: 'Q10S6IN4G'
      model: 'Q10 6.0" 4G'
    - regex: 'Q6T7IN'
      model: 'Q6'
      device: 'tablet'
    - regex: 'Q7T10INP'
      model: 'Q7 10.1"'
      device: 'tablet'
    - regex: 'Q8T10IN'
      model: 'Q8 10.1"'
      device: 'tablet'
    - regex: 'Q9T7IN4G'
      model: 'Q9 7.0" 4G'
      device: 'tablet'
    - regex: 'Q9T9IN'
      model: 'Q9 9.0"'
      device: 'tablet'
    - regex: 'Q9T10IN4G'
      model: 'Q9 10.1" 4G'
      device: 'tablet'
    - regex: '(QT19101HV|QT19101)'
      model: '$1'
      device: 'tablet'
    - regex: 'QT21101'
      model: 'Q1-21'
      device: 'tablet'
    - regex: 'Qilive (1\d+[^;/)]*)(?: Build|[;)])'
      model: '$1'
      device: 'tablet'
    - regex: 'Qilive ([0-5][^;/)]*)(?: Build|[;)])'
      model: '$1'
    - regex: 'Qilive ([0-5]*)/'
      model: '$1'
    - regex: '97R-2'
      model: '97R2'
      device: 'tablet'
    - regex: 'Qilive ([6-9][^;/)]*)(?: Build|[;)])'
      model: '$1'
      device: 'tablet'

# Vankyo
Vankyo:
  regex: 'Vankyo[_ ]|(?:QTAB1010X|S10_ROW|S[23]0_EEA|Z4_EEA)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'Vankyo[_ ]S(10|[78])'
      model: 'MatrixPad S$1'
    - regex: '(S[23]0|Z4)_EEA'
      model: 'MatrixPad $1'
    - regex: 'QTAB(1010X)'
      model: 'QTab $1'
    - regex: 'S10_ROW'
      model: 'MatrixPad S10'

# Quest or Quest Mobile
Quest:
  regex: 'RAPTOR(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'RAPTOR'
      model: 'Raptor'

# QMobile or QSmart or Q-Smart (qmobile.com.pk)
QMobile:
  regex: 'QMobile|QTab(?!10EW)|Q-?Smart|(?:Mark [25]|E2 Noir|Noir[ _](A[18]|X1S)|LUNA PRO|NICE S|JazzX JS(?:[27]|10)(?: PRO)?|LT[57]00[ _]PRO|LT950|Infinity (?:Cinema 2|triple|santos|Prime 2)|Q Infinity|Hot 5|Hot Pro 2|VITA S|i7i 2020|i10[ _]20(?:20|19)|V2 2018|Z12 PRO|Smart HD Pro|V[67]_Metal|Rocket (?:Lite|Pro)| GLi|i6i 2020|Android 6(?:[\d.]*);(?: [\w-]+;)? (?:J5|S2 Pro|J7 PRO|M350 Pro)|Android 5(?:[\d.]*);(?: [\w-]+;)? Z9 Plus|i8i Dual)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'JazzX JS7 PRO'
      model: 'Jazz X JS7 Pro'
    - regex: 'JazzX JS(2|10)'
      model: 'Jazz X JS$1'
    - regex: 'Noir A1 lite'
      model: 'Noir A1 Lite'
    - regex: 'Noir[ _](A[18]|X1S)(?:[);/ ]|$)'
      model: 'Noir $1'
    - regex: 'Z9 Plus'
      model: 'Z9 Plus'
    - regex: 'A600(?:[);/ ]|$)'
      model: 'Noir A600'
    - regex: 'Z12 PRO'
      model: 'Noir Z12 Pro'
    - regex: 'E2 Noir'
      model: 'E2 Noir'
    - regex: 'Hot Pro 2'
      model: 'Hot Pro 2'
    - regex: '(J7|S2) Pro'
      model: '$1 Pro'
    - regex: 'Hot 5'
      model: 'Hot 5'
    - regex: 'LT([57]00)[ _]PRO'
      model: 'Noir LT$1 Pro'
    - regex: 'X700 PRO II'
      model: 'X700 Pro II'
    - regex: 'X700 PRO Lite'
      model: 'X700 Pro Lite'
    - regex: 'X700 PRO'
      model: 'X700 Pro'
    - regex: 'M350 Pro'
      model: 'M350 Pro'
    - regex: 'LUNA PRO'
      model: 'Luna Pro'
    - regex: 'VITA S'
      model: 'Vita S'
    - regex: 'NICE S'
      model: 'Nice S'
    - regex: 'V([67])_Metal'
      model: 'V$1 Metal'
    - regex: 'i(\d+)i 20(20|1[89])'
      model: 'i$1i (20$2)'
    - regex: 'i10[ _]20(20|19)'
      model: 'i10 (20$1)'
    - regex: 'i6i 2020'
      model: 'i6i (2020)'
    - regex: 'i8i PRO'
      model: 'i8i Pro'
    - regex: 'i8i Dual'
      model: 'i8i Dual'
    - regex: 'QMobile I8i'
      model: 'i8i'
    - regex: 'i6 Metal ONE'
      model: 'i6 Metal One'
    - regex: 'i6 Metal 2017'
      model: 'i6 Metal (2017)'
    - regex: 'Smart HD Pro'
      model: 'Smart HD Pro'
    - regex: 'Rocket Pro'
      model: 'Rocket Pro'
    - regex: 'Rocket Lite'
      model: 'Rocket Lite'
    - regex: 'Mark ([25])'
      model: 'Mark $1'
    - regex: 'QSmart (X[124]0)'
      model: '$1'
    - regex: 'Infinity Cinema 2'
      model: 'Infinity Cinema 2'
    - regex: 'Infinity Prime 2'
      model: 'Infinity Prime 2'
    - regex: 'Infinity triple'
      model: 'Infinity Triple'
    - regex: 'Infinity santos'
      model: 'Infinity Santos'
    - regex: 'Q Infinity PRO'
      model: 'Q Infinity Pro'
    - regex: 'Q Infinity E Lite'
      model: 'Q Infinity E Lite'
    - regex: 'Q Infinity ([FCB])'
      model: 'Q Infinity $1'
    - regex: ' (LT950|J5)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'GLi Lite(?:[);/ ]|$)'
      model: 'GLi Lite'
    - regex: ' GLi(?:[);/ ]|$)'
      model: 'GLi'
    - regex: 'V2 2018(?:[);/ ]|$)'
      model: 'V2 (2018)'
    - regex: 'QMobile ENERGY (X[12])(?:[);/ ]|$)'
      model: 'Energy $1'
    # general detections
    - regex: 'QTab[ _-]([^;/]+) Build'
      model: '$1 Tab'
      device: 'tablet'
    - regex: 'QTab[ _-]([^;/)]+)(?:[;/)]|$)'
      model: '$1 Tab'
      device: 'tablet'
    - regex: '(?:QMobile|Q-?Smart)[ _-]([^;/)]+) Plus(?: Build|[;)])'
      model: '$1 Plus'
    - regex: '(?:QMobile|Q-?Smart)[ _-]([^;/)]+) PRO(?: Build|[;)])'
      model: '$1 Pro'
    - regex: '(?:QMobile|Q-?Smart)[ _-]([^;/)]+)(?: Build|[;)])'
      model: '$1'
    - regex: 'Q Infinity'
      model: 'Q Infinity'

# COYOTE
COYOTE:
  regex: 'COYOTE[ _]'
  device: 'tablet'
  models:
    - regex: '1090 DVR Maximus Pro'
      model: '1090 DVR Maximus Pro' # GPS tablet

# Maximus (maximus-mobile.com)
Maximus:
  regex: 'Maximus[ _]|(Noir X|G10 max|iX Ultra)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:Maximus[ _])?(Noir X|D1)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'G10 max(?:[);/ ]|$)'
      model: 'G10 Max'
    - regex: 'iX Ultra'
      model: 'iX Ultra'
    - regex: 'Maximus_(T2)'
      device: 'tablet'
      model: '$1'

# Quantum
Quantum:
  regex: '(?:Quantum (?:Fit|Five|Fly|UP|MUV (?:PRO|UP)|Go|Mini|M|V|You [2E])|GO 2|Q20|LIO\+|Q-TITANO(_007i|-H2)?|Q-Pulse70M|Q-Wave(?:101|71M))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'LIO\+(?:[);/ ]|$)'
      model: 'Lio Plus'
    - regex: 'GO 2(?:[);/ ]|$)'
      model: 'Go 2'
    - regex: 'Quantum (Fit|Five|Go|Mini|[MV]|Fly|You [2E]|Q20)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Quantum MUV PRO(?:[);/ ]|$)'
      model: 'MUV Pro'
    - regex: 'Quantum MUV UP(?:[);/ ]|$)'
      model: 'MUV Up'
    - regex: 'Quantum UP(?:[);/ ]|$)'
      model: 'Up'
    - regex: 'Q-TITANO[ _-](BOS|X|M1|007i|H[12]|AK47)(?:[);/ ]|$)'
      model: 'Q-Titano $1'
    - regex: 'Q-Pulse70M(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Q-Pulse 70M'
    - regex: 'Q-Wave(101|71M)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Q-Wave $1'

# Quechua
Quechua:
  regex: 'Quechua Phone 5'
  device: 'smartphone'
  model: 'Quechua Phone 5'

# Quipus (https://quipus.gob.bo/)
Quipus:
  regex: 'TINKU LTE(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'TINKU LTE(?:[);/ ]|$)'
      model: 'Tinku'

# Ramos
Ramos:
  regex: 'Ramos ?([^/);]+)(?: Build|[);])|(?:MOS1(?:max)?|W22PRO 3G)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:Ramos[ _])?(R10|R9|M7)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(MOS1)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'MOS1max'
      model: 'MOS1 Max'
    - regex: 'W22PRO 3G'
      device: 'tablet'
      model: 'W22 Pro 3G'
    - regex: 'Ramos ?([^/;]+)(?: Build|[);])'
      device: 'tablet'
      model: '$1'

# Razer
Razer:
  regex: 'Phone 2'
  device: 'smartphone'
  model: 'Phone 2'

# Sendo
Sendo:
  regex: 'Sendo([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# Silent Circle
'Silent Circle':
  regex: 'Blackphone 2'
  device: 'smartphone'
  model: 'Blackphone 2'

# Ophone
Ophone:
  regex: '(?:(?:Sigma|Beeta)_4_0|Active 5\.0)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Sigma_4_0'
      model: 'Sigma 4.0'
    - regex: 'Beeta_4_0'
      model: 'Beeta 4.0'
    - regex: 'Active 5\.0'
      model: 'Active 5.0'

# Sigma or Sigma Mobile (sigmamobile.net)
Sigma:
  regex: 'Sigma(?!Designs)|(X[_-]Style[ _]?Tab[_ ]A(\d+)|X[-_ ]?treme[-_ ]?PQ[0-9]{2}|X-Style_S5501|Tab A1015)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:Sigma[ _])?X[-_ ]?treme[-_ ]?PQ([0-9]{2}) Max(?:[);/ ]|$)'
      model: 'X-Treme PQ$1 Max'
    - regex: '(?:Sigma[ _])?X[-_ ]?treme[-_ ]?PQ([0-9]{2})(?:[);/ ]|$)'
      model: 'X-Treme PQ$1'
    - regex: 'X[_-]Style[ _]?Tab[_ ]A(\d+)(?:[);/ ]|$)'
      model: 'X-Style Tab A$1'
      device: 'tablet'
    - regex: 'Tab (A1015)(?:[);/ ]|$)'
      model: 'Tab $1'
      device: 'tablet'
    - regex: '(?:Sigma[ _])?X[-_ ]?Style[-_ ]S([0-9]+)(?:[);/ ]|$)'
      model: 'X-Style S$1'

# Spice
Spice:
  regex: '(?<![\d];)Spice|(?:Xlife[-_ ](?:\d+Q?|Victor5|M5q\+|M5 Pro|Proton5|Electro55HD))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:Spice_)?Xlife[-_ ](\d+Q?|M5\+)(?:[);/ ]|$)'
      model: 'Xlife $1'
    - regex: 'Xlife-M5q\+'
      model: 'Xlife M5Q+'
    - regex: 'Xlife-M5 Pro'
      model: 'Xlife M5 Pro'
    - regex: 'Xlife-Victor5'
      model: 'Xlife Victor 5'
    - regex: 'Xlife-Proton5 Pro'
      model: 'Xlife Proton 5 Pro'
    - regex: 'Xlife-Electro55HD'
      model: 'Xlife Electro 55 HD'
    - regex: 'Spice[-_ ]?([^/;]+)(?: Build|[;)])'
      model: '$1'
    - regex: 'Spice[-_ ]?([^/;]+)(?:/|$)'
      model: '$1'

# SGIN
SGIN:
  regex: 'SGIN_X10(?:[);/ ]|$)'
  device: 'tablet'
  model: 'X10'

# Sharp (jp.sharp)
Sharp:
  regex: 'SHARP(?!_2|1)|SBM|SH-?[0-9]+[a-z]?(?:[);/ ]|$)|AQUOS|(?:SH-T01|SH-M0[14-9]|SH-M1[1-7](?:-y)?|S[357]-SH|SH-[MZ]([12]0|01|22)|SH-[CL]02|SH-RM(?:1[1258]|02)|SH-R?M19s?|SH-R10A|[34]04SH|401SH|[45]02SH|306SH|[36]05SH|70[1246]SH|80[138]SH|90[1678]SH|50[3679]SH|SHL2[1235]|SHV4[0-8]|SHV3[1-9](?:[-_]u)?|FS80(?:1[08]|32|28|0[29])|TG-L900S|NP601SH|403SH|603SH|SHF3[1-4]|SHV4[035][-_]u|SW001SH|SHG0[1-8]|X4-SH|A002SH|DM-01[JH]|A[01]01SH|606SH|FS801[56]|d-41A|d-51C|NP80[567]SH|NP501SH|A00[34]SH|A102SH|IS05|SH-(?:S50|53A|51B|[HDA]01|01FDQ|S40P|M24)|LP-0[12]|FS8014|SBM00[35]SH|SBM103SH|A10[345]SH|lineage_ss2|LCD_xxSUFOC475A|A20[1248]SH|FS802[56]|ADS1|NPA205SH|SHG10)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    # explicit smartphone models
    - regex: '506SH(?:[);/ ]|$)'
      model: 'Aquos Xx3'
    - regex: '603SH(?:[);/ ]|$)'
      model: 'Aquos Xx3 Mini'
    - regex: '50[23]SH(?:[);/ ]|$)'
      model: 'Aquos Xx2'
    - regex: '[34]04SH(?:[);/ ]|$)'
      model: 'Aquos Xx'
    - regex: '606SH(?:[);/ ]|$)'
      model: 'Aquos ea'
    - regex: '507SH(?:[);/ ]|$)'
      model: 'Android One'
    - regex: 'S3-SH(?:[);/ ]|$)'
      model: 'Android One S3'
    - regex: 'S5-SH(?:[);/ ]|$)'
      model: 'Android One S5'
    - regex: 'S7-SH(?:[);/ ]|$)'
      model: 'Android One S7'
    - regex: 'X4-SH(?:[);/ ]|$)'
      model: 'Android One X4'
    - regex: '(?:SHG06|A10[34]SH|SH-M20)(?:[);/ ]|$)'
      model: 'Aquos Wish'
    - regex: '(?:SH-51C|A204SH|SHG08)(?:[);/ ]|$)'
      model: 'Aquos Wish 2'
    - regex: 'SH-M04(?:[);/ ]|$)'
      model: 'Aquos SH-M04'
    - regex: 'SH-M05(?:[);/ ]|$)'
      model: 'Aquos Sense Lite'
    - regex: 'SH-M07(?:[);/ ]|$)'
      model: 'Aquos Sense Plus'
    - regex: 'A003SH(?:[);/ ]|$)'
      model: 'Aquos Sense 4 Basic'
    - regex: 'SH-41A(?:[);/ ]|$)'
      model: 'Aquos Sense 4'
    - regex: ' SH-S40P(?:[);/ ]|$)'
      model: 'Aquos Sense 4 Plus'
    - regex: '(?:SH-54B|SHG05|SH-R?M19)(?:[);/ ]|$)'
      model: 'Aquos Sense 6'
    - regex: '(?:SHG07|SH-RM19s)(?:[);/ ]|$)'
      model: 'Aquos Sense 6s'
    - regex: 'A208SH(?:[);/ ]|$)'
      model: 'Aquos Sense 7 Plus'
    - regex: '(?:SH-53C|SH-M24|SHG10)(?:[);/ ]|$)'
      model: 'Aquos Sense 7'
    - regex: '(?:SHG03|A004SH|SH-M17|SH-53A|A105SH|SH-S50)(?:[);/ ]|$)'
      model: 'Aquos Sense 5G'
    - regex: 'SH-D01(?:[);/ ]|$)'
      model: 'Aquos D10'
    - regex: 'SH-M12(?:-y)?(?:[);/ ]|$)'
      model: 'Aquos S3 Dual SIM'
    - regex: 'SH-H01(?:[);/ ]|$)'
      model: 'Aquos Zeta'
    - regex: '(?:SH-[MZ]10|801SH)(?:[);/ ]|$)'
      model: 'Aquos Zero'
    - regex: '(?:SH-M13|906SH|SH-01M)(?:[);/ ]|$)'
      model: 'Aquos Zero 2'
    - regex: '(?:SHG04|A102SH|SH-RM18)(?:[);/ ]|$)'
      model: 'Aquos Zero 6'
    - regex: '(?:SHG02|A002SH)(?:[);/ ]|$)'
      model: 'Aquos Zero 5G Basic'
    - regex: '(?:SH-Z01|Aquos S2 4/64)(?:[);/ ]|$)'
      model: 'Aquos S2 (C10)'
    - regex: '(?:SH-02E|SH-01[GH]|SH-04H|SH-09D)(?:[);/ ]|$)'
      model: 'Aquos Phone Zeta'
    - regex: 'SH-01FDQ(?:[);/ ]|$)'
      model: 'Dragon Quest'
    - regex: 'SH-?06D(?:[);/ ]|$)'
      model: 'Aquos Phone SH-06D'
    - regex: '(SHL2[1235]|SH-M01)(?:[);/ ]|$)'
      model: 'Aquos Phone $1'
    - regex: 'SBM(203SH|30[23]SH)(?:[);/ ]|$)'
      model: 'Aquos Phone XX $1'
    - regex: 'SH-L02(?:[);/ ]|$)'
      model: 'Aquos L2'
    - regex: '(?:605SH|SH-03J|SHV39)(?:[);/ ]|$)'
      model: 'Aquos R'
    - regex: '(?:701SH|SHV41|SH-M06)(?:[);/ ]|$)'
      model: 'Aquos R Compact'
    - regex: '(?:SH-M09|SHV42|706SH|SH-03K)(?:[);/ ]|$)'
      model: 'Aquos R2'
    - regex: '803SH(?:[);/ ]|$)'
      model: 'Aquos R2 Compact'
    - regex: '(?:908SH|SHG01|SH-M14)(?:[);/ ]|$)'
      model: 'Aquos R5G'
    - regex: 'SH-M16(?:[);/ ]|$)'
      model: 'Aquos S4 Plus'
    - regex: 'SH-M15(?:[);/ ]|$)'
      model: 'Aquos S4 SIM'
    - regex: 'SH-C02(?:[);/ ]|$)'
      model: 'Aquos V'
    - regex: '(SHF3[1-4])(?:[);/ ]|$)'
      model: 'Aquos K $1'
    - regex: '704SH(?:[);/ ]|$)'
      model: 'Simple Smartphone 4'
    - regex: 'A201SH(?:[);/ ]|$)'
      model: 'Simple Smartphone 6'
    - regex: '(?:SH-02J|SH-04G)(?:[);/ ]|$)'
      model: 'Aquos Ever'
    - regex: 'SH-02H(?:[);/ ]|$)'
      model: 'Aquos Compact'
    - regex: '30[56]SH(?:[);/ ]|$)'
      model: 'Aquos Crystal'
    - regex: '402SH(?:[);/ ]|$)'
      model: 'Aquos Crystal X'
    - regex: '403SH(?:[);/ ]|$)'
      model: 'Aquos Crystal 2'
    - regex: '(?:509SH|SH-R10A)(?:[);/ ]|$)'
      model: 'Aquos 3'
    - regex: 'NP601SH(?:[);/ ]|$)'
      model: 'Aquos 2'
    - regex: '(?:SHV40|SHV3[24])(?:_u)?(?:[);/ ]|$)'
      model: 'Aquos S'
    - regex: '702SH(?:[);/ ]|$)'
      model: 'Aquos S Basic'
    - regex: 'Aquos P6(?:[);/ ]|$)'
      model: 'Aquos P6'
    - regex: 'SHV3[183](?:[);/ ]|$)'
      model: 'Aquos S Mini'
    - regex: '(?:FS8010|SH-M08|SHV43(?:-u)?|SH-01[KL]|lineage_ss2|Aquos S2)(?:[);/ ]|$)'
      model: 'Aquos S2'
    - regex: 'FS8016(?:[);/ ]|$)'
      model: 'Aquos S2 Plus'
    - regex: '(?:SHV46|SH-R?M11|901SH)(?:[);/ ]|$)'
      model: 'Aquos S3 Plus'
    - regex: '(?:SHV44|808SH|SH-04L|SH-03G)(?:[);/ ]|$)'
      model: 'Aquos R3'
    - regex: '(?:FS8032|FS8015|SH-02M|SHV45(?:-U)?)(?:[);/ ]|$)'
      model: 'Aquos S3'
    - regex: 'FS8018(?:[);/ ]|$)'
      model: 'Aquos S3 Mini'
    - regex: '(?:SHV48|907SH)(?:[);/ ]|$)'
      model: 'Aquos S3 Basic'
    - regex: 'SH-RM12(?:[);/ ]|$)'
      model: 'Aquos S3 Lite'
    - regex: 'SH-RM15(?:[);/ ]|$)'
      model: 'Aquos S4 Lite'
    - regex: 'SH-51A(?:[);/ ]|$)'
      model: 'Aquos R5G'
    - regex: '(?:SH-51B|A101SH|SH-M22)(?:[);/ ]|$)'
      model: 'Aquos R6'
    - regex: '(?:A202SH|SH-52C)(?:[);/ ]|$)'
      model: 'Aquos R7'
    - regex: 'SHV3[57](?:_u)?(?:[);/ ]|$)'
      model: 'Aquos U'
    - regex: 'TG-L900S(?:[);/ ]|$)'
      model: 'Luna S'
    - regex: 'SH-A01(?:[);/ ]|$)'
      model: 'B10'
    - regex: 'FS8026(?:[);/ ]|$)'
      model: 'A2 Lite'
    - regex: 'FS8025(?:[);/ ]|$)'
      model: 'A2'
    - regex: '(?:FS8002|SHV47)(?:[);/ ]|$)'
      model: 'Z2'
    - regex: 'FS8009(?:[);/ ]|$)'
      model: 'Z3'
    - regex: 'FS8014(?:[);/ ]|$)'
      model: 'R1'
    - regex: 'FS8028(?:[);/ ]|$)'
      model: 'R1S'
    - regex: 'SHV36(?:[);/ ]|$)'
      model: 'Basio 2'
    - regex: 'SW001SH(?:[);/ ]|$)'
      model: 'Star Wars'
    - regex: 'SH-RM02'
      model: 'Aquos SH-RM02'
    - regex: '401SH'
      model: 'Aquos 401SH'
    - regex: '(DM-01[JH])'
      model: 'Disney Mobile $1'
    - regex: 'A001SH'
      model: 'Simple Sumaho 5'  # (Simple Smartphone 5)
    - regex: 'NP80[56]SH'
      model: 'Aquos Keitai 3'
    - regex: 'NPA205SH'
      model: 'Aquos Keitai 4'
    - regex: 'NP807SH'
      model: 'Aquos Keitai 10'
    - regex: 'NP501SH'
      model: 'Aquos Keitai'
    - regex: 'LP-0([12])(?:[);/ ]|$)'
      model: 'Leica Leitz Phone $1'
    - regex: 'SBM(00[35]SH)(?:[);/ ]|$)'
      model: 'Galapagos $1'  # SoftBank
    - regex: 'SBM(103SH)(?:[);/ ]|$)'
      model: 'Aquos Phone $1'  # SoftBank
    - regex: 'SH-02L(?:[);/ ]|$)'
      model: 'Aquos K-tai'
    - regex: 'SBM200SH(?:[);/ ]|$)'
      model: 'Pantone 6' # SoftBank

    # explicit tablet models
    - regex: 'SH-08E(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Sharp Aquos Pad'
    - regex: '(d-41A|d-51C)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'dtab $1'
    - regex: '(SH-T01)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'

    - regex: '(LC-(?:[0-9]{2})[a-z0-9]+)(?:[);/ ]|$)'
      device: 'tv'
      model: '$1'
    - regex: 'LCD_xxSUFOC475A'
      device: 'tv'
      model: 'LCD-60SU475A'
    - regex: 'SHARP-AQUOS|AQUOSBrowser'
      device: 'tv'
      model: 'Aquos Net Plus'
    - regex: 'SHARP[ -]([a-z0-9\-]+)'
      model: '$1'
    - regex: 'AQUOS[ _-]TV([a-z0-9\-]+)'
      device: 'tv'
      model: 'Aquos TV$1'
    - regex: '(?:SHARP|SBM)([a-z0-9]+)'
      model: '$1'
    - regex: '(SH-?[0-9]+[a-z]?|IS05|ADS1)(?:[);/ ]|$)'
      model: '$1'

# Simply or SIMPLE Mobile (simplemobile.com)
Simply:
  regex: '(NP602SI)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Softbank
Softbank:
  regex: 'Softbank|J-PHONE'
  device: 'smartphone'
  models:
    - regex: 'Softbank/[12]\.0/([a-z0-9]+)'
      model: '$1'
    - regex: '([a-z0-9]+);Softbank;'
      model: '$1'
    - regex: 'J-PHONE/[0-9]\.[0-9]/([a-z0-9\-]+)'
      model: '$1'

# Sonim
Sonim:
  regex: 'Sonim[ -]|XP(?:[67]7|[358]8)00(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:Sonim-)?XP3400'
      model: 'XP3400'
      device: 'feature phone'
    - regex: '(?:Sonim-)?XP3800(?:[);/ ]|$)'
      model: 'XP3'
    - regex: '(?:Sonim-)?XP3900(?:[);/ ]|$)'
      model: 'XP3 Plus'
    - regex: '(?:Sonim-)?XP5800(?:[);/ ]|$)'
      model: 'XP5s'
    - regex: '(?:Sonim-)?XP5700(?:[);/ ]|$)'
      model: 'XP5'
    - regex: '(?:Sonim-)?XP6700(?:[);/ ]|$)'
      model: 'XP6'
    - regex: '(?:Sonim-)?XP7700(?:[);/ ]|$)'
      model: 'XP7'
    - regex: '(?:Sonim-)?XP8800(?:[);/ ]|$)'
      model: 'XP8'

# Star
Star:
  regex: '(?:N(?:9[5678]00|8800|9000|9977)|Star[ _]N9589)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'N9000'
      model: 'Note 3'
    - regex: '(?:Star_)?N(9[5678]00|8800|9977|9589)(?:[);/ ]|$)'
      model: 'N$1'

# Starmobile (starmobile.ph)
Starmobile:
  regex: '(?:Starmobile (?:Play (?:Neo|Spark|GO|Click|Max)|Astra)|DIAMOND D1|UP[_ ](?:Sense|Rave|Groove|Octa|Prime|Selfie|Snap|Xtreme|XL|Max|Vision|Neo)|PLAY (?:Club|Style|Click LTE)|ENGAGE7\+)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Starmobile PLAY GO(?:[);/ ]|$)'
      model: 'Play Go'
    - regex: 'Starmobile ASTRA(?:[);/ ]|$)'
      model: 'Astra'
    - regex: 'DIAMOND D1(?:[);/ ]|$)'
      model: 'Diamond D1'
    - regex: '(?:Starmobile )?Play (Neo|Spark|Click|Club|Style|Max)(?:[);/ ]|$)'
      model: 'Play $1'
    - regex: 'UP[_ ](Sense|Rave|Groove|Octa|Prime|Selfie|Snap|Xtreme|XL|Max|Vision|Neo)(?:[);/ ]|$)'
      model: 'UP $1'
    - regex: 'ENGAGE7\+'
      device: 'tablet'
      model: 'Engage 7 Plus'

# Toshiba
Toshiba:
  regex: 'Toshiba|TSBNetTV/|portalmmm/[12].0 TS|(?:T-01C|T-0[12]D|IS04|IS11T|AT1S0|AT300SE|AFTDCT31|AT(?:7-C|10-A|10[PL]E-A|100|200|270|300|330|374|400|470|500a?|503|570|703|830)|AFTKMST12|AFTBAMR311|SATELLITE (?:C655|L50-C|Pro L300|A100))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    # explicit smartphone models
    - regex: 'T-01C'
      model: 'Regza T-01C'
    - regex: 'T-01D'
      model: 'Regza T-01D'
    - regex: 'T-02D'
      model: 'Regza T-02D'
    - regex: 'IS04'
      model: 'Regza IS04'
    - regex: 'IS11T'
      model: 'Regza IS11T'

    # explicit tablet models
    - regex: 'AT7-C'
      model: 'Excite'
      device: 'tablet'
    - regex: 'AT1S0'
      model: 'Regza AT1S0'
      device: 'tablet'
    - regex: 'AT300SE'
      model: 'Regza AT300SE'
      device: 'tablet'
    - regex: 'AT500a'
      model: 'Regza AT500a'
      device: 'tablet'
    - regex: 'AT(100|200|270|300|330|374|400|470|500|503|570|703|830)'
      model: 'Regza AT$1'
      device: 'tablet'
    - regex: 'AT10([PL])E-A'
      model: 'Excite AT10$1-A'
      device: 'tablet'
    - regex: 'AT10-A'
      model: 'Excite AT10-A'
      device: 'tablet'

    - regex: 'SATELLITE L50-C'
      device: 'desktop'
      model: 'Satellite L50C'
    - regex: 'SATELLITE (C655|Pro L300|A100)'
      device: 'desktop'
      model: 'Satellite $1'

    - regex: 'AFTKMST12'
      device: 'tv'
      model: '43LF711U20'
    - regex: 'AFTDCT31'
      device: 'tv'
      model: '4K UHD (2020)'
    - regex: 'AFTBAMR311'
      device: 'tv'
      model: '43LF421U19'
    - regex: 'TOSHIBA, ([a-z0-9_ \-]+), (?:wired|wireless)'
      device: 'tv'
      model: ''
    - regex: 'TSBNetTV/'
      device: 'tv'
      model: ''
    - regex: 'Toshiba[ /_\-]?([a-z0-9_ \-]+) Build'
      model: '$1'
    - regex: 'Toshiba[ /_\-]?([a-z0-9_\-]+)'
      model: '$1'
    - regex: 'portalmmm/[12].0 (TS[a-z0-9 ]+)'
      model: '$1'

# Ok
Ok:
  regex: 'AFTWI001(?:[);/ ]|$)'
  device: 'tv'
  model: '4K (2020)'

# Anker (https://www.anker.com/)
Anker:
  regex: 'AFTMM(?:[);/ ]|$)'
  device: 'tv'
  model: 'Nebula Soundbar'

# Kindle
Amazon:
  regex: '(?:AFT[ABMNRST]|AFTSSS?|AFTKA|SD4930UR|AEO(?:BC|C[HW]|KN)|KF(?:OT|ONWI|TT|JWI|JWA|[DFS]OWI|A[PRSU]WI|T[BH]WI|TRP?WI|SAW[IA]|GIWI|KAWI|MAWI|MEWI|MUWI|SUWI))(?:[);/ ]|$)|Kindle|AlexaMediaPlayer|Amazon (?:Tate|Jem)|Silk/\d+\.\d+|Echo/1|.+FIRETVSTICK'
  device: 'tablet'
  models:
    - regex: 'AFTA'
      model: 'Fire TV Cube (Gen 1)'
      device: 'tv'
    - regex: 'AFTR'
      model: 'Fire TV Cube (Gen 2)'
      device: 'tv'
    - regex: 'AFTN'
      model: 'Fire TV (Gen 3)'
      device: 'tv'
    - regex: 'AFTTI43'
      model: 'Fire TV 4-Series (2021)'
      device: 'tv'
    - regex: 'AFTB'
      model: 'Fire TV (Gen 1)'
      device: 'tv'
    - regex: 'AFTSSS'
      model: 'Fire TV Stick (Gen 3)'
      device: 'tv'
    - regex: 'AFTSS'
      model: 'Fire TV Stick Lite (Gen 1)'
      device: 'tv'
    - regex: 'AFT[MST]'
      model: 'Fire TV Stick'
      device: 'tv'
    - regex: '.+FIRETVSTICK2018'
      model: 'Fire TV Stick 4K'
      device: 'tv'
    - regex: 'AFTKA'
      model: 'Fire TV Stick 4K Max' # 2021
      device: 'tv'
    - regex: 'KFFOWI(?:[);/ ]|$)'
      model: 'Fire 7"'
    - regex: 'KFMUWI(?:[);/ ]|$)'
      model: 'Fire 7" (2019)'
    - regex: 'KFTT(?:[);/ ]|$)'
      model: 'Kindle Fire HD'
    - regex: 'KFJWI(?:[);/ ]|$)|Amazon Jem'
      model: 'Kindle Fire HD 8.9" WiFi'
    - regex: 'KFJWA(?:[);/ ]|$)'
      model: 'Kindle Fire HD 8.9" 4G'
    - regex: 'KFSOWI(?:[);/ ]|$)|Amazon Tate'
      model: 'Kindle Fire HD 7" WiFi'
    - regex: 'KFTHWI(?:[);/ ]|$)'
      model: 'Kindle Fire HDX 7" WiFi'
    - regex: 'KFTHWA(?:[);/ ]|$)'
      model: 'Kindle Fire HDX 7" 4G'
    - regex: 'KFAPWI(?:[);/ ]|$)'
      model: 'Kindle Fire HDX 8.9" WiFi'
    - regex: 'KFAPWA(?:[);/ ]|$)'
      model: 'Kindle Fire HDX 8.9" 4G'
    - regex: 'KFARWI(?:[);/ ]|$)'
      model: 'Fire HD 6'
    - regex: 'KFASWI(?:[);/ ]|$)'
      model: 'Fire HD 7'
    - regex: 'KFQUWI(?:[);/ ]|$)'
      model: 'Fire 7 (2022)'
    - regex: 'KFAUWI(?:[);/ ]|$)'
      model: 'Fire HD 7 (2017)'
    - regex: 'KFMEWI(?:[);/ ]|$)'
      model: 'Fire HD 8 (2015)'
    - regex: 'KFRAWI(?:[);/ ]|$)'
      model: 'Fire HD 8 (2022)'
    - regex: 'KFGIWI(?:[);/ ]|$)'
      model: 'Fire HD 8 (2016)'
    - regex: 'KFDOWI(?:[);/ ]|$)'
      model: 'Fire HD 8 (2017)'
    - regex: 'KFKAWI(?:[);/ ]|$)'
      model: 'Fire HD 8 (2018)'
    - regex: 'KFONWI(?:[);/ ]|$)'
      model: 'Fire HD 8 (2020)'
    - regex: 'KFSAWI(?:[);/ ]|$)'
      model: 'Fire HDX 8.9'
    - regex: 'KFSAWA(?:[);/ ]|$)'
      model: 'Fire HDX 8.9 4G'
    - regex: 'KFTBWI(?:[);/ ]|$)'
      model: 'Fire HD 10'
    - regex: 'KFSUWI(?:[);/ ]|$)'
      model: 'Fire HD 10 (2017)'
    - regex: 'KFMAWI(?:[);/ ]|$)'
      model: 'Fire HD 10 (2019)'
    - regex: 'KFTRWI(?:[);/ ]|$)'
      model: 'Fire HD 10 (2021)'
    - regex: 'KFTRPWI(?:[);/ ]|$)'
      model: 'Fire HD 10 Plus (2021)'
    - regex: 'SD4930UR'
      model: 'Fire Phone'
      device: 'smartphone'

    - regex: 'KFOT|Kindle Fire|Silk/\d+\.\d+'
      model: 'Kindle Fire'
    - regex: 'Kindle'
      model: 'Kindle'

    - regex: 'Echo/1|AEO(?:BC|KN)(?:[);/ ]|$)'
      model: 'Echo'
      device: 'smart speaker'
    - regex: 'AEOC[HW](?:[);/ ]|$)'
      model: 'Echo Show 8'
      device: 'smart speaker'
    - regex: 'AlexaMediaPlayer'
      model: 'Alexa'
      device: 'smart speaker'

# Syco (https://www.sycomobiles.be/)
Syco:
  regex: 'RS-403(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'RS-403'
      model: 'RS-403'

# Symphony
Symphony:
  regex: 'SYMPHONY[ \_]([a-z0-9]+)|(?:(?:roar[ _](?:V20|A50|V78|E80|V150))|roarV95|ZVIII?|V10[25]|V1[23]0|V128|V14[012]|V1[45]5|SYMTAB\d+| (?:i97|i7[245]|i6[58]|i30|i1[58]|i120|Z30 pro|[ZR]30|V9[246789]|V75m)|INOVA|6.*; (?:V75|i2[015])|EASY_NAV_2)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'ZVIII'
      model: 'ZVIII'
    - regex: 'ZVII'
      model: 'ZVII'
    - regex: 'INOVA'
      model: 'iNova'
    - regex: 'Symphony Atom ii'
      model: 'Atom II'
    - regex: 'roar[ _]?(V20|A50|E80|V78|V95|V150)(?:[);/ ]|$)'
      model: 'Roar $1'
    - regex: '(Z30|P7) pro'
      model: '$1 Pro'
    - regex: ' (V141|V1[23]0|V10[25]|V128|V14[012]|i97|i7[245]|i6[58]|i30|i1[58]|i120|V1[45]5|[ZR]30|V9[246789]|V75m?|i2[015])(?:[);/ ]|$)'
      model: '$1'
    - regex: 'SYMPHONY[ \_]([a-z0-9]+)'
      model: '$1'
    - regex: 'SYMTAB(\d+)'
      device: 'tablet'
      model: 'SymTab $1'
    - regex: 'EASY_NAV_2'
      device: 'tablet'
      model: 'Easy Nav 2'

# Helio
Helio:
  regex: 'Helio (S60|S5)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# HERO (https://www.only4hero.com/)
HERO:
  regex: 'SP-001(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'SP-001(?:[);/ ]|$)'
      model: 'SP-001'

# Syrox
Syrox:
  regex: '(SYX-(?:T70[04]|T10[12]))(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Qtek
Qtek:
  regex: 'Qtek[ _]?([a-z0-9]+)'
  device: 'smartphone'
  model: '$1'

# Q-Box
Q-Box:
  regex: 'QBOX(?:[);/ ]|$)'
  device: 'tv'
  model: ''

# Q-Touch or Q.Touch or QTouch
Q-Touch:
  regex: 'Qtouch_|[ ](Q09|QS701|Q0[15]A|QS31)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:Qtouch[_ ])?[ ]?(Q09|QS701|Q0[15]A|Q85|QS31)(?:[);/ ]|$)'
      model: '$1'

# G-Touch or GTouch
G-Touch:
  regex: 'GTouch[_ ]|(?:Stella (?:XS?|Omega))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Stella (XS?|Omega)'
      model: 'Stella $1'
    - regex: 'GTouch[_ ]STELLA'
      model: 'Stella'

# T-Mobile
T-Mobile:
  regex: 'T-Mobile[ _][a-z0-9 ]+|(?:REVVLRY\+?|REVVL V\+ 5G|REVVL 2(?: PLUS)?|5062[ZW]|5007[ZW]|T790[WZ]|Telekom Puls|TMAF0[23]5G|TMRVL4G|T Phone)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'TMRVL4G'
      model: 'REVVL V'
    - regex: '5062[ZW]'
      model: 'REVVL 4 Plus'
    - regex: '5007[ZW]'
      model: 'REVVL 4'
    - regex: 'T790[WZ]'
      model: 'REVVL 5G'
    - regex: 'REVVL 2 PLUS'
      model: 'REVVL 2 Plus'
    - regex: 'REVVL V\+ 5G'
      model: 'REVVL V+ 5G'
    - regex: 'REVVLRY'
      model: 'REVVL Plus'
    - regex: 'REVVL 2(?:[);/ ]|$)'
      model: 'REVVL 2'
    - regex: 'TMAF025G(?:[);/ ]|$)'
      model: 'REVVL 6 5G'
    - regex: 'TMAF035G(?:[);/ ]|$)'
      model: 'REVVL 6 Pro 5G'
    - regex: 'Telekom Puls(?:[);/ ]|$)'
      model: 'Telekom Puls'
    - regex: 'T Phone Pro(?:[);/ ]|$)'
      model: 'T Phone Pro'
    - regex: 'T Phone(?:[);/ ]|$)'
      model: 'T Phone'
    - regex: 'T-Mobile[ _]([a-z0-9_ ]+) Build'
      model: '$1'
    - regex: 'T-Mobile[ _]([a-z0-9_ ]+)'
      model: '$1'

# TB Touch
'TB Touch':
  regex: 'Ignis [89]'
  device: 'tablet'
  models:
    - regex: 'Ignis ([89])'
      model: 'Ignis $1'

# Teclast (teclast.com)
Teclast:
  regex: 'Teclast|P80_G3M2|TLA00[12]|TLA016|X98 Air III|M20_4G|X98 Air II\(HG5N\)|Tbook|X80 Power\(B2N4\)|(?:[TM]40 Plus|T30|P80[XH]|P20HD|P10[_ ]HD|M40|P10SE?|M30_Pro|M40SE|P8[05]|P25(?:_T)?|P20S|P30HD)_(?:ROW|EEA|RUS)|P20HD\(N6H5\)|T40 Plus\(M7T3\)|T40Pro|T40 PRO(?:\(T1A1\))?|T10\(E3C[56]\)|P10S\(N4H5\)|98\(M1E[45789]\)|98\(M3E3\)|X10 \(M1D3\)|M89 Pro|M40\(N9H[13]\)|P20HD\(N6H7\)|M40SE\(M5T3\)|M40(?:SE|Pro|Air)_(?:ROW|EEA|RUS)| P80X|P30Air|P10HD_Lite'
  device: 'tablet'
  models:
    - regex: 'Tbook[_ -]([^;/]+)(?: Build|[;)]|$)'
      model: 'Tbook $1'
    - regex: 'T10\(E3C[56]\)'
      model: 'T10'
    - regex: 'X10 \(M1D3\)'
      model: 'X10'
    - regex: 'P10S(?:\(N4H5\)|_(?:ROW|EEA))(?:[);/ ]|$)'
      model: 'P10S'
    - regex: 'P20HD_?(?:ROW|EEA|RUS)|P20HD\(N6H[57]\)'
      model: 'P20HD'
    - regex: 'P10[_ ]HD_(?:ROW|EEA)'
      model: 'Apex P10HD'
    - regex: 'P10HD_Lite'
      model: 'Apex P10HD Lite'
    - regex: 'P80[_ ](?:ROW|EEA)|P80_G3M2'
      model: 'P80'
    - regex: 'P85[_ ](?:ROW|EEA|RUS)'
      model: 'P85'
    - regex: 'M([43]0)_?Pro[_ ](?:ROW|EEA|RUS)'
      model: 'M$1 Pro'
    - regex: 'M20_4G'
      model: 'M20 4G'
    - regex: 'M89 Pro'
      model: 'M89 Pro'
    - regex: 'TLA002'
      model: 'M30 4G'
    - regex: 'TLA016'
      model: 'M16'
    - regex: 'M40Air'
      model: 'M40 Air'
    - regex: 'M40\(N9H[13]\)'
      model: 'M40'
    - regex: 'M40SE'
      model: 'M40 SE'
    - regex: 'M40 Plus'
      model: 'M40 Plus'
    - regex: 'T40 ?PRO'
      model: 'T40 Pro'
    - regex: 'TLA001'
      model: 'T40'
    - regex: 'T40 Plus(?:_(?:ROW|EEA)|\(M7T3\))'
      model: 'T40 Plus'
    - regex: '(P80[Xh]|P30HD|T30|M40|P25(?:_T)?|P10SE|P20S)[_ ](?:ROW|EEA)'
      model: '$1'
    - regex: 'P80X'
      model: 'P80X'
    - regex: 'P30Air'
      model: 'P30 Air'
    - regex: '98\(M1E[45789]\)|98\(M3E3\)'
      model: 'TPad 98 10.1" 4G'
    - regex: 'X80 Power\(B2N4\)(?:[);/ ]|$)'
      model: 'X98 Power'
    - regex: 'X98 Air III(?:[);/ ]|$)'
      model: 'X98 Air III'
    - regex: 'X98 Air II\(HG5N\)(?:[);/ ]|$)'
      model: 'X98 Air II'
    - regex: 'Teclast[_ -]([^;/]+) Build'
      model: '$1'

# Tecno Mobile or Tecno
Tecno Mobile:
  regex: 'Tecno|Phantom[56]|Phantom6-Plus|DP7C Pro-SGA1'
  device: 'smartphone'
  models:
    - regex: 'Phantom6-Plus'
      model: 'Phantom 6 Plus'
    - regex: 'Phantom([56])'
      model: 'Phantom $1'
    - regex: 'TECNO[ _]AD8'
      model: 'Phantom X2'
    - regex: 'TECNO[ _]AC8(?:[);/ ]|$)'
      model: 'Phantom X'
    - regex: 'TECNO[ _]AB7(?:[);/ ]|$)'
      model: 'Phantom 9'
    - regex: 'TECNO[ _]AX8(?:[);/ ]|$)'
      model: 'Phantom 8'
    - regex: 'TECNO WX3LTE'
      model: 'WX3 LTE'
    - regex: 'TECNO-W3'
      model: 'W3'
    - regex: 'TECNO[ _]F4 Pro(?:[);/ ]|$)'
      model: 'F4 Pro'
    - regex: 'TECNO[ _]IN5(?:[);/ ]|$)'
      model: 'Camon i'
    - regex: 'TECNO[ _]IA5(?:[);/ ]|$)'
      model: 'Camon iTwin'
    - regex: 'TECNO[ _]ID3k(?:[);/ ]|$)'
      model: 'Camon iAir 2+'
    - regex: 'TECNO[ _]KB2(?:[);/ ]|$)'
      model: 'Camon iAce 2'
    - regex: 'TECNO[ _]ID5b(?:[);/ ]|$)'
      model: 'Camon i2X'
    - regex: 'TECNO[ _]ID5a(?:[);/ ]|$)'
      model: 'Camon i2'
    - regex: 'TECNO[ _]ID6(?:[);/ ]|$)'
      model: 'Camon iClick 2'
    - regex: 'TECNO[ _]IN2(?:[);/ ]|$)'
      model: 'Camon iSky'
    - regex: 'TECNO[ _]KB3(?:[);/ ]|$)'
      model: 'Camon iSky 3'
    - regex: 'Tecno[ _]7C(?:[);/ ]|$)'
      model: 'DroidPad 7C'
      device: 'tablet'
    - regex: 'Tecno[ _]P701(?:[);/ ]|$)'
      model: 'DroidPad 7D'
      device: 'tablet'
    - regex: 'DP7C Pro-SGA1(?:[);/ ]|$)'
      model: 'DroidPad 7C Pro'
      device: 'tablet'
    - regex: 'Tecno[ _]P703(?:[);/ ]|$)'
      model: 'DroidPad 7F'
      device: 'tablet'
    - regex: 'Tecno[ _]P704a(?:[);/ ]|$)'
      model: 'DroidPad 7G'
      device: 'tablet'
    - regex: 'TECNO[ _]DP10A Pro(?:[);/ ]|$)'
      model: 'DroidPad 10A Pro'
      device: 'tablet'
    - regex: 'TECNO[ _]P904(?:[);/ ]|$)'
      model: 'DroidPad 10D 4G'
      device: 'tablet'
    - regex: 'Tecno[ _]RC6(?:[);/ ]|$)'
      model: 'R7+'
    - regex: 'Tecno[ _]CB7[j]?'
      model: 'Camon i4'
    - regex: 'Tecno[- _]C9(?:[);/ ]|$)'
      model: 'Camon C9'
    - regex: 'Tecno[ _]CF7[kS]?(?:[);/ ]|$)'
      model: 'Camon 11'
    - regex: 'Tecno[ _]CF8(?:[);/ ]|$)'
      model: 'Camon 11 Pro'
    - regex: 'Tecno[ _]CC7S?(?:[);/ ]|$)'
      model: 'Camon 12'
    - regex: 'Tecno[ _]CC9(?:[);/ ]|$)'
      model: 'Camon 12 Pro'
    - regex: 'Tecno[ _](?:CC6|KC3)(?:[);/ ]|$)'
      model: 'Camon 12 Air'
    - regex: 'Tecno[ _-]CD7(?:[);/ ]|$)'
      model: 'Camon 15'
    - regex: 'Tecno[ _-]CD6S?(?:[);/ ]|$)'
      model: 'Camon 15 Air'
    - regex: 'Tecno[ _-]CD8j(?:[);/ ]|$)'
      model: 'Camon 15 Premier'
    - regex: 'Tecno[ _-]CD8(?:[);/ ]|$)'
      model: 'Camon 15 Pro'
    - regex: 'Tecno[ _-](?:CE9h|CE7)(?:[);/ ]|$)'
      model: 'Camon 16'
    - regex: 'Tecno[ _-]CE9(?:[);/ ]|$)'
      model: 'Camon 16 Premier'
    - regex: 'Tecno[ _-]CE8(?:[);/ ]|$)'
      model: 'Camon 16 Pro'
    - regex: 'Tecno[ _-]CD6j(?:[);/ ]|$)'
      model: 'Camon 16 S'
    - regex: 'Tecno[ _-]CE7j(?:[);/ ]|$)'
      model: 'Camon 16 SE'
    - regex: 'Tecno[ _-]CG6j?(?:[);/ ]|$)'
      model: 'Camon 17'
    - regex: 'Tecno[ _-]CG8h?(?:[);/ ]|$)'
      model: 'Camon 17 Pro'
    - regex: 'Tecno[ _-]CG7n?(?:[);/ ]|$)'
      model: 'Camon 17P'
    - regex: 'Tecno[ _-](?:Mobile )?CH9n?(?:[);/ ]|$)'
      model: 'Camon 18 Premier'
    - regex: 'Tecno[ _-](?:Mobile )?CH6[nh]?(?:[);/ ]|$)'
      model: 'Camon 18'
    - regex: 'Tecno[ _-]CH7n?(?:[);/ ]|$)'
      model: 'Camon 18P'
    - regex: 'Tecno[ _-](?:CH6i|CI6n?)(?:[);/ ]|$)'
      model: 'Camon 19'
    - regex: 'Tecno[ _-]CI8n?(?:[);/ ]|$)'
      model: 'Camon 19 Pro'
    - regex: 'Tecno[ _-]CA6S?(?:[);/ ]|$)'
      model: 'Camon CM'
    - regex: 'Tecno[ _-]CA7(?:[);/ ]|$)'
      model: 'Camon X'
    - regex: 'Tecno[ _-]CA8(?:[);/ ]|$)'
      model: 'Camon X Pro'
    - regex: 'Tecno[ _-]Camon CX(?:[);/ ]|$)'
      model: 'Camon CX'
    - regex: 'Tecno[ _-]CX Air(?:[);/ ]|$)'
      model: 'Camon CX Air'
    - regex: 'TECNO[ _]F3(?:[);/ ]|$)'
      model: 'Pop 1'
    - regex: 'TECNO[ _]B1(?:[);/ ]|$)'
      model: 'Pop 2'
    - regex: 'TECNO[ _]SA2S(?:[);/ ]|$)'
      model: 'Pop 2 Mini'
    - regex: 'TECNO[ _]B1[fg](?:[);/ ]|$)'
      model: 'Pop 2F'
    - regex: 'TECNO[ _](?:RA8|KB2h)(?:[);/ ]|$)'
      model: 'Pop 2S'
    - regex: 'TECNO[ _]KB2j(?:[);/ ]|$)'
      model: 'Pop 2S Pro'
    - regex: 'TECNO[ _]BA2(?:[);/ ]|$)'
      model: 'Pop 2 Plus'
    - regex: 'TECNO[ _]B1p(?:[);/ ]|$)'
      model: 'Pop 2 Power'
    - regex: 'TECNO[ _]RB8S(?:[);/ ]|$)'
      model: 'Pop 2X Plus'
    - regex: 'TECNO[ _]RB6S(?:[);/ ]|$)'
      model: 'Pop 2X Air'
    - regex: 'TECNO[ _]RB7S(?:[);/ ]|$)'
      model: 'Pop 2X'
    - regex: 'TECNO[ _]B1c(?:[);/ ]|$)'
      model: 'Pop 2F'
    - regex: 'TECNO[ _]SC7S(?:[);/ ]|$)'
      model: 'Pop 2 Air'
    - regex: 'TECNO[ _]BB2(?:[);/ ]|$)'
      model: 'Pop 3'
    - regex: 'TECNO[ _]BB4(?:[);/ ]|$)'
      model: 'Pop 3 Plus'
    - regex: 'TECNO[ _]BC2c?(?:[);/ ]|$)'
      model: 'Pop 4'
    - regex: 'TECNO[ _]BC3?(?:[);/ ]|$)'
      model: 'Pop 4 Pro'
    - regex: 'TECNO[ _]BC1(?:[);/ ]|$)'
      model: 'Pop 4 Air'
    - regex: 'TECNO[ _]BC1s(?:[);/ ]|$)'
      model: 'Pop 4 LTE'
    - regex: 'TECNO[ _]BD2[dp]?(?:[);/ ]|$)'
      model: 'Pop 5'
    - regex: 'TECNO[ _]BD1(?:[);/ ]|$)'
      model: 'Pop 5 Go'
    - regex: 'TECNO[ _]W5006S(?:[);/ ]|$)'
      model: 'Pop 5C'
    - regex: 'TECNO[ _]BD4[ai]?(?:[);/ ]|$)'
      model: 'Pop 5 LTE'
    - regex: 'TECNO[ _]BD4[jh](?:[);/ ]|$)'
      model: 'Pop 5 Pro'
    - regex: 'TECNO[ _]BD3(?:[);/ ]|$)'
      model: 'Pop 5P'
    - regex: 'TECNO[ _]BE7(?:[);/ ]|$)'
      model: 'Pop 6'
    - regex: 'TECNO[ _]BE6j?(?:[);/ ]|$)'
      model: 'Pop 6 Go'
    - regex: 'TECNO[ _]BE8[i]?(?:[);/ ]|$)'
      model: 'Pop 6 Pro'
    - regex: 'TECNO[ _]BF7(?:[);/ ]|$)'
      model: 'Pop 7 Pro'
    - regex: 'Tecno[ _]SA1S Pro(?:[);/ ]|$)'
      model: 'SA1s Pro'
    - regex: 'Tecno[ _]KG5[mh]?(?:[);/ ]|$)'
      model: 'Spark Go (2022)'
    - regex: 'Tecno[ _]KA7O?(?:[);/ ]|$)'
      model: 'Spark 2'
    - regex: 'Tecno[ _]LB6?(?:[);/ ]|$)'
      model: 'Spark 2 Youth'
    - regex: 'Tecno[ _]KB7j?(?:[);/ ]|$)'
      model: 'Spark 3'
    - regex: 'Tecno[ _]KB8?(?:[);/ ]|$)'
      model: 'Spark 3 Pro'
    - regex: 'Tecno[ _](?:KC8S?|KC2j?)(?:[);/ ]|$)'
      model: 'Spark 4'
    - regex: 'Tecno[ _](?:KC6S?|KC1j)(?:[);/ ]|$)'
      model: 'Spark 4 Air'
    - regex: 'Tecno[ _]BB4k(?:[);/ ]|$)'
      model: 'Spark 4 Lite'
    - regex: 'Tecno[ _]KD6a?(?:[);/ ]|$)'
      model: 'Spark 5 Air'
    - regex: 'Tecno[ _]KD7[hS](?:[);/ ]|$)'
      model: 'Spark 5'
    - regex: 'Tecno[ _]KD7(?:[);/ ]|$)'
      model: 'Spark 5 Pro'
    - regex: 'TECNO[ _]KE7(?:[);/ ]|$)'
      model: 'Spark 6'
    - regex: 'TECNO[ _]KE6j?(?:[);/ ]|$)'
      model: 'Spark 6 Air'
    - regex: 'TECNO[ _]KE5[jk]?(?:[);/ ]|$)'
      model: 'Spark 6 Go'
    - regex: 'TECNO[ _](?:KF6(?:ks|[nmjki])?|PR651[EH]?)(?:[);/ ]|$)'
      model: 'Spark 7'
    - regex: 'TECNO[ _]KF8(?:[);/ ]|$)'
      model: 'Spark 7 Pro'
    - regex: 'TECNO[ _]KF7j(?:[);/ ]|$)'
      model: 'Spark 7P'
    - regex: 'TECNO[ _]KF6p(?:[);/ ]|$)'
      model: 'Spark 7T'
    - regex: 'TECNO[ _](?:Mobile )?KG6k?(?:[);/ ]|$)'
      model: 'Spark 8'
    - regex: 'TECNO[ _]KG5[nkj]?(?:[);/ ]|$)'
      model: 'Spark 8C'
    - regex: 'TECNO[ _]KG7[nh]?(?:[);/ ]|$)'
      model: 'Spark 8P'
    - regex: 'TECNO[ _]KG6p(?:[);/ ]|$)'
      model: 'Spark 8T'
    - regex: 'TECNO[ _]KG8(?:[);/ ]|$)'
      model: 'Spark 8 Pro'
    - regex: 'TECNO[ _]KH7n?(?:[);/ ]|$)'
      model: 'Spark 9 Pro'
    - regex: 'TECNO[ _]KG5p(?:[);/ ]|$)'
      model: 'Spark 9'
    - regex: 'TECNO[ _]KH6(?:[);/ ]|$)'
      model: 'Spark 9T'
    - regex: 'TECNO[ _]KC1h(?:[);/ ]|$)'
      model: 'Spark Go'
    - regex: 'TECNO[ _]KE5S(?:[);/ ]|$)'
      model: 'Spark Go (2020)'
    - regex: 'TECNO[ _]KC1(?:[);/ ]|$)'
      model: 'Spark Air'
    - regex: 'TECNO[ _]K9(?:[);/ ]|$)'
      model: 'Spark Plus'
    - regex: 'TECNO[ _]KA6(?:[);/ ]|$)'
      model: 'Spark Youth'
    - regex: 'TECNO[ _]KA9(?:[);/ ]|$)'
      model: 'Spark CM'
    - regex: 'Tecno[ _]DP8D(?:[);/ ]|$)'
      model: 'DroidPad 8D'
      device: 'tablet'
    - regex: 'Tecno[ _](P702AS)(?:[);/ ]|$)'
      model: 'DroidPad $1'
      device: 'tablet'
    - regex: 'TECNO[ _]LA7 Pro(?:[);/ ]|$)'
      model: 'Pouvoir 2 Pro'
    - regex: 'TECNO[ _]LA7(?:[);/ ]|$)'
      model: 'Pouvoir 2'
    - regex: 'TECNO[ _]LA6(?:[);/ ]|$)'
      model: 'Pouvoir 1'
    - regex: 'TECNO[ _]LB7(?:[);/ ]|$)'
      model: 'Pouvoir 3'
    - regex: 'TECNO[ _]LC6a?(?:[);/ ]|$)'
      model: 'Pouvoir 3 Air'
    - regex: 'Tecno[ _]LB8a?'
      model: 'Pouvoir 3 Plus'
    - regex: 'TECNO[ _]LC7S?(?:[);/ ]|$)'
      model: 'Pouvoir 4'
    - regex: 'TECNO[ _]LC8(?:[);/ ]|$)'
      model: 'Pouvoir 4 Pro'
    - regex: 'Tecno[ _-]J8(?:[);/ ]|$)'
      model: 'Boom J8'
    - regex: 'Tecno[ _-]RA7(?:[);/ ]|$)'
      model: 'R7 4G'
    - regex: 'Tecno[ _-]W3 Pro(?:[);/ ]|$)'
      model: 'W3 Pro'
    - regex: 'Tecno[ _-]WX3P(?:[);/ ]|$)'
      model: 'WX3 Pro'
    - regex: 'TECNO S9'
      device: 'phablet'
      model: 'S9'
    - regex: 'TECNO[ _]LD7j?(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Pova'
    - regex: 'TECNO[ _]LE6h?(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Pova Neo'
    - regex: 'TECNO[ _]LG6n(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Pova Neo 2'
    - regex: 'TECNO[ _]LE7n?(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Pova 2'
    - regex: 'TECNO[ _]LF7n?(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Pova 3'
    - regex: 'TECNO[ _]LE8(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Pova 5G'
    - regex: 'TECNO[ _]LG7n(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Pova 4'
    - regex: 'TECNO[ _]LG8n(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Pova 4 Pro'
    - regex: 'Tecno (F2) ?LTE'
      model: '$1 LTE'
    - regex: '(?:TECNO[-_])?L8Plus'
      model: 'L8 Plus'

    - regex: 'TECNO[ _-]?(T611)(?:[);/ ]|$)'
      device: 'feature phone'
      model: '$1'

    - regex: 'Tecno[ _]([^;/]+)(?: Build|[);])'
      model: '$1'
    - regex: 'Tecno[ _-]?([a-z0-9_\-]+)'
      model: '$1'

# TechPad (techpad.mx)
TechPad:
  regex: 'Tech[ _]?pad|XTAB[ _-]|(?:3G_16|Dual (?:C1081HD|C981HD)|S813G|NOTE[_ ]4CAM|M5(?:Go|Plus)|M6Plus|Android 8(?:[\d.]*);(?: [\w-]+;)? 816x?)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'S813G'
      model: 'S813G'
    - regex: 'TechPad10QC'
      model: '10QC'
    - regex: 'TechPad_10xx'
      model: '10XX'
    - regex: 'TechPad703'
      model: '703'
    - regex: 'Tech ?Pad[_ ](10Y|9x|i700|10Z)'
      model: '$1'
    - regex: 'TechPad[_ ]3Gx'
      model: '3Gx'
    - regex: '3G_16'
      model: '3G-16'
    - regex: 'Android 8(?:[\d.]*);(?: [\w-]+;)? (816x?)'
      model: '$1'
    - regex: 'Dual (C981HD|C1081HD)'
      model: 'XTAB $1'
    - regex: 'XTAB[ _-]([^/;)]+)(?: Build|[;)])'
      model: 'XTAB $1'
    # explicit smartphone models
    - regex: 'M5(Go|Plus)'
      device: 'smartphone'
      model: 'M5 $1'
    - regex: 'M6Plus'
      device: 'smartphone'
      model: 'M6 Plus'
    - regex: 'NOTE[ _]4CAM'
      device: 'smartphone'
      model: 'Note 4 Cam'
    # explicit feature phone models
    - regex: 'Tech_Pad_Kaios_One_3G'
      device: 'feature phone'
      model: 'Kaios One 3G'

    - regex: 'Tech ?pad[ _-]([^/;)]+)(?: Build|[;)])'
      model: '$1'
      device: 'smartphone'

# Techwood
Techwood:
  regex: 'Techwood'
  device: 'tv'
  model: ''

# Teracube (https://myteracube.com/)
Teracube:
  regex: 'Teracube'
  device: 'smartphone'
  models:
    - regex: 'Teracube (2e|One)(?:[);/ ]|$)'
      model: '$1'

# Tesco
Tesco:
  regex: 'Hudl (?:[^/;]+)(?: Build|[;)])|W032i-C3(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'Hudl ([^/;]+)(?: Build|[;)])'
      model: 'Hudl $1'
    - regex: 'W032i-C3(?:[);/ ]|$)'
      model: 'Op3n Dott'

# teXet (www.texet.ru)
teXet:
  regex: 'Texet|(NaviPad [^/;]*) Build|TM-(?:1046|1058|1057|1067|3000|3200R|3500|400[34]|4071|450[34]|451[30]|4377|4082R|508[34]|550[358]|5010|5017|507[4-7]|5[23]77|6003|6906|702[13]|7055HD|709[69]|9747BT|9758|9751HD|9767|5513|520[410]|507[13]|558[134]|570[23]|7859|8044|9748[ _]3G|9720|7047HD[ _]3G|9757|9740|4982|4515|4083|500[3567]|5571|3204R|5016|8043|7047HD[ _]3G|8041HD|8066|705[23]|7041|8041HD|8051|8048|974[96]|973[78]W|974[170]|9743W|9750HD|7043XD|7049|7887|7037W|702[46])|TB-(771A|711A)|X Point|X-Force[\(-]?TM-5009\)?|X-Plus[\(-]?TM-5577\)?|TM_5011|X-pad (?:AIR 8|iX 7|NAVI 7.[35]|NAVI 10|SKY 8.1|STYLE 8|STYLE 10.1|HIT|LITE 7.[12]|QUAD (?:7.2|10|7)|SHINE 8.1)(?: 3G)?'
  device: 'tablet'
  models:
    - regex: 'TM-9749'
      model: 'X-pad Plus 7.1 3G'
    - regex: 'TM-9746'
      model: 'X-pad Plus 7 3G'
    - regex: 'TM-8051'
      model: 'X-pad Force 8i 3G'
    - regex: 'TM-1058'
      model: 'X-Force 10 3G'
    - regex: 'TM-8048'
      model: 'X-pad Force 8 3G'
    - regex: '(NaviPad [^/;]*) Build'
      model: '$1'
    - regex: 'TM-7055HD'
      model: 'NaviPad 3G'
    - regex: 'TM-9758'
      model: 'X-pad Style 10.0"'
    - regex: 'X-pad SHINE 8.1 3G'
      model: 'X-pad Shine 8.1" 3G'
    - regex: 'X-pad QUAD 10 3G'
      model: 'X-pad Quad 10.0" 3G'
    - regex: 'X-pad QUAD 7 3G'
      model: 'X-pad Quad 7.0" 3G'
    - regex: 'X-pad QUAD 7.2 3G'
      model: 'X-pad Quad 7.2" 3G'
    - regex: 'X-pad STYLE 8 3G'
      model: 'X-pad Style 8.0" 3G'
    - regex: 'X-pad HIT 3G'
      model: 'X-pad Hit 3G'
    - regex: 'X-pad LITE (7.[12])'
      model: 'X-pad Lite $1"'
    - regex: 'TM-9767'
      model: 'X-pad Style 10.0" 3G'
    - regex: 'X-pad STYLE 10.1 3G'
      model: 'X-pad Style 10.1" 3G'
    - regex: '(X-pad (?:AIR 8|iX 7) 3G)'
      model: '$1'
    - regex: 'TM-7096|X-pad NAVI 7.3 3G'
      model: 'X-pad NAVI 7.3" 3G'
    - regex: 'TM-7099'
      model: 'X-pad NAVI 7.4" 3G'
    - regex: 'X-pad NAVI 7.5 3G'
      model: 'X-pad NAVI 7.5" 3G'
    - regex: 'X-pad SKY 8.1 3G'
      model: 'X-pad Sky 8.1" 3G'
    - regex: 'TM-1046|X-pad NAVI 10 3G'
      model: 'X-pad NAVI 10.0" 3G'
    - regex: 'TM-7859'
      model: 'X-pad NAVI 8.2" 3G'
    - regex: 'TM-7049'
      model: 'NaviPad TM-7049 3G'
    - regex: 'TM-7887'
      model: 'NaviPad TM-7887 3G'
    - regex: 'TM-8066'
      model: 'X-pad Rapid 8.2" 4G'
    - regex: '(TM-(?:1057|1067|6906|8043|9748[_ ]3G|9740|9757(?:[_ ]3G)?|7047HD[ _]3G|9747BT|9751HD|702[13]|705[23]|7041|9720|7047HD[_ ]3G|8044|8041HD|973[78]W|9743W|974[710]|9750HD|7043XD|7037W|702[46])|TB-(?:771A|711A|8041HD))'
      model: '$1'
    - regex: 'TM-4503'
      device: 'smartphone'
      model: 'X-Quad'
    - regex: '(TM-(?:3000|3200R|400[34]|4083|4377|4504|451[30]|500[35]|5[23]77|5571|3204R|520[04]|5581|5505|5017|507[13-7]|5081|6003|5513))'
      device: 'smartphone'
      model: '$1'
    - regex: 'TM-5006'
      device: 'smartphone'
      model: 'X-Line'
    - regex: 'TM-5007'
      device: 'smartphone'
      model: 'X-Shine'
    - regex: 'TM_5011'
      device: 'smartphone'
      model: 'X-Omega'
    - regex: 'TM-508(3|4)'
      device: 'smartphone'
      model: 'Pay $1G'
    - regex: 'TM-558(3|4)'
      device: 'smartphone'
      model: 'Pay 5.5" $1G'
    - regex: 'TM-5702'
      device: 'smartphone'
      model: 'Pay 5.7" 3G'
    - regex: 'TM-5703'
      device: 'smartphone'
      model: 'Pay 5.7" Pro'
    - regex: 'TM-5201'
      device: 'smartphone'
      model: 'Rock'
    - regex: 'TM-4515'
      device: 'smartphone'
      model: 'X-Style'
    - regex: 'TM-(5016|3500)'
      device: 'smartphone'
      model: 'X-Maxi 2'
    - regex: 'TM-4071'
      device: 'smartphone'
      model: 'X-Smart'
    - regex: 'TM-4982'
      device: 'smartphone'
      model: 'iX-Maxi'
    - regex: 'TEXET[_ ]IX-MINI'
      device: 'smartphone'
      model: 'iX-Mini'
    - regex: 'TM-5010'
      device: 'smartphone'
      model: 'X-Selfie'
    - regex: 'TM-4082R'
      device: 'smartphone'
      model: 'X-Driver Quad'
    - regex: 'TM-5503'
      device: 'smartphone'
      model: 'X-Mage'
    - regex: 'TM-5508'
      device: 'smartphone'
      model: 'X-Cosmo'
    - regex: 'X-Force[\(-]?TM-5009\)?'
      device: 'smartphone'
      model: 'X-Force'
    - regex: 'X-Plus[\(-]?TM-5577\)?'
      device: 'smartphone'
      model: 'X-Plus'
    - regex: 'teXet[_ ]X-medium[_ ]plus'
      device: 'smartphone'
      model: 'X-Medium Plus'
    - regex: 'X Point'
      device: 'smartphone'
      model: 'X-Point'

# Telefunken
Telefunken:
  regex: 'TELEFUNKEN|Foxtrot|TEL-1013GIQA|TEL-1014GIQ|TEL-73GIQA|TEL-74GIQ|TF-SP(?:500[12]|4002)|(TF-MID(?:[78]02G|70[78]G|80[46]G|9705RG|9707G|7805G|100[57]G|1010G))| TF5X| TF6|TF500|TF501_EC|(TF-LED(?:58S06T2SU|65S75T2SU|32S39T2S|32S5[289]T2S|32S60T2S|32S7[045]T2S|40S63T2S|40S19T2S|40S41T2S|43S94T2S|43S22T2SU))|LTE_LIMA|LTE Mike|Diamond_LTE|Outdoor (?:LTE|WT4|WT4-S)|TELP-1013KBC'
  device: 'tablet'
  models:
    - regex: 'TEL-1013GIQA'
      model: 'Giqa 10.1 3G'
    - regex: 'TEL-(1014GIQ|74GIQ|73GIQA(?:11)?)'
      model: 'TEL-$1'
    - regex: 'Foxtrot2'
      model: 'Foxtrot 2'
      device: 'smartphone'
    - regex: 'LTE_LIMA'
      model: 'Lima LTE'
      device: 'smartphone'
    - regex: 'Diamond_LTE'
      model: 'Diamond LTE'
      device: 'smartphone'
    - regex: 'LTE Mike'
      model: 'Mike LTE'
      device: 'smartphone'
    - regex: '(?:TELEFUNKEN)?(TF-SP(?:500[12]|4002)|Outdoor (?:LTE|WT4-S|WT4)|Foxtrot|TF5X|TF6)'
      model: '$1'
      device: 'smartphone'
    - regex: '(TF-MID(?:[78]02G|70[78]G|80[46]G|9705RG|9707G|7805G|100[57]G|1010G)|TF501_EC|TELP-1013KBC)'
      model: '$1'
    - regex: '(TF-LED(?:58S06T2SU|65S75T2SU|32S39T2S|32S5[289]T2S|32S60T2S|32S7[045]T2S|40S63T2S|40S19T2S|40S41T2S|43S94T2S|43S22T2SU)|TF500)'
      model: '$1'
      device: 'tv'
    - regex: 'TELEFUNKEN, ([a-z0-9_ \-]+), (?:wired|wireless)'
      model: ''
      device: 'tv'

# Telego
Telego:
  regex: 'TELEGO|Wise2_plus'
  device: 'smartphone'
  models:
    - regex: 'TELEGO-W503'
      model: 'W503'
    - regex: 'Telego_JOY2'
      model: 'Joy 2'
    - regex: 'Wise2_plus'
      model: 'Wise 2 Plus'
    - regex: 'Telego[ _-]([^/;)]+)(?: Build|[;)])'
      model: '$1'

# Telenor
Telenor:
  regex: '(?<!FBCR/)Telenor|(?:Infinity[_ ](?:E[2-5]|K2?|A2))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Telenor[ _]([^;/]+)(?: Build|[;)])'
      model: '$1'
    - regex: 'Infinity[ _](E[2-5]|K2?|A2)'
      model: 'Infinity $1'

# Telit
Telit:
  regex: 'Telit'
  device: 'feature phone'
  models:
    - regex: 'Telit_Mobile_Terminals-([a-z0-9]+)'
      model: '$1'
    - regex: 'Telit[\-_]?([a-z0-9]+)'
      model: '$1'

# Telma (https://www.telma.mg/)
Telma:
  regex: 'Telma|F1x4G(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Telma_F1_Max_4G'
      model: 'F1 Max 4G'
    - regex: 'F1x4G'
      model: 'F1x 4G'

# Telpo (https://www.telpo.com.cn/)
Telpo:
  regex: 'TPS3[29]0'
  device: 'peripheral'
  models:
    - regex: 'TPS(3[29]0)'
      model: 'TPS$1'

# ThL
ThL:
  regex: 'ThL[ _-]|(?:Knight 2|THL5000|T200)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Knight 2'
      model: 'Knight 2'
    - regex: 'THL ?(5000)'
      model: '$1'
    - regex: '(T200)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'ThL[ _-]*([^;/)]+)(?: Build|[;)])'
      model: '$1'
    - regex: 'ThL[ _-]*([^ ;/)]+)(?:[);/ ]|$)'
      model: '$1'

# Tianyu
TIANYU:
  regex: 'TIANYU'
  device: 'feature phone'
  models:
    - regex: 'TIANYU ([a-z0-9]+)'
      model: '$1'
    - regex: 'TIANYU-KTOUCH/([a-z0-9]+)'
      model: '$1'

# Tooky
Tooky:
  regex: 'TOOKY'
  device: 'smartphone'
  models:
    - regex: 'TOOKY (A19|W1|T8[368]|T1982)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'TOOKY A9PLUS(?:[);/ ]|$)'
      model: 'A9 Plus'

# Tolino
Tolino:
  regex: 'Tolino Tab ([^/;]+) Build'
  device: 'tablet'
  model: 'Tolino Tab $1'

# Top House
Top House:
  regex: 'Coto[_ ]|X1013'
  device: 'smartphone'
  models:
    - regex: 'Coto W418'
      model: 'Coto W418'
    - regex: 'COTO_T117'
      model: 'Coto T117'
      device: 'tablet'
    - regex: 'X1013'
      model: 'X1013'
      device: 'tablet'
    - regex: 'COTO_T40017'
      model: 'T40017'

# Topelotek
Topelotek:
  regex: 'KIDS09'
  device: 'tablet'
  model: 'KIDS09 Kids Tablet'

# Toplux
Toplux:
  regex: 'Toplux ([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# Touchmate (touchmate.net)
Touchmate:
  regex: 'TOUCHMATE|(TM-(?:MID870SB|MID1050WKD|MID1020A|MID794C|MID795|MID710|MID798|MID792|MID788D|SM500N|SM410|MID1010))'
  device: 'smartphone'
  models:
    - regex: '(TM-(?:MID1020A|MID794C|MID795|MID710|MID798|MID792|MID788D|MID1010))'
      device: 'tablet'
      model: '$1'
    - regex: 'TM-MID870SB'
      device: 'tablet'
      model: 'SuperMan 8"'
    - regex: 'TM-MID1050WKD'
      device: 'tablet'
      model: 'Mega Matrix 10.1" 3G'
    - regex: '(TM-(?:SM500N|SM410))'
      model: '$1'
    - regex: 'Touchmate ([^/;]+) Build'
      model: '$1'

# TrekStor (www.trekstor.de)
TrekStor:
  regex: '(?:TrekStor|Surftab) ([^/;]+)(?: Build|\))|Surftab[^;\)]*(?:[;\)]|$)|ST10216-2A|ST13416-1|VT10416-[12]|TFMTKAW01232|PEAQ PET 100|Xintroni10.1'
  device: 'tablet'
  models:
    - regex: 'ST10216-2A|VT10416-[12]'
      model: 'SurfTab 10.1'
    - regex: 'ST13416-1'
      model: 'SurfTab Theatre 13.4"'
    - regex: 'Surftab theatre S11'
      model: 'SurfTab Theatre S11'
    - regex: 'PrimeTab P10'
      model: 'PrimeTab P10'
    - regex: 'TrekStor ([^/;]+) Build'
      model: '$1'
    - regex: 'Surftab ([^/;]+) Build'
      model: 'SurfTab $1'
    - regex: 'Surftab[ _]([^;\)]*)(?:[;\)]|$)'
      model: 'SurfTab $1'
    - regex: 'TFMTKAW01232'
      model: 'SurfTab L15'
    - regex: 'Xintroni10.1'
      model: 'SurfTab Xintron I 10.1"'
    - regex: '(PEAQ PET 100)'
      model: '$1'

# Trevi
Trevi:
  regex: 'Trevi[ _]|TAB[ _]10[ _]3G[ _]V16|TAB[ _](7|8)[ _]3G[ _]V8|TAB9 3G|MINITAB 3GV|Phablet[ _](?:4|4\.5|5|5\,3|6)[ _]?[CSQ]|REVERSE[ _]5\.5[ _]?Q'
  device: 'tablet'
  models:
    - regex: 'TAB[ _]?(7|8)[ _]3G[ _]V8'
      model: 'TAB $1 3G V8'
    - regex: 'TAB[ _]?9[ _]3G[ _]V8'
      model: 'TAB 9 3G V8'
    - regex: 'TAB[ _]?9[ _]3G'
      model: 'TAB 9 3G'
    - regex: 'TAB[ _]10[ _]3G[ _]V16'
      model: 'TAB 10 3G V16'
    - regex: 'MINITAB 3GV'
      model: 'MINITAB 3G V'
    - regex: '(?:Trevi_)?Phablet[ _]4[ _]?C'
      model: 'Phablet 4 C'
      device: 'smartphone'
    - regex: '(?:Trevi_)?Phablet[ _]4[ _]?S'
      model: 'Phablet 4 S'
      device: 'smartphone'
    - regex: '(?:Trevi_)?Phablet[ _]4.5[ _]?Q'
      model: 'Phablet 4.5Q'
      device: 'smartphone'
    - regex: '(?:Trevi_)?PHABLET[ _]5[ _]?S'
      model: 'Phablet 5 S'
      device: 'smartphone'
    - regex: '(?:Trevi_)?PHABLET[ _]5,3[ _]?Q'
      model: 'Phablet 5.3 Q'
      device: 'phablet'
    - regex: '(?:Trevi_)?REVERSE[ _]5.5[ _]?Q'
      model: 'Phablet 5.5 Q REVERSE'
      device: 'phablet'
    - regex: '(?:Trevi_)?PHABLET[ _]6[ _]?S'
      model: 'Phablet 6 S'
      device: 'phablet'

    - regex: 'Trevi[_]([^;/]+) Build'
      model: '$1'

#TVC
TVC:
  regex: '(NuclearSX-SP5)'
  device: 'smartphone'
  model: 'Nuclear SX-SP5'

# U.S. Cellular
U.S. Cellular:
  regex: 'USCC-'
  device: 'smartphone'
  models:
    - regex: 'USCC-E6762' # Kyocera DuraForce
      model: 'Kyocera DuraForce'
    - regex: '(USCC-[a-z0-9_\-]+)'
      model: '$1'

# Uhappy
Uhappy:
  regex: 'Uhappy|UP?580|UP350|UP[35679]20'
  device: 'smartphone'
  models:
    - regex: 'UP([35679]20)'
      model: 'UP$1'
    - regex: 'UP350'
      model: 'UP350'
    - regex: 'UP580'
      model: 'UP580'
    - regex: 'U580'
      model: 'U580'
    - regex: 'Uhappy[ _-]([^;/]+) Build'
      model: '$1'
    - regex: 'Uhappy[ _-]?([^;/)]+)(?:[);/ ]|$)'
      model: '$1'

# Unimax (UMX)
Unimax:
  regex: 'U((?:67[013]|680)C|(?:452|504)TL|683CL|69[36]CL)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'U$1'

# Unowhy (www.unowhy.com)
Unowhy:
  regex: '(?:QOOQ|QOOQ-V[1-5]0?)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'QOOQ-V([1-5])0?'
      model: 'QOOQ V$1'
    - regex: 'QOOQ'
      model: 'QOOQ'

# UTStarcom
UTStarcom:
  regex: 'utstar[ _-]?([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# Ulefone (ulefone.com or ulefone.ru)
Ulefone:
  regex: 'Ulefone|Gemini Pro|Power Armor14|Power 3S|Power_[356]|Power_5S|S(?:10|9)_Pro|(?:Note [89]P|Note 1[23]P|Armor(?:[ _](?:[2367]|2S|X[236]|6[SE]|3WT|3W|X))?|U00[78][ _]Pro|Be[ _]X|Be[ _]Touch(?:[ _][23])?|Be[ _](?:One|Pure)(?:[ _]Lite)?|Note (?:11P|7T)|Tiger_lite|Note_7P|Paris_(?:Lite|X)|P6000_Plus|Vienna|Android 11;(?: [\w-]+;)? Note 6)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'S(10|9)_Pro'
      model: 'S$1 Pro'
    - regex: 'Be[ _]Touch([ _][23])?'
      model: 'Be Touch$1'
    - regex: 'Be[ _]Pure[ _]Lite'
      model: 'Be Pure Lite'
    - regex: 'Be[ _]Pure'
      model: 'Be Pure'
    - regex: 'Be[ _]One[ _]Lite'
      model: 'Be One Lite'
    - regex: 'Be[ _]One'
      model: 'Be One'
    - regex: 'Be[ _]X'
      model: 'Be X'
    - regex: 'U(00[78]) Pro'
      model: 'U$1 Pro'
    - regex: 'P6000_Plus'
      model: 'P6000 Plus'
    - regex: 'Paris_lite'
      model: 'Paris Lite'
    - regex: 'Paris_X'
      model: 'Paris X'
    - regex: 'Tiger_lite'
      model: 'Tiger Lite'
    - regex: 'Power Armor (\d+)(?:[);/ ]|$)'
      model: 'Power Armor $1'
    - regex: 'Power Armor ?14 Pro'
      model: 'Power Armor 14 Pro'
    - regex: 'Power Armor X11 Pro'
      model: 'Power Armor X11 Pro'
    - regex: 'Power Armor 18T'
      model: 'Power Armor 18T'
    - regex: 'Armor[ _]6S(?:[);/ ]|$)'
      model: 'Armor 6S'
    - regex: 'Armor[ _]([679])E(?:[);/ ]|$)'
      model: 'Armor $1E'
    - regex: 'Armor[ _]X(\d+) Pro(?:[);/ ]|$)'
      model: 'Armor X$1 Pro'
    - regex: 'Armor[ _]X(\d+)(?:[);/ ]|$)'
      model: 'Armor X$1'
    - regex: 'Armor[ _]([25])S(?:[);/ ]|$)'
      model: 'Armor $1S'
    - regex: 'Armor[ _]X(?:[);/ ]|$)'
      model: 'Armor X'
    - regex: 'Armor[ _]3W(?:[);/ ]|$)'
      model: 'Armor 3W'
    - regex: 'Armor[ _]3WT(?:[);/ ]|$)'
      model: 'Armor 3WT'
    - regex: 'Armor[ _](1\d|11T) 5G(?:[);/ ]|$)'
      model: 'Armor $1 5G'
    - regex: 'Armor[ _](8) Pro(?:[);/ ]|$)'
      model: 'Armor $1 Pro'
    - regex: 'Armor[ _]([236789])(?:[);/ ]|$)'
      model: 'Armor $1'
    - regex: 'Armor([^;/)]*)(?: Build|[);])'
      model: 'Armor$1'
    - regex: 'Gemini Pro(?:[);/ ]|$)'
      model: 'Gemini Pro'
    - regex: 'Vienna'
      model: 'Vienna'
    - regex: 'Power[_ ]([356][SL]?)'
      model: 'Power $1'
    - regex: 'Note[ _]([78]P|7T|6)(?:[);/ ]|$)'
      model: 'Note $1'
    - regex: 'Note (9|1[123])P(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Note $1P'
    - regex: 'Ulefone[_ ]Tab[_ ]([^;/)]+)(?: Build|[);])'
      device: 'tablet'
      model: 'Tab $1'
    - regex: 'Ulefone[_ ](X|S1[ _]Pro|S[17])(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Ulefone[ _-]?([^;/]+) Build'
      model: '$1'
    - regex: 'Ulefone[ _-]?([^;/)]+)(?:[;/)]|$)'
      model: '$1'

# UMIDIGI or UMI (www.umidigi.com)
UMIDIGI:
  regex: 'UMI(?:DIGI)?[ _]|(?:A[5]_Pro|.+; A[79] Pro|S3_Pro|ROME[_ ]X|BISON|hammer_S|S2 LITE|London|Z2_PRO|C NOTE 2|A11 Pro Max|Power 3|Android 10;(?: [\w-]+;)? (?:A3[SX]|A7S(?! 2020))|RP0[1234]|MT01|MP0[1-68]|MP1[78]|Plus E|S2_PRO|RP05|One Pro|Diamond_X|Android [67](?:[\d.]*);(?: [\w-]+;)? Z Pro|Android 8(?:[\d.]*);(?: [\w-]+;)? A1_PRO)(?:[;/) ]|$)'
  device: 'smartphone'
  models:
    - regex: 'MT01(?:[;/) ]|$)'
      device: 'tablet'
      model: 'A11 Tab'

    - regex: '(A[13579]|Z2|S3)[_ ]Pro'
      model: '$1 Pro'
    - regex: 'A11 Pro Max'
      model: 'A11 Pro Max'
    - regex: 'MP17'
      model: 'C1 Max'
    - regex: 'MP18'
      model: 'G1 Max'
    - regex: 'MP01(?:[;/) ]|$)'
      model: 'A11S'
    - regex: 'MP05(?:[;/) ]|$)'
      model: 'A13S'
    - regex: 'UMI TOUCH X'
      model: 'Touch X'
    - regex: 'UMI TOUCH'
      model: 'Touch'
    - regex: 'Plus E'
      model: 'Plus E'
    - regex: 'One Pro'
      model: 'One Pro'
    - regex: 'ROME[_ ]X'
      model: 'Rome X'
    - regex: 'BISON GT'
      model: 'Bison GT'
    - regex: 'RP05(?:[;/) ]|$)'
      model: 'Bison X10G'
    - regex: 'Bison N1'
      model: 'Bison N1'
    - regex: 'RP01(?:[;/) ]|$)'
      model: 'Bison X10'
    - regex: 'RP02(?:[;/) ]|$)'
      model: 'Bison GT2 5G'
    - regex: 'RP03(?:[;/) ]|$)'
      model: 'Bison GT2'
    - regex: 'RP04(?:[;/) ]|$)'
      model: 'Bison 2'
    - regex: 'BISON Pro'
      model: 'Bison Pro'
    - regex: 'BISON'
      model: 'Bison'
    - regex: 'hammer_S'
      model: 'Hammer S'
    - regex: 'Diamond_X'
      model: 'Diamond X'
    - regex: 'C NOTE 2'
      model: 'C Note 2'
    - regex: 'UMI[_ ]SUPER'
      model: 'Super'
    - regex: 'UMI[_ ]ZERO'
      model: 'Zero'
    - regex: 'Z Pro'
      model: 'Z Pro'
    - regex: 'S2 LITE'
      model: 'S2 Lite'
    - regex: 'S2_PRO'
      model: 'S2 Pro'
    - regex: 'Power 3'
      model: 'Power 3'
    - regex: 'MP02(?:[;/) ]|$)'
      model: 'Power 5S'
    - regex: 'MP08(?:[;/) ]|$)'
      model: 'G1'
    - regex: 'MP03(?:[;/) ]|$)'
      model: 'A13 Pro 5G'
    - regex: 'MP04(?:[;/) ]|$)'
      model: 'A13 Pro Max 5G'
    - regex: 'MP06(?:[;/) ]|$)'
      model: 'Power 7 Max'
    - regex: ' (A3[SX]|A7S)(?:[;/) ]|$)'
      model: '$1'
    - regex: '(?:UMI_)?(London|Diamond(?:_X)?)'
      model: '$1'
    - regex: 'UMI(?:DIGI)?[ _]([^/;)]+)(?: Build|[;)])'
      model: '$1'

# Uniqcell
Uniqcell:
  regex: 'UNIQCELL_'
  device: 'smartphone'
  models:
    - regex: 'UNIQCELL_A4(?:[;/) ]|$)'
      model: 'A4'

# Uniscope
Uniscope:
  regex: 'Uniscope'
  device: 'smartphone'
  models:
    - regex: 'Uniscope[ _\-]?([^/;]+) Build'
      model: '$1'
    - regex: 'Uniscope[ _\-]?([^);/ ]+)'
      model: '$1'

# Unistrong
Unistrong:
  regex: '(UT10)(?:[;/) ]|$)'
  device: 'smartphone'
  model: '$1'

# Unnecto
Unnecto:
  regex: 'Unnecto|(?:U513|U5151|U61[1356]|U7[12]0|U-830|U90[35])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'U513'
      model: 'Drone XT'
    - regex: 'U5151'
      model: 'Bolt'
    - regex: 'U611'
      model: 'Quattro X'
    - regex: 'U613'
      model: 'Quattro S'
    - regex: 'U615'
      model: 'Quattro M'
    - regex: 'U616'
      model: 'U616'
    - regex: 'U710'
      model: 'Quattro U710'
    - regex: 'U720'
      model: 'Quattro Z'
    - regex: 'U-830'
      model: 'Rush'
    - regex: 'U903'
      model: 'Air'
    - regex: 'U905'
      model: 'Air 5.5'

# Unnion Technologies (https://www.unniontech.com/)
Unnion Technologies:
  regex: 'UNSP7(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'UNSP7(?:[);/ ]|$)'
      model: 'SP7'

# Unonu (unonumobile.com)
Unonu:
  regex: 'Unonu[ _-]|(?:U4001|UT3G)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(U4001|UT3G)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Unonu[ _-]([^;/]+) Build'
      model: '$1'
    - regex: 'Unonu[ _-]?([^;/)]+)(?:[);/ ]|$)'
      model: '$1'

# UTOK
UTOK:
  regex: 'UTOK (45[01]D)|(?:Dorel \d|Dorel 3S)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'UTOK (45[01]D)'
      model: '$1'
    - regex: 'Dorel 3S'
      model: 'Dorel 3S'
    - regex: 'Dorel (\d)'
      model: 'Dorel $1'

# Vastking
Vastking:
  regex: '(?:M910A|M783K|M783K-16G|M1072R-3G|KingPad_(?:[KM]10|SA10|SA8)(?:Pro)?)(?:_EEA)?(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'KingPad_([KM]10|SA10|SA8)(Pro)?'
      model: 'KingPad $1 $2'
    - regex: '(M910A|M783K|M783K-16G|M1072R-3G)(?:[);/ ]|$)'
      model: '$1'

# ViewSonic (viewsonic.com)
ViewSonic:
  regex: 'ViewSonic|ViewPad|ViewPhone|(?:IFP(?:98|86|[67]5)50-3|VSD[0-9]+|vsi7q_1)(?:[);/ ]|$)'
  device: 'smart display'
  models:
    - regex: '(?:ViewSonic-)?V500(?:[);/ ]|$)'
      model: 'V500'
      device: 'smartphone'
    - regex: 'ViewSonic A8\+(?:[);/ ]|$)'
      model: 'A8 Plus'
      device: 'smartphone'
    - regex: '(?:ViewSonic-)?ViewPhone ?([^;/]+) Build'
      model: 'ViewPhone $1'
      device: 'smartphone'
    - regex: 'vsi7q_1'
      model: 'ViewPad i7Q'
      device: 'tablet'
    - regex: '(?:ViewSonic-)?ViewPad[ _]?([^;/)]+)(?: Build|[;)])'
      model: 'ViewPad $1'
      device: 'tablet'
    - regex: '(VSD[0-9]+)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'IFP(98|86|[67]5)50-3'
      model: 'ViewBoard IFP$150-3 $1" 4K'

# Vitelcom
Vitelcom:
  regex: 'Vitelcom|portalmmm/[12].0 TSM'
  device: 'feature phone'
  models:
    - regex: 'TSM-([a-z0-9]+)'
      model: '$1'
    - regex: 'TSM([a-z0-9\-]+)'
      model: '$1'
    - regex: 'portalmmm/[12].0 (TSM[a-z0-9 ]+)'
      model: '$1'

# Fengxiang
Fengxiang:
  regex: '(vKB011B|vKB004L)'
  device: 'tablet'
  model: '$1'

# VK Mobile
VK Mobile:
  regex: 'VK-VK([79]00)(?:[);/ ]|$)'
  device: 'feature phone'
  model: 'VK$1'

# Vernee
Vernee:
  regex: 'Vernee|(?:Mars Pro|Apollo[ _](?:Lite|X)|Thor (?:E|Plus)|X2_euro|M7_EEA|T3 Pro|V2 Pro)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Apollo[ _]Lite'
      model: 'Apollo Lite'
    - regex: 'Apollo[ _]X'
      model: 'Apollo X'
    - regex: 'Mars Pro'
      model: 'Mars Pro'
    - regex: 'Thor E'
      model: 'Thor E'
    - regex: 'Thor Plus'
      model: 'Thor Plus'
    - regex: 'Vernee_M5'
      model: 'M5'
    - regex: 'M7_EEA'
      model: 'M7'
    - regex: 'X2_euro'
      model: 'X2'
    - regex: '(V2|T3) Pro'
      model: '$1 Pro'
    - regex: 'Vernee[ _-]([^;/]+) Build'
      model: '$1'
    - regex: 'Vernee[ _-]([a-z0-9_-]+)'
      model: '$1'

# Vertu (www.vertu.com)
Vertu:
  regex: 'Vertu[ ]?([a-z0-9]+)|(?:ASTER(?: [PT])?|CONSTELLATION X)(?:[);/ ]|$)'
  device: 'feature phone'
  models:
    - regex: 'ASTER( [PT])?(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Aster$1'
    - regex: 'CONSTELLATION X(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Constellation X'
    - regex: 'Vertu[ ]?([a-z0-9]+)'
      model: '$1'

# Venso mobile
Venso:
  regex: '(?:CX-508|CX-551|Reiv 500|Creon F5|Isprit U50|Isprit-U50-LTE)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Isprit U50|Isprit-U50-LTE'
      model: 'Isprit U50'
    - regex: '(CX-508|CX-551|Reiv 500|Creon F5)'
      model: '$1'

# Venturer (https://venturer.com/)
Venturer:
  regex: '(?:VCT([a-z0-9_-]+)|CT9A03W23|CT9A06P23)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'VCT9B06Q22(?:[);/ ]|$)'
      model: 'Challenger Pro 10.1"'
    - regex: '(?:CT9A03W23|CT9A06P23)(?:[);/ ]|$)'
      model: 'Mariner 10 Pro'
    - regex: 'VCT([a-z0-9_-]+)'
      model: 'VCT$1'

# Verizon
Verizon:
  regex: 'QTA(SUN[12]|XIA1|QZ3|QZ3KID|IR7)|QMV7[AB]|WTVIS01'
  device: 'tablet'
  models:
    - regex: 'QTAXIA1|QTAIR7'
      model: 'Ellipsis 10'
    - regex: 'QTASUN1'
      model: 'Ellipsis 8 HD'
    - regex: 'QTASUN2'
      model: 'Ellipsis 8 HD 4G LTE'
    - regex: 'QTAQZ3KID'
      model: 'Ellipsis Kids LTE'
    - regex: 'QTAQZ3'
      model: 'Ellipsis 8'
    - regex: 'QMV7[AB]'
      model: 'Ellipsis 7'
    - regex: 'WTVIS01' # Wingtech
      device: 'smartphone'
      model: 'Visible Midnight'

# Verykool
Verykool:
  regex: 'verykool'
  device: 'smartphone'
  models:
    - regex: 'verykool[ _]?SL5009'
      model: 'Jet'
    - regex: 'verykool[ _]?S5001'
      model: 'Lotus'
    - regex: 'verykool[ _]?S5004'
      model: 'Lotus Jr'
    - regex: 'verykool[ _]?S5007'
      model: 'Lotus Plus'
    - regex: 'verykool[ _]?s5015'
      model: 'Spark II'
    - regex: 'verykool[ _]?SL5011'
      model: 'Spark LTE'
    - regex: 'verykool[ _]?s5019'
      model: 'Wave'
    - regex: 'verykool[ _]?S5005'
      model: 'Lotus II'
    - regex: 'verykool[ _]?SL5560'
      model: 'Maverick Pro'
    - regex: 'verykool[ _]?SL5200'
      model: 'Eclipse'
    - regex: 'verykool[ _]?SL5050'
      model: 'Phantom'
    - regex: 'verykool[ _]?S5030'
      model: 'Helix II'
    - regex: 'verykool[ _]?s5527'
      model: 'Alpha Pro'
    - regex: 'verykool[ _]?s5526'
      model: 'Alpha'
    - regex: 'verykool[ _]?S5530'
      model: 'Maverick II'
    - regex: 'verykool[ _]?S5525'
      model: 'Maverick III'
    - regex: 'verykool[ _]?S5524'
      model: 'Maverick III Jr'
    - regex: 'verykool[ _]?s5516'
      model: 'Maverick Jr'
    - regex: 'verykool[ _]?SL5550'
      model: 'Maverick LTE'
    - regex: 'verykool[ _]?s5035'
      model: 'Spear'
    - regex: 'verykool[ _]?s5034'
      model: 'Spear Jr'
    - regex: 'verykool[ _]?s5037'
      model: 'Apollo Quattro'
    - regex: 'verykool[ _]?s5036'
      model: 'Apollo'
    - regex: 'Sol Quatro Jr'
      model: 'Sol Quatro Jr'
    - regex: 'verykool[ _]?s6005x'
      model: 'Cyprus Pro'
    - regex: 'verykool[ _]?SL6010'
      model: 'Cyprus LTE'
    - regex: 'verykool[ _]?S4006[QT]?'
      model: 'Leo 3G'
    - regex: 'verykool[ _]?S4007'
      model: 'Leo IV'
    - regex: 'verykool[ _]?S4008'
      model: 'Leo V'
    - regex: 'verykool[ _]?s5017|Dorado s5017'
      model: 'Dorado'
    - regex: 'verykool[ _]?s4510'
      model: 'Luna'
    - regex: 'verykool[ _]?s5204'
      model: 'Orion'
    - regex: 'verykool[ _]?s5205'
      model: 'Orion Pro'
    - regex: 'verykool[ _]?s5528Jr'
      model: 'Cosmo Jr'
    - regex: 'verykool[ _]?s5528'
      model: 'Cosmo'
    - regex: 'verykool[ _]?s5702'
      model: 'Royale Quattro'
    - regex: 'verykool[ _]?SL5029'
      model: 'Bolt Pro'
    - regex: 'verykool[ _]?SL5565'
      model: 'Rocket'

    - regex: 'verykool[ _]?TL8010'
      device: 'tablet'
      model: 'KolorPad LTE'
    - regex: 'verykool[ _]?T7440'
      device: 'tablet'
      model: 'KolorPad II'
    - regex: 'verykool[ _]?T7445'
      device: 'tablet'
      model: 'KolorPad IV'

    - regex: 'verykool[ _]?([^/;)]+)(?:[ _]SL?[0-9]{4}[QT]?)(?: Build|[);])'
      model: '$1'
    - regex: 'verykool[ _]?([^/;)]+)(?: Build|[);])'
      model: '$1'

# Vestel (vestel.com)
Vestel:
  regex: 'Vestel[ _]|Venus[ _](GO|E[2-5]|V[1-9]|Z[1-9]0)|(?<!Winnovo )V_?TAB|VP74|VT97PRO|VSP145M|VSP250[GS]|VSP355[GS]|V3_5580_Dual|V TAB Z1'
  device: 'smartphone'
  models:
    - regex: 'VT97PRO'
      model: 'VTab 9.7 Pro'
      device: 'tablet'
    - regex: 'VP74'
      model: 'VTab Lite II'
      device: 'tablet'
    - regex: 'VTAB10'
      model: 'VTab 10'
      device: 'tablet'
    - regex: 'V_TAB_7_ECO_III'
      model: 'VTab 7 Eco 3'
      device: 'tablet'
    - regex: 'V_TAB_7_LITE_III'
      model: 'VTab 7 Lite 3'
      device: 'tablet'
    - regex: 'V_TAB_([0-9]{4}[A-Z]?)'
      model: 'VTab $1'
      device: 'tablet'
    - regex: 'V[_ ]TAB[_ ](Z1)'
      model: 'VTab $1'
      device: 'tablet'
    - regex: 'V3_5580_Dual'
      model: 'Venus V3 5580 Dual'
    - regex: 'VSP145M'
      model: 'Venus 4.5'
    - regex: 'VSP250G'
      model: 'Venus 5.0V'
    - regex: 'VSP250S'
      model: 'Venus 5.0X'
    - regex: 'VSP355G'
      model: 'Venus 5.5V'
    - regex: 'VSP355S'
      model: 'Venus 5.5X'
    - regex: 'Venus[ _]V([1-9])([ _][0-9]{4})?'
      model: 'Venus V$1$2'
    - regex: 'Venus[ _]Z([1-9]0)'
      model: 'Venus Z$1'
    - regex: 'Venus[ _]GO'
      model: 'Venus Go'
    - regex: 'Venus E2 Plus Dual'
      model: 'Venus E2 Plus Dual'
    - regex: 'Venus[ _]E2 Plus'
      model: 'Venus E2 Plus'
    - regex: 'Venus[ _]E([345])'
      model: 'Venus E$1'
    - regex: 'Vestel_5000_Dual'
      model: '5000 Dual'
    - regex: 'Vestel_5000_2gb'
      model: '5000 2GB'
    - regex: 'Vestel[ _]5530[ _]Dual'
      model: '5530 Dual'
    - regex: 'Vestel[ _](5000|5530)'
      model: '$1'

# Videocon
Videocon:
  regex: 'Videocon[_ \-]|(?:VT75C|V50DC|V406018|V512930|V50(?:2430|3630|4730|5024|5430|4630|5[98]20)|Z45_(?:Dazzle|Amaze)|Z45Q Star|Z50 Nova)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Videocon_V1585'
      device: 'feature phone'
      model: 'V1585'
    - regex: 'Videocon[_ \-]([a-z0-9]+)'
      model: '$1'
    - regex: 'VT75C(?:[);/ ]|$)'
      model: 'VT75C'
      device: 'tablet'
    - regex: 'V502430(?:[);/ ]|$)'
      model: 'Kryton 3'
    - regex: 'V50DC(?:[);/ ]|$)'
      model: 'Kryton'
    - regex: 'V505024(?:[);/ ]|$)'
      model: 'Kryton 22 Plus'
    - regex: 'V503630(?:[);/ ]|$)'
      model: 'Delite 11'
    - regex: 'V504730(?:[);/ ]|$)'
      model: 'Delite 21'
    - regex: 'V505920(?:[);/ ]|$)'
      model: 'Metal Pro 2'
    - regex: 'V505820(?:[);/ ]|$)'
      model: 'Metal Pro 1'
    - regex: 'V406018(?:[);/ ]|$)'
      model: 'Starr 100'
    - regex: 'V512930(?:[);/ ]|$)'
      model: 'Ultra 50'
    - regex: '(V505430|V504630)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Z45_(Dazzle|Amaze)(?:[);/ ]|$)'
      model: 'Infinium Z45 $1'
    - regex: 'Z45Q Star(?:[);/ ]|$)'
      model: 'Infinium Z45Q Star'
    - regex: 'Z50 Nova(?:[);/ ]|$)'
      model: 'Infinium Z50 Nova'

# Vodafone
Vodafone:
  regex: '(?<!FBCR/)Vodafone[ _-]|Smart ?Tab ?(?:III? ?)?(?:|4G|7|10)[);/ -]|VodafoneSmartChat|Smart Ultra 6|(?:GigaTV|VFD[ _][0-9]+|VFD[37]20|VF6[89]5|VF-(696|1397|795|895N|1497))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'VFD 100'
      model: 'Smart Mini'
    - regex: 'VFD720'
      model: 'Smart N9'
    - regex: 'VF685'
      model: 'Smart Kicka'
    - regex: 'VF695'
      model: 'Smart First 6'
    - regex: 'VFD 200'
      model: 'Smart First 7'
    - regex: 'VFD 300'
      model: 'Smart Mini 7'
    - regex: 'VFD 301'
      model: 'Smart Mini 7 Dual'
    - regex: 'VFD 50[012]'
      model: 'Smart Turbo 7'
    - regex: 'VFD 51[013]'
      model: 'Smart E8'
    - regex: 'VFD 52[789]'
      model: 'Smart E9'
    - regex: 'VFD 822'
      model: 'Smart X9'
    - regex: 'VFD 600'
      model: 'Smart Prime 7'
    - regex: 'VFD320'
      model: 'Smart C9'
    - regex: 'VFD 820'
      model: 'Smart X9'
    - regex: 'VFD 610'
      model: 'Smart N8'
    - regex: 'VFD 630'
      model: 'Smart N10'
    - regex: 'VFD 620'
      model: 'Smart N9 Lite'
    - regex: 'Smart ultra 6'
      model: 'Smart Ultra 6'
    - regex: 'VFD 700'
      model: 'Smart Ultra 7'
    - regex: 'VFD 710'
      model: 'Smart V8'
    - regex: 'VFD 720'
      model: 'Smart N9'
    - regex: 'VFD 730'
      model: 'Smart V10'
    - regex: 'VFD 900'
      model: 'Smart Platinum 7'
    - regex: 'Vodafone[ _]875(?:[);/ ]|$)'
      model: 'Smart Mini' # Alcatel
    - regex: 'Vodafone[ _]975N?(?:[);/ ]|$)'
      model: 'Smart 3' # Alcatel
    - regex: 'Vodafone[ _]785(?:[);/ ]|$)'
      model: 'Smart 4 Mini'
    - regex: 'VFD 525(?:[);/ ]|$)'
      model: 'Smart 4G'
    - regex: 'Vodafone[ _]890N(?:[);/ ]|$)'
      model: 'Smart 4 Turbo' # Coolpad 3601U
    - regex: 'Vodafone[ _]985N(?:[);/ ]|$)'
      model: 'Smart 4 Power'
    - regex: 'VodafoneSmartChat'
      model: 'Smart Chat'
    - regex: 'VF-696'
      model: 'Smart Grand 6'
    - regex: 'VF-795'
      model: 'Smart Speed 6'
    - regex: 'VF-895N'
      model: 'Smart Prime 6'

    # explicit table models
    - regex: 'VF-1397'
      model: 'Tab Speed 6'
      device: 'tablet'
    - regex: 'VF-1497'
      model: 'Tab Prime 6'
      device: 'tablet'
    - regex: 'VFD 1100'
      device: 'tablet'
      model: 'Tab Mini 7'
    - regex: 'VFD 1300'
      device: 'tablet'
      model: 'Smart Tab N8'
    - regex: 'VFD 1400'
      device: 'tablet'
      model: 'Tab Prime 7'
    - regex: 'Smart ?Tab ?3G'
      device: 'tablet'
      model: 'Smart Tab 3G'
    - regex: 'Smart ?Tab ?4G'
      device: 'tablet'
      model: 'Smart Tab 4G'  # Alcatel
    - regex: 'Smart ?Tab ?4'
      model: 'Smart Tab 4' # ZTE
      device: 'tablet'
    - regex: 'SmartTab7[);/ -]'
      model: 'Smart Tab 7' # ZTE
      device: 'tablet'
    - regex: 'SmartTab10[);/ -]'
      model: 'Smart Tab 10' # ZTE
      device: 'tablet'
    - regex: 'Smart ?Tab ?II ?7'
      model: 'Smart Tab II 7' # Lenovo
      device: 'tablet'
    - regex: 'Smart ?Tab ?II ?10'
      model: 'Smart Tab II 10' # Lenovo
      device: 'tablet'
    - regex: 'Smart ?Tab ?III ?7'
      model: 'Smart Tab III 7' # Lenovo
      device: 'tablet'
    - regex: 'Smart ?Tab ?III ?10'
      model: 'Smart Tab III 10' # Lenovo
      device: 'tablet'

    - regex: 'Vodafone TV(?:[);/ ]|$)'
      model: 'TV'
      device: 'tv'
    - regex: 'GigaTV'
      model: 'Giga TV'
      device: 'tv'

    - regex: 'VFD[ _]([0-9]+)(?:[);/ ]|$)'
      model: 'VFD $1'
    - regex: 'Vodafone[ _-]([^;/]+) Build'
      model: '$1'
    - regex: 'Vodafone[ _-]([a-z0-9_-]+)'
      model: '$1'

# Surge or Surgephone (surgephone.com)
Surge:
  regex: 'VOLT_(5XL)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Volt $1'

# Volt or Volt Mobile
Volt:
  regex: 'VOLT[_ ](SV451[_ ]Vision)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Vonino (vonino.ro, vonino.it)
Vonino:
  regex: 'Vonino|Epic (?:E8|P7)|Epic_(?:M8|P7)|Gyga[ _](?:X|S|QS|XS)|Jax[ _](?:QS|[SXQN]|Mini)|Magnet[ _](?:M[19]|G[135]0|W10)|Navo_QS|Navo S|Onyx_(QS|Z)|Orin_QS|Pluri[ _](?:[BCMQ]7|[CQM]8)|Sirius_QS|(?<!Schok )Volt[ _][XS]|Xavy[_ ]([GT]7|L8)|Xylo[ _][XSPQT]|Zun[ _](?:N|X[OS]?)|JAX_N|Druid_L10|iMart_Pro|MusicPAD_[HM]1'
  device: 'smartphone'
  models:
    - regex: 'Zun[ _](N|X[OS]?)'
      model: 'Zun $1'
    - regex: 'Xylo[ _]([PSXQT])'
      model: 'Xylo $1'
    - regex: 'Volt[ _]S_A7'
      model: 'Volt S A7'
    - regex: 'Volt[ _]S'
      model: 'Volt S'
    - regex: 'Volt[ _]X'
      model: 'Volt X'
    - regex: 'Gyga[ _]QS'
      model: 'Gyga QS'
    - regex: 'Gyga[ _]XS'
      model: 'Gyga XS'
    - regex: 'Gyga[ _](S|X)'
      model: 'Gyga $1'
    - regex: 'Jax[ _]QS'
      model: 'Jax QS'
    - regex: 'Jax[ _]S_A7'
      model: 'Jax S A7'
    - regex: 'Jax[ _]([SQXN])'
      model: 'Jax $1'
    - regex: 'Jax[ _]Mini'
      model: 'Jax Mini'

    - regex: 'iMart_Pro'
      device: 'tablet'
      model: 'IMart Pro'
    - regex: 'Epic[_ ]([EM]8|P7)'
      model: 'Epic $1'
      device: 'tablet'
    - regex: 'Pluri_M7_2020'
      model: 'Pluri M7 (2020)'
      device: 'tablet'
    - regex: 'Pluri[ _]([BCMQ])7'
      model: 'Pluri $17'
      device: 'tablet'
    - regex: 'Pluri[ _]([CQM])8'
      model: 'Pluri $18'
      device: 'tablet'
    - regex: 'Druid[_ ](L10)'
      model: 'Druid $1'
      device: 'tablet'
    - regex: 'Magnet[ _](M[19]|G[135]0|W10)'
      model: 'Magnet $1'
      device: 'tablet'
    - regex: 'Navo[_ ](Q?S)'
      model: 'Navo $1'
      device: 'tablet'
    - regex: 'Onyx_(QS|Z)'
      model: 'Onyx $1'
      device: 'tablet'
    - regex: 'Orin_QS'
      model: 'Orin QS'
      device: 'tablet'
    - regex: 'Sirius_QS'
      model: 'Sirius QS'
      device: 'tablet'
    - regex: 'Xavy[_ ]([GT]7|L8)'
      model: 'Xavy $1'
      device: 'tablet'
    - regex: 'MusicPAD_([HM]1)'
      model: 'MusicPAD $1'
      device: 'portable media player'

# Vorago (www.voragolive.com)
Vorago:
  regex: 'VORAGO|(?:PAD-7-V5|PAD-7)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'CELL-500'
      model: 'CELL-500'
    - regex: '(PAD-7-V5|PAD-7)'
      device: 'tablet'
      model: '$1'

# Voto
Voto:
  regex: 'VOTO[ _\-]|VT8[89]8(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'VOTO[ _\-]?([^/;]+) Build'
      model: '$1'
    - regex: 'VOTO[ _\-]?([^);/ ]+)'
      model: '$1'
    - regex: '(VT8[89]8)(?:[);/ ]|$)'
      model: '$1'

# Voxtel
Voxtel:
  regex: 'Voxtel_([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# Vulcan
Vulcan:
  regex: '(?:VP5004A|HT0704W08|VS5513|VS4011|VR6031)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(VP5004A|VR6031)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'VS5513(?:[);/ ]|$)'
      model: 'Tempo S13'
    - regex: 'VS4011(?:[);/ ]|$)'
      model: 'Tempo S11'
    - regex: 'HT0704W08' # Hyundai
      model: 'Koral 7W4'
      device: 'tablet'

# Walton (waltonbd.com)
Walton:
  regex: 'Walton|Walpad|RX7 Mini|Primo[ _](C[1234]?|D[1-689]|E[1-589]|F8s|EF[23]?|EM|F[1-79]i?|G[1-9]|GF[234]?|GH[23]?|GM|H[2-689M]|H10|H7s|N[F1]?|NX2?|R[1-68]|R[HM]2?|RX[23]?|S[1-8]|V1|X[1-4]|Z|[ZV]X)'
  device: 'smartphone'
  models:
    - regex: 'Walpad[ _]([^;/)]+)(?: Build|[);])'
      device: 'tablet'
      model: 'Primo Walpad $1'
    - regex: 'Primo S6 infinity'
      model: 'Primo S6 Infinity'
    - regex: 'Primo S8 mini'
      model: 'Primo S8 Mini'
    - regex: 'Primo H8 Pro(?:[);/ ]|$)'
      model: 'Primo H8 Pro'
    - regex: 'Primo (RM2|ZX2|NX4) mini(?:[);/ ]|$)'
      model: 'Primo $1 Mini'
    - regex: 'Primo H8(?:[);/ ]|$)'
      model: 'Primo H8 Turbo'
    - regex: 'RX7 Mini(?:[);/ ]|$)'
      model: 'RX7 Mini'

    # general detections
    - regex: 'Primo[ _]([^;/)]+)[ _]Plus(?: Build|[;)])'
      model: 'Primo $1 Plus'
    - regex: 'Primo[ _]([^;/)]+)(?: Build|[;)])'
      model: 'Primo $1'
    - regex: 'Walton[ _]([^;/)]+)(?: Build|[;)])'
      model: '$1'

# Wellcom
WellcoM:
  regex: 'WELLCOM[ _\-/]([a-z0-9]+)'
  device: 'smartphone'
  model: '$1'

# Wexler
Wexler:
  regex: 'Wexler|(?:ULTIMA 7 TWIST PLUS|ULTIMA 7|ULTIMA [78] TWIST|TAB10iQ3G|TAB[ _]10Q)(?:[);/ ]|$)|ZEN[ _](?:4\.[57]|5)'
  device: 'tablet'
  models:
    - regex: '(?:Wexler[ _\-\.])?ZEN[ _]4\.5(?:[);/ ]|$)'
      model: 'ZEN 4.5'
      device: 'smartphone'
    - regex: '(?:Wexler[ _\-\.])?ZEN[ _]4\.7(?:[);/ ]|$)'
      model: 'ZEN 4.7'
      device: 'smartphone'
    - regex: '(?:Wexler[ _\-\.])?ZEN[ _]5(?:[);/ ]|$)'
      model: 'ZEN 5'
      device: 'smartphone'
    - regex: 'ZEN[ _]5\+(?:[);/ ]|$)'
      model: 'ZEN 5 Plus'
      device: 'smartphone'
    - regex: '(?:Wexler[._-])?TAB[ _]?10Q(?:[);/ ]|$)'
      model: 'TAB 10Q'
    - regex: 'TAB10iQ3G(?:[);/ ]|$)'
      model: 'TAB 10iQ 3G'
    - regex: 'Wexler[ _\-\.]([^;/]+) Build'
      model: '$1'
    - regex: 'Wexler[ _\-\.]([^);/]+)(?:[);/]|$)'
      model: '$1'
    - regex: '(ULTIMA 7 TWIST PLUS|ULTIMA [78] TWIST|ULTIMA 7 OCTA|ULTIMA 7)(?:[);/ ]|$)'
      model: '$1'

# Inco (incomobile.com)
Inco:
  regex: '(?:Inco[ _](Aurora II|Colors|Sphere|Plain[_ ]2S?|Plain2 S|Flex(?: 2S)?|S4|Bloom(?: 2)?)|(Horizon_S|Horizon \+|MATTER)|Bloom4|eco_s|Flex-3)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Bloom ?4'
      model: 'Bloom 4'
    - regex: '(?:Inco[ _])?(Plain[_ ]2S?|Colors|Horizon_S|Horizon \+|Aurora II|Flex(?: 2S)?|S4|Bloom(?: 2)?)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Plain2 S'
      model: 'Plain 2S'
    - regex: 'MATTER'
      model: 'Matter'
    - regex: 'eco_s'
      model: 'Eco S'
    - regex: 'Flex-(3)'
      model: 'Flex $1'
    - regex: 'Inco Sphere( 3)?(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Sphere$1'

# Wink
Wink:
  regex: '(?<!mismart )Wink[_ ]'
  device: 'smartphone'
  models:
    - regex: 'Wink[_ ]((?:Glory|World|Share|City)(?:[_ ](?:SE|S))?)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Wink[ _](Primo|Highway)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'

# Smart (smartgsmphone.com)
Smart:
  regex: '(Coral 4|Slide Lite|Notrino)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Wiko (wikomobile.com)
Wiko:
  regex: '(?:WIKO[_ -])|(?:WIKO-)?CINK_[a-z0-9_]+|(?:WIKO-)?HIGHWAY_[a-z0-9_]+|(?:WIKO-)?(?:Cink([^/;]*)|Highway([^/;]*)|Iggy|Stairway|Rainbow ?(Jam|Lite|Up)?|Darkside|Darkmoon|Darkfull|Darknight|Freddy|FEVER|Jerry[2]?|Sublim|Ozzy|JIMMY|Barry|Birdy|Bloom(?!4)|Getaway|Goa(?!nna|lPlus)|Kite|Robby|Lenny[2-9]?|(?<!iBall[_ ])Slide|Sunset[2-9]?|Sunny[2-9]?|Tommy[2-9]?|PULP(?: Fab)?|Wax|HARRY|Ridge(?! Plus)(?: Fab)?|U FEEL(?: Prime| Lite)?|U PULSE(?: LITE)?|View2 (?:Go|Plus)|View XL|View Prime)(?: Plus)?(?: 4G)?(?: Build|$)?|W_(?:C8[06]0|K[346]00|P130|P200|C200SN)|WC300|W-(?:V7[23]0|V745|V755|V8[035]0|P[36]11|K130|K211|K3[68]0|K420|K510S?|K521|K560|K610|K630)-(?:BYT|EEA|FRA|OPE|SU[IN]|SWI|TIM|TMV|TVM|DU|T[HV]|ID)|WIM Lite|W-V851|W-V6[08]0|W-V750BN|W-V770|W-K200|W-U300|U307AS|CINK PEAX 2|HIGHWAY PURE|C210AE|v3913|U614AS|V3991AN|v12fnlite|K-KOOL|p6901|U616AT|VHEM|KENNY'
  device: 'smartphone'
  models:
    - regex: '(?:WIKO-)?W-V770'
      model: 'T3'
    - regex: '(?:WIKO-)?VHEM'
      model: '10'
    - regex: '(?:WIKO-)?U616AT'
      model: 'Voix'
    - regex: '(?:WIKO-)?W-V745'
      model: 'Power U10'
    - regex: '(?:WIKO-)?W-V750'
      model: 'Power U20'
    - regex: '(?:WIKO-)?W-V755-EEA'
      model: 'Power U30'
    - regex: '(?:WIKO-)?Cink Peax 2'
      model: 'Cink Peax 2'
    - regex: '(?:Wiko-)?Cink([^/;]*) Build'
      model: 'Cink$1'
    - regex: '(?:WIKO-)?CINK_([a-z0-9_]+)'
      model: 'Cink $1'
    - regex: '(?:WIKO-)?HIGHWAY PURE'
      model: 'Highway Pure'
    - regex: '(?:WIKO-)?HIGHWAY STAR'
      model: 'Highway Star'
    - regex: '(?:Wiko-)?Highway([^/;]*) Build'
      model: 'Highway$1'
    - regex: '(?:WIKO-)?HIGHWAY_([a-z0-9_]+)'
      model: 'Highway $1'
    - regex: '(?:WIKO-)?Iggy'
      model: 'Iggy'
    - regex: '(?:WIKO-)?FEVER'
      model: 'Fever'
    - regex: '(?:WIKO-)?Stairway'
      model: 'Stairway'
    - regex: '(?:WIKO-)?Ridge Fab 4G'
      model: 'Ridge Fab 4G'
    - regex: '(?:WIKO-)?Ridge 4G'
      model: 'Ridge 4G'
    - regex: '(?:WIKO-)?Ridge'
      model: 'Ridge'
    - regex: 'RAINBOW LITE'
      model: 'Rainbow Lite'
    - regex: '(?:WIKO-)?Rainbow ([^/;]+) Build'
      model: 'Rainbow $1'
    - regex: '(?:WIKO-)?Rainbow'
      model: 'Rainbow'
    - regex: '(?:WIKO-)?Darkside'
      model: 'Darkside'
    - regex: '(?:WIKO-)?Darkmoon'
      model: 'Darkmoon'
    - regex: '(?:WIKO-)?Darkfull'
      model: 'Darkfull'
    - regex: '(?:WIKO-)?Darknight'
      model: 'Darknight'
    - regex: '(?:WIKO-)?Sublim'
      model: 'Sublim'
    - regex: '(?:WIKO-)?Ozzy'
      model: 'Ozzy'
    - regex: '(?:WIKO-)?Barry'
      model: 'Barry'
    - regex: '(?:WIKO-)?Birdy'
      model: 'Birdy'
    - regex: '(?:WIKO-)?Bloom'
      model: 'Bloom'
    - regex: '(?:WIKO-)?JIMMY'
      model: 'Jimmy'
    - regex: 'JERRY MAX'
      model: 'Jerry Max'
    - regex: 'W_K300'
      model: 'Jerry 3'
    - regex: 'W-K420-TVM'
      model: 'Jerry 4'
    - regex: '(?:WIKO-)?Jerry2'
      model: 'Jerry 2'
    - regex: '(?:WIKO-)?Jerry'
      model: 'Jerry'
    - regex: '(?:WIKO-)?Getaway'
      model: 'Getaway'
    - regex: '(?:WIKO-)?KENNY'
      model: 'Kenny'
    - regex: '(?:WIKO-)?Goa(?!nna)'
      model: 'Goa'
    - regex: '(?:WIKO-)?Freddy'
      model: 'Freddy'
    - regex: '(?:WIKO-)?Kite'
      model: 'Kite'
    - regex: 'W_K400'
      model: 'Lenny 5'
    - regex: 'C210AE(?:[);/ ]|$)'
      model: 'Life'
    - regex: 'U307AS(?:[);/ ]|$)'
      model: 'Life 2'
    - regex: 'U316AT(?:[);/ ]|$)'
      model: 'Life 3'
    - regex: 'v3913(?:[);/ ]|$)'
      model: 'Kenny'
    - regex: '(?:WIKO-)?Lenny[ -_]?3 Max'
      model: 'Lenny 3 Max'
    - regex: '(?:WIKO-)?Lenny[ -_]?4 Plus'
      model: 'Lenny 4 Plus'
    - regex: '(?:WIKO-)?Lenny[ -_]?([2-9])'
      model: 'Lenny $1'
    - regex: '(?:WIKO-)?Lenny'
      model: 'Lenny'
    - regex: '(?:WIKO-)?Slide'
      model: 'Slide'
    - regex: '(?:WIKO-)?Sunset2'
      model: 'Sunset 2'
    - regex: '(?:WIKO-)?Sunset'
      model: 'Sunset'
    - regex: '(?:WIKO-)?Sunny3 Mini'
      model: 'Sunny 3 Mini'
    - regex: '(?:WIKO-)?Sunny3'
      model: 'Sunny 3'
    - regex: 'W-K200'
      model: 'Sunny 3 Plus'
    - regex: '(?:WIKO-)?Sunny2 Plus'
      model: 'Sunny 2 Plus'
    - regex: '(?:WIKO-)?Sunny2'
      model: 'Sunny 2'
    - regex: 'W-K360-TV'
      model: 'Sunny 4 Plus'
    - regex: 'W-K130-TMV'
      model: 'Sunny 4'
    - regex: 'W-K380-TVM'
      model: 'Sunny 5'
    - regex: 'W-K211-(?:TH|TVM)'
      model: 'Sunny 5 Lite'
    - regex: '(?:WIKO-)?Sunny'
      model: 'Sunny'
    - regex: '(?:W_K600|Tommy3|W_C200SN)'
      model: 'Tommy 3'
    - regex: '(?:WIKO-)?Tommy2 Plus'
      model: 'Tommy 2 Plus'
    - regex: '(?:WIKO-)?Tommy2'
      model: 'Tommy 2'
    - regex: '(?:WIKO-)?Tommy'
      model: 'Tommy'
    - regex: '(?:WIKO-)?Wax'
      model: 'Wax'
    - regex: '(?:WIKO-)?HARRY'
      model: 'Harry'
    - regex: 'W-V600'
      model: 'Harry 2'
    - regex: '(?:WIKO-)?WIM Lite|p6901'
      model: 'WIM Lite'
    - regex: '(?:WIKO-)?Pulp Fab 4G'
      model: 'Pulp Fab 4G'
    - regex: '(?:WIKO-)?Pulp Fab'
      model: 'Pulp Fab'
    - regex: '(?:WIKO-)?Pulp 4G'
      model: 'Pulp 4G'
    - regex: '(?:WIKO-)?Pulp'
      model: 'Pulp'
    - regex: '(?:WIKO-)?Robby(2)?'
      model: 'Robby$1'
    - regex: '(?:WIKO-)?U PULSE LITE'
      model: 'U Pulse Lite'
    - regex: '(?:WIKO-)?U PULSE'
      model: 'U Pulse'
    - regex: '(?:WIKO-)?U FEEL LITE'
      model: 'U Feel Lite'
    - regex: '(?:WIKO-)?U FEEL PRIME'
      model: 'U Feel Prime'
    - regex: '(?:WIKO-)?U FEEL'
      model: 'U Feel'
    - regex: 'V3991AN'
      model: 'U Feel Fab'
    - regex: '(?:WIKO-)?View2 Go'
      model: 'View 2 Go'
    - regex: '(?:WIKO-)?View2 Plus'
      model: 'View 2 Plus'
    - regex: '(?:WIKO-)?View XL'
      model: 'View XL'
    - regex: '(?:WIKO-)?View Prime'
      model: 'View Prime'
    - regex: 'WC300'
      model: 'View Lite'
    - regex: 'v12fnlite'
      model: 'View'
    - regex: 'W_C800'
      model: 'View 2'
    - regex: 'W_C860'
      model: 'View 2 Pro'
    - regex: 'W_P200'
      model: 'View Max'
    - regex: 'W_P130'
      model: 'View Go'
    - regex: 'W-V800-(TVM|TIM|EEA|OPE|DU)'
      model: 'View 3 Lite'
    - regex: 'W-V851'
      model: 'View 5'
    - regex: 'W-V850-EEA'
      model: 'View 5 Plus'
    - regex: 'W-K130-(?:OPE|EEA|BYT)'
      model: 'Y50'
    - regex: 'W-K420-EEA'
      model: 'Y50'
    - regex: 'W-K211'
      model: 'Y51'
    - regex: 'W-K521'
      model: 'Y52'
    - regex: 'W-K510-(?:TVM|EEA|OPE|SUN|BYT|TH)|W-K510S-SWI'
      model: 'Y60'
    - regex: 'W-K560-(?:EEA|TVM)'
      model: 'Y61'
    - regex: 'W-K610-(?:SUI|FRA)'
      model: 'Y62 Plus'
    - regex: 'W-K610'
      model: 'Y62'
    - regex: 'W-V720-(?:EEA|OPE|SUN)'
      model: 'Y80'
    - regex: 'W-V680'
      model: 'Y81'
    - regex: 'W-K630'
      model: 'Y82'
    - regex: 'W-P311-(?:EEA|OPE|TVM)'
      model: 'View 3'
    - regex: 'W-P611-(?:EEA|OPE)'
      model: 'View 3 Pro'
    - regex: 'W-V830-(?:EEA|OPE|ID)'
      model: 'View 4'
    - regex: 'W-V730-(?:EEA|TVM|ID|OPE)'
      model: 'View 4 Lite'
    - regex: 'W-V745-TVM'
      model: 'Power U10'
    - regex: 'W-U300(?:[);/ ]|$)'
      model: 'Ride'
    - regex: 'U520AS(?:[);/ ]|$)'
      model: 'Ride 2'
    - regex: 'U614AS(?:[);/ ]|$)'
      model: 'Ride 3'
    - regex: 'K-KOOL(?:[);/ ]|$)'
      model: 'K-Kool'
    - regex: 'Wiko ([^/;)]+)(?: Build|[;)])'
      model: '$1'

# Wieppo
Wieppo:
  regex: 'Wieppo (S6 Lite|S[658]|E1)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Weimei
Weimei:
  regex: 'weplus_3'
  device: 'smartphone'
  models:
    - regex: 'weplus_3'
      model: 'WePlus 3'

# Wileyfox
Wileyfox:
  regex: 'Wileyfox|(?:Swift 2|crackling)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Wileyfox Spark \+'
      model: 'Spark +'
    - regex: 'Wileyfox; Pro'
      model: 'Pro'
    - regex: 'Wileyfox Spark X'
      model: 'Spark X'
    - regex: 'Wileyfox (Spark|Swift)'
      model: '$1'
    - regex: 'Wileyfox ([^/)]+)(?: Build|\))'
      model: '$1'
    - regex: 'Swift 2 (X|Plus)(?:[);/ ]|$)'
      model: 'Swift 2 $1'
    - regex: 'Swift 2(?:[);/ ]|$)'
      model: 'Swift 2'
    - regex: 'crackling'
      model: 'Swift'

# Wolder
Wolder:
  regex: 'miSmart|miTab|WIAM[ _]\#?\d+|WOLDER'
  device: 'smartphone'
  models:
    - regex: 'WIAM[_ ]\#?65[_ ]lite'
      model: 'Wiam #65 Lite'
    - regex: '(?:WOLDER_)?WIAM[ _]\#?(\d+)'
      model: 'Wiam #$1'
    - regex: 'WOLDER[_ ](\d+)'
      model: 'Wiam #$1'
    - regex: 'miSmart[ \-_]?([^/]+) Build'
      model: 'miSmart $1'
    - regex: 'miTab[_ ]PRO[_ ]10[_ ]plus'
      device: 'tablet'
      model: 'miTab PRO 10 PLUS'
    - regex: 'miTab[ \-_]?([^/)]+)(?: Build|[;)])'
      device: 'tablet'
      model: 'miTab $1'

# Wolfgang
Wolfgang:
  regex: 'AT[ _-]AS([0-9A-Z]+)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'AT-AS$1'

# Wolki (https://wolkimobile.com/)
Wolki:
  regex: '(?:W55SE|W626 LITE|WS067|WS5SE|WS626)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'W55SE'
      model: 'W5.5 SE'
    - regex: 'WS626'
      model: 'W6.26'
    - regex: 'W626 LITE'
      model: 'W6.26 Lite'
    - regex: 'WS5SE'
      model: 'W5 SE'
    - regex: 'WS067'
      model: 'W6 Pro'

# Wonu
Wonu:
  regex: 'Wonu ([a-z0-9]+)'
  device: 'feature phone'
  model: '$1'

# Woo
Woo:
  regex: 'SP5026i-Scorpio|SP5040-Casiopea'
  device: 'smartphone'
  models:
    - regex: 'SP5026i-Scorpio'
      model: 'Scorpio'
    - regex: 'SP5040-Casiopea'
      model: 'Casiopea II'

# Woxter (woxter.es)
Woxter:
  regex: 'Woxter[ _]|Nimbus 101Q'
  device: 'tablet'
  models:
    - regex: 'Nimbus ?(101Q|115|1100RX)(?:[);/ ]|$)'
      model: 'Nimbus $1'
    - regex: 'WOXTER[ _]I-101(?:[);/ ]|$)'
      model: 'i-101'
    - regex: 'Woxter[ _]([SQ]X) ?([0-9A-Z]+)(?:[);/ ]|$)'
      model: '$1 $2'
    - regex: 'Woxter[_ ](?:Zielo[ _])?(Q27|Z800|Z420)(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Zielo $1'
    - regex: 'Woxter[ _]([^/;)]+)(?: Build|\))'
      model: '$1'

# X-View
X-View:
  regex: 'X-View|ZEN_U5\+|AMBER_KIDS|Proton_Amber_HD|Proton_Neon|PROTON_JADE_2_PRO'
  device: 'smartphone'
  models:
    - regex: 'ZEN_U5\+'
      model: 'ZEN U5+'
    - regex: 'AMBER_KIDS'
      device: 'tablet'
      model: 'Amber Kids'
    - regex: 'Proton_Amber_HD'
      device: 'tablet'
      model: 'Proton Amber HD'
    - regex: 'Proton_Neon'
      device: 'tablet'
      model: 'Proton Neon'
    - regex: 'PROTON_JADE_2_PRO'
      device: 'tablet'
      model: 'Proton Jade 2 Pro'
    - regex: 'X-ViewTablet'
      device: 'tablet'
      model: ''

# POCO (sub brand Xiaomi)
POCO:
  regex: '(?:POCO[ _](?:X[2-5](?:_SN)?|F2 PRO|M[3245]|M5s|F3|F4(?: GT)?|C40|C3)|M2010J19(?:C[GI]|GC)|M2007J20C[ITG]|M2012K11AG|M2006C3MI|M2004J19PI|M2102J20S[GI]|M2103K19P[IGY]|21091116AG|21061110AG|M2104K10I|211033MI|2201117P[GI]|camellian?|2201116P[GI]|21121210G|22031116AI|22021211R[GI]|2204121(?:6U?G|9P[GI])|220333QPG|22071219C[GI]|2207117BPG|22101320G|22111317PG)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'POCO X2(?:[);/ ]|$)'
      model: 'X2'
    - regex: '(?:M2012K11AG|POCO F3)(?:[);/ ]|$)'
      model: 'F3'
    - regex: 'M2004J19PI(?:[);/ ]|$)'
      model: 'M2'
    - regex: '(?:M2103K19P[IGY]|M3 Pro 5G|camellian?)(?:[);/ ]|$)'
      model: 'M3 Pro 5G'
    - regex: 'POCO M([23]) Pro(?:[);/ ]|$)'
      model: 'M$1 Pro'
    - regex: '21091116AG|M4 Pro 5G'
      model: 'M4 Pro 5G'
    - regex: '22041219P[IG]|POCO M4 5G(?: Build|[;)])'
      model: 'M4 5G'
    - regex: '22071219C[IG]|POCO M5(?: Build|[;)])'
      model: 'M5'
    - regex: '2207117BPG|POCO M5s'
      model: 'M5s'
    - regex: '2201117P[GI]|POCO M4 Pro'
      model: 'M4 Pro'
    - regex: '(?:M2010J19C[GI]|POCO M3)(?:[);/ ]|$)'
      model: 'M3'
    - regex: 'M2010J19GC'
      model: 'M3 SE'
    - regex: '(?:M2007J20C[GT]|POCO X3 NFC)(?:[);/ ]|$)'
      model: 'X3 NFC'
    - regex: '(?:M2102J20S[GI]|POCO X3 Pro)(?:[);/ ]|$)'
      model: 'X3 Pro'
    - regex: '(?:21061110AG|POCO X3 GT)(?:[);/ ]|$)'
      model: 'X3 GT'
    - regex: '(?:M2007J20CI|POCO X3(?:_SN)?)(?:[);/ ]|$)'
      model: 'X3'
    - regex: '(?:22041216G|POCO X4 GT)(?:[);/ ]|$)'
      model: 'X4 GT'
    - regex: '22111317PG(?:[);/ ]|$)'
      model: 'X5 5G'
    - regex: '(?:22041216UG)(?:[);/ ]|$)'
      model: 'X4 GT Pro'
    - regex: '22101320G(?:[);/ ]|$)'
      model: 'X5 Pro 5G'
    - regex: '2201116P[GI]|POCO X4 Pro 5G'
      model: 'X4 Pro 5G'
    - regex: '(?:M2104K10I)(?:[);/ ]|$)'
      model: 'F3 GT'
    - regex: '(?:21121210G|POCO F4 GT)(?:[);/ ]|$)'
      model: 'F4 GT'
    - regex: '22021211R[GI]|POCO F4'
      model: 'F4'
    - regex: '(?:M2006C3MI|POCO C3)(?:[);/ ]|$)'
      model: 'C3'
    - regex: '(?:211033MI|22031116AI)(?:[);/ ]|$)'
      model: 'C31'
    - regex: '(?:220333QPG|POCO C40)(?:[);/ ]|$)'
      model: 'C40'
    - regex: 'POCO F2 PRO(?:[);/ ]|$)'
      model: 'F2 Pro'

# Zopo
Zopo:
  regex: 'ZOPO|(?:ZOPO[_ ])?(HERO2|Flash X3|F2_Color5_5|F5_Color_M5|ZP[0-9]{2,}[^/;]+)(?:\)| Build)'
  device: 'smartphone'
  models:
    - regex: '(?:ZOPO_C2_MOD|ZP998)(?:[);/ ]|$)'
      model: 'C2 II'
    - regex: 'ZOPO 9xxQuad(?:[);/ ]|$)'
      model: '9XX Quad'
    - regex: '(?:ZOPO_)?ZP980[+](?:[);/ ]|$)'
      model: 'ZP980+'
    - regex: '(?:ZOPO_)?ZP980(?:[);/ ]|$)'
      model: 'Scorpio'
    - regex: 'ZP952(?:[);/ ]|$)'
      model: 'Speed 7 Plus'
    - regex: 'HERO2(?:[);/ ]|$)'
      model: 'Hero 2'
    - regex: 'ZP951(?:[);/ ]|$)'
      model: 'Speed 7'
    - regex: 'ZP955(?:[);/ ]|$)'
      model: 'Speed 8'
    - regex: 'ZP950[+h]?(?:[);/ ]|$)'
      model: 'Leader Max'
    - regex: 'ZP(?:900H?|910)(?:[);/ ]|$)'
      model: 'Leader'
    - regex: 'ZP(?:800H|810)(?:[);/ ]|$)'
      model: 'Libero HD'
    - regex: 'ZP500[+]?(?:[);/ ]|$)'
      model: 'Libero'
    - regex: 'ZP330(?:[);/ ]|$)'
      model: 'Color C'
    - regex: 'ZP370(?:[);/ ]|$)'
      model: 'Color S'
    - regex: 'F2_Color5_5(?:[);/ ]|$)'
      model: 'Color F2'
    - regex: 'F5_Color_M5(?:[);/ ]|$)'
      model: 'F5 Color M5'
    - regex: 'ZP5(63|86)(?:[);/ ]|$)'
      model: 'Color X'
    - regex: 'ZP567(?:[);/ ]|$)'
      model: 'Color C5i'
    - regex: 'ZP300[S+]?(?:[);/ ]|$)'
      model: 'Field'
    - regex: 'ZP200[+]?(?:[);/ ]|$)'
      model: 'Shining'
    - regex: 'ZP100(?:[);/ ]|$)'
      model: 'Pilot'
    - regex: 'ZP1790(?:[);/ ]|$)'
      model: 'Flash X2'
    - regex: 'ZP781(?:[);/ ]|$)'
      model: 'Flash G5 Plus'
    - regex: 'ZOPO[_ ]ONE[_ ]([YXTP])(?:[);/ ]|$)'
      model: 'One $1'
    - regex: '(?:ZOPO_)?(Flash X3|X1i|ZP[0-9]{2,}[^/;)]+)(?: Build|\))'
      model: '$1'

# Xiaomi
Xiaomi:
  regex: 'Xiaomi(?!/(?:Miui|Mint[ ])Browser)|MiTV-\w|MiProjA1|Mi9 Pro 5G|(?:MI [a-z0-9]+|Mi-4c|MI-One[ _]?[a-z0-9]+|MIX(?: 2S?)?|MIX 2S ART|pomelo)(?:[);/ ]|$)|HM (?:[^/;]+) (?:Build|MIUI)|(?:2014501|2014011|201481[12378]|201302[23]|2013061) Build|Redmi|POCOPHONE|(?:SHARK )?KTUS-[AH]0|(?:SHARK )?(KLE|KSR|MBU|PAR)-[AH]0|SK[RW]-[AH]0|PRS-[AH]0|POCO F1|DLT-[AH]0|MIBOX[234]([_ ]PRO)?|MiTV4[ACSX]?|AWM-A0|MI CC 9 Meitu Edition|MiBOX1S|M2006J10C|M2006C3(?:L[IGC]|LVG|MN?G|MT)|M2007J1(?:7[CGI]|SC)|M2002(?:J9[SEG]|F4LG)|HM2014819|WT88047|210611(?:8C|19BI)|M2001(?:J2G|C3K3I)|M2004J15SC|M2004J(?:7[AB]|19)[CG]|M2012K11(?:[CGI]|A[CI])|M2011K2[CG]|M2011J18C|M2006C3[ML]II|M2003J(?:15SC|15SS|6B2G|6A1G)|M2007J3S[ICYGP]|M2007J22[CG]|M2103K19[CGYI]|M2101K(?:[79]AG|7AI|7B[GI]|6[GIRP]|7BNY|9[GCR])|M2010J19S[CGYIL]|M2102(?:K1AC|K1[CG]|J2SC)|HM NOTE 1(?:LTE|W)|MI[_ ]PLAY|XIG01|Qin 1s\+|Qin ?2(?: Pro)?|MI_(NOTE_Pro|5X|4i|(?:A2|8)_Lite)|A001XM|lancelot|XIG02|21061119(?:[AD]G|AL)|2107119DC|M2101K(?:7BL|9AI)|A101XM|M2012K10C|M2104K10AC|M19(?:01F7[1S]|10F4S|08(?:F1XE|C3JGG)|08C3J[IH]|06F9S[IH]|02F1G)|21051182[CG]|21081111RG|2109119D[GI]|21091116(?:AI|[AU]?C|i|U[GI])|220111(?:7T[LGIY]|19TI|19UY|6S[IRC]|6TG|[67]SG|7SL)|21121(?:119S[CG]|23A[CG]|119VL|210C)|2204121(?:6[CI]|6UC|9[CGI]|9NY|1AC)|220333Q(?:AG|NY|L|BI)|2107113S[IGR]|22031(?:29G|116BG|21C)|PAR-H0|M2105K81A?C|2109119BC|22021119KR|22021211RC|220233L2[CGI]|22011(?:2[23][CG]|211C|16TI|17S[YI])|joyeuse|galahad|hydrogen|begonia|kenzo|willow|beryllium|rosemary| MDG1|KLE-AO|Mi ?Pad \d|220612(?:18C|[23]SC)|2208128(?:1AC|3[GC])|22081212(?:U?G|C)|220712(?:2MC|12AG|19AI)|220733S(?:F?G|[IL])|22087RA4DI|Black Shark|MZB8298IN|22101317C|22101316(?:[CI]|UP|UCP?)|22101(?:29SG|32C)|221113(?:3C|17I)|23013RK75C|22095RA98C'
  device: 'smartphone'
  models:
    # specific smartphone models
    - regex: 'SKR-[AH]0'
      model: 'Black Shark'
    - regex: 'AWM-A0'
      model: 'Black Shark Helo'
    - regex: 'SKW-[AH]0'
      model: 'Black Shark 2'
    - regex: 'DLT-[AH]0'
      model: 'Black Shark 2 Pro'
    - regex: '(?:SHARK )?KLE-A[0O]'
      model: 'Black Shark 3'
    - regex: '(?:SHARK )?KSR-[AH]0'
      model: 'Black Shark 4 Pro'
    - regex: '(?:SHARK )?KLE-H0'
      model: 'Black Shark 3 5G'
    - regex: '(?:SHARK )?MBU-H0'
      model: 'Black Shark 3 Pro 5G'
    - regex: '(?:SHARK )?MBU-A0'
      model: 'Black Shark 3 Pro'
    - regex: '(?:SHARK )?PRS-[AH]0'
      model: 'Black Shark 4'
    - regex: '(?:SHARK )?PAR-[AH]0'
      model: 'Black Shark 5'
    - regex: '(?:SHARK )?KTUS-[AH]0'
      model: 'Black Shark 5 Pro'
    - regex: 'Black Shark ([^/);]+)(?: Build|[;)])'
      model: 'Black Shark $1'
    - regex: 'Xiaomi_2014501|2014501 Build'
      model: 'Hongmi 4G'
    - regex: 'Xiaomi_2014011|2014011 Build'
      model: 'Hongmi 1S'
    - regex: 'Xiaomi_201302[23]|201302[23] Build'
      model: 'Hongmi'
    - regex: 'Xiaomi[_-]2014818|2014818 Build'
      model: 'Hongmi 2 3G'
    - regex: 'Xiaomi_2014817|2014817 Build'
      model: 'Hongmi 2'
    - regex: 'Xiaomi[_-]201481[123]|201481[123] Build'
      model: 'Hongmi 2 4G'
    - regex: 'MI[_ ]PLAY(?:[);/ ]|$)'
      model: 'Mi Play'
    - regex: 'Mi 9 SE(?:[);/ ]|$)'
      model: 'Mi 9 SE'
    - regex: '(?:Xiaomi_)?M1902F1[GT]'
      model: 'Mi 9'
    - regex: 'MI CC 9e|MI CC9e'
      model: 'Mi CC 9e'
    - regex: 'MI CC9 Pro Premium Edition'
      model: 'Mi CC 9 Pro Premium Edition'
    - regex: 'MI CC ?9 Pro'
      model: 'Mi CC 9 Pro'
    - regex: 'MI CC 9(?: Meitu Edition)?(?:[);/ ]|$)'
      model: 'Mi CC 9'
    - regex: '(?:Xiaomi_)?(?:M2001J2E_TD-LTE|M2001J2G)(?:[);/ ]|$)'
      model: 'Mi 10'
    - regex: '(?:Xiaomi_)?(?:Mi 10 Pro|M2001J1E(?:_TD-LTE)?)(?:[);/ ]|$)'
      model: 'Mi 10 Pro'
    - regex: 'M2011K2[CG](?:[);/ ]|$)'
      model: 'Mi 11'
    - regex: '21091116UI(?:[);/ ]|$)'
      model: '11i HyperCharge 5G'
    - regex: 'M2012K11AI(?:[);/ ]|$)'
      model: 'Mi 11X'
    - regex: 'M2012K11I(?:[);/ ]|$)'
      model: 'Mi 11X Pro'
    - regex: 'M2007J3S[GI](?:[);/ ]|$)'
      model: 'Mi 10T Pro 5G'
    - regex: 'M2007J17G(?:[);/ ]|$)'
      model: 'Mi 10T Lite 5G'
    - regex: 'M2007J3S[CYP](?:[);/ ]|$)'
      model: 'Mi 10T 5G'
    - regex: 'M2007J1SC(?:[);/ ]|$)'
      model: 'Mi 10 Ultra 5G'
    - regex: 'M2102J2SC(?:[);/ ]|$)'
      model: 'Mi 10S'
    - regex: '(?:M2002J9[EGS]|XIG01|Mi 10 Lite 5G)(?:[);/ ]|$)'
      model: 'Mi 10 Lite 5G'
    - regex: 'M2007J17I(?:[);/ ]|$)'
      model: 'Mi 10i'
    - regex: 'M2012K11G(?:[);/ ]|$)'
      model: 'Mi 11i'
    - regex: '(?:2107113S[IGR]|Xiaomi 11T Pro)(?:[);/ ]|$)'
      model: 'Mi 11T Pro'
    - regex: '(?:21081111RG|Xiaomi 11T)(?:[);/ ]|$)'
      model: 'Mi 11T'
    - regex: '(?:2109119DI|(?:Xiao)?mi 11 Lite (?:5G )?NE)(?:[);/ ]|$)'
      model: 'Mi 11 Lite 5G NE'
    - regex: '(?:M2101K9[GCR]|2109119DG|Mi 11 Lite 5G)(?:[);/ ]|$)'
      model: 'Mi 11 Lite 5G'
    - regex: '(?:M2101K9A[GI]|Mi 11 Lite)(?:[);/ ]|$)'
      model: 'Mi 11 Lite'
    - regex: 'M2102K1[CG](?:[);/ ]|$)'
      model: 'Mi 11 Ultra'
    - regex: '(?:M2102K1AC|Mi 11 Pro)(?:[);/ ]|$)'
      model: 'Mi 11 Pro'
    - regex: '2201122[CG](?:[);/ ]|$)'
      model: '12 Pro'
    - regex: '2201123[CG](?:[);/ ]|$)'
      model: '12'
    - regex: '22071212AG(?:[);/ ]|$)'
      model: '12T'
    - regex: '2207122MC(?:[);/ ]|$)'
      model: '12 Pro Dimensity'
    - regex: '22081212(?:U?G|C)(?:[);/ ]|$)'
      model: '12T Pro'
    - regex: '(?:2206122SC|Xiaomi 12S Pro)(?:[);/ ]|$)'
      model: '12S Pro'
    - regex: '(?:2206123SC)(?:[);/ ]|$)'
      model: '12S'
    - regex: '(?:2203121C|Xiaomi 12S Ultra)(?:[);/ ]|$)'
      model: '12S Ultra'
    - regex: '2203129G(?:[);/ ]|$)'
      model: '12 Lite'
    - regex: '(?:2112123A[CG]|Xiaomi 12X)(?:[);/ ]|$)'
      model: '12X'
    - regex: '2210132C(?:[);/ ]|$)'
      model: '13 Pro'
    - regex: '2210129SG(?:[);/ ]|$)'
      model: '13 Lite'
    - regex: '2211133C(?:[);/ ]|$)'
      model: '13'
    - regex: 'MI[ _]8[ _]Lite(?:[);/ ]|$)'
      model: 'Mi 8 Lite'
    - regex: 'MI 8 Explorer Edition(?:[);/ ]|$)'
      model: 'Mi 8 Explorer Edition'
    - regex: 'MI 8 ([a-z]+)(?:[);/ ]|$)'
      model: 'Mi 8 $1'
    - regex: 'Mi 9T Pro(?:[);/ ]|$)'
      model: 'Mi 9T Pro'
    - regex: '(?:Mi ?9 Pro 5G|M1908F1XE)(?:[);/ ]|$)'
      model: 'Mi 9 Pro 5G'
    - regex: 'MI 9 Transparent Edition(?:[);/ ]|$)'
      model: 'Mi 9 Transparent Edition'
    - regex: 'MI ([89]) Lite(?:[);/ ]|$)'
      model: 'Mi $1 Lite'
    - regex: 'MI 5s Plus(?:[);/ ]|$)'
      model: 'Mi 5s Plus'
    - regex: 'Xiaomi_MDT2'
      model: 'Mi 5X'
    - regex: 'Xiaomi_2013061|2013061 Build'
      model: 'Mi 3'
    - regex: 'Mi[- ]([43])c(?:[);/ ]|$)'
      model: 'Mi $1C'
    - regex: 'MI 4W(?:[);/ ]|$)'
      model: 'Mi 4W'
    - regex: 'Mi_4i(?:[);/ ]|$)'
      model: 'Mi 4i'
    - regex: 'MI 4 ?LTE(?:[);/ ]|$)'
      model: 'Mi 4 LTE'
    - regex: 'MI MAX ([23])(?:[);/ ]|$)'
      model: 'Mi Max $1'
    - regex: '(?:MI MAX|hydrogen)(?:[);/ ]|$)'
      model: 'Mi Max'
    - regex: 'Mi[ _]A2[ _]Lite(?:[);/ ]|$)'
      model: 'Mi A2 Lite'
    - regex: 'M1906F9S[IH](?:[);/ ]|$)'
      model: 'Mi A3'
    - regex: '2106118C(?:[);/ ]|$)'
      model: 'Mi Mix 4'
    - regex: 'Mi MIX 3 5G(?:[);/ ]|$)'
      model: 'Mi Mix 3 5G'
    - regex: 'MIX ([23])(?:[);/ ]|$)'
      model: 'Mi Mix $1'
    - regex: 'MIX 2S ART(?:[);/ ]|$)'
      model: 'Mi Mix 2S Art'
    - regex: 'MIX 2S(?:[);/ ]|$)'
      model: 'Mi Mix 2S'
    - regex: 'MIX(?:[);/ ]|$)'
      model: 'Mi Mix'
    - regex: 'Mi Note 3(?:[);/ ]|$)'
      model: 'Mi Note 3'
    - regex: 'POCOPHONE[ _]F1|POCO F1|beryllium'
      model: 'Pocophone F1'
    - regex: 'Redmi 5 Plus'
      model: 'Redmi 5 Plus'
    - regex: 'MDG1(?:[);/ ]|$)'
      model: 'Redmi 5'
    - regex: 'WT88047(?:[);/ ]|$)'
      model: 'Redmi 2'
    - regex: 'HM2014819(?:[);/ ]|$)'
      model: 'Redmi 2 Pro'
    - regex: 'HM 2A(?:[);/ ]|$)'
      model: 'Redmi 2A'
    - regex: 'HM 1S[CW]?(?:[);/ ]|$)'
      model: 'Redmi 1S'
    - regex: 'HM 1(?:[);/ ]|$)'
      model: 'Redmi 1'
    - regex: '(?:M2001C3K3I|MZB8298IN)(?:[);/ ]|$)'
      model: 'Redmi 8A'
    - regex: 'Redmi 8A (Dual|Pro)(?:[);/ ]|$)'
      model: 'Redmi 8A $1'
    - regex: '(?:M2004J7AC|M2004J15SC|Redmi 10X 4G)(?:[);/ ]|$)'
      model: 'Redmi 10X'
    - regex: '220333Q(?:AG|NY|L)(?:[);/ ]|$)'
      model: 'Redmi 10C'
    - regex: '(?:M2004J19[CG]|M2006C3MII|lancelot|galahad)(?:[);/ ]|$)'
      model: 'Redmi 9'
    - regex: '(?:M2004J19I|Redmi 9 Prime)(?:[);/ ]|$)'
      model: 'Redmi 9 Prime'
    - regex: '(?:M2010J19SI|Redmi 9 Power)(?:[);/ ]|$)'
      model: 'Redmi 9 Power'
    - regex: 'M2006C3L[GCI](?:[);/ ]|$)'
      model: 'Redmi 9A'
    - regex: 'M2006C3LII(?:[);/ ]|$)'
      model: 'Redmi 9i'
    - regex: 'M2006C3M[GT](?:[);/ ]|$)'
      model: 'Redmi 9C'
    - regex: 'M2006C3LVG(?:[);/ ]|$)'
      model: 'Redmi 9AT'
    - regex: '(?:M2010J19S[GYL]|pomelo|Redmi 9T, Note 9 4G, 9 Power)(?:[);/ ]|$)'
      model: 'Redmi 9T'
    - regex: 'Redmi 9T NFC(?:_SN)?(?:[);/ ]|$)'
      model: 'Redmi 9T NFC'
    - regex: '(?:M2006C3MNG|Redmi 9C NFC)(?:[);/ ]|$)'
      model: 'Redmi 9C NFC'
    - regex: '(?:22041219(?:G|NY)|Redmi 10 5G)(?:[);/ ]|$)'
      model: 'Redmi 10 5G'
    - regex: '(?:21061119D[CG]|220333QBI)(?:[);/ ]|$)'
      model: 'Redmi 10'
    - regex: '220233L2[CGI](?:[);/ ]|$)'
      model: 'Redmi 10A'
    - regex: '(?:21061119A[GL]|21121119(?:SG|VL)|22011119UY|Redmi 10 2022)(?:[);/ ]|$)'
      model: 'Redmi 10 (2022)'
    - regex: '(?:22041219I|Redmi 10 Prime\+ 5G)(?:[);/ ]|$)'
      model: 'Redmi 10 Prime+ 5G'
    - regex: '22011119TI(?:[);/ ]|$)'
      model: 'Redmi 10 Prime (2022)'
    - regex: '(?:21061119[BT]I|Redmi 10 Prime)(?:[);/ ]|$)'
      model: 'Redmi 10 Prime'
    - regex: '(?:M2004J7BC|Redmi 10X Pro)(?:[);/ ]|$)'
      model: 'Redmi 10X Pro'
    - regex: '22071219AI(?:[);/ ]|$)'
      model: 'Redmi 11 Prime'
    - regex: 'Redmi K20 Pro Premium Edition(?:[);/ ]|$)'
      model: 'Redmi K20 Pro Premium Edition'
    - regex: 'Redmi K30 Pro Zoom Edition(?:[);/ ]|$)'
      model: 'Redmi K30 Pro Zoom Edition'
    - regex: 'Redmi K30S Ultra(?:[);/ ]|$)'
      model: 'Redmi K30S Ultra'
    - regex: 'Redmi K([23]0) Pro(?:[);/ ]|$)'
      model: 'Redmi K$1 Pro'
    - regex: 'Redmi K30 5G(?:[);/ ]|$)'
      model: 'Redmi K30 5G'
    - regex: 'Redmi K30i 5G(?:[);/ ]|$)'
      model: 'Redmi K30i 5G'
    - regex: 'M2012K11AC(?:[);/ ]|$)'
      model: 'Redmi K40'
    - regex: '22021211RC(?:[);/ ]|$)'
      model: 'Redmi K40S'
    - regex: '(?:M2012K10C|Redmi K40 Gaming)(?:[);/ ]|$)'
      model: 'Redmi K40 Gaming'
    - regex: 'Redmi K40 Pro\+(?:[);/ ]|$)'
      model: 'Redmi K40 Pro+'
    - regex: '(?:M2012K11C|Redmi K40 Pro)(?:[);/ ]|$)'
      model: 'Redmi K40 Pro'
    - regex: '(?:M2006J10C|Redmi K30 Ultra)(?:[);/ ]|$)'
      model: 'Redmi K30 Ultra'
    - regex: '22041211AC'
      model: 'Redmi K50'
    - regex: '22041216I'
      model: 'Redmi K50i'
    - regex: '21121210C'
      model: 'Redmi K50G'
    - regex: '22011211C'
      model: 'Redmi K50 Pro'
    - regex: '23013RK75C'
      model: 'Redmi K60'
    - regex: 'Redmi Y1 Lite(?:[);/ ]|$)'
      model: 'Redmi Y1 Lite'
    - regex: 'Redmi 6 Pro Extreme'
      model: 'Redmi 6 Pro Extreme'
    - regex: 'Xiaomi_M1805D1ST'
      model: 'Redmi 6 Pro'
    - regex: 'Redmi (\d+) Pro(?:[);/ ]|$)'
      model: 'Redmi $1 Pro'
    - regex: 'Redmi 4 Prime(?:[);/ ]|$)'
      model: 'Redmi 4 Prime'
    - regex: '(?:220733SFG|Redmi A1\+)(?:[);/ ]|$)'
      model: 'Redmi A1+'
    - regex: '220733S[GIL](?:[);/ ]|$)'
      model: 'Redmi A1'
    - regex: 'Qin ?2 Pro(?:[);/ ]|$)'
      model: 'Qin 2 Pro'
    - regex: 'Qin 2(?:[);/ ]|$)'
      model: 'Qin 2'
    - regex: '2107119DC(?:[);/ ]|$)'
      model: 'CC11'
    - regex: '2109119BC(?:[);/ ]|$)'
      model: 'Civi'

      # specific tablet models
    - regex: '(?:M2105K81AC|22081281AC|(?:Xiao)?mi Pad 5 Pro)(?:[);/ ]|$)'
      model: 'Mi Pad 5 Pro'
      device: 'tablet'
    - regex: '(?:21051182[CG]|(?:Xiao)?mi Pad 5)(?:[);/ ]|$)'
      model: 'Mi Pad 5'
      device: 'tablet'
    - regex: 'M2105K81C(?:[);/ ]|$)'
      model: 'Mi Pad 5 Pro 5G'
      device: 'tablet'

    - regex: 'MI PAD 4 PLUS(?:[);/ ]|$)'
      model: 'Mi Pad 4 Plus'
      device: 'tablet'
    - regex: 'MI PAD 4(?:[);/ ]|$)'
      model: 'Mi Pad 4'
      device: 'tablet'
    - regex: 'MI ?PAD 3(?:[);/ ]|$)'
      model: 'Mi Pad 3'
      device: 'tablet'
    - regex: 'MI PAD 2(?:[);/ ]|$)'
      model: 'Mi Pad 2'
      device: 'tablet'
    - regex: 'MI PAD(?:[);/ ]|$)'
      model: 'Mi Pad'
      device: 'tablet'
    - regex: '22081283[GC](?:[);/ ]|$)'
      model: 'Redmi Pad'
      device: 'tablet'

    - regex: 'MiProjA1'
      model: 'Mi Laser Projector 150"'
      device: 'peripheral'

      # specific tv models
    - regex: 'MIBOX3[ _]Pro(?:[);/ ]|$)'
      model: 'Mi Box 3 Pro'
      device: 'tv'
    - regex: 'MIBOX([234])(?:[);/ ]|$)'
      model: 'Mi Box $1'
      device: 'tv'
    - regex: 'MiBOX1S(?:[);/ ]|$)'
      model: 'Mi Box 1S'
      device: 'tv'
    - regex: 'MiTV-MSSP[123](?:[);/ ]|$)'
      model: 'MiTV 4S'
      device: 'tv'
    - regex: 'MiTV-MTEQ0(?:[);/ ]|$)'
      model: 'MiTV Q1'
      device: 'tv'
    - regex: 'MiTV-AESP0(?:[);/ ]|$)'
      model: 'MiTV Stick'
      device: 'tv'
    - regex: 'MiTV-(?:ANSP0|AYFR0)(?:[);/ ]|$)'
      model: 'MiTV Stick 4K'
      device: 'tv'
    - regex: 'MiTV-MOOQ0(?:[);/ ]|$)'
      model: 'MiTV P1'
      device: 'tv'
    - regex: '(?:MiTV-AXSO0|MiTV4(?:A|-ANSM0)|MiTV-MSSP0)(?:[);/ ]|$)'
      model: 'MiTV 4A'
      device: 'tv'
    - regex: 'MiTV-AXSO[12](?:[);/ ]|$)'
      model: 'MiTV 4A Pro'
    - regex: 'MiTV(4[CSXI]|4)(?:[);/ ]|$)'
      model: 'MiTV $1'
      device: 'tv'

      # specific phablet models
    - regex: 'M2011J18C(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Mi Mix Fold'
    - regex: '22061218C(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Mix Fold 2'
    - regex: 'HM NOTE 1W(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Redmi Note'
    - regex: 'HM NOTE 1TD (?:Build|MIUI)'
      device: 'phablet'
      model: 'Hongmi Note 1TD'
    - regex: 'HM NOTE 1(?:LTE|S)(?:W|GLOBAL|TD)? (?:Build|MIUI)|HM NOTE 1LTE'
      device: 'phablet'
      model: 'Redmi Note 4G'
    - regex: 'Xiaomi[_ ]2015052'
      model: 'Redmi Note 2'
      device: 'phablet'
    - regex: 'kenzo'
      model: 'Redmi Note 3'
      device: 'phablet'
    - regex: 'Redmi Note 5A Prime'
      model: 'Redmi Note 5A Prime'
      device: 'phablet'
    - regex: 'Redmi Note 5A Lite'
      model: 'Redmi Note 5A Lite'
      device: 'phablet'
    - regex: '(?:M2010J19SC|M2003J15SS|Redmi Note 9 4G)(?:[);/ ]|$)'
      model: 'Redmi Note 9'
      device: 'phablet'
    - regex: 'M2003J6A1G(?:[);/ ]|$)'
      model: 'Redmi Note 9S'
      device: 'phablet'
    - regex: 'M2003J15SC(?:[);/ ]|$)'
      model: 'Redmi Note 10X'
      device: 'phablet'
    - regex: '(?:M2101K7BL|rosemary)(?:[);/ ]|$)'
      model: 'Redmi Note 10S'
      device: 'phablet'
    - regex: '(?:M2007J22G|A001XM)(?:[);/ ]|$)'
      model: 'Redmi Note 9T 5G'
      device: 'phablet'
    - regex: 'M2007J22C(?:[);/ ]|$)'
      model: 'Redmi Note 9 5G'
      device: 'phablet'
    - regex: 'M2007J17C(?:[);/ ]|$)'
      model: 'Redmi Note 9 Pro 5G'
      device: 'phablet'
    - regex: '(?:joyeuse|M2003J6B2G)(?:[);/ ]|$)'
      model: 'Redmi Note 9 Pro'
      device: 'phablet'
    - regex: 'Redmi Note 10 Lite|M2002F4LG(?:[);/ ]|$)'
      model: 'Redmi Note 10 Lite'
      device: 'phablet'
    - regex: 'M2101K7A[GI]'
      model: 'Redmi Note 10'
      device: 'phablet'
    - regex: 'M2103K19Y|22021119KR'
      model: 'Redmi Note 10T'
      device: 'phablet'
    - regex: 'M2101K7B(?:[GI]|NY)(?:[);/ ]|$)'
      model: 'Redmi Note 10S'
      device: 'phablet'
    - regex: '(?:M2103K19[GC]|Redmi Note 10 5G)(?:[);/ ]|$)'
      model: 'Redmi Note 10 5G'
      device: 'phablet'
    - regex: 'M2103K19I|A101XM|Redmi Note 10T 5G'
      model: 'Redmi Note 10T 5G'
      device: 'phablet'
    - regex: 'XIG02(?:[);/ ]|$)'
      model: 'Redmi Note 10 JE'
      device: 'phablet'
    - regex: '(?:M2101K6[GIRP]|M2104K10AC|Redmi Note 10 Pro(?! Max))(?:[);/ ]|$)'
      model: 'Redmi Note 10 Pro'
      device: 'phablet'
    - regex: '(?:22101316[CI])(?:[);/ ]|$)'
      model: 'Redmi Note 12 Pro'
      device: 'phablet'
    - regex: '22101317C(?:[);/ ]|$)'
      model: 'Redmi Note 12'
      device: 'phablet'
    - regex: '(?:22101316UC)(?:[);/ ]|$)'
      model: 'Redmi Note 12 Pro DE'
      device: 'phablet'
    - regex: '(?:22101316UP)(?:[);/ ]|$)'
      model: 'Redmi Note 12 Discovery'
      device: 'phablet'
    - regex: '22101316UCP(?:[);/ ]|$)'
      model: 'Redmi Note 12 Pro+'
      device: 'phablet'
    - regex: '22111317I(?:[);/ ]|$)'
      model: 'Redmi Note 12'
      device: 'phablet'
    - regex: '(?:21091116C|2201116T[IG])(?:[);/ ]|$)'
      model: 'Redmi Note 11 Pro'
      device: 'phablet'
    - regex: '(?:2201116SC|Redmi Note 11E Pro)(?:[);/ ]|$)'
      model: 'Redmi Note 11E Pro'
      device: 'phablet'
    - regex: '(?:22041219C|Redmi Note 11E)(?:[);/ ]|$)'
      model: 'Redmi Note 11E'
      device: 'phablet'
    - regex: '(?:22041216C|Redmi Note 11T Pro)(?:[);/ ]|$)'
      model: 'Redmi Note 11T Pro'
      device: 'phablet'
    - regex: '22041216UC(?:[);/ ]|$)'
      model: 'Redmi Note 11T Pro+'
      device: 'phablet'
    - regex: '(?:2201116S[GR]|Redmi Note 11 Pro 5G)(?:[);/ ]|$)'
      model: 'Redmi Note 11 Pro 5G'
      device: 'phablet'
    - regex: '(?:2201116SI|Redmi Note 11 Pro\+ 5G)(?:[);/ ]|$)'
      model: 'Redmi Note 11 Pro+ 5G'
      device: 'phablet'
    - regex: '(?:21091116U[CG]|Redmi Note 11 Pro\+)(?:[);/ ]|$)'
      model: 'Redmi Note 11 Pro+'
      device: 'phablet'
    - regex: '21091116AC(?:[);/ ]|$)'
      model: 'Redmi Note 11 5G'
      device: 'phablet'
    - regex: '22095RA98C(?:[);/ ]|$)'
      model: 'Redmi Note 11R 5G'
      device: 'phablet'
    - regex: '(?:21121119SC|2201117T[GILY]|Redmi Note 11 4G)(?:[);/ ]|$)'
      model: 'Redmi Note 11 4G'
      device: 'phablet'
    - regex: '(?:22087RA4DI|Redmi Note 11 SE)(?:[);/ ]|$)'
      model: 'Redmi Note 11 SE'
      device: 'phablet'
    - regex: '2201117S[GIYL]'
      model: 'Redmi Note 11S'
      device: 'phablet'
    - regex: '(?:22031116BG|Redmi Note 11S 5G)(?:[);/ ]|$)'
      model: 'Redmi Note 11S 5G'
      device: 'phablet'
    - regex: '(?:21091116(?:AI|I)|Redmi Note 11T 5G)(?:[);/ ]|$)'
      model: 'Redmi Note 11T 5G'
      device: 'phablet'
    - regex: 'M1908C3J[IH](?:[);/ ]|$)'
      model: 'Redmi Note 8'
      device: 'phablet'
    - regex: '(?:M1908C3JGG|Redmi Note 8 \(2021\))(?:[);/ ]|$)'
      model: 'Redmi Note 8 (2021)'
      device: 'phablet'
    - regex: 'begonia(?:[);/ ]|$)'
      model: 'Redmi Note 8 Pro'
      device: 'phablet'
    - regex: 'willow(?:[);/ ]|$)'
      model: 'Redmi Note 8T'
      device: 'phablet'
    - regex: 'M1901F71(?:[);/ ]|$)'
      model: 'Redmi Note 7S'
      device: 'phablet'
    - regex: 'M1901F7S(?:[);/ ]|$)'
      model: 'Redmi Note 7 Pro'
      device: 'phablet'
    - regex: 'Redmi Note (\d+) Pro Max(?:[);/ ]|$)'
      model: 'Redmi Note $1 Pro Max'
      device: 'phablet'
    - regex: 'Redmi Note (\d+) Pro(?:[);/ ]|$)'
      model: 'Redmi Note $1 Pro'
      device: 'phablet'
    - regex: 'Redmi[ _]Note[ _]([^;/) ]+)?'
      model: 'Redmi Note $1'
      device: 'phablet'
    - regex: 'Redmi[ _]([^;/) ]+)?'
      model: 'Redmi $1'
    - regex: 'MI_NOTE_Pro'
      model: 'Mi Note Pro'
      device: 'phablet'
    - regex: 'Mi Note 10 Pro|M1910F4S(?:[);/ ]|$)'
      model: 'Mi Note 10 Pro'
      device: 'phablet'
    - regex: 'Mi Note 10 Lite'
      model: 'Mi Note 10 Lite'
      device: 'phablet'
    - regex: 'Mi Note 10'
      model: 'Mi Note 10'
      device: 'phablet'
    - regex: 'MI[ _]Note[ _]([^;/) ]+)?'
      model: 'Mi Note $1'
      device: 'phablet'

    # specific feature phone models
    - regex: 'Qin 1s\+'
      model: 'Qin 1s+'

    # general detections
    - regex: 'MI[- ]One[ _]?Plus(?:[);/ ]|$)'
      model: 'Mi One Plus'
    - regex: 'Mi[- ]One[ _]?([a-z0-9]+)?(?: Build|[);])'
      model: 'Mi One $1'
    - regex: 'MI[ _]([^;/]*) Build'
      model: 'Mi $1'
    - regex: 'MI[ _]([a-z0-9]+)(?:[);/ ]|$)'
      model: 'Mi $1'
    - regex: 'HM Note ([^/;]+) (?:Build|MIUI)'
      device: 'phablet'
      model: 'Note'
    - regex: 'HM ([^/;]+) (?:Build|MIUI)'
      model: 'HM $1'
    - regex: 'Xiaomi[ _-]([^/;]+)(?: Build|$)'
      model: '$1'

# Xion
Xion:
  regex: 'XI[_-]CE(?:655|U55|U[48])'
  device: 'smartphone'
  models:
    - regex: 'XI[_-]CE(655|U55|U[48])'
      model: 'CE$1'

# Xolo
Xolo:
  regex: 'Xolo|(?:Q600|Q700s?|Q800|Q1000s|Q1000[ _]Opus|Q1010i|Q2000|Omega[ _]5.[05]|Era5X|Era[ _]2V|era_HD|era[_ ]4[GK]|Era_4?X(?:_2GB)?|BLACK-1XM|A1000s_Lite|cube 5\.0_2GB|Opus 3)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'BLACK-1XM'
      model: 'Black 1X'
    - regex: 'Era_?([45])X(?:[);/ ]|$)'
      model: 'Era $1X'
    - regex: 'Era_4X_2GB(?:[);/ ]|$)'
      model: 'Era 4X 2GB'
    - regex: 'Era[ _]2V(?:[);/ ]|$)'
      model: 'Era 2V'
    - regex: 'era[_ ](HD|4[GK]|X)'
      model: 'Era $1'
    - regex: 'cube 5\.0_2GB'
      model: 'Cube 5.0'
    - regex: '(Q600 Club|Q600|Q700s?|Q800|Q1000s Plus|Q1000s|Q1000[ _]Opus|Q1010i|Q2000|Omega[ _]5.[05]|A1000s_Lite|Opus 3)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Xolo[ _]?([^;/]+) Build'
      model: '$1'
    - regex: 'Xolo[ _]?([a-z0-9_-]+)'
      model: '$1'

# Yarvik
Yarvik:
  regex: 'Xenta[ \-]Tab|Luna TAB|TAB09-410|TAB10-410|TAB07-485|TAB0[78]-200|TAB08-201-3G|TAB9-200|TAB09-211|TAB10-2[01]1|TAB13-201'
  device: 'tablet'
  models:
    # explicit tablet models
    - regex: 'Luna TAB07-920N'
      model: 'Luna 7'
    - regex: 'Luna TAB07-10[01]'
      model: 'Luna 7c'
    - regex: 'Luna TAB274'
      model: 'Luna 7c'
    - regex: 'Luna TAB474'
      model: 'Luna 10'
    - regex: 'Luna TAB10-150'
      model: 'Luna 10c'
    - regex: 'TAB09-410'
      model: 'Noble 9.7'
    - regex: 'TAB10-410'
      model: 'Noble 10.1'
    - regex: 'TAB07-485'
      model: 'Noble Mini'
    - regex: 'Xenta-TAB07-21[01]'
      model: 'Xenta 7c'
    - regex: 'TAB07-200'
      model: 'Xenta 7ic'
    - regex: 'TAB08-200'
      model: 'Xenta 8ic'
    - regex: 'TAB08-201-3G'
      model: 'Xenta 8c'
    - regex: 'TAB9-200'
      model: 'Xenta 9.7ic'
    - regex: 'TAB09-211'
      model: 'Xenta 9.7ic+'
    - regex: 'TAB10-2[01]1'
      model: 'Xenta 10ic'
    - regex: 'TAB13-201'
      model: 'Xenta 13c'

# Yes
'Yes':
  regex: 'M631Y|M685Y4|M651G_MY|YES (?:Altitude 4|MPY(?:48|54))'
  device: 'smartphone'
  models:
    - regex: 'M631Y'
      model: 'Altitude'
    - regex: 'M651G_MY'
      model: 'Altitude 2'
    - regex: 'M685Y4'
      model: 'Altitude 3'
    - regex: 'YES (Altitude 4|MPY(?:48|54))'
      model: '$1'

# Yestel
Yestel:
  regex: 'yestel'
  device: 'smartphone'
  models:
    - regex: 'yestel P30(?:[);/ ]|$)'
      model: 'P30'

# Yezz
Yezz:
  regex: 'Yezz|ANDY[ _]|(?: (?:4E4|5EQ)|A5EI|LIV 1S|LIV1|LIV2[_ ]?LTE|ART[12](?:_?PRO)?|MAX_1_PLUS|MAX2 PLUS)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:YEZZ[_-])?(4E4|5EQ|A4M|A5EI)'
      model: 'Andy $1'
    - regex: 'Yezz-AC4EI'
      model: 'Andy 4EI'
    - regex: 'ART1_PRO'
      model: 'Art 1 Pro'
    - regex: 'ART1'
      model: 'Art 1'
    - regex: 'ART2PRO'
      model: 'Art 2 Pro'
    - regex: 'LIV1'
      model: 'LIV1'
    - regex: 'LIV 1S'
      model: 'LIV 1S'
    - regex: 'LIV2[_ ]?LTE'
      model: 'LIV2 LTE'
    - regex: 'MAX_1_PLUS'
      model: 'Max 1 Plus'
    - regex: 'MAX2 PLUS'
      model: 'Max 2 Plus'

    - regex: 'Andy[ _]([A-Z]*[0-9]\.[0-9][A-Z0-9]*)(?:[ _](LTE))?'
      model: 'Andy $1 $2'
    - regex: 'Andy[ _]([A-Z]*[0-9])([0-9][A-Z0-9]*)(?:[ _](LTE))?'
      model: 'Andy $1.$2 $3'
    - regex: 'Andy[ _]([A-Z]*[0-9][A-Z0-9]+)(?:[ _](LTE))?'
      model: 'Andy $1 $2'

# YU Fly
YU Fly:
  regex: 'YU Fly (\w+)'
  device: 'smartphone'
  model: '$1'

# Yu
Yu:
  regex: '(?:YU5[05]10[A]?|YU4711|AO5510|YU5050|YU501[14]|YU5551|YU Yureka Black|YU 6000)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'YU5010[A]?(?:[);/ ]|$)'
      model: 'Yuphoria'
    - regex: 'YU5011(?:[);/ ]|$)'
      model: 'Yunique 2'
    - regex: 'YU5050(?:[);/ ]|$)'
      model: 'Yutopia'
    - regex: 'AO5510(?:[);/ ]|$)'
      model: 'Yureka'
    - regex: 'YU5551(?:[);/ ]|$)'
      model: 'Yureka 2'
    - regex: 'YU5510[A]?(?:[);/ ]|$)'
      model: 'Yureka Plus'
    - regex: 'YU4711(?:[);/ ]|$)'
      model: 'Yunique'
    - regex: 'YU5014(?:[);/ ]|$)'
      model: 'Ace'
    - regex: 'YU 6000'
      model: 'Yureka Note'
    - regex: 'YU (Yureka Black)(?:[);/ ]|$)'
      model: '$1'

# Yuandao
Yuandao:
  regex: 'N101[ _]DUAL(?:[ _]CORE)?(?:[ _]?2)?(?:[ _]V11)?(?:[);/ ]|$)'
  device: 'tablet'
  model: 'N101'

# Yusun
Yusun:
  regex: 'Yusun|LA2-T'
  device: 'smartphone'
  models:
    # explicit smartphone models
    - regex: 'LA2-T'
      model: 'LA2-T'

    - regex: 'Yusun ([^;/]+) Build'
      model: '$1'
    - regex: 'Yusun ([a-z0-9_\-\+]+)'
      model: '$1'

# Ytone
Ytone:
  regex: 'YTONE[ _\-]'
  device: 'smartphone'
  models:
    - regex: 'YTONE[ _\-]?([^/;]+) Build'
      model: '$1'
    - regex: 'YTONE[ _\-]?([^);/ ]+)'
      model: '$1'

# Zonda
Zonda:
  regex: '(ZM(?:CK|EM|TFTV|TN)[a-z0-9]+)|ZA409'
  device: 'feature phone'
  models:
    - regex: 'ZA409'
      device: 'smartphone'
      model: 'Muzic'
    - regex: '(ZM(?:CK|EM|TFTV|TN)[a-z0-9]+)'
      model: '$1'

# ZYQ
ZYQ:
  regex: 'ZYQ-Q88|(Q(?:2602|262[436]|638|2688|272[89]|3022|3623|TAB Tab4|328 m9|328|668)|J77|Q[._](?:Up|Boss P99|Dee R09|Good M9|Hi|Hot|Me|Mate R99|Next|TOP-X8|You))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Q638'
      model: 'I7'
    - regex: 'Q2624'
      model: 'Cheer 3G'
    - regex: 'Q2602'
      model: 'TV Next'
    - regex: 'Q2728'
      model: 'Zone 3G'
    - regex: 'Q2729'
      model: 'Q2729'
    - regex: 'Q2688'
      model: 'Q2688'
    - regex: 'Q2623'
      model: 'Win 3G'
    - regex: 'Q2626'
      model: 'Care 3G'
    - regex: 'Q3623'
      model: 'Braw 3G'
    - regex: 'Q3022'
      model: 'Q3022'
    - regex: 'Q328 m9'
      model: 'Q328 M9'
    - regex: 'Q328'
      model: 'Speed 3G'
    - regex: 'Q668'
      model: 'TV I4'
    - regex: 'J77'
      model: 'Q.Dee'
    - regex: 'Q\.Up C5'
      model: 'Q.Up C5'
    - regex: 'Q\.Up'
      model: 'Q.Up'
    - regex: 'Q\.Boss P99'
      model: 'Q.Boss P99'
    - regex: 'Q[._]Dee R09'
      model: 'Q.Dee R09'
    - regex: 'Q\.Good M9'
      model: 'Q.Good M9'
    - regex: 'Q[._]Hi S1'
      model: 'Q.Hi S1'
    - regex: 'Q[._]Hi'
      model: 'Q.Hi'
    - regex: 'Q[._]Hot P7 3G'
      model: 'Q.Hot P7 3G'
    - regex: 'Q[._]Hot'
      model: 'Q.Hot'
    - regex: 'Q[._]Me Phone7 3G'
      model: 'Q.Me Phone 7 3G'
    - regex: 'Q[._]Me Plus7'
      model: 'Q.Me Plus 7'
    - regex: 'Q[._]Me'
      model: 'Q.Me'
    - regex: 'Q[._]Mate R99'
      model: 'Q.Mate R99'
    - regex: 'Q[._]Next B7'
      model: 'Q.Next B7'
    - regex: 'Q[._]Next J2'
      model: 'Q.Next J2'
    - regex: 'Q[._]TOP-X8'
      model: 'Q.Top X8'
    - regex: 'Q[._]You'
      model: 'Q.You'
    - regex: 'QTAB Tab4'
      model: 'QTab Tab4'
      device: 'tablet'
    - regex: 'ZYQ-Q88'
      model: 'Q88'
      device: 'tablet'

# Vivax (www.vivax.com)
Vivax:
  regex: 'VIVAX|(?:Fly4|Fly5[_ ]Lite|Fun[_ ]S500|Point[_ ](?:X[12]|X50[123]|X450)|PRO3|32LE77SM|40LE77SM|FUN S1|FUN_S20|TPC[-_ ](?:7121|806)3G)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Fly5[_ ]Lite(?:[);/ ]|$)'
      model: 'Fly 5 Lite'
    - regex: 'Fly4(?:[);/ ]|$)'
      model: 'Fly 4'
    - regex: 'Point_X([12])(?:[);/ ]|$)'
      model: 'Point X$1'
    - regex: 'Fun[_ ]S500(?:[);/ ]|$)'
      model: 'Fun S500'
    - regex: 'FUN[ _]S(10?|20)(?:[);/ ]|$)'
      model: 'Fun S$1'
    - regex: 'VIVAX[ _]Fly ?(\d)(?:[);/ ]|$)'
      model: 'Fly $1'
    - regex: 'VIVAX[ _]Fly[ _]V(1|550)(?:[);/ ]|$)'
      model: 'Fly V$1'
    - regex: '(?:VIVAX )?(Point[ _](?:X551|X50[123]|X450))(?:[);/ ]|$)'
      model: '$1'
    - regex: 'SMART Point X5010(?:[);/ ]|$)'
      model: 'Smart Point X5010'
    - regex: 'VIVAX[_ ]PRO[_ ]?(3|M1)'
      model: 'Pro $1'
    - regex: 'TPC[-_ ](7121|806)([34])G'
      model: 'TPC-$1 $2G'
      device: 'tablet'
    - regex: 'VIVAX (?:TABLET )?TPC[-_ ](\d+) ([34])G(?:[);/ ]|$)'
      device: 'tablet'
      model: 'TPC-$1 $2G'

    - regex: '(?:VIVAX-)?(40LE78T2S2SM|32LE77SM|40LE77SM)'
      device: 'tv'
      model: '$1'

# MLS or Making Life Simple (mlsinnovation.com)
MLS:
  regex: 'IQ(?:0705|L550|1017|1010w?|1012N?|1019N|1025|1060M|1380|1401|1436|1452a|1453|1470|1502a|1511|155[23]|1568|1570|1805N|180[68]|1810B_M|1832|1850|1890|5017|L626|9610|181011N|A27X_E|E[12]00|EL41|G550|GW516|L30|L5[01]|M801|M1001|N700|P50|R300|S300|S801|S1001|W503|W511T|W553N?|W60[38]|W626|M960|D10S|D700|9013_4N|F 200|T800)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'IQ0705(?:[);/ ]|$)'
      model: 'iQTalk Twist'
    - regex: 'IQL550(?:[);/ ]|$)'
      model: 'Notch Lite'
    - regex: 'iQD10S(?:[);/ ]|$)'
      model: 'Notch Sense'
    - regex: 'IQ1010W?(?:[);/ ]|$)'
      model: 'iQTab 10'
      device: 'tablet'
    - regex: 'IQ1012N?(?:[);/ ]|$)'
      model: 'iQTab Brave 3G'
      device: 'tablet'
    - regex: 'IQ1025(?:[);/ ]|$)'
      model: 'iQTab Action 4G'
      device: 'tablet'
    - regex: 'iQ9013_4N(?:[);/ ]|$)'
      model: 'Life 10.1"'
      device: 'tablet'
    - regex: 'IQ1019N(?:[);/ ]|$)'
      model: 'Alu Plus 4G 10.1"'
      device: 'tablet'
    - regex: 'iQ1805N(?:[);/ ]|$)'
      model: 'iQTab Ideal 8.0"'
      device: 'tablet'
    - regex: 'iQ181011N(?:[);/ ]|$)'
      model: 'iQTab Care 8.0"'
      device: 'tablet'
    - regex: 'IQ1380(?:[);/ ]|$)'
      model: 'Brain 3G'
    - regex: 'IQ1401(?:[);/ ]|$)'
      model: 'iQTalk Verse 4G'
    - regex: 'IQ1436(?:[);/ ]|$)'
      model: 'Color mini 4G'
    - regex: 'IQ1452a(?:[);/ ]|$)'
      model: 'TOP-S 4G'
    - regex: 'IQ1453(?:[);/ ]|$)'
      model: 'Trend 4G'
    - regex: 'IQ1470(?:[);/ ]|$)'
      model: 'iQTalk Onyx'
    - regex: 'IQ1502a(?:[);/ ]|$)'
      model: 'iQTalk Flame'
    - regex: 'IQ1511(?:[);/ ]|$)'
      model: 'iQTalk Spicy'
    - regex: 'IQ1552(?:[);/ ]|$)'
      model: 'iQTalk Titan 4G'
    - regex: 'IQ1553(?:[);/ ]|$)'
      model: 'Color 3 4G'
    - regex: 'IQ1568(?:[);/ ]|$)'
      model: 'Range 4G'
    - regex: 'IQ1570(?:[);/ ]|$)'
      model: 'iQTalk Color 5.5 4G'
    - regex: 'IQ1806(?:[);/ ]|$)'
      model: 'iQTab Rose'
      device: 'tablet'
    - regex: 'IQ1808(?:[);/ ]|$)'
      model: 'iQTab Master'
      device: 'tablet'
    - regex: 'IQ1810B_M(?:[);/ ]|$)'
      model: 'iQTab Novel 3G'
      device: 'tablet'
    - regex: 'IQ1832(?:[);/ ]|$)'
      model: 'Jet 3G'
      device: 'tablet'
    - regex: 'iQ1017(?:[);/ ]|$)'
      model: 'Trophy 4G'
      device: 'tablet'
    - regex: 'IQ1850(?:[);/ ]|$)'
      model: 'Diamond 5.2 4G'
    - regex: 'IQ1890(?:[);/ ]|$)'
      model: 'iQTalk Aura'
    - regex: 'IQ5017(?:[);/ ]|$)'
      model: 'Slice 4G'
    - regex: 'IQ9610(?:[);/ ]|$)'
      model: 'Angel 3G'
      device: 'tablet'
    - regex: 'iQM960(?:[);/ ]|$)'
      model: 'Angel 3G (2018)'
      device: 'tablet'
    - regex: 'iQS801(?:[);/ ]|$)'
      model: 'Vital 4G'
      device: 'tablet'
    - regex: 'IQG550(?:[);/ ]|$)'
      model: 'Style 4G'
    - regex: 'IQGW516(?:[);/ ]|$)'
      model: 'F5'
    - regex: 'IQE100(?:[);/ ]|$)'
      model: 'Energy 4G'
    - regex: 'iQE200(?:[);/ ]|$)'
      model: 'MX 4G'
    - regex: 'iQA27X_E(?:[);/ ]|$)'
      model: 'MX (2019)'
    - regex: 'IQEL41(?:[);/ ]|$)'
      model: 'Fab 4G'
    - regex: 'IQL30(?:[);/ ]|$)'
      model: 'Status 4G'
    - regex: 'IQL50(?:[);/ ]|$)'
      model: 'More 4G'
    - regex: 'IQL51(?:[);/ ]|$)'
      model: 'Wave 4G'
    - regex: 'IQM801(?:[);/ ]|$)'
      model: 'Brace 2018 4G'
      device: 'tablet'
    - regex: 'IQM1001(?:[);/ ]|$)'
      model: 'Level 4G'
      device: 'tablet'
    - regex: 'IQN700(?:[);/ ]|$)'
      model: 'Inspire 4G'
    - regex: 'IQP50(?:[);/ ]|$)'
      model: 'Ruby 4G'
    - regex: 'IQS300(?:[);/ ]|$)'
      model: 'DX 4G'
    - regex: 'IQS1001(?:[);/ ]|$)'
      model: 'Vista 4G' ## Gold
      device: 'tablet'
    - regex: 'iQ1060M(?:[);/ ]|$)'
      model: 'Space S 4G'
      device: 'tablet'
    - regex: 'IQR300(?:[);/ ]|$)'
      model: 'R3 4G'
    - regex: 'IQW608(?:[);/ ]|$)'
      model: 'Regal'
    - regex: 'iQW603(?:[);/ ]|$)'
      model: 'Phab 6.0"'
      device: 'phablet'
    - regex: 'IQW626(?:[);/ ]|$)'
      model: 'D6 4G'
    - regex: 'IQW511T(?:[);/ ]|$)'
      model: 'Liberal'
    - regex: 'IQW553N?(?:[);/ ]|$)'
      model: 'Alu 5.5"'
    - regex: 'iQL626?(?:[);/ ]|$)'
      model: 'Pop 4G'
    - regex: 'IQW503(?:[);/ ]|$)'
      model: 'Flame 4G (2018)'
    - regex: 'iQD700(?:[);/ ]|$)'
      model: 'Color Fingerprint 4G'
    - regex: 'iQT800(?:[);/ ]|$)'
      device: 'tablet'
      model: 'T8 Fingerprint 4G'
    - regex: 'iQF ?200(?:[);/ ]|$)'
      model: 'iQF200'

# MMI
MMI:
  regex: 'MMI, ([a-z0-9_ \-]+), (?:wired|wireless)'
  device: 'tv'
  model: '$1'

# FLYCAT
FLYCAT:
  regex: 'FLYCAT'
  device: 'smartphone'
  models:
    - regex: 'OPTIMUM (500[1-4]|5501)'
      model: 'Optimum $1'
    - regex: 'UNICUM (1002|8S|8003)'
      device: 'tablet'
      model: 'Unicum $1'

# Fly
Fly:
  regex: '(?<!GI )Fly(?!Flow|touch)|Power Plus 5000|Power Plus 3|Photo Pro|Slimline|Cirrus (?:6|13)|Life (?:Ace|Jet|Sky|Compact 4G|Geo|Zen|Play)|(?:lineage_)?FS50[1-9]|FS51[0-8]|FS52[0-9]|FS530|FS55[134]|FS40[1-9]|FS45[1-9]|4FS06|MERIDIAN-|(?:Phoenix 2|(?:IQ(?!10[134]0)[0-9]{3,}[i]?)[ _]?(?:Quad|Firebird|Quattro|Turbo|Magic)?|Tornado Slim)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:Fly_)?IQ310(?:[);/ ]|$)'
      model: 'Panorama'
      device: 'tablet'

    - regex: '(?:Fly_)?IQ236(?:[);/ ]|$)'
      model: 'Victory'
    - regex: 'Slimline(?:[);/ ]|$)'
      model: 'Slimline'
    - regex: 'Power Plus 5000(?:[);/ ]|$)'
      model: 'Power Plus 5000'
    - regex: 'Photo Pro(?:[);/ ]|$)'
      model: 'Photo Pro'
    - regex: 'Life Ace(?:[);/ ]|$)'
      model: 'Life Ace'
    - regex: 'Life Jet(?:[);/ ]|$)'
      model: 'Life Jet'
    - regex: 'Life Sky(?:[);/ ]|$)'
      model: 'Life Sky'
    - regex: 'Life Geo(?:[);/ ]|$)'
      model: 'Life Geo'
    - regex: 'Life Zen(?:[);/ ]|$)'
      model: 'Life Zen'
    - regex: 'Life Play(?:[);/ ]|$)'
      model: 'Life Play'
    - regex: 'Life Buzz(?:[);/ ]|$)'
      model: 'Life Buzz'
    - regex: 'Life Compact 4G(?:[);/ ]|$)'
      model: 'Life Compact 4G'
    - regex: 'FS506'
      model: 'Cirrus 3'
    - regex: 'FS403'
      model: 'Cumulus 1'
    - regex: 'FS508|Cirrus 6'
      model: 'Cirrus 6'
    - regex: 'FS511'
      model: 'Cirrus 7'
    - regex: 'FS509'
      model: 'Nimbus 9'
    - regex: 'FS406'
      model: 'Stratus 5'
    - regex: 'FS404'
      model: 'Stratus 3'
    - regex: '(?:lineage_)?FS504'
      model: 'Cirrus 2'
    - regex: 'FS407'
      model: 'Stratus 6'
    - regex: 'FS401'
      model: 'Stratus 1'
    - regex: 'FS402'
      model: 'Stratus 2'
    - regex: 'FS501'
      model: 'Nimbus 3'
    - regex: 'FS502'
      model: 'Cirrus 1'
    - regex: 'FS507'
      model: 'Cirrus 4'
    - regex: 'FS505'
      model: 'Nimbus 7'
    - regex: 'FS551'
      model: 'Nimbus 4'
    - regex: 'FS514'
      model: 'Cirrus 8'
    - regex: 'FS553'
      model: 'Cirrus 9'
    - regex: 'FS554'
      model: 'Power Plus FHD'
    - regex: 'Power Plus 3'
      model: 'Power Plus 3'
    - regex: 'FS517'
      model: 'Cirrus 11'
    - regex: 'FS516'
      model: 'Cirrus 12'
    - regex: 'FS518|Cirrus 13'
      model: 'Cirrus 13'
    - regex: 'FS520'
      model: 'Selfie 1'
    - regex: 'FS521'
      model: 'Power Plus 1'
    - regex: 'FS522'
      model: 'Cirrus 14'
    - regex: 'FS523'
      model: 'Cirrus 16'
    - regex: 'FS524'
      model: 'Knockout'
    - regex: 'FS526'
      model: 'Power Plus 2'
    - regex: 'FS527'
      model: 'Nimbus 17'
    - regex: 'FS528'
      model: 'Memory Plus'
    - regex: 'FS529'
      model: 'Сhamp'
    - regex: 'FS530'
      model: 'Power Plus XXL'
    - regex: 'FS454'
      model: 'Nimbus 8'
    - regex: 'FS452'
      model: 'Nimbus 2'
    - regex: 'FS512'
      model: 'Nimbus 10'
    - regex: 'FS510'
      model: 'Nimbus 12'
    - regex: 'FS451'
      model: 'Nimbus 1'
    - regex: 'FS405'
      model: 'Stratus 4'
    - regex: 'FS408'
      model: 'Stratus 8'
    - regex: 'FS409'
      model: 'Stratus 9'
    - regex: 'FS455'
      model: 'Nimbus 11'
    - regex: 'FS456'
      model: 'Nimbus 14'
    - regex: 'FS457'
      model: 'Nimbus 15'
    - regex: 'FS459'
      model: 'Nimbus 16'
    - regex: 'FS458'
      model: 'Stratus 7'
    - regex: '(?:Fly_)?IQ237(?:[);/ ]|$)'
      model: 'Dynamic'
    - regex: '(?:Fly_)?IQ238(?:[);/ ]|$)'
      model: 'Jazz'
    - regex: '(?:Fly_)?IQ240(?:[);/ ]|$)'
      model: 'Whizz'
    - regex: '(?:Fly_)?IQ255(?:[);/ ]|$)'
      model: 'Pride'
    - regex: '(?:Fly_)?IQ270(?: Firebird)?(?:[);/ ]|$)'
      model: 'Firebird'
    - regex: '(?:Fly_)?IQ275(?:[);/ ]|$)'
      model: 'Marathon'
    - regex: '(?:Fly_)?IQ285(?: Turbo)?(?:[);/ ]|$)'
      model: 'Turbo'
    - regex: '(?:Fly_)?IQ430(?:[);/ ]|$)'
      model: 'Evoke'
    - regex: '(?:Fly_)?IQ431(?:[);/ ]|$)'
      model: 'Glory'
    - regex: '(?:Fly_)?IQ432(?:[);/ ]|$)'
      model: 'Era Nano 1'
    - regex: '(?:Fly_)?IQ436(?:[);/ ]|$)'
      model: 'Era Nano 3'
    - regex: '(?:Fly_)?IQ4490(?:[);/ ]|$)'
      model: 'Era Nano 4'
    - regex: '(?:Fly_)?IQ434(?:[);/ ]|$)'
      model: 'Era Nano 5'
    - regex: '(?:Fly_)?IQ4406(?:[);/ ]|$)'
      model: 'Era Nano 6'
    - regex: '(?:Fly_)?IQ436i(?:[);/ ]|$)'
      model: 'Era Nano 9'
    - regex: '(?:Fly_)?IQ4490i(?:[);/ ]|$)'
      model: 'Era Nano 10'
    - regex: '(?:Fly_)?IQ440(?:[);/ ]|$)'
      model: 'Energy'
    - regex: '(?:Fly_)?IQ4401(?:[);/ ]|$)'
      model: 'Era Energy 2'
    - regex: '(?:Fly_)?IQ441(?:[);/ ]|$)'
      model: 'Radiance'
    - regex: '(?:Fly_)?IQ442 Quad(?:[);/ ]|$)'
      model: 'Miracle 2'
    - regex: '(?:Fly_)?IQ442(?:[);/ ]|$)'
      model: 'Miracle'
    - regex: '(?:Fly_)?IQ443(?:[);/ ]|$)'
      model: 'Trend'
    - regex: '(?:Fly_)?IQ444(?: Quattro)?(?:[);/ ]|$)'
      model: 'Diamond 2'
    - regex: '(?:Fly_)?IQ445(?:[);/ ]|$)'
      model: 'Genius'
    - regex: '(?:Fly_)?IQ446(?: Magic)?(?:[);/ ]|$)'
      model: 'Magic'
    - regex: '(?:Fly_)?IQ447(?:[);/ ]|$)'
      model: 'Era Life 1'
    - regex: '(?:Fly_)?IQ456(?:[);/ ]|$)'
      model: 'Era Life 2'
    - regex: '(?:Fly_)?IQ4409 Quad(?:[);/ ]|$)'
      model: 'Era Life 4'
    - regex: '(?:Fly_)?IQ448(?:[);/ ]|$)'
      model: 'Chic'
    - regex: '(?:Fly_)?IQ449(?:[);/ ]|$)'
      model: 'Pronto'
    - regex: '(?:Fly_)?IQ450(?:[);/ ]|$)'
      model: 'Horizon'
    - regex: '(?:Fly_)?IQ450[ _]Quattro(?:[);/ ]|$)'
      model: 'Horizon 2'
    - regex: '(?:Fly_)?IQ451(?:[);/ ]|$)'
      model: 'Vista'
    - regex: '(?:Fly_)?IQ452 Quad(?:[);/ ]|$)'
      model: 'Ego Vision 1'
    - regex: '(?:Fly_)?IQ454(?:[);/ ]|$)'
      model: 'Evo Tech 1'
    - regex: '(?:Fly_)?IQ4403(?:[);/ ]|$)'
      model: 'Energy 3'
    - regex: '(?:Fly_)?IQ4404(?:[);/ ]|$)'
      model: 'Spark'
    - regex: '(?:Fly_)?IQ4410 Quad(?:[);/ ]|$)'
      model: 'Phoenix'
    - regex: 'Phoenix 2(?:[);/ ]|$)'
      model: 'Phoenix 2'
    - regex: '(?:Fly_)?IQ4411(?:[);/ ]|$)'
      model: 'Energy 2'
    - regex: '(?:Fly_)?IQ4412 Quad(?:[);/ ]|$)'
      model: 'Coral'
    - regex: '(?:Fly_)?IQ4413[ _]Quad(?:[);/ ]|$)'
      model: 'Evo Chic 3'
    - regex: '(?:Fly_)?IQ4414 Quad(?:[);/ ]|$)'
      model: 'Evo Tech 3'
    - regex: '(?:Fly_)?IQ4415 Quad(?:[);/ ]|$)'
      model: 'Era Style 3'
    - regex: '(?:Fly_)?IQ4418(?:[);/ ]|$)'
      model: 'Era Style 4'
    - regex: '(?:Fly_)?IQ4504 Quad(?:[);/ ]|$)'
      model: 'Evo Energy 5'
    - regex: 'Tornado Slim(?:[);/ ]|$)'
      model: 'Tornado Slim'
    - regex: '(?:Fly_)?IQ([0-9]+[i]? ?(?:Quad|Firebird|Quattro)?)(?:[);/ ]|$)'
      model: 'IQ$1'
    - regex: 'Fly[ _\-]?([a-z0-9_]+)/'
      model: '$1'
      device: 'feature phone'
    - regex: 'Flylife[ _\-]?([^/;]+)(?: Build|[;)])'
      model: 'Flylife $1'
      device: 'tablet'
    - regex: 'Fly[ _\-]?([a-z0-9]+)'
      model: '$1'
    - regex: 'MERIDIAN-([a-z0-9]+)'
      model: '$1'

# FinePower
FinePower:
  regex: 'FinePower[_ ]?([AB][1-9]|[CD][1-9])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'FinePower[_ ]?([AB][1-9])(?:[);/ ]|$)'
      model: '$1'
      device: 'tablet'
    - regex: 'FinePower[_ ]?([CD][1-9])(?:[);/ ]|$)'
      model: '$1'

# Freetel (freetel.jp)
Freetel:
  regex: '(?:FTJ17[AC]00|FTJ152[ABCD]|FTU18A00|FT141B|FT142D(?:_LTEXM)?|FT142A?|FTJ161[AB]|FTJ1[56]2E|FTJ162[BD]|FT162D|FTE161[GE]|SAKURA_FTE1)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'FTJ152C'
      model: 'Samurai Miyabi'
    - regex: 'FTJ17A00(?:[);/ ]|$)'
      model: 'Rei 2 Dual'
    - regex: 'FTJ17C00(?:[);/ ]|$)'
      model: 'Priori 5'
    - regex: 'FTU18A00(?:[);/ ]|$)'
      model: 'Cricket Wave'
    - regex: 'FTJ161A'
      model: 'Musashi'
    - regex: 'FTE161E'
      model: 'Ice 2'
    - regex: 'FTE161G'
      model: 'Ice 2 Plus'
    - regex: 'FTJ162E'
      model: 'Raijin'
    - regex: 'FT141B'
      model: 'Nico'
    - regex: 'FT142D(?:_LTEXM)?(?:[);/ ]|$)'
      model: 'XM'
    - regex: 'FT142A?'
      model: 'Priori 2'
    - regex: 'FTJ152A'
      model: 'Priori 3'
    - regex: 'FTJ?162D'
      model: 'Priori 4'
    - regex: 'FTJ152B'
      model: 'Priori 3S LTE'
    - regex: 'FTJ152D'
      model: 'Samurai Kiwami'
    - regex: 'FTJ162B'
      model: 'Samurai Kiwami 2'
    - regex: 'FTJ161B'
      model: 'Samurai Rei'
    - regex: 'FTJ152E'
      model: 'Katana 1'
    - regex: 'SAKURA_FTE1'
      model: 'Sakura FTE1'

# Western Digital
Western Digital:
  regex: 'Westerndigital|WDSimpleBrowser'
  device: 'tv'
  models:
    - regex: 'Streamer2010'
      model: 'Streamer (2010)'

# Zeemi
Zeemi:
  regex: 'ZEEMI[ _-]'
  device: 'smartphone'
  models:
    - regex: 'ZEEMI[ _-]([^/;]+) Build'
      model: '$1'
    - regex: 'ZEEMI[ _-]([^/;)]+)(?:[);/]|$)'
      model: '$1'

# Zenek
Zenek:
  regex: 'Z5007|Z551[679]|Z6001'
  device: 'smartphone'
  models:
    - regex: 'Z5517'
      model: 'Leopardo'
    - regex: 'Z6001'
      model: 'Libelula'
    - regex: 'Z5007'
      model: 'Oso'
    - regex: 'Z5519'
      model: 'Pingûino'
    - regex: 'Z5516'
      model: 'Zebra'

# Nubia (www.nubia.com)
Nubia:
  regex: 'Nubia[ _]|(?:NX(?:403A|404H|406E|40[X2]|503A|50[5678]J|51[0123]J|521J|523J_V1|529Jq?|5[345]1J|5[48]9J|569[HJ]|5[67]3J|575J|59[157]J|60[1689]J|61[12679]J|62[79]J|65[19]J|6[126]9J|66[67]J|679J|70[129]J|711J|729J|709S|907J))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'NX711J'
      model: 'Z50'
    - regex: 'NX667J'
      model: 'Z30 Pro'
    - regex: 'NX701J'
      model: 'Z40 Pro'
    - regex: 'NX702J'
      model: 'Z40s Pro'
    - regex: 'NX709J'
      model: 'Red Magic 7 Pro'
    - regex: 'NX729J'
      model: 'Red Magic 8 Pro'
    - regex: 'NX709S'
      model: 'Red Magic 7S Pro'
    - regex: 'NX679J'
      model: 'Red Magic 7'
    - regex: 'NX669J'
      model: 'Red Magic 6'
    - regex: 'NX666J'
      model: 'Red Magic 6R'
    - regex: 'NX619J'
      model: 'Red Magic Mars'
    - regex: 'NX629J'
      model: 'Red Magic 3'
    - regex: 'NX40[X2]'
      model: 'Z5 Mini'
    - regex: 'NX(403[AE]|406E|404H)'
      model: 'Z5S Mini'
    - regex: 'NX503A'
      model: 'Z5S'
    - regex: 'NX506J'
      model: 'Z7'
    - regex: 'NX507J'
      model: 'Z7 Mini'
    - regex: 'NX505J'
      model: 'Z7 Max'
    - regex: 'NX508J'
      model: 'Z9'
    - regex: '(NX5[12]1J|Nubia Z9 mini)'
      model: 'Z9 Mini'
    - regex: '(NX510J|Nubia Z9 Max)'
      model: 'Z9 Max'
    - regex: 'NX512J'
      model: 'Z9 Max Dual'
    - regex: 'NX531J'
      model: 'Z11'
    - regex: 'NX523J_V1'
      model: 'Z11 Max'
    - regex: '(?:NX549J|Nubia Z11 mini S)'
      model: 'Z11 Mini S'
    - regex: '(?:NX529Jq?|Nubia Z11 mini)'
      model: 'Z11 Mini'
    - regex: 'NX606J'
      model: 'Z18'
    - regex: 'NX616J'
      model: 'Z18S'
    - regex: 'NX611J'
      model: 'Z18 Mini'
    - regex: 'NX551J'
      model: 'M2'
    - regex: 'NX563J'
      model: 'Z17'
    - regex: 'NX569[HJ]'
      model: 'Z17 Mini'
    - regex: 'NX589J'
      model: 'Z17 Mini S'
    - regex: 'NX591J'
      model: 'Z17 Lite'
    - regex: 'NX595J'
      model: 'Z17S'
    - regex: 'NX612J'
      model: 'V18'
    - regex: 'NX627J'
      model: 'Z20'
    - regex: 'NX513J'
      model: 'My Prague'
    - regex: 'NX601J'
      model: 'X6'
    - regex: 'NX609J'
      model: 'Red Magic'
    - regex: 'NX659J'
      model: 'Red Magic 5G'
    - regex: 'NX651J'
      model: 'Play'
    - regex: 'NX573J'
      model: 'M2 Lite'
    - regex: 'NX907J'
      model: 'M2 Play'
    - regex: 'NX541J'
      model: 'N1'
    - regex: 'NX597J'
      model: 'N1 Lite'
    - regex: 'NX575J'
      model: 'N2'
    - regex: 'NX6(?:08|17)J'
      model: 'N3'
    - regex: 'Nubia 8011'
      model: 'N80'
    - regex: 'Nubia[_ ]([^;)/]+)( build|[;)])'
      model: '$1'

# Rakuten (network.mobile.rakuten.co.jp)
Rakuten:
  regex: '(?:ZR01|3917JR|P710|C330)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'ZR01'
      model: 'Big'
    - regex: '3917JR'
      model: 'Big S'
    - regex: 'P710'
      model: 'Hand'
    - regex: 'C330'
      model: 'C330 Mini'

# ZTE
ZTE:
  regex: 'ZTE(?!; MegaFon)|AxonPhone|([a-z0-9]+)_USA_Cricket|(?:Blade[ _](?:E01|V0820|L110|L[2357]|L7A|S6|V[6789]|V8Q|V8 SE|V9 VITA|X7|A(310|320|460|465|475|510|520|530|602|51|30|3)|V580|V Ultra|Q Lux)|N9[15]8St|N818S|N951[0579]|N91[38]0|N9101|N913[267]|N952[01]|N9560|N9810|N799D|[UV]9180|[UV]9815|Z(?:5151V|610DL|6250CC|6400C|6410S|233V|331|5031O|559DL|6621O|667T|6750M|768G|792|81[25]|818L|82[08]|83[12359]|85[125]|851M|992|(557|71[67]|798|836|861|916)BL|986DL|(232|718|828)TL|(?:233|353|558|717|799|837|862|899|917|963)VL|955A|95[678]|965|97[018]|98[1237]|986U|999|936L)|V769M|Blade Apex2|G (LTE|Lux)|Vec|Z959|V865M|Z3001S|902ZT|KIS II Max|Kis 3|K3DX-V5G|Z930L|Optus X|Blade[ _](A[357] 2019-T|A[35] 2020-T|A7S 2020-T|A6 MAX|A0622|X9)|Z3153V|Z836F|Ctyon-A9|602ZT|MO-01[JK]|Z963U|402ZT|P545|P609|P650 Pro|dandelion|901ZT|A00[13]ZT|Z-01K|UZTE (?:GRAND V7|V808)|ZTG01|K8[37]CA|VERGATARIO ?5(?:PLUS)?|Axon mini|KIS C341|A103ZT|Z335(?:1S|[23]CA)|Z5156CC|B867RE|MEO Smart A80|P65[10] 2021|Z6201V|Z6252CA|Z6251V?|A2020N3|A202ZT)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    # explicit smartphone models
    - regex: 'P651 2021(?:[);/ ]|$)'
      model: 'Optus X (2021)'
    - regex: 'P650 2021(?:[);/ ]|$)'
      model: 'Optus X Pro (2021)'
    - regex: '7530N(?:[);/ ]|$)'
      model: 'Voyage 10'
    - regex: '9040N(?:[);/ ]|$)'
      model: 'Voyage 20 Pro'
    - regex: 'A2122H(?:[);/ ]|$)'
      model: 'S30 Pro 5G'
    - regex: '602ZT(?:[);/ ]|$)'
      model: 'Libero 2'
    - regex: 'A001ZT(?:[);/ ]|$)'
      model: 'Libero 3'
    - regex: 'A003ZT(?:[);/ ]|$)'
      model: 'Libero 5G'
    - regex: 'A103ZT(?:[);/ ]|$)'
      model: 'Libero 5G II'
    - regex: 'A202ZT(?:[);/ ]|$)'
      model: 'Libero 5G III'
    - regex: '901ZT(?:[);/ ]|$)'
      model: 'Libero S10'
    - regex: 'ZTG01(?:[);/ ]|$)'
      model: 'A1'
    - regex: 'ZTE T221(?:[);/ ]|$)'
      model: 'Blade AF3'
    - regex: 'A0616(?:[);/ ]|$)'
      model: 'Blade A3' # 2017
    - regex: 'Z3352CA(?:[);/ ]|$)'
      model: 'Blade A3 (2019)'
    - regex: 'Z3353CA(?:[);/ ]|$)'
      model: 'Blade A3 Plus'
    - regex: '(?:A7020(?:RU)?|Blade A7S 2020-T)(?:[);/ ]|$)'
      model: 'Blade A7s (2020)'
    - regex: 'A7000(?:[);/ ]|$)'
      model: 'Blade A7 (2020)'
    - regex: 'Z6252CA(?:[);/ ]|$)'
      model: 'Blade A7p (2020)'
    - regex: 'A7030|A71 5G'
      model: 'Blade A71'
    - regex: 'N939Sc'
      model: 'Blade A711'
    - regex: '7540N'
      model: 'Blade A72 5G'
    - regex: 'A0722(?:[);/ ]|$)'
      model: 'Blade A7 Vita'
    - regex: 'Z6201V(?:[);/ ]|$)'
      model: 'Blade A7'
    - regex: 'Blade 10 Vita(?:[);/ ]|$)'
      model: 'Blade 10 Vita'
    - regex: 'Z6251V(?:[);/ ]|$)'
      model: 'Blade 11 Prime'
    - regex: 'ZTE (?:2050|V1050)(?:RU)?'
      model: 'Blade 20 Smart'
    - regex: 'ZTE Axon 7(?:[);/ ]|$)'
      model: 'Axon 7'
    - regex: 'A2019G? Pro(?:[);/ ]|$)'
      model: 'Axon 9 Pro'
    - regex: '(?:902ZT|A2020N[23] Pro|A2020N3)(?:[);/ ]|$)'
      model: 'Axon 10 Pro 5G'
    - regex: 'A2020 SP(?:[);/ ]|$)'
      model: 'Axon 10s Pro 5G'
    - regex: 'A2021[LGH]?(?:[);/ ]|$)'
      model: 'Axon 11 5G'
    - regex: 'A2021E(?:[);/ ]|$)'
      model: 'Axon 11'
    - regex: '9000N(?:[);/ ]|$)'
      model: 'Axon 11 SE 5G'
    - regex: 'A2322G'
      model: 'Axon 30 5G'
    - regex: 'A2322|A2022L'
      model: 'Axon 30'
    - regex: 'A2022H'
      model: 'Axon 31 Pro 5G'
    - regex: 'A2022PG'
      model: 'Axon 30 Ultra'
    - regex: 'A2022P'
      model: 'Axon 30 Pro 5G'
    - regex: 'A2022'
      model: 'Axon 30 Pro'
    - regex: 'A2023P'
      model: 'Axon 40 Ultra'
    - regex: 'A2023G'
      model: 'Axon 40 Pro'
    - regex: 'A2016'
      model: 'Axon Elite'
    - regex: 'N799D(?:[);/ ]|$)'
      model: 'Blade Eg'
    - regex: 'Z818L(?:[);/ ]|$)'
      model: 'Allstar'
    - regex: 'Z3001S(?:[);/ ]|$)'
      model: 'Quest Plus'
    - regex: 'Z3351S(?:[);/ ]|$)'
      model: 'Quest 5'
    - regex: 'Ctyon-A9(?:[);/ ]|$)'
      model: 'Ctyon A9'
    - regex: 'K3DX-V5G(?:[);/ ]|$)'
      model: 'V5G'
    - regex: '(?:ZTE)?N918St(?:[);/ ]|$)'
      model: 'V5S'
    - regex: 'N958St(?:[);/ ]|$)'
      model: 'V5 Max'
    - regex: 'N9101(?:[);/ ]|$)'
      model: 'Imperial'
    - regex: 'Z963U(?:[);/ ]|$)'
      model: 'Imperial Max'
    - regex: 'N9120(?:[);/ ]|$)'
      model: 'Avid'
    - regex: 'Z5156CC(?:[);/ ]|$)'
      model: 'Avid 579'
    - regex: 'N9130(?:[);/ ]|$)'
      model: 'Speed'
    - regex: 'N9132(?:[);/ ]|$)'
      model: 'Prestige'
    - regex: 'N9136(?:[);/ ]|$)'
      model: 'Prestige 2'
    - regex: 'N9137(?:[);/ ]|$)'
      model: 'Tempo X'
    - regex: 'N9180(?:[);/ ]|$)'
      model: 'V5'
    - regex: 'N9510(?:[);/ ]|$)'
      model: 'Warp 4G'
    - regex: 'Z5151V(?:[);/ ]|$)'
      model: 'Visible R2'
    - regex: 'N9517(?:[);/ ]|$)'
      model: 'Blade Force'
    - regex: 'Z559DL(?:[);/ ]|$)'
      model: 'Blade T2'
    - regex: '402ZT(?:[);/ ]|$)'
      model: 'Blade Q+'
    - regex: '(?:ZTE[_ ])?Blade[ _]Q[ _]Lux(?:[);/ ]|$)'
      model: 'Blade Q Lux'
    - regex: 'ZTE T320(?:[);/ ]|$)'
      model: 'Blade GF3'
    - regex: 'N9515(?:[);/ ]|$)'
      model: 'Warp Sync'
    - regex: 'N9519(?:[);/ ]|$)'
      model: 'Warp 7'
    - regex: 'N9520(?:[);/ ]|$)'
      model: 'Boost Max'
    - regex: 'N9521(?:[);/ ]|$)'
      model: 'Boost Max+'
    - regex: 'N9560(?:[);/ ]|$)'
      model: 'Max XL'
    - regex: 'N9810(?:[);/ ]|$)'
      model: 'Vital'
    - regex: '[UV]9180(?:[);/ ]|$)'
      model: 'V5 Red Bull'
    - regex: '[UV]9815(?:[);/ ]|$)'
      model: 'Grand Memo LTE'
    - regex: 'V779M'
      model: 'Joey Jump 2'
    - regex: 'V807'
      model: 'Blade C'
    - regex: 'V809'
      model: 'Blade C2'
    - regex: 'ZTE[_ ]Blade[_ ](C2|V7)[_ ]Plus'
      model: 'Blade $1 Plus'
    - regex: 'Blade G Plus'
      model: 'Blade G Plus'
    - regex: 'ZTE_Blade_III'
      model: 'Blade III'
    - regex: '(?:ZTE_)?V829'
      model: 'Blade G Pro'
    - regex: 'V882'
      model: 'Lord'
    - regex: 'V967S'
      model: 'Grand X2'
    - regex: 'V970M?|V987'
      model: 'Grand X'
    - regex: 'Z959(?:[);/ ]|$)'
      model: 'Grand X3'
    - regex: 'V8000'
      model: 'Nova 4'
    - regex: 'Z95[67]'
      model: 'Grand X4'
    - regex: 'Z987'
      model: 'Grand X Max+'
    - regex: '(?:ZTE_)?Grand[ _]Era'
      model: 'Grand Era'
    - regex: 'UZTE GRAND V7' # UZTE
      model: 'Grand V7'
    - regex: 'V788D'
      model: 'Kis Plus'
    - regex: 'Z331(?:[);/ ]|$)'
      model: 'Z331'
    - regex: 'N818S(?:[);/ ]|$)'
      model: 'N818S'
    - regex: 'ZTE[_ ]V0840(?:[);/ ]|$)'
      model: 'Small Fresh 5'
    - regex: 'Z5031O(?:[);/ ]|$)'
      model: 'Optus X Spirit 2'
    - regex: 'P545(?:[);/ ]|$)'
      model: 'Optus X Power 2'
    - regex: 'P609(?:[);/ ]|$)'
      model: 'Optus X Wave'
    - regex: 'Optus X Start(?:[);/ ]|$)'
      model: 'Optus X Start'
    - regex: 'BA520(?:[);/ ]|$)'
      model: 'Blade A520'
    - regex: 'Blade A(5[12]) Lite(?:[);/ ]|$)'
      model: 'Blade A$1 Lite'
    - regex: 'Blade L2 Plus(?:[);/ ]|$)'
      model: 'Blade L2 Plus'
    - regex: '(?:ZTE_)?Blade[ _]L2(?:[);/ ]|$)'
      model: 'Blade L2'
    - regex: 'Blade L3 Plus(?:[);/ ]|$)'
      model: 'Blade L3 Plus'
    - regex: 'Blade L3 Apex(?:[);/ ]|$)'
      model: 'Blade L3 Apex'
    - regex: 'Blade L3(?:[);/ ]|$)'
      model: 'Blade L3'
    - regex: 'ZTE[ _]T610(?:[);/ ]|$)'
      model: 'Blade L4'
    - regex: 'ZTE[ _]Blade L4 Pro(?:[);/ ]|$)'
      model: 'Blade L4 Pro'
    - regex: '(?:Blade L5 Plus|BLADE L0510)(?:[);/ ]|$)'
      model: 'Blade L5 Plus'
    - regex: 'Blade L6(?:[);/ ]|$)'
      model: 'Blade L6'
    - regex: 'Blade L7A(?:[);/ ]|$)'
      model: 'Blade L7A'
    - regex: 'Blade L(\d+)(?:RU)?'
      model: 'Blade L$1'
    - regex: 'Blade A([357]) (20(?:19|20))'
      model: 'Blade A$1 ($2)'
    - regex: 'ZTE BV0720(?:[);/ ]|$)'
      model: 'Blade A2'
    - regex: 'Blade A[35] 2020-T(?:[);/ ]|$)'
      model: 'Blade A$1 (2020)'
    - regex: 'ZTE C880A(?:[);/ ]|$)'
      model: 'Blade A1'
    - regex: 'Blade A([35]1?) Lite'
      model: 'Blade A$1 Lite'
    - regex: 'Blade (S6|A[35]1?) Plus'
      model: 'Blade $1 Plus'
    - regex: 'BLADE A0622(?:[);/ ]|$)'
      model: 'Blade A6'
    - regex: 'BLADE (?:A6 MAX|A0605)(?:[);/ ]|$)'
      model: 'Blade A6 Max'
    - regex: 'A0622(?:[);/ ]|$)'
      model: 'Blade A6 Lite'
    - regex: 'Blade S6 Lite(?:[);/ ]|$)'
      model: 'Blade S6 Lite'
    - regex: 'Blade S6(?:[);/ ]|$)'
      model: 'Blade S6'
    - regex: 'BLADE A5 PRO(?:[);/ ]|$)'
      model: 'Blade A5 Pro'
    - regex: 'T920(?:[);/ ]|$)'
      model: 'Blade S7'
    - regex: 'ZTE[ _]T617(?:[);/ ]|$)'
      model: 'Blade D Lux'
    - regex: 'Blade L210'
      model: 'Blade L210'
    - regex: '(?:ZTE_)?Blade_A5_2019'
      model: 'Blade A5'
    - regex: 'BLADE V Ultra(?:[);/ ]|$)'
      model: 'Blade V Ultra'
    - regex: 'Blade V6 MAX(?:[);/ ]|$)'
      model: 'Blade V6 Max'
    - regex: 'Blade V6 Plus(?:[);/ ]|$)'
      model: 'Blade V6 Plus'
    - regex: 'Blade (?:V7 Lite|V0720)(?:[);/ ]|$)'
      model: 'Blade V7 Lite'
    - regex: 'BLADE V0710(?:[);/ ]|$)'
      model: 'Blade V7'
    - regex: 'Blade V([67])(?:[);/ ]|$)'
      model: 'Blade V$1'
    - regex: 'BV0800(?:[);/ ]|$)'
      model: 'Blade V8'
    - regex: 'ZTE Blade V1000|(?:ZTE_)?V1000'
      model: 'Blade V10'
    - regex: 'Z6750M(?:[);/ ]|$)'
      model: 'Blade X1 5G'
    - regex: 'Blade X([79])(?:[);/ ]|$)'
      model: 'Blade X$1'
    - regex: 'ZTE T630(?:[);/ ]|$)'
      model: 'Blade X5'
    - regex: 'ZTE T520(?:[);/ ]|$)'
      model: 'Blade L5'
    - regex: 'Blade (?:V8Q|V0840)(?:[);/ ]|$)'
      model: 'Blade V8Q'
    - regex: 'Blade V8 SE(?:[);/ ]|$)'
      model: 'Blade V8 SE'
    - regex: 'BLADE (?:V0850|V8 Mini)(?:[);/ ]|$)'
      model: 'Blade V8 Mini'
    - regex: 'BLADE V0920|ZTE-V9VITA'
      model: 'Blade V9 Vita'
    - regex: 'ZTE 8030'
      model: 'Blade V30 Vita'
    - regex: 'ZTE 8031'
      model: 'Blade V2022 4G'
    - regex: 'ZTE 9030N'
      model: 'Blade S30'
    - regex: 'ZTE 9030'
      model: 'Blade V30'
    - regex: 'ZTE A7040'
      model: 'Blade V40 Smart'
    - regex: 'ZTE 8045'
      model: 'Blade V40 Vita'
    - regex: 'Blade V(9|10) Vita(?:[);/ ]|$)'
      model: 'Blade V$1 Vita'
    - regex: 'Blade V([89]|10)(?:[);/ ]|$)'
      model: 'Blade V$1'
    - regex: 'BLADE V0820(?:[);/ ]|$)'
      model: 'Blade V8 Lite'
    - regex: '(?:Blade[ _])?(Apex2|G (LTE|Lux)|Vec)(?:[);/ ]|$)'
      model: 'Blade $1'
    - regex: 'Z768G(?:[);/ ]|$)'
      model: 'Midnight'
    - regex: 'Z820'
      model: 'Obsidian'
    - regex: 'Z986U'
      model: 'Blade Max 3'
    - regex: 'Z6410S'
      model: 'Blade Max 2s'
    - regex: 'Z610DL'
      model: 'Blade Max View'
    - regex: 'Z971'
      model: 'Blade Spark'
    - regex: 'Z978'
      model: 'Blade V8 Pro'
    - regex: 'Z839'
      model: 'Blade Vantage'
    - regex: 'Z3153V'
      model: 'Blade Vantage 2'
    - regex: 'Z930L'
      model: 'Unico LTE'
    - regex: 'Z965'
      model: 'Blade X'
    - regex: 'Z6400C'
      model: 'Blade X2 Max'
    - regex: 'Z981'
      model: 'Blade Z Max Pro'
    - regex: 'Z982'
      model: 'Blade Z Max'
    - regex: 'Z983'
      model: 'Blade X Max'
    - regex: 'Z717[BV]L(?:[);/ ]|$)'
      model: 'Citrine LTE'
    - regex: 'Z233VL(?:[);/ ]|$)'
      model: 'Cymbal-C LTE'
    - regex: 'Z233V'
      model: 'Cymbal LTE'
    - regex: 'Z232TL'
      model: 'Cymbal-G LTE'
    - regex: 'Z353VL'
      model: 'Cymbal-T LTE'
    - regex: 'Z718TL'
      model: 'Jasper LTE'
    - regex: 'KIS II Max'
      model: 'Kis II Max'
    - regex: 'Kis 3'
      model: 'Kis 3'
    - regex: '(?:Z798BL|Z799VL)(?:[);/ ]|$)'
      model: 'Majesty Pro LTE'
    - regex: 'Z899VL'
      model: 'Majesty Pro Plus LTE'
    - regex: 'Z828TL'
      model: 'Midnight Pro LTE'
    - regex: '(?:ZTE-)?Z792'
      model: 'Fanfare'
    - regex: '(?:ZTE-)?Z812'
      model: 'Maven'
    - regex: 'Z815'
      model: 'Fanfare 2'
    - regex: 'Z831'
      model: 'Maven 2'
    - regex: 'Z832'
      model: 'Sonata 3'
    - regex: 'Z835'
      model: 'Maven 3'
    - regex: 'Z851(?:[);/ ]|$)'
      model: 'Prelude Plus'
    - regex: 'Z851M'
      model: 'Overture 3'
    - regex: 'Z852'
      model: 'Fanfare 3'
    - regex: 'Z828'
      model: 'Avid Plus'
    - regex: 'Z855'
      model: 'Avid 4'
    - regex: 'Z833'
      model: 'Avid TRIO'
    - regex: '(?:Z836BL|Z837VL|Z836F)(?:[);/ ]|$)'
      model: 'ZFive 2 LTE'
    - regex: 'Z558VL'
      model: 'ZFive C LTE'
    - regex: 'Z557BL'
      model: 'ZFive G LTE'
    - regex: '(?:Z861BL|Z862VL)(?:[);/ ]|$)'
      model: 'ZFive L LTE'
    - regex: 'Z916BL'
      model: 'ZMax Grand LTE'
    - regex: 'Z917VL'
      model: 'ZMax Champ LTE'
    - regex: '(?:Z958|Z955A)(?:[);/ ]|$)'
      model: 'ZMax 2'
    - regex: 'dandelion(?:[);/ ]|$)'
      model: 'ZMax 3'
    - regex: 'Z6250CC(?:[);/ ]|$)'
      model: 'ZMax 10'
    - regex: 'Z963VL'
      model: 'Max Duo LTE'
    - regex: 'Z970'
      model: 'ZMax Z970'
    - regex: 'Z986DL'
      model: 'MAX Blue LTE'
    - regex: '(?:ZTE[-_])?Z992'
      model: 'Avail 2'
    - regex: '(?:Z999|Z-01K)(?:[);/ ]|$)'
      model: 'Axon M'
    - regex: 'B201[56]|Axon mini'
      model: 'Axon Mini'
    - regex: 'A2015'
      model: 'Axon Tianji'
    - regex: 'A2017[GU]?'
      model: 'Axon 7'
    - regex: 'C2017'
      model: 'Axon 7 Max'
    - regex: 'A2018'
      model: 'Axon 7s'
    - regex: 'B2017G'
      model: 'Axon 7 Mini'
    - regex: '(?:A2020(?:RU|[GU])? Pro|Axon 10 Pro)(?:[);/ ]|$)'
      model: 'Axon 10 Pro'
    - regex: 'Z667T'
      model: 'Zinger'
    - regex: 'Skate 2'
      model: 'Skate 2'
    - regex: 'V?975|geek'
      model: 'Geek'
    - regex: 'Z716BL'
      model: 'Citrine LTE'
    - regex: 'X500'
      model: 'Score'
    - regex: 'X501'
      model: 'Groove'
    - regex: '(?:ZTE-)?G-X991'
      model: 'Rio'
    - regex: 'F-450'
      model: 'Adamant'
    - regex: 'Z936L(?:[);/ ]|$)'
      model: 'Lever'
    - regex: 'MO-01[JK](?:[);/ ]|$)'
      model: 'Mono'
    - regex: 'V865M(?:[);/ ]|$)'
      model: 'V865M'
    - regex: 'Z6621O(?:[);/ ]|$)'
      model: 'Optus X Vista'
    - regex: 'P650 Pro(?:[);/ ]|$)'
      model: 'Optus X Pro LTE'
    - regex: 'V769M(?:[);/ ]|$)'
      model: 'Leo Q2'
    - regex: 'VERGATARIO 5(?:[);/ ]|$)'
      model: 'Vergatario 5'
    - regex: 'VERGATARIO5PLUS(?:[);/ ]|$)'
      model: 'Vergatario 5 Plus'
    - regex: 'ZTE V5 PRO(?:[);/ ]|$)'
      model: 'V5 Pro'
    - regex: 'ZTE 8012N'
      model: 'Blade V2021 5G'
    - regex: 'ZTE 9000'
      model: 'Blade V2020'
    - regex: 'ZTE 8000'
      model: 'Blade V2020 Vita'
    - regex: 'KIS C341'
      model: 'Kis C341'
    - regex: 'MEO Smart A80'
      model: 'MEO Smart A80'

    - regex: 'A2121[LE]?(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Axon 20 5G'
    - regex: 'ZTE 8010'
      device: 'phablet'
      model: 'Blade V2020 Smart'

    # explicit tv models
    - regex: 'B867RE(?:[);/ ]|$)'
      device: 'tv'
      model: 'ZXV10 B867RE'

    # explicit tablet models
    - regex: 'K83CA(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Grand X View 3'
    - regex: 'K87CA(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Grand X View 4'
    - regex: 'ZTE-K88(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Trek 2' # AT&T
    - regex: 'ZTE-K92(?:[);/ ]|$)'
      device: 'tablet'
      model: 'PrimeTime'

    - regex: 'AxonPhone ([^;/]+) Build'
      model: 'AxonPhone $1'
    - regex: '([a-z0-9]+)_USA_Cricket'
      model: '$1'
    - regex: 'ZTE[- ](V98|V96A|V81|V70)(?:[);/ ]|$)'
      model: '$1'
      device: 'tablet'
    - regex: 'Blade[_ ](A(\d+)C?|L111|V580|E01)(?:[);/ ]|$)'
      model: 'Blade $1'
    - regex: 'Blade[_ ]V0730(?:[);/ ]|$)'
      model: 'Blade V7'
    - regex: 'Blade[_ ]V0800(?:[);/ ]|$)'
      model: 'Blade V8'
    - regex: 'Blade[_ ]V1000(?:[);/ ]|$)'
      model: 'Blade V10'
    - regex: 'ZTE B(A601|A910|A510)(?:[);/ ]|$)'
      model: 'Blade $1'
    - regex: 'ZTE Blade (A[35]1|A7s)'
      model: 'Blade $1'
    - regex: 'ZTE BA610T(?:[);/ ]|$)'
      model: 'Blade A610'
    - regex: 'ZTE[- ]([a-z0-9\-_ ]+) Build'
      model: '$1'
    - regex: 'ZTE-(?:G |G-)?([a-z0-9 _]+)'
      model: '$1'
    - regex: 'U?ZTE[ _]?([a-z0-9]+)'
      model: '$1'

# Onix
Onix:
  regex: '(?:ONIX S405|AT101-1116|ONIX_8_3G_01)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(AT101-1116)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'ONIX_8_3G_01(?:[);/ ]|$)'
      model: '8" Tablet 3G'
    - regex: '(S405)(?:[);/ ]|$)'
      device: 'smartphone'
      model: '$1'

Zuum:
  regex: 'Zuum[ _-]|Android 6.+ UNIQ(?: Build|[);])|(?:ROCKET III?|Akus (?:PRO|[ZP]1?)|AURA_Z|COVET|MAGNO(?:-S)?|ONIX(?: S)?|STEDI|STELLAR(?:[ _](?:Z|PRO|[MP]1|M2))?|GRAVITY [ZM]|AURA (?:PLUS JLO|PRO JLO|PRO|X)|COVET_PRO_LITE|RONI|Android.*; (?:GRANT|LIMIT)|Gravity Life|ULTRA Z)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'AKUS PRO'
      model: 'Akus Pro'
    - regex: 'AKUS ([ZP]1?)'
      model: 'Akus $1'
    - regex: 'AURA_Z(?:[);/ ]|$)'
      model: 'Aura Z'
    - regex: 'COVET_PRO_LITE'
      model: 'Covet Pro Lite'
    - regex: 'COVET PRO'
      model: 'Covet Pro'
    - regex: 'COVET Mini'
      model: 'Covet Mini'
    - regex: 'COVET( Z)?'
      model: 'Covet$1'
    - regex: 'MAGNO PLUS'
      model: 'Magno Plus'
    - regex: 'MAGNO-S'
      model: 'Magno S'
    - regex: 'MAGNO( C1?)?'
      model: 'Magno$1'
    - regex: 'ONIX S'
      model: 'Onix S'
    - regex: 'ONIX'
      model: 'Onix'
    - regex: 'STEDI'
      model: 'Stedi'
    - regex: 'STELLAR PRO'
      model: 'Stellar Pro'
    - regex: 'STELLAR PLUS'
      model: 'Stellar Plus'
    - regex: 'STELLAR ([MP]\d|Z)'
      model: 'Stellar $1'
    - regex: 'STELLAR MINI'
      model: 'Stellar Mini'
    - regex: 'STELLAR Max'
      model: 'Stellar Max'
    - regex: 'STELLAR'
      model: 'Stellar'
    - regex: 'GRAVITY ([MZ])'
      model: 'Gravity $1'
    - regex: 'Gravity Life'
      model: 'Gravity Life'
    - regex: 'AURA PLUS JLO'
      model: 'Aura Plus J.Lo'
    - regex: 'AURA PRO JLO'
      model: 'Aura Pro J.Lo'
    - regex: 'AURA PRO'
      model: 'Aura Pro'
    - regex: 'AURA X'
      model: 'Aura X'
    - regex: 'RONI'
      model: 'Roni'
    - regex: 'ULTRA Z'
      model: 'Ultra Z'
    - regex: 'ROCKET (III?)'
      model: 'Rocket $1'
    - regex: 'Android 6.+; UNIQ(?: Build|[);])'
      model: 'Uniq'
    - regex: 'Android.+; LIMIT(?: Build|[);])'
      model: 'Limit'
    - regex: 'GRANT'
      model: 'Grant'
    - regex: 'Zuum[ _-]([^;/]+) Build'
      model: '$1'
    - regex: 'Zuum[ _-]?([^;/)]+)(?:[);/ ]|$)'
      model: '$1'

# Zen
Zen:
  regex: '(Admire[_ ][^/;]+|Cinemax[^/;)]+)(?:Build|\))|(?:AdmireGlam|M72 Smart)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'AdmireGlam'
      model: 'Admire Glam'
    - regex: '(M72 Smart)'
      model: '$1'
    - regex: '(Admire[_ ][^/;]+|Cinemax[^/;)]+)(?:Build|\))'
      model: '$1'

# Zync
Zync:
  regex: 'ZYNC|(Cloud Z5|Z1000|Z18|Z99|Z99[_ ][23]G|Z99|Z900[_ ]Plus|Z909|Z930[+]|Z930)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(Z18| DuZ99al Core|Z99[_ ][23]G|Z99 Dual Core|Z99|Z900[_ ]Plus|Z909|Z930[+]|Z930)'
      model: '$1'
    - regex: '(Z1000[^/;]+)Build'
      model: '$1'
    - regex: 'Cloud (Z5)'
      model: 'Cloud $1'
    - regex: 'ZYNC Cloud[ _]([^;]+)Build'
      model: 'Cloud $1'
    - regex: 'ZYNC[ _]([^;]+)Build'
      model: '$1'

# Lemhoov
Lemhoov:
  regex: 'Lemhoov'
  device: 'smartphone'
  models:
    - regex: 'Lemhoov[ _-]([^/;]+) Build'
      model: '$1'

# MTC (MTS)
MTC:
  regex: 'MTC[ _](968|97[82]|970|982[OT]?|1078)|(?:MTC[_ ])?SMART[ _]?(?:Race[2]?|Sprint|Run|Turbo|Surf[2]?)[ _]4G|MTC975|Smart Bit|Smart_(?:LINE|Light)|(?:MTC[ _])?SMART[ _](?:Run|Start[_ ][23])|Redbox Mini 5\(MTS\)|MTS TV|DV8304-C|Osmartphona'
  device: 'smartphone'
  models:
    - regex: 'Osmartphona'
      model: 'Osmartphona'
    - regex: 'MTC[ _]?(97[258]|970[H]?|982[OT]?|968)'
      model: '$1'
    - regex: 'MTC[ _](1078)'
      model: '$1'
      device: 'tablet'
    - regex: 'SMART[ _]Race[ _]4G'
      model: 'Smart Race 4G'
    - regex: 'SMART[ _]Race2[ _]4G'
      model: 'Smart Race 2 4G'
    - regex: '(?:MTC_)?SMART[ _]Sprint[ _]4G'
      model: 'Smart Sprint 4G'
    - regex: '(?:MTC_)?SMART[ _]Start[ _]([23])'
      model: 'Smart Start $1'
    - regex: 'Smart_LINE'
      model: 'Smart Line'
    - regex: 'Smart_Light'
      model: 'Smart Light'
    - regex: 'Smart Bit'
      model: 'Smart Bit'
    - regex: 'SMART[ _]?Run(?:[ _]4G)?'
      model: 'Smart Run 4G'
    - regex: 'SMART[ _]Surf2[ _]4G'
      model: 'Smart Surf 2 4G'
    - regex: 'SMART[ _]Surf[ _]4G'
      model: 'Smart Surf 4G'
    - regex: 'SMART[ _]Turbo[ _]4G'
      model: 'Smart Turbo 4G'
    - regex: 'Redbox Mini 5\(MTS\)'
      device: 'tv'
      model: 'Redbox Mini 5'
    - regex: 'MTS TV Box 317'
      device: 'tv'
      model: 'SB-317'
    - regex: 'DV8304-C'
      device: 'tv'
      model: 'SuperWave DV8304-C'

# MegaFon
MegaFon:
  regex: 'MegaFon|MFLoginPh|MegLogPh|(MFLogin[34]T?|MS3B|SP-A5|SP-A20i)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'MFLoginPh|MegLogPh'
      model: 'Login+'
    - regex: 'MFLogin4'
      model: 'Login 4 LTE'
    - regex: 'MFLogin3T|MegaFon Login 3'
      model: 'Login 3'
      device: 'tablet'
    - regex: 'MS3B|Megafon Optima'
      model: 'Optima'
    - regex: 'SP-A20i'
      model: 'Mint'
    - regex: '(SP-A5|SP-W1)'
      model: '$1'
    - regex: 'MegaFon V9+'
      device: 'tablet'
      model: 'V9 Plus'

# Inoi
Inoi:
  regex: 'INOI|(?:A126)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'inoiPad mini 2\+32 Wi-Fi\+3G'
      device: 'tablet'
      model: 'Pad Mini 2+32'
    - regex: 'inoiPad 2\+32 Wi-Fi\+3G'
      device: 'tablet'
      model: 'Pad 2+32'
    - regex: 'inoiPad mini 1\+16 Wi-Fi'
      device: 'tablet'
      model: 'Pad Mini 1+16 WiFi'
    - regex: 'INOI easyphone'
      model: 'Easy Phone'
    - regex: 'INOI (2|5) Lite (2019|2021)'
      model: '$1 Lite ($2)'
    - regex: 'INOI[_ ]([13])[_ ]LITE'
      model: '$1 Lite'
    - regex: ' (A126)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'INOI ([257]) (?:\d\+\d+ )?(2019|202[01])(?:[);/ ]|$)'
      model: '$1 ($2)'
    - regex: 'INOI[_ ]([^);/]+)(?: Build|[;)])'
      model: '$1'

# Vertex (vertex-digital.ru)
Vertex:
  regex: 'Vertex[_ -]|(?:Luck|Luck_L1[02]0_[34]G|Lion_Dual|V709X|TAB X8|TAB X10|Tab [43]G (?:7-2|8-1|10-1)|Tab_3G_7-1|Pro_P3[01]0_4G|Lion_DC|Baccara|Eagle[ _]4G|ImpressMAX)(?:[);/ ]|$)|Impress[ _]([^;/]+)(?:Build|\))'
  device: 'smartphone'
  models:
    - regex: '(?:Vertex_)?Luck[_ ]L[_ ](5045)[_ ]([34])G'
      model: 'Luck L $1 $2G'
    - regex: '(Lion_Dual|Lion_DC|Baccara|Eagle[ _]4G|Luck[_ ]L1[023]0(?:[_ ][34]G)?|Luck)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Impress ?MAX(?:[);/ ]|$)'
      model: 'Impress Max'
    - regex: 'IMPRESS ECLIPSE(?:[);/ ]|$)'
      model: 'Impress Eclipse'
    - regex: 'Pro_P(3[01]0)_4G(?:[);/ ]|$)'
      model: 'Pro P$1 4G'
    - regex: 'Impress_Luck[_ ]?4G_NFC(?:[);/ ]|$)'
      model: 'Impress Luck 4G NFC'
    - regex: '(Impress[ _][a-z]+)([34])G(?:Build|\))'
      model: '$1 $2G'
    - regex: '(Impress[ _](?:[^;/]+))(?:Build|\))'
      model: '$1'
    - regex: '(V709X)'
      device: 'tablet'
      model: '$1'
    - regex: 'TAB X(8|10)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Tab X$1'
    - regex: 'Tab[ _]([43])G[ _]([78]|10)-([21])'
      device: 'tablet'
      model: 'Tab $1G $2.$3"'

# Starway
Starway:
  regex: 'Andromeda[ _]S(707|84[05]|850|8)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'Andromeda S$1'

# Savio
Savio:
  regex: ' (TB-PO1|TB-B01|TB-G01)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Schok (https://www.schokgear.com/)
Schok:
  regex: 'Schok[ _]|FreedomTurboXL'
  device: 'smartphone'
  models:
    - regex: 'Schok Volt SV55'
      model: 'Volt SV55'
    - regex: 'FreedomTurboXL'
      model: 'Freedom Turbo XL'

# Simbans
Simbans:
  regex: 'TangoTab|Presto[ )]|PicassoTab_[X9]|Ultimax|Valumax|S72-B|SX2W'
  device: 'tablet'
  models:
    - regex: 'TangoTab[_ ]?(\d+|X)'
      model: 'TangoTab $1'
    - regex: 'TangoTab'
      model: 'TangoTab'
    - regex: 'Ultimax'
      model: 'Ultimax'
    - regex: 'Valumax'
      model: 'Valumax'
    - regex: 'PicassoTab_(XL?|9)'
      model: 'Picasso Tab $1'
    - regex: 'Presto'
      model: 'Presto'
    - regex: 'S72-B'
      model: 'S72-B'
    - regex: 'SX2W'
      model: 'SX2W'

# MYFON
MYFON:
  regex: 'MYPAD7s'
  device: 'tablet'
  model: 'My Pad 7s'

# X-TIGI
X-TIGI:
  regex: 'X[-_]TIGI|Hope(?:[78]|10)[_ ](?:Mate|Max|Pro|Plus)|JOY(?:10|8) Mate|Photo_P15_Lite|SHARP_2|SHARP1|V18 pro_A'
  device: 'smartphone'
  models:
    - regex: 'X-TIGI_JOY10_PRO'
      model: 'Joy 10 Pro'
      device: 'tablet'
    - regex: 'X[_ ]TIGI[_ ]JOY7_TV'
      model: 'Joy 7 TV'
      device: 'tablet'
    - regex: '(?:X_TIGI_)?JOY(10|[78])[ _]Mate'
      model: 'Joy $1 Mate'
      device: 'tablet'
    - regex: 'Hope([78])[_ ](Mate|Max)'
      model: 'Hope $1 $2'
      device: 'tablet'
    - regex: 'Hope10[_ ]Pro'
      model: 'Hope 10 Pro'
      device: 'tablet'
    - regex: 'Hope10[_ ]Plus'
      model: 'Hope 10 Plus'
      device: 'tablet'
    - regex: 'X-TIGI_JOY7_MAX'
      model: 'Joy 7 Max'
      device: 'tablet'
    - regex: 'X-TIGI[_ ]V28[_ ]LTE'
      model: 'V28 LTE'
    - regex: 'X[-_]TIGI[_ ]V19'
      model: 'V19'
    - regex: 'V18 pro_A'
      model: 'V18 Pro'
    - regex: 'X[-_]TIGI[_ ]A1[_ ]?Plus'
      model: 'A1 Plus'
    - regex: 'X-TIGI[_ ]Photo[_ ]P11'
      model: 'Photo P11'
    - regex: 'Photo_P15_Lite'
      model: 'Photo P15 Lite'
    - regex: 'SHARP_?([12])'
      model: 'Sharp $1'
    - regex: 'X[-_]TIGI[ _-]([^/;)]+)(?: Build|[;)])'
      model: '$1'

# Hot Pepper (hotpeppermobile.com)
Hot Pepper:
  regex: '(?:HPP-(GS1|L55B)|VLE5)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'HPP-GS1'
      model: 'Ghost'
    - regex: 'VLE5'
      model: 'Poblano'
    - regex: 'HPP-L55B'
      model: 'Serrano'

# Xiaolajiao or Shenzhen Peppers xiaolajiao.com)
Xiaolajiao:
  regex: '(LA2-(?:L|S[N]?)|HLA Note(?:3|1-L)|L7620DE|20190416Q|20170608S|20180322D|20190325D|20190718Q|20190417Q|20180101M|20170605Q)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'HLA Note3(?:[);/ ]|$)'
      model: 'Red Pepper Note 3'
    - regex: 'HLA Note1-L(?:[);/ ]|$)'
      model: 'Note 1'
    - regex: '(LA2-(?:L|S[N]?))(?:[);/ ]|$)'
      model: '$1'
    - regex: '(20190416Q|L7620DE|20180101M|20170605Q)(?:[);/ ]|$)'
      model: '$1'
    - regex: '20170608S(?:[);/ ]|$)'
      model: 'Red Pepper Plus'
    - regex: '20180322D(?:[);/ ]|$)'
      model: 'E Sports'
    - regex: '20190325D(?:[);/ ]|$)'
      model: 'Red Pepper 8X Pro'
    - regex: '20190718Q(?:[);/ ]|$)'
      model: 'Red Pepper 9X'
    - regex: '20190417Q(?:[);/ ]|$)'
      model: 'Mate 30 Max'

# Ritmix
Ritmix:
  regex: '(RMD[-_](?:10(?:2[689]|30|5[089])|1121|75[017]|726|85[57]|870)|RMP-(?:450|50[56]|530|600))(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'RMD[-_](10(?:2[689]|30|5[089])|1121|75[017]|726|85[57]|870)(?:[);/ ]|$)'
      model: 'RMD-$1'
    - regex: 'RMP[-_](450|50[56]|530|600)(?:[);/ ]|$)'
      model: 'RMP-$1'
      device: 'smartphone'

# Ross&Moor
'Ross&Moor':
  regex: 'RM(D)?[-_](974R|600|550|790)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'RM$1-$2'

# R-TV
R-TV:
  regex: 'R-TV BOX[ _]?(MINI\+|X99|X10 PRO|[RXS]10)'
  device: 'tv'
  model: 'Box $1'

# NEXBOX
NEXBOX:
  regex: '(MXQ|MXQ-Pro)-NEXBOX|NEXBOX-([^) ]+)'
  device: 'tv'
  models:
    - regex: 'MXQ-Pro-NEXBOX'
      model: 'MXQ Pro'
    - regex: 'MXQ-NEXBOX'
      model: 'MXQ'
    - regex: 'NEXBOX-([^) ]+)'
      model: '$1'

# True or TrueSmart
'True':
  regex: ' TRUE BEYOND TAB 3G|HPH07|SMART[ _](4G Adventure Pro|MAX 4.0 PLUS|4G[ _](?:GEN C [45].[05]|M1 Plus|Champion|Speedy 5.0 Plus|Speedy[_ ]5inch|P1))|Alpha 5G'
  device: 'smartphone'
  models:
    - regex: 'Alpha 5G(?:[);/ ]|$)'
      model: 'Alpha 5G'
    - regex: 'SMART MAX 4.0 PLUS'
      model: 'Smart Max 4.0 Plus'
    - regex: 'SMART 4G Gen C ([45].[05])'
      model: 'Smart 4G Gen C $1"'
    - regex: 'SMART 4G Speedy 5.0 Plus'
      model: 'Smart 4G Speedy 5.0 Plus'
    - regex: 'SMART 4G Adventure Pro'
      model: 'Smart 4G Adventure Pro'
    - regex: 'SMART[ _]4G[_ ]Speedy[_ ]5inch'
      model: 'Smart 4G Speedy 5'
    - regex: 'SMART[ _]4G[_ ]Champion'
      model: 'Smart 4G Champion'
    - regex: 'SMART[ _]4G[_ ]P1 Prime'
      model: 'Smart 4G P1 Prime'
    - regex: 'SMART[ _]4G[_ ]P1'
      model: 'Smart 4G P1'
    - regex: 'SMART[ _]4G M1 Plus'
      model: 'Smart 4G M1 Plus'
    - regex: 'TRUE BEYOND TAB 3G'
      device: 'tablet'
      model: 'Beyond Tab 3G'

    - regex: 'HPH07'
      device: 'tv'
      model: 'ID TV HPH07'

Yandex:
  regex: '(?:YNDX-?000SB|YandexModule2-00001)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'YandexModule2-00001'
      device: 'tv'
      model: 'Module'
    - regex: 'YNDX-?000SB'
      model: 'YNDX-000SB'

# FORME
FORME:
  regex: 'FORME[ _-]'
  device: 'smartphone'
  models:
    - regex: 'FORME[ _-]F520(?:[);/ ]|$)'
      model: 'Forever'
    - regex: 'FORME[ _-](A[35]7|R7S?|P6)(?:[);/ ]|$)'
      model: '$1'

# Shuttle
Shuttle:
  regex: '(PNT-704[025])(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# BDF
BDF:
  regex: '(?:BDF[- ](?:819|P10|M107|K107H|KT107|MT6753|X20|P30)|K960N_MT(?:6580|6753)(?:_32_N)?|m107_\d+a_64_q|ZL80)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'BDF[- ](819|P10|M107|K107H|KT107|MT6753|X20|P30)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'm107_\d'
      model: 'M107'
    - regex: 'ZL80'
      model: 'ZL80'
    - regex: 'K960N_MT(6580|6753)(_32_N)?(?:[);/ ]|$)'
      model: 'BK960N MT$1'

# HiHi (https://www.hihi.co.uk)
HiHi:
  regex: 'HIHI-'
  device: 'tablet'
  models:
    - regex: 'HIHI-(4[01])KH-TAB-0?1'
      model: '$1KH-TAB-01'

# Hi or Hi TFG (https://www.hi-online.co.za/)
Hi:
  regex: '(?:(?<!Thrill )Boost(?:[ _](?:Hypa|Max|Ultra))?(?:[);/ ]|$)|HMR(?:5012|5450)|Crusader|(?:VHIX-)?VHIX-\w+(?:-[A-Z])?|32HSY119X|39HSY111X|55USY151X)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Boost[ _](Hypa|Max|Ultra)(?:[);/ ]|$)'
      model: 'Boost $1'
    - regex: 'Boost(?:[);/ ]|$)'
      model: 'Boost'
    - regex: 'HMR5012(?:[);/ ]|$)'
      model: 'Boost Go'
    - regex: '(HMR5450|Crusader)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'VHIX-40F152MSYb'
      device: 'tv'
      model: 'VHIX-40F152MSY'
    - regex: '(?:VHIX-)?VHIX-(\w+)'
      device: 'tv'
      model: 'VHIX-$1'
    - regex: '(32HSY119X|39HSY111X|55USY151X)(?:[);/ ]|$)'
      device: 'tv'
      model: '$1'

# Boost
Boost:
  regex: '(?:Pulse Retro|Pulse Sky|Pulse Glide|Cabana|StrikaPlay)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(Pulse Retro|Pulse Sky|Pulse Glide)'
      model: '$1'
    - regex: '(Cabana)'
      device: 'tablet'
      model: '$1'
    - regex: 'StrikaPlay'
      device: 'tablet'
      model: 'Strika Play'

# Highscreen
Highscreen:
  regex: 'HIGHSCREEN|(Easy[- ]Power(?:[- ]Pro)?|Pure[_ ](?:Power|F)|Power Ice(?: Max)?|Easy[_ ]([SFL]|XL)(?:_Pro)?|Razar_Pro|Power Rage(?: Evo)?|Zera-S-Power|Zera[ _][UFS]|Power[ _]?Five[ _]?(?:Pro|Evo|Max|Max(?:Lite|2))|Power(?:Four|Five)|BOOST II(?:se)?|Fest(?:XL)?(?:-Pro)?|Tasty|Boost3|Boost 3(?: Pro)? SE|Expanse|Hercules|Alpha Rage|VergeM|Ice2|Prime [LS]|Spade|Spark 2|Alpha GT[RX]|Wallet|Thunder|Razar|COSMO DUO|Prime Mini SE)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(Power Ice(?:[ ](?:Max|Evo))?|Power Rage(?: Evo)?|Zera[ _][UFS]|Alpha GT[RX]|Wallet)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'PowerFivePro(?:[);/ ]|$)'
      model: 'Power Five Pro'
    - regex: 'PowerFiveMaxLite(?:[);/ ]|$)'
      model: 'Power Five Max Lite'
    - regex: 'PowerFiveMax2(?:[);/ ]|$)'
      model: 'Power Five Max 2'
    - regex: 'Power Five Evo(?:[);/ ]|$)'
      model: 'Power Five Evo'
    - regex: 'Power Five Max(?:[);/ ]|$)'
      model: 'Power Five Max'
    - regex: 'Power[_ ]?Five(?:[);/ ]|$)'
      model: 'Power Five'
    - regex: 'Spade(?:[);/ ]|$)'
      model: 'Spade'
    - regex: 'Spark 2(?:[);/ ]|$)'
      model: 'Spark 2'
    - regex: 'FestXL-Pro(?:[);/ ]|$)'
      model: 'Fest XL Pro'
    - regex: 'FestXL(?:[);/ ]|$)'
      model: 'Fest XL'
    - regex: 'Fest-Pro(?:[);/ ]|$)'
      model: 'Fest Pro'
    - regex: 'Fest(?:[);/ ]|$)'
      model: 'Fest'
    - regex: 'PowerFour(?:[);/ ]|$)'
      model: 'Power Four'
    - regex: 'Pure[_ ]Power(?:[);/ ]|$)'
      model: 'Pure Power'
    - regex: 'Pure[ _]F(?:[);/ ]|$)'
      model: 'Pure F'
    - regex: 'Razar_Pro(?:[);/ ]|$)'
      model: 'Razar Pro'
    - regex: 'Razar(?:[);/ ]|$)'
      model: 'Razar'
    - regex: 'Easy[_ ]([SLF]|XL)[_ ]Pro(?:[);/ ]|$)'
      model: 'Easy $1 Pro'
    - regex: 'Easy[_ ]([SFL]|XL)(?:[);/ ]|$)'
      model: 'Easy $1'
    - regex: '(?:HIGHSCREEN )?Easy[- ]Power[- ]Pro(?:[);/ ]|$)'
      model: 'Easy Power Pro'
    - regex: '(?:HIGHSCREEN )?Easy-Power(?:[);/ ]|$)'
      model: 'Easy Power'
    - regex: 'BOOST II(?:[);/ ]|$)'
      model: 'Boost 2'
    - regex: 'BOOST IIse(?:[);/ ]|$)'
      model: 'Boost 2 SE'
    - regex: 'Boost 3 SE(?:[);/ ]|$)'
      model: 'Boost 3 SE'
    - regex: 'Boost 3 Pro SE(?:[);/ ]|$)'
      model: 'Boost 3 Pro SE'
    - regex: 'BOOST3(?:[);/ ]|$)'
      model: 'Boost 3'
    - regex: 'Zera-S-Power(?:[);/ ]|$)'
      model: 'Zera S Power'
    - regex: 'Tasty(?:[);/ ]|$)'
      model: 'Tasty'
    - regex: 'VergeM(?:[);/ ]|$)'
      model: 'Verge M'
    - regex: 'WinWin(?:[);/ ]|$)'
      model: 'WinWin'
    - regex: 'Expanse(?:[);/ ]|$)'
      model: 'Expanse'
    - regex: 'Hercules(?:[);/ ]|$)'
      model: 'Hercules'
    - regex: 'Thunder'
      model: 'Thunder'
    - regex: 'Alpha Rage(?:[);/ ]|$)'
      model: 'Alpha Rage'
    - regex: 'Ice2(?:[);/ ]|$)'
      model: 'Ice 2'
    - regex: 'Prime Mini SE(?:[);/ ]|$)'
      model: 'Prime Mini SE'
    - regex: 'Prime ([LS])(?:[);/ ]|$)'
      model: 'Prime $1'
    - regex: 'COSMO DUO'
      model: 'Cosmo Duo'

# CVTE
CVTE:
  regex: 'CVTE[_ ](MSD338_(:?1G|512M))(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Globex
Globex:
  regex: '(GU1011C|GU8012C|GU7013C|GU730C|GU-6012B)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'GU8012C(?:[);/ ]|$)'
      model: 'X8'
    - regex: 'GU-6012B(?:[);/ ]|$)'
      model: 'GU6012B'
    - regex: '(GU1011C|GU7013C|GU730C)(?:[);/ ]|$)'
      model: '$1'

# Atom
Atom:
  regex: 'ATOM-(108AM|216RK|216AM)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Qumo
Qumo:
  regex: 'QUMO[ _]?|(?:Quest[ _]?(?:408|410|45[56]|50[679])|Vega[ _]?78[23]|Sirius[ _]?(?:1001|890))(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(?:QUMO[ _]?)?Vega[ _]?(78[23]|8002)(?:[);/ ]|$)'
      model: 'Vega $1'
    - regex: 'Yooda(?:[);/ ]|$)'
      model: 'Yooda'
    - regex: 'Sirius[ _]?(1001|890)(?:[);/ ]|$)'
      model: 'Sirius $1'
    - regex: '(?:QUMO[ _]?)?(Sirius 101-4G 8GB Black|Altair 701 8GB Black|Altair 71 4GB Black|Altair 700[24]|Altair 70[16]|Vega_803i)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(?:QUMO[ _])?Quest[ _]?(35[34]|40[268]|410|45[2568]|47[46]|50[679]|5[137]0|574|600)(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Quest $1'

# Qubo (qubomobile.com)
Qubo:
  regex: '(?:Cronos|MINERVA(?:_32GB)?|X668_64GB|X626_4G|Hermes)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'MINERVA(?:_32GB)?(?:[);/ ]|$)'
      model: 'Minerva'
    - regex: 'X668_64GB(?:[);/ ]|$)'
      model: 'X668'
    - regex: '(Cronos|Hermes|X626_4G)(?:[);/ ]|$)'
      model: '$1'

# Umax (umax.cz)
Umax:
  regex: 'VisionBook[ _]|([78]Qa_3G|7A_3G|VB_10Q_Plus|10A_LTE_eea|(?:8|10)C_LTE|10L-PLUS)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(VisionBook[ _](?:10Qi|7Q[i]?|8Q[ei]?|P70|8Qi_3G)(?:[ _](?:[34]G|Plus|LTE))?)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(7A(?:[ _](?:[34]G)))(?:[);/ ]|$)'
      model: 'VisionBook $1'
    - regex: '([78])Qa_3G(?:[);/ ]|$)'
      model: 'VisionBook $1Qa 3G'
    - regex: 'VisionBook_10Q_LTE(?:[);/ ]|$)'
      model: 'VisionBook 10Q LTE'
    - regex: '(8|10)C_LTE(?:[);/ ]|$)'
      model: 'VisionBook $1C LTE'
    - regex: '10L-PLUS'
      model: 'VisionBook 10L Plus'
    - regex: 'VisionBook_10Q_Pro(?:[);/ ]|$)'
      model: 'VisionBook 10Q Pro'
    - regex: '10A_LTE_eea(?:[);/ ]|$)'
      model: 'VisionBook 10A LTE'
    - regex: 'VB_10Q_Plus(?:[);/ ]|$)'
      model: 'VisionBook 10Q Plus'
    - regex: 'VisionBook_P50Plus_LTE(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'VisionBook P50 Plus LTE'
    - regex: '(VisionBook[ _](?:P50 LTE|P55 X2 LTE|P55 LTE(?: Pro)?))(?:[);/ ]|$)'
      device: 'smartphone'
      model: '$1'

# Mann
Mann:
  regex: 'MANN[ _]|(ZUG 3|ZUG 5S(?: Q)?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'MANN[ _](8S)'
      model: '$1'
    - regex: '(ZUG 3|ZUG 5S(?: Q)?)(?:[);/ ]|$)'
      model: '$1'

# Unihertz (unihertz.com)
Unihertz:
  regex: '((?<!Astra )Titan(_pocket)?|Jelly-Pro|Jelly2(?:_JP)?|Atom_X?L|Ticktock|Titan Slim|TANK 01)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(Jelly)-Pro(?:[);/ ]|$)'
      model: '$1 Pro'
    - regex: 'Jelly2(?:_JP)?(?:[);/ ]|$)'
      model: 'Jelly 2'
    - regex: 'Titan_pocket'
      model: 'Titan Pocket'
    - regex: 'Titan Slim'
      model: 'Titan Slim'
    - regex: 'Ticktock'
      model: 'Ticktock'
    - regex: 'TANK 01'
      model: 'Tank 01'
    - regex: '(Titan|Atom_X?L)(?:[);/ ]|$)'
      model: '$1'

# Chuwi
Chuwi:
  regex: '(?:CW-(Hi8-super|Hi12|V99i?|V17HD3G|VX8-3G|V88-QUAD|V9-DUAL|V88S|Vi[78]|[HV]i10 (?:pro|plus))|Hi10 (?:Pro|plus)|HiPad[ -](?:X|Pro|Air|Max)|HiPadX|HiBox-hero|HiBook(?: pro)?|Hi[89] ?(?:Air|Pro)|HiPad ?Plus|Hi8SE|Vi8 plus|Vi10(?: ?Pro)?|Surpad|HiPadPro)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(CW-Hi8-super)(?:[);/ ]|$)'
      model: 'Hi8'
    - regex: '(?:CW-)?(Vi10|Hi10|Vi8) plus(?:[);/ ]|$)'
      model: '$1 Plus'
    - regex: 'CW-(V88)-QUAD(?:[);/ ]|$)'
      model: '$1 Quad'
    - regex: 'CW-(V9)-DUAL(?:[);/ ]|$)'
      model: '$1 Dual'
    - regex: 'CW-(V17HD|VX8)-?(3G)(?:[);/ ]|$)'
      model: '$1 $2'
    - regex: '(?:CW-)?(Hi10) pro(?:[);/ ]|$)'
      model: '$1 Pro'
    - regex: 'HiBook pro(?:[);/ ]|$)'
      model: 'HiBook Pro'
    - regex: 'HiBook(?:[);/ ]|$)'
      model: 'HiBook'
    - regex: 'HiPad ?X(?:[);/ ]|$)'
      model: 'HiPad X'
    - regex: 'HiPad ?Pro(?:[);/ ]|$)'
      model: 'HiPad Pro'
    - regex: 'HiPad-Air(?:[);/ ]|$)'
      model: 'HiPad Air'
    - regex: 'HiPad ?Plus(?:[);/ ]|$)'
      model: 'HiPad Plus'
    - regex: 'HiPad ?Max(?:[);/ ]|$)'
      model: 'HiPad Max'
    - regex: 'Hi([89]) ?Air(?:[);/ ]|$)'
      model: 'Hi$1 Air'
    - regex: 'Hi8SE(?:[);/ ]|$)'
      model: 'Hi8 SE'
    - regex: 'Hi([89]) ?pro(?:[);/ ]|$)'
      model: 'Hi$1 Pro'
    - regex: 'Vi10 Plus(?:[);/ ]|$)'
      model: 'Vi10 Plus'
    - regex: 'Vi10 ?Pro(?:[);/ ]|$)'
      model: 'Vi10 Pro'
    - regex: 'Vi10(?:[);/ ]|$)'
      model: 'Vi10'
    - regex: 'Surpad(?:[);/ ]|$)'
      model: 'SurPad'


    - regex: 'HiBox-hero(?:[);/ ]|$)'
      model: 'HiBox Hero'
      device: 'desktop'

    - regex: 'CW-(Vi[78]|Hi12|V99i?|V88S)(?:[);/ ]|$)'
      model: '$1'

# Bezkam
Bezkam:
  regex: 'BEZKAM (BK-RAM2)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# NG Optics
'NG Optics':
  regex: '(NG3128HD)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# KATV1
KATV1:
  regex: '(KATV-01) PRO(?:[);/ ]|$)'
  device: 'tv'
  model: '$1 Pro'

# Ghong
Ghong:
  regex: 'GHONG(V10)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Ghost
Ghost:
  regex: 'GHOST G03(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'G03(?:[);/ ]|$)'
      model: 'G03'

# Xoro (www.xoro.de)
Xoro:
  regex: 'XORO[ _]|(?:TelePAD(?:795|731|1032|10A3|7A3)|Era 2X|HMT(?:390Q?|400)|HST 260)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'TelePAD(7|10)A3 4G(?:[);/ ]|$)'
      model: 'TelePad $1 A3 4G'
    - regex: 'TelePAD(795|731|1032)(?:[);/ ]|$)'
      model: 'TelePad $1'
    - regex: 'MegaPAD3204V5(?:[);/ ]|$)'
      model: 'MegaPad 3204 V5'

    - regex: 'HMT(390Q?|400)(?:[);/ ]|$)'
      model: 'HMT $1'
      device: 'portable media player'

    - regex: 'HST 260(?:[);/ ]|$)'
      model: 'HST 260'
      device: 'tv'

    - regex: '(Era 2X)(?:[);/ ]|$)'
      model: '$1'
      device: 'smartphone'

# Vinga
Vinga:
  regex: 'VMP-(015-162|021-82|041-162|011-81|025-324|045-664)(?:[);/ ]|$)|VMP023\.'
  device: 'tv'
  models:
    - regex: 'VMP-021-82'
      model: '021'
    - regex: 'VMP-025-324'
      model: '025'
    - regex: 'VMP-015-162'
      model: '015'
    - regex: 'VMP-041-162'
      model: '041'
    - regex: 'VMP-045-664'
      model: '045'
    - regex: 'VMP-011-81'
      model: '011'
    - regex: 'VMP023\.'
      model: '023'

# Viumee (viumee.com)
Viumee:
  regex: '(?:SMART[_ ]EV[56]|EV7_Pro|EV6 ELITE|EV5 X|EV7_Play| EV7)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(EV7)_Pro'
      model: '$1 Pro'
    - regex: '(EV6) ELITE'
      model: '$1 Elite'
    - regex: '(EV7)_Play'
      model: '$1 Play'
    - regex: 'EV5 X'
      model: 'EV5 X'
    - regex: ' EV7(?:[);/ ]|$)'
      model: 'EV7'
    - regex: 'SMART[_ ](EV[56])'
      model: 'Smart $1'

# Nuvo
Nuvo:
  regex: 'Nuvo[_ ](NS35|Blue ND40|Green[_ ]ND[_ ]45)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Nuvo[_ ](NS35)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Blue (ND40)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Green[_ ]ND[_ ]45(?:[);/ ]|$)'
      model: 'ND45'

# Sunvell
Sunvell:
  regex: '(?:T95ZPLUS|T95[KU]PRO)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'T95ZPLUS'
      model: 'T95Z Plus'
    - regex: '(T95[KU])PRO'
      model: '$1 Pro'

# Ugoos
Ugoos:
  regex: 'UGOOS-|(?:Android 11;(?: [\w-]+;)? UT8|TOX3)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'UGOOS-UT3 ?Plus'
      model: 'UT3 Plus'
    - regex: 'UGOOS-(\w{2}\d+\w?)'
      model: '$1'
    - regex: ' (UT8|TOX3)(?:[);/ ]|$)'
      model: '$1'

# Yxtel
Yxtel:
  regex: 'YXTEL_([HU]1|U3)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Proline
Proline:
  regex: 'Proline_|(?:H10882M-TN|H1088[28]M|H1010)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'Proline[_ ]FalconXL'
      device: 'smartphone'
      model: 'Falcon XL'
    - regex: '(H10882M-TN|H1088[28]M|H1010)'
      model: '$1'
# Yota
Yota:
  regex: '(YD20[16]|YOTA 3[+])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'YD20[16](?:[);/ ]|$)'
      model: 'Phone 2'
    - regex: 'YOTA 3[+](?:[);/ ]|$)'
      model: 'Phone 3 Plus'

# Mystery
Mystery:
  regex: 'MYSTERY|(MID-(?:123G|72[12]|7[01348]3G|753G|8[23]3G))(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'MID-(123G|72[12]|7[01348]3G|753G|8[23]3G)(?:[);/ ]|$)'
      model: 'MID-$1'

    - regex: 'MYSTERY[_ ]TV[_ ](D\d{4}[A-Z]{2}\d{2})'
      device: 'tv'
      model: '$1'

# Ritzviva
Ritzviva:
  regex: '(RITZVIVA[_ ]S500C)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'S500C'

# DeWalt
DeWalt:
  regex: 'DeWalt (MD501)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Runbo
Runbo:
  regex: 'Runbo|F1-TT(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Runbo[ _-]?(X5-W|F1 Plus|[PF]1-TT|F1-EN|[FH]1|TT|Q5-S|X5-King|X6|Q5)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'F1-TT'
      model: 'F1-TT'

    - regex: 'RunboP2'
      device: 'tablet'
      model: 'P2'

# NewsMy
NewsMy:
  regex: '(CarPad-(?:II|III)-P)(?:[);/ ]|$)'
  device: 'car browser'
  model: '$1'

# Newsday
Newsday:
  regex: 'Newsday[_ ](E1|A[12]|N2\+)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Daewoo
Daewoo:
  regex: 'Daewoo|(DTA-07IDRF)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(DTA-07IDRF)(?:[);/ ]|$)'
      model: 'Archive 7P'

    - regex: 'Daewoo (Android TV 638)(?:[);/ ]|$)'
      model: '$1'
      device: 'tv'

# Vesta (vesta.md)
Vesta:
  regex: 'VESTA_SMART|VESTA32LD86(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'VESTA32LD86'
      model: 'SmartTV 32LD86S'
    - regex: 'VESTA_SMART_TV'
      model: 'SmartTV'

# Spectrum
Spectrum:
  regex: '(CARBONO_5|CUARZO_6|DIAMANTE_5|VULCANO_55)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'VULCANO_55(?:[);/ ]|$)'
      model: 'Vulcano 5.5"'
    - regex: 'CARBONO_5(?:[);/ ]|$)'
      model: 'Carbono 5.0"'
    - regex: 'CUARZO_6(?:[);/ ]|$)'
      model: 'Cuarzo 6.0"'
    - regex: 'DIAMANTE_5(?:[);/ ]|$)'
      model: 'Diamante 5.0"'

# Kivi
Kivi:
  regex: 'KIVI [24]K|(?:24H600G[RU]|24FR50WU|24HK30B|32HR55GU|32H700GU|32F700WU|4[39]UP50GU|40UR50G[RU]|40U600G[RU]|50U730GR|55U600(?:G[RU]|KD)|65UP50GU|55U[PC]50G[RU]|50U600G[RU]|50UX10S|55UR50G[RU]|40FK30G|40FR5[02]BR|43U(?:800B[RU]|600KD|K35G)|50FK30G|50UK35G|32HR50GR|32F700GR|55UC30G|55U730GR|32HK30G|40FK30G|32HR50GU|43UK30G|32FR50(?:WR|BU)|32FK3[02]G|32H600KD|40U600KD)(?:_-Ver0[0-9])?(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: '(24H600G[RU]|24FR50WU|24HK30B|32HR55GU|32H700GU|4[39]UP50GU|32F700WU|40UR50G[RU]|40U600G[RU]|50U730GR|55U600(?:G[RU]|KD)|65UP50GU|55U[PC]50G[RU]|50UX10S|50U600G[RU]|55UR50G[RU]|55U730GR|40FK30G|40FR5[02]BR|43U(?:K35G|600KD|800B[RU])|50FK30G|50UK35G|32HR50GR|32FR50(?:WR|BU)|32FK3[02]G|32H600KD|40U600KD|32F700GR)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(55UC30G|40FK30G|43UK30G|32HR50G[RU]|32HK30G|32FK32G)_-Ver0([0-9])(?:[);/ ]|$)'
      model: '$1 v$2'
    - regex: 'KIVI ([24]K Android TV)'
      model: '$1'

# DiverMax (https://divermax.net/)
DiverMax:
  regex: 'DiverMax'
  device: 'tv'
  models:
    - regex: 'DiverMax SpeedBox 3 SB1800(?:[);/ ]|$)'
      model: 'SpeedBox 3'

# Divisat (divisat.ru)
Divisat:
  regex: '(?:Divisat|X-MEDIA|DVS X3|OPTIMA_T-II)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: '(?:DVS )?(J-Link|X3)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'X-MEDIA(?:[);/ ]|$)'
      model: 'X-Media'
    - regex: 'OPTIMA_T-II(?:[);/ ]|$)'
      model: 'Optima T-II'

# ArtLine (artline.ua)
ArtLine:
  regex: 'ARTLINE[ _-](KMX3)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# DIXON (https://www.dixoninfo.com/)
DIXON:
  regex: 'DIXON_|(?:ACK1010|KT5512|HK7-3502|DN6015|DFM48|TS-M105G-1|TS_M103A|TS-M704F-1)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(ACK1010|KT5512|DFM48)'
      model: '$1'
    - regex: 'HK7-3502'
      model: 'Solis'
    - regex: 'DN6015'
      model: 'Astrum'
    - regex: 'TS-(M105G|M704F)-1'
      device: 'tablet'
      model: 'TS-$1-1'
    - regex: 'TS_M103A'
      device: 'tablet'
      model: 'TS-M103A'
    - regex: 'DIXON_XK1_3G(?:[);/ ]|$)'
      device: 'feature phone'
      model: 'XK1 3G'

# Kanji
Kanji:
  regex: 'KJ[-_](OB0[23]|YU_?BI|SMART4K|GOCHI|ALFARK|AC0[25])(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'KJ[-_]OB03'
      model: 'Cata 7'
    - regex: 'KJ-GOCHI'
      model: 'Gochi'
    - regex: 'KJ[-_]OB02'
      model: 'Ailu Max'
    - regex: 'KJ[-_]YU_?BI'
      model: 'Yubi 3G'
    - regex: 'KJ[-_]ALFARK'
      model: 'Alfa'
    - regex: 'KJ-(AC0[25])'
      model: 'KJ-$1'
    - regex: 'KJ-SMART4K'
      device: 'tv'
      model: 'Smart 4K'

# Kaiomy
Kaiomy:
  regex: 'KaiCloud[ ]?(7[48]4|942)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'KaiCloud $1'

# National
National:
  regex: '(NX-32THS100)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Shift Phones
Shift Phones:
  regex: '(SHIFT6mq?)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# RugGear
RugGear:
  regex: '(RugGear|RG(?:310|500|65[05]|702|7[13]0|850))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(RG[0-9]+)(?:[);/ ]|$)'
      model: '$1'

# Ruggex (https://www.ruggex.com/)
Ruggex:
  regex: 'Rhino-Quest(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Rhino-Quest(?:[);/ ]|$)'
      model: 'Rhino Quest'

# Maxcom
Maxcom:
  regex: '(MS(?:45[036]|505|507_STRONG|514)|MS457(?:PLUS)?|RS-401|Neva Rise S1)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(MS457)PLUS(?:[);/ ]|$)'
      model: '$1 Plus'
    - regex: '(MS507)_STRONG(?:[);/ ]|$)'
      model: '$1 Strong'
    - regex: 'MS(45[0367]|505|514)(?:[);/ ]|$)'
      model: 'MS$1'
    - regex: 'RS-401(?:[);/ ]|$)'
      model: 'RS-401'
    - regex: 'Neva Rise S1' # Orange
      model: 'Neva Rise S1'

# Luna
Luna:
  regex: '(?:LUNA[ _](?:[VG]55|G[56]0)|TG-L800S)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'LUNA[ _]([VG]55|G[56]0)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(TG-L800S)(?:[);/ ]|$)'
      model: '$1'

# Luxor
Luxor:
  regex: 'LUXOR, ([a-z0-9_ \-]+), (?:wired|wireless)'
  device: 'tv'
  model: ''

# Protruly
Protruly:
  regex: 'PROTRULY[ _](D[78]|V10S)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# JFone
JFone:
  regex: 'JFone[ _](JS501)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Uhans
Uhans:
  regex: '(A101S)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Soyes
Soyes:
  regex: '(?:SOYES[ _](?:[67]S|XS|XS11)|S10-H)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'SOYES[ _]([67]S|XS11|XS)'
      model: '$1'
    - regex: 'S10-H'
      model: 'S10-H'

# Zidoo
Zidoo:
  regex: 'ZIDOO[ _](H6 Pro|X6 Pro|X9S|Z10|X[158]|X20 Pro|Z9S)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Zfiner
Zfiner:
  regex: 'ZFINERY900(?:[);/ ]|$)'
  device: 'tablet'
  model: 'Y900'

# iGet
iGet:
  regex: 'SMART[_ ](L20X|G10[12]|S7[02]|G71|G81[H]?|L10[34]|W[12]0X|W8X|W20[23]|L206)(?:_eea)?(?:[);/ ]|$)'
  device: 'tablet'
  model: 'Smart $1'

# Phicomm
Phicomm:
  regex: '(PHICOMM)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'C630 \(CLUE L\)(?:[);/ ]|$)'
      model: 'Clue L'
    - regex: 'E653\(ENERGY L\)(?:[);/ ]|$)'
      model: 'Energy L'
    - regex: 'PHICOMM ENERGY 3\+(?:[);/ ]|$)'
      model: 'Energy 3+'
    - regex: 'CLUE (2S|M|C230)(?:[);/ ]|$)'
      model: 'Clue $1'

# Huadoo
Huadoo:
  regex: 'Huadoo[ _](HG0[46]|HG11|V[34])(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Gome
Gome:
  regex: '(?:GOME[_ ](?:201[678].+|C7_Note(?:_Plus)?|U9|S[17])|Fenmmy_Note)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'GOME[_ ](?:2018X38A)(?:[);/ ]|$)'
      model: 'C72'
    - regex: 'GOME[_ ](?:2018X07A)(?:[);/ ]|$)'
      model: 'C7'
    - regex: 'GOME[_ ](?:2017X05A)(?:[);/ ]|$)'
      model: 'C71'
    - regex: 'GOME[_ ](?:2017X82A)(?:[);/ ]|$)'
      model: 'C51'
    - regex: 'GOME[_ ](?:2016G68A)(?:[);/ ]|$)'
      model: 'K1'
    - regex: 'GOME[_ ](?:2016M25A)(?:[);/ ]|$)'
      model: 'U1'
    - regex: 'GOME[_ ](?:2017M27A)(?:[);/ ]|$)'
      model: 'U7'
    - regex: 'GOME[_ ](?:2017M95A)(?:[);/ ]|$)'
      model: 'U7 Mini'
    - regex: 'GOME[_ ](?:2018M29A)(?:[);/ ]|$)'
      model: 'U9'
    - regex: 'GOME[_ ](C7_Note(?:_Plus)?|U9|S[17])(?:[);/ ]|$)'
      model: '$1'
    - regex: '(?:GOME[_ ])?(Fenmmy_Note)(?:[);/ ]|$)'
      device: 'phablet'
      model: '$1'

# Voyo (en.myvoyo.com)
Voyo:
  regex: '(?:VOYO[_ ](?:A15)|i8-Max|Q101-4G)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'i8-Max(?:[);/ ]|$)'
      model: 'i8 Max'
    - regex: '(Q101)-4G(?:[);/ ]|$)'
      model: '$1 4G'
    - regex: 'VOYO[_ ](A15)(?:[);/ ]|$)'
      model: '$1'

# Ryte (rytemobile.com)
Ryte:
  regex: '(?:RYTE U55 LTE|RT701)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'RYTE (U55 LTE)'
      model: '$1'
    - regex: '(RT701)'
      device: 'tablet'
      model: '$1'

# Vontar
Vontar:
  regex: '(HK1 (?:Max|MINI\+?|PLUS|PRO)|KK MAX|VONTAR[ -](?:Z[58]|V1|KIII|MX-4K|X[234]))(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'VONTAR[ -](Z[58]|V1|KIII|MX-4K|X[234])(?:[);/ ]|$)'
      model: '$1'
    - regex: 'HK1 Max(?:[);/ ]|$)'
      model: 'HK1 Max'
    - regex: 'KK MAX(?:[);/ ]|$)'
      model: 'KK Max'
    - regex: 'HK1 MINI\+(?:[);/ ]|$)'
      model: 'HK1 Mini Plus'
    - regex: 'HK1 MINI(?:[);/ ]|$)'
      model: 'HK1 Mini'
    - regex: 'HK1 PLUS(?:[);/ ]|$)'
      model: 'HK1 Plus'
    - regex: 'HK1 PRO(?:[);/ ]|$)'
      model: 'HK1 Pro'

# Vorke
Vorke:
  regex: 'VORKE (Z[157]|Z6(?: Plus)?)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Wigor
Wigor:
  regex: 'Wigor (V4)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# NEXON (nexon.ua)
NEXON:
  regex: 'NEXON (X[13]\+|X[12589])(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# ONN (walmart)
ONN:
  regex: '(ONA19TB00[327]|10000356[12]|10000520[6-9]|O8HD|100011886A|10001188[56]|100015685-[AE]|100026191|100043279|100044018G|10007148[1356]|TBBVNC10000520[78])(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# EXO S.A (exo.com.ar)
EXO:
  regex: '(?:Tablet)?(?:EXO_)?(Wave[_-]i101[GLR]|Wave[_ ]i007[BT]?|Wave i101[Hb]|Wave i007Kids)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Q.Bell (qbell.it)
'Q.Bell':
  regex: '(QPHONE[_ ](?:10.1|9.[12]|7.1|5.[246])|QTAB10EW)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(QPHONE[_ ](?:10.1|9.[12]|7.1|5.[246]))(?:[);/ ]|$)'
      model: '$1'
    - regex: 'QTAB10EW'
      device: 'tablet'
      model: 'QTAB10EW'

# Datawind
Datawind:
  regex: 'DW-[A-Z0-9]{5}(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(DW-PS3G5)(?:[);/ ]|$)'
      model: 'Pocket Surfer 3G5'
    - regex: 'DW-UBT7W'
      device: 'tablet'
      model: 'Ubislate 7W'

# Droxio (droxio.es) sub brand 3GO
Droxio:
  regex: 'DROXIO (C40|A47|B45|KENTIA)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# 3GO (www.3go.es)
3GO:
  regex: '(?:Aplay ?[34])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Aplay ?([34])'
      device: 'tablet'
      model: 'Aplay $1'

# Goophone
Goophone:
  regex: 'Goophone[ _]|(?:M(G492|L7[JK]2)CH|MN(4A2|8J2)ZP|MGA92ZP|MKU82ZP|MNGW2CH|MNH02CH|MNRM2CH)[/]A(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:MG492CH|MGA92ZP)[/]A(?:[);/ ]|$)'
      model: 'I6 Plus'
    - regex: 'ML7[JK]2CH[/]A(?:[);/ ]|$)'
      model: 'I6'
    - regex: 'MKU82ZP[/]A(?:[);/ ]|$)'
      model: 'I6S'
    - regex: 'MNGW2CH[/]A(?:[);/ ]|$)'
      model: 'I6S Plus'
    - regex: '(?:MN4A2ZP|MNH02CH)[/]A(?:[);/ ]|$)'
      model: 'I7'
    - regex: '(?:MN8J2ZP|MNRM2CH)[/]A(?:[);/ ]|$)'
      model: 'I7 Plus'
    - regex: 'S4 MEGA(?:[);/ ]|$)'
      model: 'S4 Mega'
    - regex: 'Goophone i([69])(?:[);/ ]|$)'
      model: 'I$1'

# PocketBook
PocketBook:
  regex: 'PocketBook[ _/]'
  device: 'tablet'
  models:
    - regex: 'A7(?:[);/ ]|$)'
      model: 'A7'
    - regex: 'A10 3G(?:[);/ ]|$)'
      model: 'A10 3G'
    - regex: 'A10(?:[);/ ]|$)'
      model: 'A10'
    - regex: 'SURFpad2(?:[);/ ]|$)'
      model: 'SURFpad 2'
    - regex: 'PocketBook SURFpad 3 \(([\d]+).([\d]+)["]?\)(?:[);/ ]|$)'
      model: 'SURFpad 3 $1.$2"'
    - regex: 'SURFpad 4 ([LMS])(?:[);/ ]|$)'
      model: 'SURFpad 4 $1'
    - regex: 'PocketBook/(515|614|62[23467]|63[012]|64[01]|650|740|801|840)(?:[);/ ]|$)'
      model: '$1'

# Bitmore
Bitmore:
  regex: '(?:Mobitab10c-3G|Tab1011Q_II|Colortab[ _]?(10(?:M| II)?|816i))(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(Mobitab)(10)c-3G(?:[);/ ]|$)'
      model: '$1 $2C 3G'
    - regex: 'Tab1011Q_II(?:[);/ ]|$)'
      model: 'Tab1011Q II'
    - regex: 'Colortab[ _]?(10(?:M| II)?|816i)(?:[);/ ]|$)'
      model: 'ColorTab $1'

# Bittium (https://www.bittium.com)
Bittium:
  regex: 'Bittium'
  device: 'smartphone'
  models:
    - regex: 'Tough Mobile 2(?:[);/ ]|$)'
      model: 'Tough Mobile 2'

# Kuliao
Kuliao:
  regex: 'KULIAO (K10)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Sugar
Sugar:
  regex: 'SUGAR[ _]'
  device: 'smartphone'
  models:
    - regex: 'SUGAR Y([78]) MAX(?:[);/ ]|$)'
      model: 'Y$1 Max'
    - regex: 'SUGAR S60 pro(?:[);/ ]|$)'
      model: 'S60 Pro'
    - regex: 'SUGAR F7 Mini(?:[);/ ]|$)'
      model: 'F7 Mini'
    - regex: 'SUGAR[ _]([^);/]+) ?Dual(?: Build|[);])'
      model: '$1 Dual'
    - regex: 'SUGAR[ _]([^);/]+)(?: Build|[);])'
      model: '$1'

# Subor
Subor:
  regex: 'SUBOR[ _]'
  device: 'smartphone'
  models:
    - regex: 'SUBOR[ _](S5|2019)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'SUBOR[_ ]K10PLUS(?:[);/ ]|$)'
      model: 'K10 Plus'

# Xshitou
Xshitou:
  regex: 'Xshitou[_ ](P7)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# JKL
JKL:
  regex: 'JKL[_ ](A28)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Gree
Gree:
  regex: '(?:G0[256]15D|G0245D|G0335D)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'G0515D'
      model: 'Tosot 5G'
    - regex: 'G0615D'
      model: 'Tosot 7G'
    - regex: '(G0215D|G0245D|G0335D)(?:[);/ ]|$)'
      model: '$1'

# Vodacom
Vodacom:
  regex: '(?:Vodacom)[ _]|(?:Kicka 5 Plus 4G)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'Kicka 5 Plus 4G'
      device: 'smartphone'
      model: 'Kicka 5 Plus 4G'
    - regex: '(?:Vodacom)[ _](Power Tab 10)(?:[);/ ]|$)'
      model: '$1'

# VKworld
VKworld:
  regex: '(?:(?:VK700)-MAX|VK700 Pro|T5SE|VK700[0X]|vk6050|vk6735|vk700)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(VK700)-MAX(?:[);/ ]|$)'
      model: '$1 Max'
    - regex: '(VK700) Pro(?:[);/ ]|$)'
      model: '$1 Pro'
    - regex: 'T5SE(?:[);/ ]|$)'
      model: 'T5 SE'
    - regex: 'VK(700[0X]|6050|6735|700)(?:[);/ ]|$)'
      model: 'VK$1'

# Mito (mitomobile.com)
Mito:
  regex: 'MITO[- _]'
  device: 'smartphone'
  models:
    - regex: 'MITO[- _]3255(?:[);/ ]|$)'
      device: 'tv'
      model: '3255'
    - regex: 'MITO[- _]A37[_ ]Z1plus'
      model: 'A37 Z1 Plus'
    - regex: 'MITO[- _](A(?:19[_ ][12]GB|37[_ ]Z1|36[_ ]W1|[0-9]+)|311)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'MITO[- _](T(?:[0-9]+))(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'

# TWM or TaiwanMobile
TWM:
  regex: 'Amazing[ _](X[35]s|X[123567]|A5S|A3[025]|A[468]|A4S|A5[057]|P6)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Amazing[ _](X[35])s(?:[);/ ]|$)'
      model: 'Amazing $1S'
    - regex: 'Amazing[ _](A5S|X[123567]|A[468]|A4S|A5[057]|A3[025])(?:[);/ ]|$)'
      model: 'Amazing $1'
    - regex: 'Amazing[ _](P6)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Amazing $1'

# TWZ or TWZ Corporation PLC (twz.co.th)
TWZ:
  regex: 'TWZ[-_ ](?:TabPlay|Y6[08]|Y52|A49|A[59]5|A567|AA8|QQ[12])|TWZQQ1|(?:OX_X1)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'TWZ[_ ]TabPlay[_ ](12[56])'
      device: 'tablet'
      model: 'TabPlay $1'
    - regex: 'TWZ[-_ ]?(Y6[08]|Y52|A49|A[59]5|A567|AA8|QQ[12])'
      model: '$1'
    - regex: 'OX_X1'
      model: 'OX X1'

# Oale
Oale:
  regex: '(?:Apex(?:[123])|CC1 PRO)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(CC1) PRO'
      model: '$1 Pro'
    - regex: 'Apex([123])'
      model: 'Apex $1'

# Mobo
Mobo:
  regex: '(?:(?:MOBO[_ ]MB7005|MT7-421HD)|(?:MT7-442D|MT7-411D))(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(?:MOBO[_ ])?(MB7005|MT7-421HD|MT7-442D|MT7-411D)(?:[);/ ]|$)'
      model: '$1'

# Macoox
Macoox:
  regex: '(MC-X7MINI)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'MC-X7 Mini'

# Prixton
Prixton:
  regex: '(?:T1700Q-)?PRIXTON|(T7012Q)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'PRIXTON (C18)'
      device: 'smartphone'
      model: '$1'
    - regex: '(T701[24]Q|T1700Q)'
      model: '$1'

# Mafe
Mafe:
  regex: 'Mafe_(?:M8[12]0|M825)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Mafe_M820'
      model: 'Shine M820'
    - regex: 'Mafe_(M810|M825)'
      model: '$1'

# Magnus or Magnus Telecom
Magnus:
  regex: '(?:Magnus[ _](?:bravoZ[23]0|Infinity_?(?:G8|G11))|bravo Z40|bravo[-_]Z[12]2)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'bravo[ _-]?(Z[234]0|Z[12]2)'
      model: 'Bravo $1'
    - regex: '(?:Magnus[ _])?Infinity_?(G8|G11)'
      model: 'Infinity $1'

# Newland (www.newland-id.com)
Newland:
  regex: 'NLS-(?:MT90|NFT10)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'NLS-MT90'
      model: 'MT90 Orca'
    - regex: 'NLS-NFT10'
      model: 'NFT10 Pilot Pro'

# Orbic (orbic.us)
Orbic:
  regex: '(?:RC(?:2200|501|545|555|608)L|R678EL|R8L5T)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'R678EL'
      model: 'Magic 5G'
    - regex: 'RC501L'
      model: 'Slim'
    - regex: 'RC545L'
      model: 'Maui'
    - regex: 'RC555L'
      model: 'Wonder'
    - regex: 'RC2200L'
      model: 'Journey V'
    - regex: 'RC608L'
      model: 'Joy'
    - regex: 'R8L5T'
      device: 'tablet'
      model: 'Tab8 5G'

# RED
RED:
  regex: '(?:H1A1000)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Hydrogen One'

# Contixo
Contixo:
  regex: 'Contixo|(?:CX-1045 3G|KT995 3G|CX1045|B108_4G)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'CX-?1045(?: 3G)?(?:[);/ ]|$)'
      model: 'CX-1045 3G'
    - regex: 'CONTIXO GX 1035(?:[);/ ]|$)'
      model: 'GX-1035 4G 10.1"'
    - regex: 'Contixo GT1160 4G(?:[);/ ]|$)'
      model: 'GT1160 4G 10.1"'
    - regex: 'B105(?:[);/ ]|$)'
      model: 'B105 3G 10.1"'
    - regex: 'B108(?:[_ ]4G)?(?:[);/ ]|$)'
      model: 'B108 4G 10.1"'
    - regex: 'KT107(?: 3G)?(?:[);/ ]|$)'
      model: 'KT107 3G 10.1"'
    - regex: 'K109(?:[);/ ]|$)'
      model: 'KT109 4G 10.1"'
    - regex: 'KT715 3G(?:[);/ ]|$)'
      model: 'KT715 3G 7.0"'
    - regex: 'KT995(?:[);/ ]|$)'
      model: 'KT995 3G 10.1"'
    - regex: 'KT ?1100GT(?: 4G)?(?:[);/ ]|$)'
      model: 'KT1100GT'

# E-Ceros
'E-Ceros':
  regex: '(?:CT9716(?:-B)?)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'CT9716(?:[);/ ]|$)'
      model: 'Revolution'
    - regex: 'CT9716-B(?:[);/ ]|$)'
      model: 'Revolution HD'

# How (how.com.br)
How:
  regex: '(?:HT-705XS|705-G Go|1001-G Go)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(HT-705XS)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(1001-G Go)(?:[);/ ]|$)'
      model: 'HT-1001G Go Kids'
    - regex: '(705-G Go)(?:[);/ ]|$)'
      model: 'HT-$1'

# Multilaser (https://www.multilaser.com.br/)
Multilaser:
  regex: 'Multilaser[ _]|ML-TI-MS|(?:MS50[LGXM]|M7[_-]3G[_-](?:PLUS|QC_3|QUAD_CORE)|MS5\.V2|M9-3G|MS45S_A6|ML([02]1|12)-M7s[- ]?Quad-?Core| ML01-M7-SD|MS45S|MS50S|MS60[XZ]|M7SQC_Plus|MS80X|MS40[GS]|MS55M|MS70|M7_3G_A10|M7_3G|M7S_PLUS|M10A?_3G|M7-3G QUAD CORE|M7s_?Lite|M[79]_WIFI|ML-(?:SO|WI)-M9-3G|M10A-Lite|M10_4G_PRO|MS50L?_4G|MS60F(?:_PLUS)?|MS45S_A6_(?:Teen|Senior)|MLX8|ML-WI-M7_3G_PLUS|KIDPAD_LITE)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Multilaser[ _]([EFG])[_ ]Pro(?:[);/ ]|$)'
      model: '$1 Pro'
    - regex: 'Multilaser[ _]F[_ ]Pro[ _]2(?:[);/ ]|$)'
      model: 'F Pro 2'
    - regex: 'Multilaser[ _]G[_ ]Max(?:[);/ ]|$)'
      model: 'G Max'
    - regex: 'Multilaser[ _]GMAX_2(?:[);/ ]|$)'
      model: 'G Max 2'
    - regex: 'Multilaser[ _]G(?:[);/ ]|$)'
      model: 'G'
    - regex: 'Multilaser[ _]G[ _]2(?:[);/ ]|$)'
      model: 'G2'
    - regex: 'Multilaser[ _]E[_ ]Lite(?:[);/ ]|$)'
      model: 'E Lite'
    - regex: 'Multilaser[ _]([FEH])(?:[);/ ]|$)'
      model: '$1'
    - regex: 'MS60F_PLUS(?:[);/ ]|$)'
      model: 'MS60F Plus'
    - regex: 'MS45S_A6_Senior'
      model: 'MS45S A6 Senior'
    - regex: 'MS45S_A6_Teen'
      model: 'MS45S A6 Teen'
    - regex: '(MS50[LGXSM]|MS45S_A6|MS40[GS]|MS55M|MS60F|MS70|MS60[XZ]|MS45S|MS80X|MS50L?_4G|MS5\.V2)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(?:ML-WI-)?M7[_-]3G[_-]PLUS(?:[);/ ]|$)'
      device: 'tablet'
      model: 'M7 3G Plus'
    - regex: 'M7S_PLUS'
      device: 'tablet'
      model: 'M7S Plus'
    - regex: 'M([79])_WIFI(?:[);/ ]|$)'
      device: 'tablet'
      model: 'M$1 WiFi'
    - regex: 'M10_4G_PRO(?:[);/ ]|$)'
      device: 'tablet'
      model: 'M10 4G Pro'
    - regex: 'M7SQC_PLUS(?:[);/ ]|$)'
      device: 'tablet'
      model: 'M7SQC Plus'
    - regex: 'M7-3G_QC_3(?:[);/ ]|$)'
      device: 'tablet'
      model: 'M7 3G Quad Core 3'
    - regex: 'M7-3G[ _]QUAD[ _]CORE(?:[);/ ]|$)'
      device: 'tablet'
      model: 'M7 3G Quad Core'
    - regex: 'ML([02]1|12)-M7s[- ]?Quad-?Core(?:[);/ ]|$)'
      device: 'tablet'
      model: 'ML$1-M7s Quad Core'
    - regex: 'M7s_?Lite(?:[);/ ]|$)'
      device: 'tablet'
      model: 'M7s Lite'
    - regex: 'ML01-M7-SD(?:[);/ ]|$)'
      device: 'tablet'
      model: 'ML01-M7 SD'
    - regex: 'M10A-Lite(?:[);/ ]|$)'
      device: 'tablet'
      model: 'M10A Lite'
    - regex: '(?:ML-(?:SO|WI)-)?M9-3G(?:[);/ ]|$)'
      device: 'tablet'
      model: 'M9 3G'
    - regex: 'M7_3G_A10(?:[);/ ]|$)'
      device: 'tablet'
      model: 'M7 3G A10'
    - regex: 'MLX8(?:[);/ ]|$)'
      device: 'tablet'
      model: 'X8 4G'
    - regex: 'M(10A?|7)_3G(?:[);/ ]|$)'
      device: 'tablet'
      model: 'M$1 3G'
    - regex: 'KIDPAD_LITE(?:[);/ ]|$)'
      device: 'tablet'
      model: 'KidPad Lite'
    - regex: 'ML-TI-(MS\d+)(?:[);/ ]|$)'
      model: '$1'

# Positivo BGH
Positivo BGH:
  regex: '(?:T1060B|S455|Positivo (?:Twist|Ypy|Mini I)|Twist[ _](?:\(2018\)|2 (?:Fit|Pro)|Mini|Tab|Metal(?: 32GB)?|Max|XL|SE|[23SM])|KC770|G1101T)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'S455(?:[);/ ]|$)'
      model: 'Selfie'
    - regex: 'Twist \(2018\)(?:[);/ ]|$)'
      model: 'Twist (2018)'
    - regex: 'Twist Metal 32GB(?:[);/ ]|$)'
      model: 'Twist Metal 32GB'
    - regex: 'Twist Metal(?:[);/ ]|$)'
      model: 'Twist Metal'
    - regex: 'Twist Max(?:[);/ ]|$)'
      model: 'Twist Max'
    - regex: 'Twist[ _]Mini(?:[);/ ]|$)'
      model: 'Twist Mini'
    - regex: 'Twist 2 Fit(?:[);/ ]|$)'
      model: 'Twist 2 Fit'
    - regex: 'Twist 2 Go(?:[);/ ]|$)'
      model: 'Twist 2 Go'
    - regex: 'Twist 2 Pro(?:[);/ ]|$)'
      model: 'Twist 2 Pro'
    - regex: 'Twist XL(?:[);/ ]|$)'
      model: 'Twist XL'
    - regex: 'Twist SE(?:[);/ ]|$)'
      model: 'Twist SE'
    - regex: '(?:Positivo )?Twist ([23SM])(?:[);/ ]|$)'
      model: 'Twist $1'
    - regex: '(?:Positivo )Mini I(?:[);/ ]|$)'
      model: 'Mini I'

    - regex: '(T1060B|KC770|G1101T)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: 'Positivo Ypy (AB7F|AB10H|L1050E)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Ypy $1'
    - regex: 'Twist Tab(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Twist Tab'

# Maxtron
Maxtron:
  regex: 'Maxtron[ _-](V[327]|V1[2357]|V20|S[89]|T1|Genio|Apollo|PLUTO)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Maxtron[ _-]PLUTO'
      model: 'Pluto'
    - regex: 'Maxtron[ _-](V[327]|S[89]|V1[2357]|V20|Apollo)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Maxtron[ _-](T1|Genio)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'

# Philco (philco.com.br)
Philco:
  regex: 'PHILCO |(PCS0[12]|PH350B|PTB[78]R|PTB7PAP_PTB7PAB_PTB7PAR|Hit Max|Hit P1[023]|HIT P10a|TP7A4|TP10A1I)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'HIT P10a'
      model: 'Hit P10a'
    - regex: '(PCS0[12]|PH350B|Hit Max|Hit P1[023])(?:[);/ ]|$)'
      model: '$1'
    - regex: '(PTB[78]R|TP7A4|TP10A1I)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: 'PHILCO Android TV(?:[);/ ]|$)'
      device: 'tv'
      model: ''
    - regex: 'PTB7PAP_PTB7PAB_PTB7PAR(?:[);/ ]|$)'
      device: 'tablet'
      model: 'PTB7PA'

# SEMP TCL
SEMP TCL:
  regex: '(?:GO[35]E|5101J|GO3C(?: Plus)?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '5101J(?:[);/ ]|$)'
      model: 'L9 Plus'
    - regex: 'GO3C Plus(?:[);/ ]|$)'
      model: 'GO! 3C Plus'
    - regex: 'GO3C(?:[);/ ]|$)'
      model: 'GO! 3C'
    - regex: '(GO[35]E)(?:[);/ ]|$)'
      model: '$1'

# Newman
Newman:
  regex: 'Newman[ _](P308|K1|G5i)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Swipe
Swipe:
  regex: '(?:Elite Sense|Elite_VR|Slate2|Swipe_Elite_3M?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:Swipe_)?(Elite Sense|Elite_VR|Elite_3M?)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Slate2(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Slate 2'

# Owwo
Owwo:
  regex: '(?:OWWO[ _]?(?:[1457]S|Q[78])|CARNIVAL B5)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'OWWO[ _]?([1457]S|Q[78])(?:[);/ ]|$)'
      model: '$1'
    - regex: 'CARNIVAL B5(?:[);/ ]|$)'
      model: 'Carnival B5'

# 360 or names Qihoo 360, +360, QiKU 360
'360':
  regex: '(?:180[1379]-A01|1713-A01|1707-A01|1509-A00|1603-A03|1607-A01|1503-A01|1505-A0[12]|1605-A01)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '1807-A01(?:[);/ ]|$)'
      model: 'N7'
    - regex: '1803-A01(?:[);/ ]|$)'
      model: 'N7 Lite'
    - regex: '1809-A01(?:[);/ ]|$)'
      model: 'N7 Pro'
    - regex: '1713-A01(?:[);/ ]|$)'
      model: 'N6 Lite'
    - regex: '1707-A01(?:[);/ ]|$)'
      model: 'N6'
    - regex: '1801-A01(?:[);/ ]|$)'
      model: 'N6 Pro'
    - regex: '1509-A00(?:[);/ ]|$)'
      model: 'Q5 Plus'
    - regex: '1503-A01(?:[);/ ]|$)'
      model: 'N4'
    - regex: '1605-A01(?:[);/ ]|$)'
      model: 'N5'
    - regex: '1603-A03(?:[);/ ]|$)'
      model: 'N4A'
    - regex: '1607-A01(?:[);/ ]|$)'
      model: 'N5S'
    - regex: '1505-A0[12](?:[);/ ]|$)'
      model: 'N4S'

# TD Systems
TD Systems:
  regex: '(K(?:24|32)DLX9HS|K40DLM8FS|K40DLX9FS|K50DLX9US)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Ravoz (https://www.ravoz.online/)
Ravoz:
  regex: 'RAVOZ[ _](Z[57] (?:Lite|Pro)|Z[3-7]|R[4789]|V[23])(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Tone Mobile (tone.ne.jp)
Tone:
  regex: 'TONE[ _-](e19|m1[57]|e2[01])(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# AT&T
AT&T:
  regex: '(?:EA1002|EA21100[125]|U(?:202|304|31[89]|328|626|705)AA|QS5509A|V340U|V350U)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'EA211005'
      model: 'Fusion 5G'
    - regex: 'U304AA(?:[);/ ]|$)'
      model: 'Radiant Core'
    - regex: 'U705AA(?:[);/ ]|$)'
      model: 'Radiant Max'
    - regex: 'EA211001(?:[);/ ]|$)'
      model: 'Radiant Max 5G'
    - regex: 'QS5509A(?:[);/ ]|$)'
      model: 'Axia'
    - regex: 'U318AA(?:[);/ ]|$)'
      model: 'Calypso'
    - regex: 'U319AA(?:[);/ ]|$)'
      model: 'Calypso 2'
    - regex: 'U328AA(?:[);/ ]|$)'
      model: 'Calypso 3'
    - regex: 'U202AA(?:[);/ ]|$)'
      model: 'Maestro'
    - regex: 'EA1002(?:[);/ ]|$)'
      model: 'Maestro Max'
    - regex: 'V350U(?:[);/ ]|$)'
      model: 'Maestro Plus'
    - regex: 'U626AA(?:[);/ ]|$)'
      model: 'Maestro 3'
    - regex: 'EA211002(?:[);/ ]|$)'
      model: 'Motivate 2'
    - regex: 'V340U(?:[);/ ]|$)'
      model: 'Fusion Z' # Vsmart

# BIHEE
BIHEE:
  regex: '(ZBH-)?BIHEE'
  device: 'smartphone'
  models:
    - regex: '(A1[1268]|A[78]\+|A[56])(?:[);/ ]|$)'
      model: '$1'

# Enot
Enot:
  regex: 'Enot[ _-](E102|J101)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Kooper
Kooper:
  regex: 'Kooper-mobile-W502(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Mobile W502'

# Lesia
Lesia:
  regex: 'ANOVA A5(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Anova A5'

# Anry
Anry:
  regex: 'ANRY-(RS10|[SX]20|E30|1006)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Tinai
Tinai:
  regex: 'Tinai (K[12])(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Winds or Windsmobile (www.windsmobile.com.my)
Winds:
  regex: '(?:NOTE GRACE V)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'NOTE GRACE V'
      model: 'Note Grace V'

# Asano
Asano:
  regex: '(?:32LH7010T|32LH7030S|32LF7130S|28LH701[10]T|43LU8010T|24LH7020T)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: '(\d{2})(L[FHU]\d+[ST])(?:[);/ ]|$)'
      model: '$1$2 $1.0"'

# Phonemax
Phonemax:
  regex: '(?:PHONEMAX[_ ](?:Saturn(?:[_ ]X)?|Mars|Venus X)|Rocky 2)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'PHONEMAX[_ ]Saturn[_ ]X(?:[);/ ]|$)'
      model: 'Saturn X'
    - regex: 'PHONEMAX[_ ]Saturn(?:[);/ ]|$)'
      model: 'Saturn'
    - regex: 'PHONEMAX[_ ]Mars(?:[);/ ]|$)'
      model: 'Mars'
    - regex: 'PHONEMAX[_ ]Venus X(?:[);/ ]|$)'
      model: 'Venus X'
    - regex: 'Rocky 2(?:[);/ ]|$)'
      model: 'Rocky 2'

# Vipro (Vipro Mobile)
Vipro:
  regex: 'VIPRO(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'VIPRO PRO2X(?:[);/ ]|$)'
      model: 'Pro 2X'
    - regex: 'VIPRO PRO[ _-]?([0-9])(?:[);/ ]|$)'
      model: 'Pro $1'

# Virzo (https://virzo.com/)
Virzo:
  regex: '(?:V608C|V50[15]c|VT701)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'V(50[15]|608)C(?:[);/ ]|$)'
      model: 'V$1c'
    - regex: '(VT701)'
      device: 'tablet'
      model: '$1'

# OzoneHD
OzoneHD:
  regex: 'Ozone HD|OzoneHD[ _](T2 WiFi|4K(?: TV)?|Fun)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# KZEN (kzen.me)
Kzen:
  regex: '(?:Ureki_U1|Victor V1|Lamia L01|DART KZ07|REX RX|Eva_E01|Majesty (?:M5|4G))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Ureki_U1'
      model: 'Ureki U1'
    - regex: 'Eva_E01'
      model: 'Eva E01'
    - regex: 'Victor V1'
      model: 'Victor V1'
    - regex: 'REX RX'
      model: 'Rex RX'
    - regex: 'Lamia L01'
      model: 'Lamia L01'
    - regex: 'Majesty (M5|4G)'
      model: 'Majesty $1'
    - regex: 'DART KZ07'
      device: 'tablet'
      model: 'Dart KZ07'

# MELROSE
Melrose:
  regex: 'MELROSE[_ ](?:S9\+?|S9P|2019)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'MELROSE[_ ]S9\+(?:[);/ ]|$)'
      model: 'S9 Plus'
    - regex: 'MELROSE[_ ](S9|S9P)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'MELROSE_2019(?:[);/ ]|$)'
      model: '2019 Ultra Slim 3.4"'

# Crony
Crony:
  regex: 'CRONY-7021(?:[);/ ]|$)'
  device: 'tablet'
  model: '7021'

# T96
T96:
  regex: 'T96mini(?:[);/ ]|$)'
  device: 'tv'
  model: 'Mini'

# Takara
Takara:
  regex: '(MID211H)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Tronsmart
Tronsmart:
  regex: '(Orion R68G|Draco AW80|Draco H3|Vega S95_(?:Meta|Pro|Telos))(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Amigoo
Amigoo:
  regex: 'AMIGOO (R300|R9 Max|M1 Max|X15)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Lumigon
Lumigon:
  regex: 'Lumigon[ _](T3)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Neo
Neo:
  regex: 'NEO, ([a-z0-9_ \-]+), (?:wired|wireless)'
  device: 'tv'
  model: ''

# NEKO
NEKO:
  regex: 'NEKO_LT-(\w+)(?:[);/ ]|$)'
  device: 'tv'
  model: 'LT-$1'

# Neomi
Neomi:
  regex: 'NEO[ ]?(90[689])(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Neo $1'

# Eltex (eltex-co.ru)
Eltex:
  regex: '(?:NV5(?:01|10)WAC|NV501|NV510WB|NV720WB|NV711WAC)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'NV(501|510|711)WAC(?:[);/ ]|$)'
      model: 'NV-$1-Wac'
    - regex: 'NV501(?:[);/ ]|$)'
      model: 'NV-501'
    - regex: 'NV(510|720)WB(?:[);/ ]|$)'
      model: 'NV-$1-WB'

# Senkatel
Senkatel:
  regex: 'Senkatel[ _]|(?:MaximusT1001)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'MaximusT1001'
      model: 'Maximus T1001'
    - regex: 'Senkatel[ _](T1009|T8002|T701[12]|T9702)'
      model: '$1'

# Bobarry
Bobarry:
  regex: '(?:K10[ ]?SE)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'K10 SE'

# Wortmann (wortmann.de)
Wortmann:
  regex: 'TERRA[ _]PAD[ _](\d+)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'Terra Pad $1'

# BB Mobile
BB Mobile:
  regex: 'bb-mobile|Techno[-_ ](8\.0|9\.7|TQ863Q|X595BT|X800BJ|S700BF|I700AJ|10.1 LTE TQ060X|7.0 LTE TQ763I|I785AP|I101BI)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'Techno[_ ]S700BF(?:[);/ ]|$)'
      model: 'Techno 7.0" Pioneer LTE S700BF'
    - regex: 'Techno[_ ]10.1 LTE TQ060X(?:[);/ ]|$)'
      model: 'Techno 10.0" LTE TQ060X'
    - regex: 'Techno[_ ]TQ863Q(?:[);/ ]|$)'
      model: 'Techno 8.0" Poplar LTE TQ863Q'
    - regex: 'Techno[_ ]I700AJ(?:[);/ ]|$)'
      model: 'Techno 7.0" Mozg LTE I700AJ'
    - regex: 'Techno[-_ ]I785AP(?:[);/ ]|$)'
      model: 'Techno 7.85" Mozg I785AP'
    - regex: 'Techno[_ ]X800BJ(?:[);/ ]|$)'
      model: 'Techno 8.0" Mozg X800BJ'
    - regex: 'Techno[-_ ]I101BI(?:[);/ ]|$)'
      model: 'Techno 10.1" Mozg I101BI'
    - regex: 'Techno[_ ]7.0 LTE TQ763I(?:[);/ ]|$)'
      model: 'Techno 7.0" Kalash LTE TQ763I'
    - regex: '(FirstTab TP-17)(?:[);/ ]|$)'
      model: '$1'

    - regex: 'Techno[_ ](9\.7|8\.0) 3G(?:[);/ ]|$)'
      model: 'Techno $1" 3G'

    - regex: 'Techno[_ ](?:X595BT)(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Techno Spark 3G X595BT'

# 2E (2e.ua)
2E:
  regex: '(?:E500A_2019|2E E450 2018)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'E500A_2019(?:[);/ ]|$)'
      model: 'E500A (2019)'
    - regex: '2E E450 2018(?:[);/ ]|$)'
      model: 'E450 (2018)'

# Billion
Billion:
  regex: 'Capture\+(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Capture Plus'

# Tele2 (www.tele2.com) mobile operator
Tele2:
  regex: 'Tele2[ _]'
  device: 'smartphone'
  models:
    - regex: 'Tele2[ _](Mi[dn]i)[ _]1.1(?:[);/ ]|$)'
      model: '$1 1.1'
    - regex: 'Tele2[ _]Midi[ _]2.0(?:[);/ ]|$)'
      model: 'Midi 2.0'
    - regex: 'Tele2[ _]((?:Maxi|Midi)(?:[_ ](?:Plus|LTE))?)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Tele2[ _](Mi[dn]i)(?:[);/ ]|$)'
      model: '$1'

# ALDI NORD
'ALDI NORD':
  regex: 'ALDINORD, ([a-z0-9_ \-]+), (?:wired|wireless)'
  device: 'tv'
  model: ''

# ALDI SÜD
'ALDI SÜD':
  regex: 'ALDISUED, ([a-z0-9_ \-]+), (?:wired|wireless)'
  device: 'tv'
  model: ''

# Alfawise
Alfawise:
  regex: '(?:Alfawise (?:A9)|(?:A95X_R1|Z28Pro))(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: '(A95X_R1)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Z28Pro(?:[);/ ]|$)'
      model: 'Z28 Pro'
    - regex: 'Alfawise (A9)'
      model: '$1'

# Klipad (www.klipad.fr)
Klipad:
  regex: 'KLIPAD_|(?:KL-V905|KL(2108NBE|[46]889|489[08]|9878A?|3669|759[01]|500|601|988)?(?:_EEA)?|7589AN|KL628_HL|KL628KO|KL4898[_ -]A50|V356B?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:KLIPAD_)?(V355B?|KL600|KL-V905|V356B?|KL500|KL601)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(KL[46]889|7589AN|KL759[01]|KL9878A?|KL628KO|KL3669|KL489[08]|KL988|KL2108NBE)(?:_EEA)?(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: 'KL628_HL'
      device: 'tablet'
      model: 'KL628HL'
    - regex: 'KL4898[_ -]A50'
      device: 'tablet'
      model: 'KL4898-A50'

# SQOOL (sqool.fr)
SQOOL:
  regex: 'SQOOL-V(41?)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'V$1'

# TurboPad (turbopad.ru)
TurboPad:
  regex: 'Turbopad[-_ ]?(72[34]|80[23]|912|101[456]|Pro)(?:NEW)?(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# TurboKids sub brand TurboPad (turbokids.ru)
TurboKids:
  regex: '(?:Turbokids[-_ ]?(TMNT|3G|S4|Princess|3GNEW)|Monsterpad 3G)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'Monsterpad 3G'
      model: 'MonsterPad 3G'
    - regex: 'Turbokids[-_ ]?3GNEW'
      model: '3G New'
    - regex: 'Turbokids[-_ ]?(TMNT|3G|S4|Princess)'
      model: '$1'

# Türk Telekom (https://www.turktelekom.com.tr/)
Türk Telekom:
  regex: 'Turk Telekom'
  device: 'smartphone'
  models:
    - regex: 'TT175(?:[);/ ]|$)'
      model: 'TT175'

# Jinga (jinga.ru)
Jinga:
  regex: 'Jinga[-_ ]|(?:(?:Fresh|Optim)4G|Pass(?:Plus|3G)|PicassoNote|Hotz[_ ]M1|WinPRO|Touch4G|Start(?:3G|LTE)?|IGO[ _]L[41]|Basco (?:L3|L[45]00|XS1|S2)|M500-1|Hit4G|A450|Neon(?!/)|JoyPRO|Fresh|GoalPlus)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Optim4G(?:[);/ ]|$)'
      model: 'Optim 4G'
    - regex: 'Fresh4G(?:[);/ ]|$)'
      model: 'Fresh 4G'
    - regex: 'Hotz[_ ]M1(?:[);/ ]|$)'
      model: 'Hotz M1'
    - regex: 'Hit4G(?:[);/ ]|$)'
      model: 'Hit 4G'
    - regex: 'PassPlus(?:[);/ ]|$)'
      model: 'Pass Plus'
    - regex: 'Pass3G(?:[);/ ]|$)'
      model: 'Pass 3G'
    - regex: 'GoalPlus(?:[);/ ]|$)'
      model: 'Goal Plus'
    - regex: '(Win|Joy)PRO(?:[);/ ]|$)'
      model: '$1 Pro'
    - regex: 'Touch4G(?:[);/ ]|$)'
      model: 'Touch 4G'
    - regex: 'Start3G(?:[);/ ]|$)'
      model: 'Start 3G'
    - regex: 'StartLTE(?:[);/ ]|$)'
      model: 'Start LTE'
    - regex: 'Start(?:[);/ ]|$)'
      model: 'Start'
    - regex: 'PicassoNote(?:[);/ ]|$)'
      model: 'Picasso Note'
    - regex: 'Jinga Iron(?:[);/ ]|$)'
      model: 'Iron'
    - regex: 'Fresh(?:[);/ ]|$)'
      model: 'Fresh'
    - regex: 'Jinga Basco neo(?:[);/ ]|$)'
      model: 'Basco Neo'
    - regex: 'M500-1(?:[);/ ]|$)'
      model: 'Basco M500 3G'
    - regex: '(?:Jinga[ _])?Basco[ _](L[13]|L[45]00|XS1|S2)(?:[);/ ]|$)'
      model: 'Basco $1'
    - regex: 'Jinga Trezor S1 Plus(?:[);/ ]|$)'
      model: 'Trezor S1 Plus'
    - regex: 'JINGA_IGO_L2(?:[);/ ]|$)'
      model: 'IGO L2'
    - regex: '(?:JINGA[_ ])?IGO[_ ]([ML]1|L4)(?:[);/ ]|$)'
      model: 'IGO $1'
    - regex: '(?:JINGA[_ ])?(Neon|A450)(?:[);/ ]|$)'
      model: '$1'

# Jio (https://www.jio.com/)
Jio:
  regex: 'LS1542QWN(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'LS1542QWN(?:[);/ ]|$)'
      model: 'JioPhone Next'

# Twoe
Twoe:
  regex: '(?:TWOE[-_ ]E450R|F534L|F572L|E500A)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'TWOE[-_ ](E450R)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(F534L|F572L|E500A)(?:[);/ ]|$)'
      model: '$1'

# iTruck
iTruck:
  regex: 'iTRUCK 7 3G(?:[);/ ]|$)'
  device: 'smartphone'
  model: '7.0" 3G'

# Torex (torex.tools)
Torex:
  regex: 'TOREX[- ](?:PS12|S18|S27|PAD 8 ?PRO)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'TOREX-(PS12)'
      model: '$1'
    - regex: 'TOREX PAD 8 ?PRO'
      model: 'Pad 8 Pro'
    - regex: 'TOREX[- ](S18|S27)'
      device: 'smartphone'
      model: '$1'

# Doffler
Doffler:
  regex: '(24DHS54|32GHS57)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Oyyu
Oyyu:
  regex: 'OYYUT11(?:[);/ ]|$)'
  device: 'tablet'
  model: 'T11 3G'

# Primux (primux.es)
Primux:
  regex: 'Primux|SirocoY'
  device: 'smartphone'
  models:
    - regex: 'Primux_ioxphone(?:[);/ ]|$)'
      model: 'IOX Phone'
    - regex: 'PrimuxDelta6(?:[);/ ]|$)'
      model: 'Delta 6'
    - regex: 'PrimuxKappa(P50[01])(?:[);/ ]|$)'
      model: 'Kappa $1'
    - regex: 'PrimuxKappa(?:[);/ ]|$)'
      model: 'Kappa'
    - regex: 'Primux_Beta2(?:[);/ ]|$)'
      model: 'Beta 2'
    - regex: 'Primux_?Omega([57])(?:[);/ ]|$)'
      model: 'Omega $1'

    - regex: 'PrimuxUP(?:[);/ ]|$)'
      device: 'tablet'
      model: 'UP'
    - regex: ' PrimuxZonda4(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Zonda 4'
    - regex: 'Primux_Siroco6(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Siroco 6'
    - regex: 'SirocoY(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Siroco Y'

# iMars
iMars:
  regex: '(?:IMARS VEGA X7|VIVI_8|MILKY_WAY_M2)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'IMARS VEGA X7'
      model: 'Vega X7'
    - regex: 'VIVI_8'
      model: 'VIVI 8'
    - regex: 'MILKY_WAY_M2'
      model: 'Milky Way M2'

# Logic or Logic Mobility (logicmobility.com)
Logic:
  regex: '(?:LOGIC[_ ](X4 Plus|X50|X[135]|X4M|L4T|L5D|X5[AFT]|X60G|L50T?|L57|L6[0135]|X60_PLUS)(:?[_ ]LITE2?)?|L55[ABS])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'LOGIC[_ ]X60_PLUS(?:[);/ ]|$)'
      model: 'X60 Plus'
    - regex: 'LOGIC[_ ](L65|X5|X4M)[_ ]LITE(?:[);/ ]|$)'
      model: '$1 Lite'
    - regex: 'LOGIC[_ ](X5)[_ ]LITE2(?:[);/ ]|$)'
      model: '$1 Lite 2'
    - regex: 'LOGIC[_ ](X4 Plus|X50|X[13]|X4M|L4T|L5D|L6[013]|X5[AFT]|X60G)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(L50T?|L55[ABS]|L57)(?:[);/ ]|$)'
      model: '$1'

# Cloud or Cloud TruConnect (www.cloudmobileusa.com)
Cloud:
  regex: '(?:Cirrus_C2|Cyclone_C4|Storm_C3|Stratus_C5(?:_Elite)?|Sunshine_T1|Typhoon_C6|Sunshine_T1_Elite)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Stratus_C5_Elite'
      model: 'Stratus C5 Elite'
    - regex: '(Cirrus_C2|Cyclone_C4|Storm_C3|Stratus_C5|Typhoon_C6)'
      model: '$1'
    - regex: '(Sunshine_T1(?:_Elite)?)'
      device: 'tablet'
      model: '$1'

# Cloudpad
Cloudpad:
  regex: '\+VT(?:107C|Q007C)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '\+VT(107C)'
      model: '+VT$1'
    - regex: '\+VTQ(007C)'
      model: '+VTQ$1'

# Cloudfone
Cloudfone:
  regex: 'CloudFone[ _]|(?:Thrill[ _](?:Boost[ ]?(2|3)?|Power|Snap|Access|Plus 16GB|Lite|HD)|Excite Prime 2 Pro|Excite Prime|ExciteC|NBA Edition|Go SP|Next Infinity Plus|Next Infinity|Next Lite|Go Connect)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Thrill Boost 2 Plus(?:[);/ ]|$)'
      model: 'Thrill Boost 2 Plus'
    - regex: 'Thrill Boost (2|3)(?:[);/ ]|$)'
      model: 'Thrill Boost $1'
    - regex: 'Thrill[ _]Boost(?:[);/ ]|$)'
      model: 'Thrill Boost'
    - regex: 'Thrill Snap(?:[);/ ]|$)'
      model: 'Thrill Snap'
    - regex: 'Thrill Plus 16GB(?:[);/ ]|$)'
      model: 'Thrill Plus 16GB'
    - regex: 'Thrill Power(?:[);/ ]|$)'
      model: 'Thrill Power'
    - regex: 'Thrill Access(?:[);/ ]|$)'
      model: 'Thrill Access'
    - regex: 'Thrill Lite(?:[);/ ]|$)'
      model: 'Thrill Lite'
    - regex: 'Thrill HD(?:[);/ ]|$)'
      model: 'Thrill HD'
    - regex: 'Excite Prime 2 Pro'
      model: 'Excite Prime 2 Pro'
    - regex: 'Excite Prime 2'
      model: 'Excite Prime 2'
    - regex: 'Excite Prime'
      model: 'Excite Prime'
    - regex: 'ExciteC'
      model: 'Excite C'
    - regex: 'NBA Edition(?:[);/ ]|$)'
      model: 'NBA Edition'
    - regex: '(Go SP(?: 2)?|Next Infinity (?:Pro|Plus)|Next Infinity|Go Connect(?: Lite)?(?: 2)?)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Next Lite(?:[);/ ]|$)'
      model: 'Next Lite'
    - regex: 'Next(?:[);/ ]|$)'
      model: 'Next'

# Völfen (https://www.volfen.net/)
Völfen:
  regex: 'Nexo-TAB-7(?: Build|[;)])'
  device: 'smartphone'
  models:
    - regex: 'Nexo-TAB-7(?: Build|[;)])'
      device: 'tablet'
      model: 'Nexo TAB7'

# Vsmart
Vsmart:
  regex: '(?:Joy [123]\+|Joy [34]|Active 1\+|Bee 3|Active [13]|V341U|Bee Lite|Aris| Bee)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Joy ([123])\+(?:[);/ ]|$)'
      model: 'Joy $1 Plus'
    - regex: 'Joy ([34])(?:[);/ ]|$)'
      model: 'Joy $1'
    - regex: 'Active 1\+(?:[);/ ]|$)'
      model: 'Active 1 Plus'
    - regex: 'Bee 3(?:[);/ ]|$)'
      model: 'Bee 3'
    - regex: 'Bee Lite'
      model: 'Bee Lite'
    - regex: 'Bee(?:[);/ ]|$)'
      model: 'Bee'
    - regex: 'Active (\d)(?:[);/ ]|$)'
      model: 'Active $1'
    - regex: 'V341U(?:[);/ ]|$)'
      model: 'Hobson'
    - regex: 'Aris Pro'
      model: 'Aris Pro'
    - regex: 'Aris'
      model: 'Aris'

# MiXzo
MiXzo:
  regex: '(?:MiXzo[ _])?(?:ME ?10(?:2[35]|30)|MX1037|MX1024|MX10[24]1|MX1397)([ _][34]G)?(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'MiXzo[_ ]ME ?(1023|1030)(?:[_ ]([34])G)(?:[);/ ]|$)'
      model: 'ME$1 $2G'
    - regex: 'MiXzo[_ ]MX1021(?:[_ ]3G)?(?:[);/ ]|$)'
      model: 'MX1021 3G'
    - regex: '(?:MiXzo[ _])?MX(1037|1041|1024|1397)[ _]4G(?:[);/ ]|$)'
      model: 'MX$1 4G'
    - regex: 'ME ?1025'
      model: 'ME1025 3G'

# Openbox
Openbox:
  regex: '(?:Openbox (?:A[34](?: (?:Pro|Lite))?)|AS1_HD|AS_?4K[_-](?:CI(?:_PRO|_Lite)?(?:_PLUS)?|PLUS|2X)|AS_?4K)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'Openbox (A[34](?: (?:Pro|Lite))?)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'AS_4K_CI_PRO_PLUS'
      model: 'AS 4K CI Pro Plus'
    - regex: 'AS_4K_CI_Lite'
      model: 'AS 4K CI Lite'
    - regex: 'AS_?4K_CI_PRO'
      model: 'AS 4K CI Pro'
    - regex: 'AS_?4K[_-](2X|CI)'
      model: 'AS 4K $1'
    - regex: 'AS_?4K[_-]PLUS'
      model: 'AS 4K Plus'
    - regex: 'AS1_HD'
      model: 'AS1 HD'
    - regex: 'AS_?4K'
      model: 'AS 4K'

# Ziox
Ziox:
  regex: 'ZIOX[_ ]|(?:Astra Viva 4G|Astra (?:(?:NXT|Curve|Young) Pro|(?:Metal|Titan|Young|Curve) 4G|Star|Blaze)|Duo(?:tel|pix)[ _]\w\d{1,2})(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'ZIOX[_ ]F9[_ ]PRO(?:[);/ ]|$)'
      model: 'F9 Pro'
    - regex: 'Astra (Viva|Titan|Young|Metal|Curve) 4G(?:[);/ ]|$)'
      model: 'Astra $1 4G'
    - regex: 'Astra (Star|Blaze)(?:[);/ ]|$)'
      model: 'Astra $1'
    - regex: 'Astra (NXT|Curve|Young) Pro(?:[);/ ]|$)'
      model: 'Astra $1 Pro'
    - regex: 'Duopix F9 Pro'
      model: 'Duopix F9 Pro'
    - regex: 'Duo(tel|pix)[ _](\w\d{1,2})(?:[);/ ]|$)'
      model: 'Duo$1 $2'

# iDroid
iDroid:
  regex: '(?:APACHE G6|iDroid Royal V5)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'APACHE G6'
      model: 'Apache G6'
    - regex: 'Royal V5'
      model: 'Royal V5'

# Aoson
Aoson:
  regex: '(?:aoson ?(?:R10[1-3]|S[78]|M707TG|M96T)(?:[_ ]?Pro)?|R103)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(?:aoson ?)?R10([1-3])(?:[);/ ]|$)'
      model: 'R10$1 10.1"'
    - regex: 'aoson ?S7_Pro(?:[);/ ]|$)'
      model: 'S7 Pro 7.0"'
    - regex: 'aoson ?S7(?:[);/ ]|$)'
      model: 'S7 7.0"'
    - regex: 'aoson ?S8Pro(?:[);/ ]|$)'
      model: 'S8 Pro 8.0"'
    - regex: 'aoson ?(M707TG|M96T)(?:[);/ ]|$)'
      model: '$1'

# Finlux
Finlux:
  regex: 'FINLUX, ([a-z0-9_ \-]+), (?:wired|wireless)'
  device: 'tv'
  model: ''

# FireFly Mobile
FireFly Mobile:
  regex: '(?:AURII[ _](?:FAME|VIVID|INSPIRE|MAGNUM|Passion|Virtuoso|RAZOR|ULTRA|Secret Lite|AMUSE[_ ]3G|FORCE|FUSION|F8[_ ]Premium|XCITE|DELIGHT|DREAM[_ ](?:MINI|One)|AMUSE_4G)|SECRET_XR?|INTENSE[ _](?:POWER|METAL_2|XT)|RAZOR_PLUS_4G|SUPER SWEET|SWEET MINI|Dream_One_8|INSPIRE_4G|S90_Q|INTENSE_METAL_4G|INTENSE (?:5|XL)|VIVID_PRO|VIVID_PREMIUM)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'AURII[ _]FORCE(?:[);/ ]|$)'
      model: 'Aurii Force'
    - regex: 'AURII[ _]VIVID(?:[);/ ]|$)'
      model: 'Aurii Vivid'
    - regex: 'AURII[ _]INSPIRE(?:[);/ ]|$)'
      model: 'Aurii Inspire'
    - regex: 'AURII[ _]RAZOR(?:[);/ ]|$)'
      model: 'Aurii Razor'
    - regex: 'RAZOR_PLUS_4G(?:[);/ ]|$)'
      model: 'Aurii Razor Plus'
    - regex: 'AURII[ _]DELIGHT(?:[);/ ]|$)'
      model: 'Aurii Delight'
    - regex: 'AURII[ _]DREAM[_ ]MINI(?:[);/ ]|$)'
      model: 'Aurii Dream Mini'
    - regex: 'AURII[ _]FAME(?:[);/ ]|$)'
      model: 'Aurii Fame'
    - regex: 'AURII[ _]AMUSE[ _]4G(?:[);/ ]|$)'
      model: 'Aurii Amuse 4G'
    - regex: 'Dream_One_8(?:[);/ ]|$)'
      model: 'Aurii Dream One 8'
    - regex: 'AURII[ _]DREAM[_ ]One(?:[);/ ]|$)'
      model: 'Aurii Dream One'
    - regex: 'AURII[ _]ULTRA(?:[);/ ]|$)'
      model: 'Aurii Ultra'
    - regex: 'AURII[ _]AMUSE[_ ]3G(?:[);/ ]|$)'
      model: 'Aurii Amuse 3G'
    - regex: 'AURII[ _]FUSION(?:[);/ ]|$)'
      model: 'Aurii Fusion'
    - regex: 'AURII[ _]MAGNUM(?:[);/ ]|$)'
      model: 'Aurii Magnum'
    - regex: 'VIVID_PRO(?:[);/ ]|$)'
      model: 'Aurii Vivid Pro'
    - regex: 'VIVID_PREMIUM(?:[);/ ]|$)'
      model: 'Aurii Vivid Premium'
    - regex: 'AURII[ _]XCITE(?:[);/ ]|$)'
      model: 'Aurii xCite'
    - regex: 'SECRET_(XR?)(?:[);/ ]|$)'
      model: 'Aurii Secret $1'
    - regex: 'AURII[ _]((?:Passion|Virtuoso|Secret Lite|F8[_ ]Premium))(?:[);/ ]|$)'
      model: 'Aurii $1'
    - regex: 'INTENSE POWER(?:[);/ ]|$)'
      model: 'Intense Power'
    - regex: 'INTENSE_XT(?:[);/ ]|$)'
      model: 'Intense XT'
    - regex: 'INTENSE_METAL_4G(?:[);/ ]|$)'
      model: 'Intense Metal 4G'
    - regex: 'INTENSE_METAL_2(?:[);/ ]|$)'
      model: 'Intense Metal 2'
    - regex: 'SUPER SWEET(?:[);/ ]|$)'
      model: 'Super Sweet'
    - regex: 'SWEET MINI(?:[);/ ]|$)'
      model: 'Sweet Mini'
    - regex: 'Inspire_4G'
      model: 'Inspire 4G'
    - regex: 'INTENSE (5|XL)'
      model: 'Intense $1'
    - regex: '(S90_Q)(?:[);/ ]|$)'
      model: '$1'

# FISE (http://www.fise.com.cn/)
FISE:
  regex: 'Fise_'
  device: 'smartphone'
  models:
    - regex: 'Fise_32433_3G(?:[);/ ]|$)'
      device: 'feature phone'
      model: 'M32433 3G'

# i-Cherry or iCherry
i-Cherry:
  regex: 'iCherry_?'
  device: 'smartphone'
  models:
    - regex: 'iCherry[ _](C(?:25[1258]|21[16]|110|121|22[01379]|23[03])|X1)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'iCherry-C256'
      device: 'tablet'
      model: 'C256 Nano 3G'

# NextTab
NextTab:
  regex: 'TAB (A40[13]0)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Time 2
Time2:
  regex: '(TC1050G)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1 10.1"'

# Sunstech (sunstech.com)
Sunstech:
  regex: '(TAB(?:2323GMQC|1081|918QC|917QC-(?:8|16)GB))(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Hotwav (www.hotwav.com)
Hotwav:
  regex: '(?:Venus[_ ](?:X[12]|X1[0245679]|R8 PLUS|R[236-9]|R1[028]|X16-1)|Cosmos[ _](?:V8_lite|V19_Plus|V2[0-3]|U2?|V1[359]|V[45689]|V8-2)|Pearl K[123]|Magic Q8|Magic 5 Plus|Magic (?:[89]|1[13])|Hot[_ ]6|Symbol (?:M1|X|Max|R60|Pro)|Symbol|Cyber [78]|Cyber 9 Pro|Cosmos|W10 Pro|TAB R6 Pro|T5 Pro)(?:[);/ ]|$)|Android 12;(?: [\w-]+;)? W10(?: Build|[;)])'
  device: 'smartphone'
  models:
    - regex: 'Cosmos[ _]V8_lite(?:[);/ ]|$)'
      model: 'Cosmos V8 Lite'
    - regex: 'Hot[_ ]6?(?:[);/ ]|$)'
      model: 'Hot 6'
    - regex: 'Venus R8 PLUS(?:[);/ ]|$)'
      model: 'Venus R8 Plus'
    - regex: 'Venus[_ ]X16(?:-1)?(?:[);/ ]|$)'
      model: 'Venus X16'
    - regex: 'Venus[_ ](X[12]|X1[0245679]|R[236-9]|R1[028])(?:[);/ ]|$)'
      model: 'Venus $1'
    - regex: 'Cyber (\d*) Pro'
      model: 'Cyber $1 Pro'
    - regex: 'Cyber (\d*)'
      model: 'Cyber $1'
    - regex: 'Symbol M1'
      model: 'Symbol M1'
    - regex: '(W10|T5) Pro'
      model: '$1 Pro'
    - regex: ' W10?(?:[);/ ]|$)'
      model: 'W10'
    - regex: 'Symbol R60'
      device: 'phablet'
      model: 'Symbol R60'
    - regex: 'TAB R6 Pro'
      device: 'tablet'
      model: 'Tab R6 Rro'
    - regex: '(Cosmos[ _](?:V19_Plus|V2[0-3]|U2?|V1[359]|V[45689])|Pearl K[123](?: Prime)?|Magic Q8|Magic 5 Plus|Magic (?:[89]|1[13])|Symbol (?:X|Max)|Cosmos)(?:-2)?(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Symbol Pro'
      model: 'Symbol Pro'
    - regex: 'Symbol'
      model: 'Symbol'

# Tetratab
Tetratab:
  regex: 'CASEBOOK_3(?:[);/ ]|$)'
  device: 'tablet'
  model: 'Casebook 3'

# Dolamee
Dolamee:
  regex: 'Dolamee[_ -](D[56])(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# INVIN
Invin:
  regex: 'INVIN[ _-]|(?:IPC002|KM5PRO)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'INVIN[ _-](X[24]|KM[678])'
      model: '$1'
    - regex: 'KM5PRO'
      model: 'KM5 Pro'
    - regex: '(IPC002)'
      model: '$1'

# Doopro
Doopro:
  regex: 'Doopro P3(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'P3'

# IQM
IQM:
  regex: 'IQM (?:picasso|vivaldi|newton)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'IQM picasso(?:[);/ ]|$)'
      model: 'Picasso'
    - regex: 'IQM vivaldi(?:[);/ ]|$)'
      model: 'Vivaldi'
    - regex: 'IQM newton(?:[);/ ]|$)'
      model: 'Newton'

# Nos
Nos:
  regex: 'Nos (?:FIVE|NOVU|NEVA|Roya)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'NOS FIVE(?:[);/ ]|$)'
      model: 'Five'
    - regex: 'NOS NOVU III(?:[);/ ]|$)'
      model: 'Novu III'
    - regex: 'NOS NOVU II(?:[);/ ]|$)'
      model: 'Novu II'
    - regex: 'NOS NOVU(?:[);/ ]|$)'
      model: 'Novu'
    - regex: 'NOS NEVA 80(?:[);/ ]|$)'
      model: 'Neva 80'
    - regex: 'NOS Roya(?:[);/ ]|$)'
      model: 'Roya'

# Accent (DBM Maroc) (accent.ma)
Accent:
  regex: '(?:ACCENT[_ ]NEON|FAST7 ?3G|PEARL[_ ]A[24567]|TANK_P55|CAMELEON[_ ](?:C[456]|A1|H2)(?:[_ ]PLUS)?|Speed[- ](?:[AXYM]2|X2\+)|SURF1000)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'ACCENT[_ ]NEON(?:[);/ ]|$)'
      model: 'Neon'
    - regex: 'CAMELEON[_ ]C([65])[_ ]PLUS(?:[);/ ]|$)'
      model: 'Cameleon C$1 Plus'
    - regex: 'Speed[- ]([AXYM]2)(?:[);/ ]|$)'
      model: 'Speed $1'
    - regex: 'Speed-X2\+(?:[);/ ]|$)'
      model: 'Speed X2 Plus'
    - regex: 'CAMELEON[_ ](C[456]|A1|H2)(?:[);/ ]|$)'
      model: 'Cameleon $1'
    - regex: 'PEARL A4 Lite(?:[);/ ]|$)'
      model: 'Pearl A4 Lite'
    - regex: 'PEARL A4 PLUS(?:[);/ ]|$)'
      model: 'Pearl A4 Plus'
    - regex: 'PEARL[_ ]A([24567])(?:[);/ ]|$)'
      model: 'Pearl A$1'
    - regex: 'TANK_P55(?:[);/ ]|$)'
      model: 'Tank P55'
    - regex: 'FAST7 ?3G(?:[);/ ]|$)'
      device: 'tablet'
      model: 'FAST7 3G'
    - regex: 'SURF1000(?:[);/ ]|$)'
      device: 'tablet'
      model: 'Surf 1000'

# Avenzo (www.avenzo.es)
Avenzo:
  regex: 'Avenzo(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'MOB4 4G(?:[);/ ]|$)'
      model: 'Mob 4 4G'
    - regex: 'MOB4PRO 4G(?:[);/ ]|$)'
      model: 'Mob 4 Pro 4G'

# Beelink (www.bee-link.com)
Beelink:
  regex: '(?:Beelink (?:G[ST]1|LAKE I|SEA I|A1)|GTKing(?:_AT)?|GT1mini-2|GT1-mini(?:[-_]AT)?|R68 II)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'Beelink (G[ST]1|LAKE I|SEA I|A1)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'GT1-mini(?:-AT)?(?:[);/ ]|$)'
      model: 'GT1 Mini'
    - regex: 'GT1mini-2(?:[);/ ]|$)'
      model: 'GT1 Mini 2'
    - regex: 'GTKing PRO(?:[);/ ]|$)'
      model: 'GT King Pro'
    - regex: 'GTKing(?:_AT)?(?:[);/ ]|$)'
      model: 'GT King'
    - regex: 'R68 II(?:[);/ ]|$)'
      model: 'R68 II'

# MAXVI
MAXVI:
  regex: 'MAXVI[ _](?:MS401)(?:[);/ ]|$)|\w*_?MAXVI?_\w+|MS502[_ ]Orion|MS531'
  device: 'smartphone'
  models:
    - regex: 'MAXVI[ _](MS401)'
      model: '$1'
    - regex: 'MS531'
      model: 'MS531 Vega'
    - regex: 'MS502[_ ]Orion'
      model: 'MS502 Orion'
    - regex: '\w*MAXVI_(P11|K10|X[358]00)_'
      device: 'feature phone'
      model: '$1'

# MDC Store (http://mdc.store/ or https://www.facebook.com/mdcmobileuzbekistan/)
MDC Store:
  regex: '(?:Prime_S|M300 4G|MDC M5|Nova Pro|Grand Pro)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Prime_S(?:[);/ ]|$)'
      model: 'Prime S'
    - regex: 'Nova Pro'
      model: 'Nova Pro'
    - regex: 'Grand Pro'
      model: 'Grand Pro'
    - regex: '(M300) 4G(?:[);/ ]|$)'
      model: '$1 4G'
    - regex: 'MDC M5(?:[);/ ]|$)'
      model: 'M5'

# MDTV
MDTV:
  regex: 'MDTV(?:[);/ ]|$)'
  device: 'tv'
  model: ''

# meanIT (meanit.hr)
meanIT:
  regex: 'meanIT[ _](?:C[12]|X10|X[126]|MG430|Q[145]|C[18]0C[18]1)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'meanIT[ _]Q1 plus(?:[);/ ]|$)'
      model: 'Q1 Plus'
    - regex: 'meanIT[ _](C[12]|X[126]|MG430|Q[145])(?:[);/ ]|$)'
      model: '$1'
    - regex: 'meanIT[ _](X10|C[18]0C[18]1)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'

# Kenxinda
Kenxinda:
  regex: 'Three[_ ]Proofings[_ ]W([5-9])(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Three Proofings W$1'

# X-BO or XBO
X-BO:
  regex: 'X[-]?BO (V[78]|V1[01]|V[89]\+)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# X88
X88:
  regex: 'X88pro10'
  device: 'tv'
  model: 'Pro 10'

# X96
X96:
  regex: '(?:X96Air_A100|X96_X6_I|X96Max_Plus_Ultra|X96MATE_PLUS|X96MINI_11)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'X96Air_A100'
      model: 'Air A100'
    - regex: 'X96Max_Plus_Ultra'
      model: 'Max Plus Ultra'
    - regex: 'X96_X6_I'
      model: 'X6i'
    - regex: 'X96MATE_PLUS'
      model: 'Mate Plus'
    - regex: 'X96MINI_11'
      model: 'Mini 11'

# X96Q
X96Q:
  regex: 'X96Q(?:[);/ ]|$)'
  device: 'tv'
  model: ''

# Xgody
Xgody:
  regex: 'XGODY|(?:Y19\(EU\)|XGT_EEA)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'XGODY Y17(?:[);/ ]|$)'
      model: 'Y17'
    - regex: 'Y19\(EU\)'
      model: 'Y19'
    - regex: 'XGT_EEA'
      device: 'tablet'
      model: 'XGT'
    - regex: 'XGODY_X96(?:[);/ ]|$)'
      model: 'X96'
      device: 'tv'

# Alcor (alcordigital)
Alcor:
  regex: '(Access_Q784C)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# iBrit
iBrit:
  regex: 'IBRIT_|(?:SI5[12]|i5Plus|POWER_X|Z2Lite)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'IBRIT_I([57])(?:[);/ ]|$)'
      model: 'I$1'
    - regex: 'i5Plus'
      model: 'I5 Plus'
    - regex: 'iBRIT_POWER6(?:[);/ ]|$)'
      model: 'Power 6'
    - regex: 'iBRIT_Speed Pro(?:[);/ ]|$)'
      model: 'Speed Pro'
    - regex: 'SI51(?:[);/ ]|$)'
      model: 'Speed'
    - regex: 'SI52(?:[);/ ]|$)'
      model: 'Speed Plus'
    - regex: 'POWER_X(?:[);/ ]|$)'
      model: 'Power X'
    - regex: 'Z2Lite'
      model: 'Z2 Lite'
    - regex: 'iBRIT_AF51(?:[);/ ]|$)'
      model: 'AF51'

# Ovvi
Ovvi:
  regex: 'Jumbo X1'
  device: 'smartphone'
  model: 'Jumbo X1'

# Fero
Fero:
  regex: 'Fero[_ ]|Royale[_ ](?:[YX]2|A1)'
  device: 'smartphone'
  models:
    - regex: 'Fero_Y1'
      model: 'Y1'
    - regex: 'Royale Y2 Lite'
      model: 'Royale Y2 Lite'
    - regex: 'Royale[_ ]([YX]2|A1)'
      model: 'Royale $1'
    - regex: 'FERO PACE'
      model: 'Pace'
    - regex: 'A4001 Plus 2019'
      model: 'A4001 Plus (2019)'
    - regex: 'Fero[ _](A4001|A450[23]|A5001|L100|Iris|Power|Mega LTE|Vibe|J1)'
      model: '$1'

# Ruio
Ruio:
  regex: 'Ruio[ _]|(?:M671M4|i7Plus|S5[05]06|S518)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Ruio[ _](S4)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(?:Ruio[ _])?(S5|i7)Plus(?:[);/ ]|$)'
      model: '$1 Plus'
    - regex: 'M671M4'
      model: 'Cola 4G'
    - regex: '(S5[05]06|S518)(?:[);/ ]|$)'
      model: '$1'

# Transpeed
Transpeed:
  regex: 'Transpeed[_ ]|(?:TR99 MINI\+|TR99)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'TR99 MINI\+'
      model: 'TR99 Mini Plus'
    - regex: '(?:Transpeed[_ ])?(TR99|H616|6K|X4S)(?:[);/ ]|$)'
      model: '$1'

# 8848 (everest 8848, 8848 titanium)
'8848':
  regex: '8848 (M[3-6])(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# VVETIME
VVETIME:
  regex: 'ZYVV1(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'V1'

# A1 (www.a1.by)
A1:
  regex: '(?:A1 (?:Alpha|Alpha 20\+)|Alpha 20)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'A1 Alpha 20\+'
      model: 'Alpha 20 Plus'  # ZTE Blade V2020
    - regex: 'Alpha 20'
      model: 'Alpha 20'
    - regex: 'Alpha 21'
      model: 'Alpha 21'
    - regex: 'A1 Alpha'
      model: 'Alpha'

# Swisstone
Swisstone:
  regex: 'swisstone (SD 5[13]0)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# P-UP (Peaup Co., Ltd.) (p-up.jp, mode1.jp)
P-UP:
  regex: 'MD-0[143]P(?:[);/ ]|$)'
  device: 'phablet'
  models:
    - regex: 'MD-04P(?:[);/ ]|$)'
      model: 'Mode 1 RR'
    - regex: 'MD-03P(?:[);/ ]|$)'
      model: 'Mode 1 RS'
    - regex: 'MD-01P(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Mode 1 MD-01P'

# Paladin (https://paladin.com.my/)
Paladin:
  regex: 'Paladin TV'
  device: 'tv'
  model: 'TV Box'

# iVooMi
iVooMi:
  regex: '(?:Innelo_1|iV 505|Me 1\+|Me 3S|Me [2345]|Android 8(?:[\d.]*);(?: [\w-]+;)? (?:i2_Lite|i2))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Innelo_1'
      model: 'Innelo 1'
    - regex: 'iV 505'
      model: 'Me 1'
    - regex: 'i2_Lite'
      model: 'i2 Lite'
    - regex: ' i2(?:[);/ ]|$)'
      model: 'i2'
    - regex: 'Me 1\+'
      model: 'Me 1+'
    - regex: 'Me ([2345]S?)'
      model: 'Me $1'

# Pixelphone
Pixelphone:
  regex: 'Pixelphone S1(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'S1'

# Pixela
Pixela:
  regex: 'Infineum[_ ](Z4?5)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Infineum $1'

# Iris
Iris:
  regex: '(?:Vox[_ ](?:[45]S|Alpha|POP|STEEL Plus|Energy|FORTIS|VERO)|IS2_?Plus|IS[36]Plus|IS2S|Next_P(?:_PRO)?|NEXT U|NEXT P\+|IRS002-16|X1 mini|Iris_Pad_G8020|G7060|G7100|G8060)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Vox[_ ]([45])S'
      model: 'Vox $1S'
    - regex: 'VOX[_ ]FORTIS'
      model: 'Vox Fortis'
    - regex: 'VOX[_ ]VERO'
      model: 'Vox Vero'
    - regex: 'VOX Alpha Plus'
      model: 'Vox Alpha Plus'
    - regex: 'VOX STEEL Plus'
      model: 'Vox Steel Plus'
    - regex: 'VOX Alpha'
      model: 'Vox Alpha'
    - regex: 'VOX Energy'
      model: 'Vox Energy'
    - regex: 'VOX POP plus'
      model: 'Vox Pop Plus'
    - regex: 'VOX POP Pro'
      model: 'Vox Pop Pro'
    - regex: 'Next_P_PRO'
      model: 'Next P Pro'
    - regex: 'NEXT[_ ]([PU]\+?)'
      model: 'Next $1'
    - regex: 'IS([236])_?Plus'
      model: 'IS$1 Plus'
    - regex: 'IRS002-16'
      model: 'I-S6'
    - regex: 'IS2S'
      model: 'IS2S'
    - regex: 'X1 mini'
      model: 'X1 Mini'
    - regex: '(?:Iris_Pad_)?(G7060|G7100|G80[26]0)'
      device: 'tablet'
      model: '$1'

# Fonos (fonos.eu)
Fonos:
  regex: 'Fonos-|(?:Android 10;(?: [\w-]+;)? O3)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Fonos-(O\d)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(?:Android 10;(?: [\w-]+;)? O3)(?:[);/ ]|$)'
      model: 'O3'

# Xtouch (www.xtouchtechnologies.com)
Xtouch:
  regex: '(?:Xtouch[ _](?:X10|A5|X)|XBot[_ ](?:Senior|Junior)|X9_16GB|XP10_Wifi)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Xtouch[ _](X10|A5|X)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'X9_16GB(?:[);/ ]|$)'
      model: 'X9'
    - regex: 'XBot[_ ](Senior|Junior)'
      model: 'XBot $1'
    - regex: 'XP10_Wifi'
      device: 'tablet'
      model: 'XP10 WiFi'

# Conquest
Conquest:
  regex: 'Conquest[-_ ](?:S\d+|F2)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Conquest[-_ ]S(\d+)'
      model: 'S$1'
    - regex: 'Conquest-F2'
      model: 'F2'

# Zatec
Zatec:
  regex: 'ZATEC[_ ]|(?:[ ]WIND|ZPAD_1|ZPLAY1_2018|Zpower_(?:Plus|2018))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'ZATEC[_ ]GRAVITY(?:[);/ ]|$)'
      model: 'Gravity'
    - regex: '[ ]WIND(?:[);/ ]|$)'
      model: 'Wind'
    - regex: 'ZPLAY1_2018'
      model: 'Zplay (2018)'
    - regex: 'Zpower_2018'
      model: 'Zpower (2018)'
    - regex: 'Zpower_Plus'
      model: 'Zpower Plus'
    - regex: 'ZPAD_1'
      device: 'tablet'
      model: 'ZPad'

# Selecline (https://www.auchan.lu/)
Selecline:
  regex: 'Selecline[ _]|(?:S4T7IN|ST19101|S3T10IN)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(ST19101|S4T7IN|S3T10IN)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Selecline 10(?:[);/ ]|$)'
      model: '10'

# Selenga
Selenga:
  regex: 'Selenga[ _](A[1345])(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Starlight
Starlight:
  regex: 'Starlight|(?:My_Star_X|RIO STAR|C_Note(?:_Pro)?|Star_Mix_2|I_STAR_PLUS|star_plus_plus|star_two|I star (?:one|two))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'My_Star_X'
      model: 'My Star X'
    - regex: 'RIO STAR'
      model: 'Rio Star'
    - regex: 'C_Note_Pro'
      model: 'C Note Pro'
    - regex: 'C_Note'
      model: 'C Note'
    - regex: 'Star_Mix_2'
      model: 'Star Mix 2'
    - regex: 'I_STAR_PLUS'
      model: 'I Star Plus'
    - regex: 'I star two|star_two'
      model: 'I Star Two'
    - regex: 'I star one'
      model: 'I Star One'
    - regex: 'Starlight_ROME_X'
      model: 'Rome X'
    - regex: 'star_plus_plus'
      model: 'Star++'

# GEOFOX
GEOFOX:
  regex: 'GEOFOX[_ ]MID ?(743\+?)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'MID$1'

# Tinmo
Tinmo:
  regex: 'TiNMO[- _](A11|K3)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Verico
Verico:
  regex: '(RP-UDM0[12]A|RP-UDP05A|JO-UQM10A)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'Uni Pad $1'

# TTEC (ttec.com.tr)
TTEC:
  regex: '(Magictab (?:9GX|7GE|718))(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# eSTAR
eSTAR:
  regex: 'eSTAR[_ ](?:Grand|GO\!?|Zoom Quad|Gemini|MINI[_ ]3G|BEAUTY|MOON)|MERCURY HD Quad core'
  device: 'tablet'
  models:
    - regex: 'eSTAR (Grand|GO\!?) (HD Intel|IPS Intel|IPS|HD|Intel) Quad Core 3G'
      model: '$1 $2 Quad Core 3G'
    - regex: 'eSTAR (Zoom Quad|Gemini|GO)'
      model: '$1'
    - regex: 'eSTAR GRAND HD quad core( [34]G)?'
      model: 'Grand HD Quad Core$1'
    - regex: 'eSTAR GRAND'
      model: 'Grand'
    - regex: 'MERCURY HD Quad core'
      model: 'Mercury HD Quad core'
    - regex: 'eSTAR BEAUTY HD Quad core'
      model: 'Beauty HD Quad Core'
    - regex: 'eSTAR MOON HD Quad core'
      model: 'Moon HD Quad Core 3G'
    - regex: 'eSTAR BEAUTY 2 HD Quad core'
      model: 'Beauty 2 HD Quad Core'
    - regex: 'eSTAR[_ ]MINI[_ ]3G'
      model: 'Mini 3G'

# Hometech (hometech.com.tr)
Hometech:
  regex: '(?:Ideal (?:10S|Tab [79]|8S)|ALFA(?:10T[BX]|7LM)|ALFA[_ ](?:10R[CX]|10BS|10TM?|8T|10MB|10YC|7RS|[78]M?RC|7M|8S[TL]|8RX|8MG)|HT[ _](?:7RT|8MZ))(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(Ideal (?:10S|Tab 9|8S))(?:[);/ ]|$)'
      model: '$1'
    - regex: 'ALFA[_ ]?(10R[CX]|10YC|10BS|10T[BMX]?|7RS|[78]M?RC|7L?M|10MB|8T|8S[TL]|8RX|8MG)(?:[);/ ]|$)'
      model: 'ALFA $1'
    - regex: 'Ideal Tab 7 Ips( 3G)?'
      model: 'Ideal Tab 7 IPS$1'
    - regex: 'HT[ _](7RT|8MZ)(?:[);/ ]|$)'
      model: 'HT $1'

# ExMobile (www.exmobile.my)
ExMobile:
  regex: '(?:EX(?:29|45)i|CHAT_5\+)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'CHAT_5+'
      model: 'Chat 5 Plus'
    - regex: 'EX(29|45)i(?:[);/ ]|$)'
      model: 'EX $1i'

# Exmart Mobile (exmartmobile.com)
Exmart:
  regex: 'Exmart[ _](K1)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Hipstreet (hipstreet.com)
Hipstreet:
  regex: 'HS_|10DTB12(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'HS_9DTB39(?:[);/ ]|$)'
      model: 'Pulse'
    - regex: '10DTB12(?:[);/ ]|$)'
      model: 'Phoenix'
    - regex: 'HS_([a-z0-9]+)(?:[);/ ]|$)'
      model: '$1'

# Navitech
Navitech:
  regex: '(NeoTab)[ _-]((?:S1[23]0|S125|H85|H11[05]|KID741|S9700))(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1 $2'

# NorthTech (north-tech.us)
NorthTech:
  regex: '(NT-TP10)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'TouchPad 10.0"'

# UNIWA
UNIWA:
  regex: 'UNIWA[ _](X5|F40)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# ANDOWL (www.andowlph.com)
Andowl:
  regex: '(?:ANDOWL-)?(Q[45]|QG9|QK9MAX)(?:[);/ ]|$)|Andowl'
  device: 'tv'
  model: '$1'

# Silelis (silelis.com)
Silelis:
  regex: 'Silelis[ _](T-1)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Bluedot (bluedot.co.jp)
Bluedot:
  regex: 'BLUEDOT[_ ]|(?:BNT-71)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(?:BLUEDOT[_ ])?(BNP-500)(?:[);/ ]|$)'
      device: 'smartphone'
      model: '$1'
    - regex: '(BNT-71)(?:[);/ ]|$)'
      model: '$1'

# Planet Computers (https://www.www3.planetcom.co.uk/)
Planet Computers:
  regex: '(?:Cosmo_Communicator|Gemini_4G)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(Cosmo_Communicator)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(?:Gemini_4G)(?:[);/ ]|$)'
      model: 'Gemini 4G'

# Reach
Reach:
  regex: '(Allure[_ ](?:Ultra(?:[_]Curve)?|Secure|Admire|Rise)|Opulent X)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# MobiWire
MobiWire:
  regex: '(?:Kiona|KANUNA|Halona|Kicka[_ ][45][ _]Plus|Kicka Zoom|Kohana|Kayeta|Kosumi|KWANITA|Lonan|Hotah|Kicka 5|Kiona|Smart ?(?:[CEN]11|N12)|Sakari)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'KANUNA'
      model: 'Kanuna'
    - regex: 'KWANITA'
      model: 'Kwanita'
    - regex: 'Smart ?([CEN]11|N12)'
      model: 'Smart $1'
    - regex: '(Kiona|Kicka[_ ][45][ _]Plus|Kohana|Kayeta|Kosumi|Lonan|Halona|Hotah|Kicka 5|Kicka Zoom|Kiona|Sakari)(?:[);/ ]|$)'
      model: '$1'

# Hezire
Hezire:
  regex: '(HTB801)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Hurricane (hurricanemobile.com)
Hurricane:
  regex: 'Hurricane[ _]|(?:Flame_Plus|Glaze|Cobra|Ridge Plus|Rush Plus|DZIRE|Android 7(?:[\d.]*);(?: [\w-]+;)? Beam|Vulcan|SAGE|Iris Plus 2021|VortexPlus|Excite|Flint|Panther)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Hurricane[ _]IGNITE'
      model: 'Ignite'
    - regex: 'Hurricane[ _]Bolt'
      model: 'Bolt'
    - regex: 'Hurricane[ _]VORTEX'
      model: 'Vortex'
    - regex: 'Hurricane[ _]GIGA'
      model: 'Giga'
    - regex: 'Glaze'
      model: 'Glaze'
    - regex: 'Cobra'
      model: 'Cobra'
    - regex: 'DZIRE'
      model: 'Dzire'
    - regex: 'SAGE'
      model: 'Sage'
    - regex: 'Beam'
      model: 'Beam'
    - regex: 'Vulcan'
      model: 'Vulcan'
    - regex: 'Flame_Plus'
      model: 'Flame Plus'
    - regex: 'Ridge Plus'
      model: 'Ridge Plus'
    - regex: 'Rush Plus'
      model: 'Rush Plus'
    - regex: 'Iris Plus 2021'
      model: 'Iris Plus (2021)'
    - regex: 'VortexPlus'
      model: 'Vortex Plus'
    - regex: 'Excite'
      model: 'Excite'
    - regex: 'Flint'
      model: 'Flint'
    - regex: 'Panther'
      model: 'Panther'

# iSwag (iswagmobile.com)
iSWAG:
  regex: 'ISWAG[ _]'
  device: 'smartphone'
  models:
    - regex: 'iSWAG[_ ]ACTIV'
      model: 'Activ'
    - regex: 'iSWAG[_ ]KRONOS'
      model: 'Kronos'
    - regex: 'iSWAG[_ ]Lynx'
      model: 'Lynx'
    - regex: 'iSWAG[_ ]MEGA'
      model: 'Mega'
    - regex: 'iSWAG[_ ]MANTRA'
      model: 'Mantra'
    - regex: 'iSWAG[_ ]NEMESIS'
      model: 'Nemesis'
    - regex: 'iSWAG[_ ]NEO'
      model: 'Neo'
    - regex: 'ISWAG[_ ]VIPER'
      model: 'Viper'

# Reeder (reeder.com.tr)
Reeder:
  regex: '(?:reeder[_ ](?:3G_Tablet|A7iC|A[78]i[_ ]Quad|A8i Q2|M8 Plus|[TM]8|M10 Plus|P11SE|M7_Go)|M8_Go|M10SPlus|P12Curve|M10 Pro LTE|M10 Blue Max|P13_Blue_Plus|P13_Max_Blue|P13[_ ]Blue[_ ]Ma(?:ks|x|xL)|P13_Blue|P13 Blue 202[12]|M7Plus|A8i-Q2|M7Go_2019)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'A8i-Q2'
      model: 'A8i Q2'
    - regex: 'reeder[_ ](3G_Tablet|A7iC|A[78]i[_ ]Quad|A8i Q2|M8 Plus|[TM]8|M10 Plus|P11SE)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'M10SPlus'
      model: 'M10S Plus'
    - regex: 'M7Plus'
      model: 'M7 Plus'
    - regex: '(?:reeder_)?(?:M7Go_2019|M7_Go)'
      model: 'M7 Go'
    - regex: '(?:reeder_)?(?:M8_Go)'
      model: 'M8 Go'
    - regex: 'M10 Blue Max'
      model: 'M10 Blue Max'
    - regex: 'M10 Pro LTE'
      model: 'M10 Pro LTE'
    - regex: 'P12Curve'
      device: 'smartphone'
      model: 'P12 Curve'
    - regex: 'P13 Blue Max PL'
      device: 'smartphone'
      model: 'P13 Blue Pro Lite'
    - regex: 'P13_Blue_Maks'
      device: 'smartphone'
      model: 'P13 Blue Maks'
    - regex: 'P13_Blue_Plus'
      device: 'smartphone'
      model: 'P13 Blue Plus'
    - regex: 'P13 Blue Max Pro 2021'
      device: 'smartphone'
      model: 'P13 Blue Max Pro (2021)'
    - regex: 'P13 Blue Max Lite'
      device: 'smartphone'
      model: 'P13 Blue Max Lite'
    - regex: 'P13 Blue Max Pro'
      device: 'smartphone'
      model: 'P13 Blue Max Pro'
    - regex: 'P13 Blue 202([12])'
      device: 'smartphone'
      model: 'P13 Blue (202$1)'
    - regex: 'P13 Blue MaxL? 202([012])'
      device: 'smartphone'
      model: 'P13 Blue Max (202$1)'
    - regex: 'P13[_ ]Blue[_ ]Max|P13_Max_Blue'
      device: 'smartphone'
      model: 'P13 Blue Max'
    - regex: 'P13_Blue'
      device: 'smartphone'
      model: 'P13 Blue'

# ELARI (elari.net)
ELARI:
  regex: 'KidPhone4G(?:[);/ ]|$)'
  device: 'wearable'
  model: 'KidPhone 4G'

# Epik One or EPIKONE (epikmobile.com)
'Epik One':
  regex: '(K501 Plus|[ ]K5(?:0[0-4]|1[01]|03[TS]|3[456]|4[05]|73|03HD)|[ ]K60[01]|[ ]X507T|[ ]K40[56]|[ ]T700)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'K501 Plus'
      model: 'Leo Plus'
    - regex: 'K501'
      model: 'Leo'
    - regex: 'K500'
      model: 'Omega Lite'
    - regex: 'K502'
      model: 'Omega'
    - regex: 'K503T'
      model: 'Leo Turbo'
    - regex: 'K503S'
      model: 'Leo Pro'
    - regex: 'K503HD'
      model: 'Leo HD'
    - regex: 'K503'
      model: 'Leo Max'
    - regex: 'K504'
      model: 'Titan 3G'
    - regex: 'X507T'
      model: 'Titan II'
    - regex: 'K510'
      model: 'Bolt'
    - regex: 'K511'
      model: 'Bolt Pro'
    - regex: 'K534'
      model: 'Hada'
    - regex: 'K535'
      model: 'Hada Turbo'
    - regex: 'K545'
      model: 'Rocket'
    - regex: 'K536'
      model: 'Royal'
    - regex: 'K540'
      model: 'Excalibur'
    - regex: 'K573'
      model: 'Panther'
    - regex: 'K600'
      model: 'Jupiter'
    - regex: 'K601'
      model: 'Jupiter One'
    - regex: 'K406'
      model: 'Pebble Plus'
    - regex: 'K405'
      model: 'Pebble II'
    - regex: 'T700'
      model: 'Palette'
      device: 'tablet'

# Altice
Altice:
  regex: 'Altice[ _]|(SX41|Android 9;(?: [\w-]+;)? (?:S32|S42|S32_(?:Plus|NFC)))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: ' (SX41|S32|S42|S32_Plus|S32_NFC)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Altice[ _](S62|S31|S43)(?:[);/ ]|$)'
      model: '$1'


# Kult
Kult:
  regex: '(Ambition|Beyond)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Beyond
Beyond:
  regex: '(?:SURVE(10|[26-8]|[12] PRO)|Home9)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'SURVE([12]) PRO'
      model: 'Surve $1 Pro'
    - regex: 'SURVE(10|[26-8])'
      model: 'Surve $1'
    - regex: 'Home9'
      model: 'Home 9'

# BioRugged (biorugged.com)
BioRugged:
  regex: '(?:BioWolf 8-F30|BIOWOLF8F30|Ruggbo 20 Lite)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'BioWolf 8-F30|BIOWOLF8F30'
      model: 'BioWolf 8-F30'
    - regex: 'Ruggbo 20 Lite'
      model: 'Ruggbo 20 Lite'

# VAIO (vaio.com)
VAIO:
  regex: '(?:VPA051|VA-10J)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'VPA051'
      model: 'Phone A'
    - regex: '(VA-10J)'
      model: '$1'

# Spark (https://www.spark.co.nz/)
Spark:
  regex: 'Spark Plus 3(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Plus 3'
      model: 'Plus 3'

# SPC or SPC Universe or SPC Mobile (spc.es)
SPC:
  regex: '(?:GRAVITY [34]G(?:_2019)?|GRAVITY2-4G|GRAVITY_OCTACORE|GRAVITY[ -](?:Max|SE|PRO|2-MAX|2)|SPC (?:GEN|SMART)|SPC_ALIEN(?:_STICK)?|SPC Glow9.7|Lightyear|Laika|L70_Lite|L60 Turbo|L60 Pro|FLOW 7)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'GRAVITY_OCTACORE'
      model: 'Gravity OctaCore'
    - regex: 'GRAVITY ([34])G_2019'
      model: 'Gravity (2019) $1G'
    - regex: 'GRAVITY ([34])G'
      model: 'Gravity $1G'
    - regex: 'Gravity Max'
      model: 'Gravity Max'
    - regex: 'GRAVITY PRO'
      model: 'Gravity Pro'
    - regex: 'GRAVITY SE'
      model: 'Gravity SE'
    - regex: 'GRAVITY-2-MAX'
      model: 'Gravity 2 Max'
    - regex: 'GRAVITY 2|GRAVITY2-4G'
      model: 'Gravity 2'
    - regex: 'SPC Glow9.7'
      model: 'Glow 9.7"'
    - regex: 'Lightyear'
      model: 'Lightyear'
    - regex: 'L70_Lite'
      model: 'L70 Lite'
    - regex: 'FLOW 7'
      model: 'Flow 7'
    - regex: 'Laika'
      model: 'Laika'

    - regex: 'SPC SMART PLUS'
      device: 'smartphone'
      model: 'Smart Plus'
    - regex: 'SPC SMART LITE'
      device: 'smartphone'
      model: 'Smart Lite'
    - regex: 'SPC SMART MAX'
      device: 'smartphone'
      model: 'Smart Max'
    - regex: 'SPC SMART'
      device: 'smartphone'
      model: 'Smart'
    - regex: 'SPC GEN MAX'
      device: 'smartphone'
      model: 'Gen Max'
    - regex: 'SPC GEN LITE'
      device: 'smartphone'
      model: 'Gen Lite'
    - regex: 'SPC GEN Plus'
      device: 'smartphone'
      model: 'Gen Plus'
    - regex: 'SPC GEN'
      device: 'smartphone'
      model: 'Gen'
    - regex: '(L60 Turbo|L60 Pro)'
      device: 'smartphone'
      model: '$1'

    - regex: 'SPC_ALIEN_STICK'
      device: 'tv'
      model: 'Alien Stick'
    - regex: 'SPC_ALIEN'
      device: 'tv'
      model: 'Alien'

# Winmax (winmaxmobile.com)
Winmax:
  regex: '(?:Winmax[ _](?:XC14|XC[46]|TX30)|PolarH4)(?:[);/ ]|$)|MAUI.+Winmax_BD45'
  device: 'smartphone'
  models:
    - regex: 'PolarH4'
      model: 'Polar H4'
    - regex: 'Winmax[ _](XC14|XC[46])(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Winmax[ _](TX30)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: 'MAUI.+Winmax_(BD45)'
      device: 'feature phone'
      model: '$1'

# Zebra (zebra.com)
Zebra:
  regex: ' (MC2[27]00|TC15|TC2[0156]|TC5[1267]|TC7[05]x|TC7[57]|TC700H|ET51|MC33|MC93|EC30|TC55)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(TC15|TC2[0156]|TC5[1267]|TC7[05]x|TC7[57]|TC700H|MC33|EC30|TC55)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(ET51)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: '(MC2[27]00|MC93)(?:[);/ ]|$)'
      device: 'peripheral'
      model: '$1'

# Thuraya (thuraya.com)
Thuraya:
  regex: 'Thuraya[ _](X5-Touch)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Bkav (bkav.com)
Bkav:
  regex: 'Bphone[ _](B111[45]|B2017)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Bphone $1'

# Brandt
Brandt:
  regex: '(BPRIME|BSTAR\+?|BPRIMES|B-ONE)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Bigben
Bigben:
  regex: 'GAMETAB-ONE(?:[);/ ]|$)'
  device: 'tablet'
  model: 'GameTab-One'

# smartec (smartec.tn)
SMARTEC:
  regex: '(?:Atractivo|SmartabS4)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(Atractivo)'
      model: '$1'
    - regex: 'SmartabS4'
      device: 'tablet'
      model: 'Smartab S4'

# Asanzo (asanzo.vn)
Asanzo:
  regex: 'ASANZO[ _](?:A2|S[23]|[SZ]5|S3_PLUS)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'ASANZO[ _]S3[ _]PLUS'
      model: 'S3 Plus'
    - regex: 'ASANZO[ _](A2|S[23]|[SZ]5)(?:[);/ ]|$)'
      model: '$1'

# Artizlee
Artizlee:
  regex: 'Artizlee[ _]S9|ATL-(?:16|21(?:PLUS|[XT])?|31|26)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'ATL-21PLUS(?:[);/ ]|$)'
      model: 'ATL-21 Plus'
    - regex: '(ATL-(?:16|21[XT]?|31|26))(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Artizlee[ _]S9'
      device: 'smartphone'
      model: 'S9'

# Mint or Mint Connect
Mint:
  regex: '(?:Pearl_Neo|M4CRD?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Pearl_(Neo)'
      model: 'Pearl $1'
    - regex: 'M4CR'
      model: 'Clover'

# Mintt (www.mintt.co)
Mintt:
  regex: '(?:Coolmintt(?:A[35]|M2)?|Ultramintt(?:S2)?|FRESHMINTT(?:A7|A10)?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Coolmintt ?(Blaze 2|[PM]1|P3|A[35]|M2)(?:[);/ ]|$)'
      model: 'CoolMintt $1'
    - regex: 'Ultramintt ?([SR]1|S2|Y3|[AY]5|X6)(?:[);/ ]|$)'
      model: 'UltraMintt $1'
    - regex: 'FRESHMINTT ?(A7|A10)(?:[);/ ]|$)'
      device: 'tablet'
      model: 'FreshMintt $1'

# Premio
Premio:
  regex: '(?:AXE_II|186HS2080531|186HS1050531|186HS1050232|186FT1080231|185FT5050231|X70-2021|PREMIO[ _](?:S50|P420|P451)|Android 8(?:[\d.]*);(?: [\w-]+;)? Axe)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '186HS2080531'
      model: 'X1'
    - regex: 'AXE_II'
      model: 'Axe II'
    - regex: ' Axe'
      model: 'Axe'
    - regex: '186HS1050531'
      model: 'P541'
    - regex: '185FT5050231'
      model: 'P511'
    - regex: '186FT1080231'
      model: 'P571'
    - regex: '186HS1050232'
      model: 'P630'
    - regex: 'X70-2021'
      model: 'X70 (2021)'
    - regex: 'PREMIO[ _](S50|P420|P451)(?:[);/ ]|$)'
      model: '$1'

# Trifone
Trifone:
  regex: 'Passion[-_](?:1S|PRO|PLUS)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Passion-1S'
      model: 'Passion 1S'
    - regex: 'Passion-Plus'
      model: 'Passion Plus'
    - regex: 'Passion_Pro'
      model: 'Passion Pro'

# Bluewave
Bluewave:
  regex: '(?:33GT HD|WV8R-M|WV8R[_-]N|WV8-[ML])(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '33GT HD'
      model: 'Wave 8 HD+'
    - regex: 'WV8R-M'
      model: 'Wave 8 Red Marshmallow'
    - regex: 'WV8-M'
      model: 'Wave 8'
    - regex: 'WV8-L'
      model: 'Wave 8 HD+'
    - regex: 'WV8R[_-]N'
      model: 'Wave 8 Red Nougat'

# Siragon (siragon.com)
Siragon:
  regex: 'Siragon|(?:SP-(?:5[0124]50|5[34]00|61[05]0))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:Siragon[_ ])?(SP-(?:5[0124]50|5[34]00|61[05]0))'
      model: '$1'

# Poppox
Poppox:
  regex: 'Poppox P3'
  device: 'smartphone'
  model: 'P3'

# POPTEL (https://www.poptelmobile.com/)
POPTEL:
  regex: 'POPTEL|P9000_MAX(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'P9000_MAX(?:[);/ ]|$)'
      model: 'P9000 Max'
    - regex: 'POPTEL K1(?:[);/ ]|$)'
      model: 'K1'

# Zentality (zentalityinfo.com)
Zentality:
  regex: '(?:C-723ULTRA|C-70[13] ?ULTRA)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'C-(\d+) ?Ultra'
      model: 'C-$1 Ultra'

# Black Bear
'Black Bear':
  regex: '(B6 Master|B6 Note X)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Fortis
Fortis:
  regex: '(Apollo 5 Neo)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# OpelMobile (opelmobile.com.au)
OpelMobile:
  regex: 'Opel ?Mobile|(?:OpelMobile_Smart(?:JX|X1)|Easy_Smart_2)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Easy_Smart_2'
      model: 'Easy Smart 2'
    - regex: 'OpelMobile_SmartJX'
      model: 'SmartJX'
    - regex: 'OpelMobile_SmartX1'
      model: 'SmartX1 4G'
    - regex: 'Opel Mobile SmartX6'
      model: 'SmartX6'

# NuAns
NuAns:
  regex: 'NEO \[Reloaded\](?:[);/ ]|$)'
  device: 'smartphone'
  model: 'NEO Reloaded'

# Koolnee (sub brand from Koobee)
Koolnee:
  regex: '(K1 Trio)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Sansui (sansui-global.com)
Sansui:
  regex: 'Sansui[_ ]|(?:S505024)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'S505024'
      model: 'Horizon 2'
    - regex: 'Sansui[_ ](Switch|Play|Fun|SA4[01]|U4[56]|U3[02]|Nova)(?:[);/ ]|$)'
      model: '$1'

# Sico (sico.com.eg)
Sico:
  regex: 'SICO[_ ](?:PLUS|e1002|Topaz)|(?:Express3-Max|SSR3-1-51-5M|SSD-1-53-13M|Mega2(?:max)?|Express3|Diamond 2|Plus3_4G|Plus2 4G|Infinity Max|Nile X)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'SICO[_ ]PLUS2|Plus2 4G'
      model: 'Plus 2'
    - regex: 'Plus3_4G'
      model: 'Plus 3'
    - regex: 'SICO[_ ]PLUS'
      model: 'Plus'
    - regex: 'SICO[_ ]Topaz'
      model: 'Topaz'
    - regex: 'Mega2max'
      model: 'Mega 2 Max'
    - regex: 'Mega2'
      model: 'Mega 2'
    - regex: 'Nile X'
      model: 'Nile X'
    - regex: 'SSR3-1-51-5M'
      model: 'Pro 3'
    - regex: 'SSD-1-53-13M'
      model: 'Diamond'
    - regex: 'Diamond 2'
      model: 'Diamond 2'
    - regex: 'Infinity Max'
      model: 'Infinity Max'
    - regex: 'SICO[_ ]e1002'
      device: 'tablet'
      model: 'E1002'
    - regex: 'Express3-Max'
      device: 'tablet'
      model: 'Express 3 Max'
    - regex: 'Express3'
      device: 'tablet'
      model: 'Express 3'

# Smadl (smadlethiopia.com)
Smadl:
  regex: 'Android.+(?:Safari)(?!/[\d.]+)(?: Build|\) AppleWebKit)|SMADL[ _]'
  device: 'smartphone'
  models:
    - regex: 'Android.+(?:Safari)(?!/[\d.]+)(?: Build|\) AppleWebKit)'
      model: 'Safari'
    - regex: 'SMADL[ _]Matri([2X])'
      model: 'Matri $1'

# EXCEED (exceedmobiles.com)
EXCEED:
  regex: '(EX7SL?4|EX10S4|EX7W1 Plus)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Tymes
Tymes:
  regex: 'Tymes[ _](V5)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Solone
Solone:
  regex: 'SOLONE|(?:E1457|W145[02]|Sun_S5501)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'E1457'
      model: 'Earth Iron E1457'
    - regex: 'W1450'
      model: 'Wind Breeze W1450'
    - regex: 'W1452'
      model: 'Wind Air W1452'
    - regex: 'SOLONE A47'
      model: 'SL-A47'
    - regex: 'Sun_S5501'
      model: 'Sun S5501'
    - regex: 'SOLONE[ _]Elite[ _]L5501'
      model: 'Elite L5501'
    - regex: 'SOLONE[ _]SUMO[_ ]S5001'
      model: 'Sumo S5001'
    - regex: 'SOLONE[ _](SL-K40|S5002)(?:[);/ ]|$)'
      model: '$1'

# Far Eas Tone (Fareastone)
FarEasTone:
  regex: 'Smart ?(601|550|50[59])(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Smart $1'

# Smailo
Smailo:
  regex: 'Smailo_(2GO)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Smart Kassel
Smart Kassel:
  regex: 'SK5501(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'SK5501(?:[);/ ]|$)'
      model: 'SK5501'

# Colors or ColorsMobile (www.colors-mobile.com)
Colors:
  regex: '(?:Colors[ _](S(?:[19]|11)|P70|P[456]5|P32|E15|P50 Plus)|Pride_1A|P52_Pride5C|P90_Pride5X|P95_Pride_7s|P77_Pride_1E|P88_Pride_1X)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Pride_1A(?:[);/ ]|$)'
      model: 'Pride 1A'
    - regex: 'P95_Pride_7s(?:[);/ ]|$)'
      model: 'Pride 7S'
    - regex: 'P77_Pride_1E(?:[);/ ]|$)'
      model: 'Pride 1E'
    - regex: 'P52_Pride5C(?:[);/ ]|$)'
      model: 'Pride 5C'
    - regex: 'P90_Pride5X(?:[);/ ]|$)'
      model: 'Pride 5X'
    - regex: 'P88_Pride_1X(?:[);/ ]|$)'
      model: 'Pride 1X'
    - regex: 'Colors[ _](S(?:[19]|11)|P70|E15|P[456]5|P32|P50 Plus)(?:[);/ ]|$)'
      model: '$1'

# Honeywell (honeywell.com)
Honeywell:
  regex: '(?:EDA5[01]K?|EDA[47]0|EDA71_G|EDA5[12]|CK65|CT[46]0|CN80|EDA61K)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    # smartphone + scan
    - regex: '(EDA5[01]K?|EDA[47]0|EDA5[12]|EDA61K)(?:[);/ ]|$)'
      model: 'ScanPal $1'
    # tablet + scan
    - regex: 'EDA71'
      device: 'tablet'
      model: 'ScanPal EDA71'
    # mobile terminal
    - regex: '(CK65|CT[46]0|CN80)(?:[);/ ]|$)'
      device: 'peripheral'
      model: 'Dolphin $1'

# Electroneum (electroneum.com)
Electroneum:
  regex: 'electroneum(M1)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# High Q or HighQ
'High Q':
  regex: '(ELT070[46]H|ELT0802H)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Pluzz
Pluzz:
  regex: 'Pluzz[_-](Z552|PL5[05]10|PL4010|PL501[46]|Elite_Dual)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# IKU Mobile (iku-mobile.com)
'IKU Mobile':
  regex: '(?:IKU[_ ](?:A22|A[45]0|T[123]|X2|K3|i[34]|T[_ ]MAX)|Powerful_K55i|Curvy C50L)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(Powerful_K55i|Curvy C50L)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'IKU[_ ](A22|A[45]0|X2|K3|i[34])(?:[);/ ]|$)'
      model: '$1'
    - regex: 'IKU[_ ](T[123])(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: 'IKU[_ ]T[_ ]Max(?:[);/ ]|$)'
      device: 'tablet'
      model: 'T Max'

# IKI Mobile (ikimobile.com)
IKI Mobile:
  regex: '(?:GO5_55|BLESS_GO55|BLESSPLUS|KF4Go|KF5bless|GO4\.5)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'GO5_55'
      model: 'Go 5.5"'
    - regex: 'GO4\.5'
      model: 'Go 4.5"'
    - regex: 'BLESS_GO55'
      model: 'Bless Go 5.5"'
    - regex: 'BLESSPLUS'
      model: 'Bless Plus'
    - regex: '(KF4Go|KF5bless)'
      model: '$1'

# CG Mobile
'CG Mobile':
  regex: '(?:CG_OMEGA6|Omega (?:[38])|CG_EON_Blaze_Pro|CG\|EON Blaze GOLD|Blaze [GN])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Omega ([38])(?:[);/ ]|$)'
      model: 'Omega $1'
    - regex: 'CG_OMEGA6(?:[);/ ]|$)'
      model: 'Omega 6'
    - regex: 'CG_EON_Blaze_Pro(?:[);/ ]|$)'
      model: 'EON Blaze Pro'
    - regex: 'CG\|EON Blaze GOLD(?:[);/ ]|$)'
      model: 'EON Blaze Gold'
    - regex: 'Blaze ([GN])'
      model: 'Blaze $1'

# IUNI
IUNI:
  regex: 'IUNI[ _]'
  device: 'smartphone'
  models:
    - regex: 'IUNI[ _](U3|i1|N1)'
      model: '$1'

# Ordissimo (ordissimo.fr)
Ordissimo:
  regex: '(LeNumero[12])(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Necnot (necnontrade.com)
Necnot:
  regex: '(M002[DGQK]-2|M002N|M002N-3T|M002W-2T|6M-3T)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Einstein
Einstein:
  regex: 'Einstein(T3)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# AfriOne (afrione.com)
AfriOne:
  regex: '(CYGNUSX?|Gravity Z2|ChampionPro)(?:[);/ ]|$)'
  device: 'phablet'
  models:
    - regex: 'CYGNUSX(?:[);/ ]|$)'
      model: 'Cygnus X'
    - regex: 'CYGNUS(?:[);/ ]|$)'
      model: 'Cygnus'

    - regex: 'Gravity Z2(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Gravity Z2'
    - regex: 'ChampionPro(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Champion Pro'

# Connex (connexdevices.co.za)
Connex:
  regex: '(?:CTAB1044hn|CTAB-1044|SEN_1055_ARM)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(CTAB1044hn|CTAB-1044)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'SEN_1055_ARM'
      model: 'Serenity 1055 10.1"'

# Connectce
Connectce:
  regex: '(?:CP6001A)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Connect Core 6'

# ClearPHONE (https://www.clear.store/)
ClearPHONE:
  regex: 'ClearPHONE'
  device: 'smartphone'
  models:
    - regex: 'ClearPHONE ([246]20)(?:[);/ ]|$)'
      model: '$1'

# Clementoni
Clementoni:
  regex: '(?:CLEMPAD[_ ](?:6_XL|HR_Plus|HR|[68]|7_S|201[89])|ClemPhone_7|MFC_(?:2018|8))(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'CLEMPAD_(201[89])'
      model: 'Clempad ($1)'
    - regex: 'MFC_2018'
      model: 'Clempad (2018)'
    - regex: 'MFC_8'
      model: 'Clempad 8'
    - regex: 'CLEMPAD_7_S'
      model: 'Clempad 7S'
    - regex: 'Clempad[_ ](6_XL|HR_Plus|HR|[68])'
      model: 'Clempad $1'
    - regex: 'ClemPhone[ _](7)'
      device: 'smartphone'
      model: 'Clemphone $1'

# Cell-C
Cell-C:
  regex: 'Cell_?C_|(?:Android 5(?:[\d.]*);(?: [\w-]+;)? (?:Summit|Fantasy))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Cell_C_(Summit_Plus|Fame|Evolve)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Summit(?:[);/ ]|$)'
      model: 'Summit'
    - regex: 'Fantasy(?:[);/ ]|$)'
      model: 'Fantasy'
    - regex: 'CELLC_Evolve'
      device: 'tablet'
      model: 'Evolve'

# VC
VC:
  regex: '(?:Camellia_II|Cactus II|Maple III|Maple-II|Cactus-Pro|LavenderII|Jasmine-II)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(Camellia_II|Cactus II|Maple III)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Cactus-Pro'
      model: 'Cactus Pro'
    - regex: '(Maple|Jasmine|Lavender)-?II(?:[);/ ]|$)'
      model: '$1 II'

# Cellacom (http://cellacom.com/)
Cellacom:
  regex: 'Cellacom|(?:S51_lite|X501_Prime)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Cellacom_S62(?:[);/ ]|$)'
      model: 'S62'
    - regex: 'S51_lite(?:[);/ ]|$)'
      model: 'S51 Lite'
    - regex: 'X501_Prime(?:[);/ ]|$)'
      model: 'X501 Prime'

# CellAllure (cellallure.com)
CellAllure:
  regex: '(?:Cool_Extreme_2|Earn|Fashion2Plus|Fashion[ _]C|Cool Duo|CHIC_X1|Miracle XS|Miracle 6.0 S)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(Cool_Extreme_2|Earn|Fashion[ _]C|Cool Duo|Miracle XS|Miracle 6.0 S)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Fashion2Plus'
      model: 'Fashion 2 Plus'
    - regex: 'CHIC_X1'
      model: 'Chic X1'

# Eagle (eagleuhd.com)
Eagle:
  regex: 'Eagle[ _](Classic Pro|Elite|Gold)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Invens
Invens:
  regex: '(?:Diamond D[56]|Fighter|Eager|Royal R[1-8]|Android 9(?:[\d.]*);(?: [\w-]+;)? (?:MAX[89]|MAX_2))(?: Build|[;)])'
  device: 'smartphone'
  models:
    - regex: 'MAX[_ ]?([89]|2)(?:[);/ ]|$)'
      model: 'Max $1'
    - regex: '(Fighter|Eager|Royal R[1-8]|Diamond D[56])'
      model: '$1'

# Chico Mobile (chicomobile.ph)
Chico Mobile:
  regex: '(?:ALTO (?:Bombo|classic|Estrella|JUEGO|SUBIR|[235])|FUEGO MAX|OJOS[ _](?:CAMBIO|NUBE|[68i]|ORO)|AVANCE classic)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'ALTO Bombo'
      model: 'Alto Bombo'
    - regex: 'ALTO classic'
      model: 'Alto Classic'
    - regex: 'AVANCE classic'
      model: 'Avance Classic'
    - regex: 'ALTO Estrella'
      model: 'Alto Estrella'
    - regex: 'ALTO JUEGO'
      model: 'Alto Juego'
    - regex: 'ALTO SUBIR'
      model: 'Alto Subir'
    - regex: 'ALTO ([235])'
      model: 'Alto $1'
    - regex: 'OJOS[ _]([68i])'
      model: 'Ojos $1'
    - regex: 'OJOS NUBE'
      model: 'Ojos Nube'
    - regex: 'OJOS CAMBIO'
      model: 'Ojos Cambio'
    - regex: 'OJOS ORO'
      model: 'Ojos Oro'

    - regex: 'FUEGO MAX'
      device: 'tablet'
      model: 'Fuego Max'

# Claresta
Claresta:
  regex: 'Claresta[ _]|(?:AirPhoneS[56]|AirPhone K6)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'AirPhone ?(S[56]|K6)'
      model: 'AirPhone $1'
    - regex: 'Claresta (F3) PRO'
      model: '$1 Pro'
    - regex: 'Claresta[ _](F4)'
      model: '$1'

# Camfone (camfonemobile.com)
Camfone:
  regex: '(?:Camfone (?:SE)|Hero[_ ](?:H5\+|SE2|H9|(?:H7|XR)_Plus|SX|1[123]|SE3[ _]Max)|Honey (?:Y1|Y2s)|Mega 10)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(Hero[_ ](?:H5\+|SE2|H9|(?:H7|XR)_Plus|SX|1[123]|SE3[ _]Max)|Honey (?:Y1|Y2s)|Mega 10)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Camfone (SE)(?:[);/ ]|$)'
      model: '$1'

# Bellphone
Bellphone:
  regex: 'Bp100 X-Plus(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'BP 100 X-Plus'

# Gini
Gini:
  regex: 'Gini[ _]'
  device: 'smartphone'
  models:
    - regex: 'Gini[ _]W(7)'
      model: 'W$1'
    - regex: 'Gini[ _]n(8)'
      model: 'N$1'
    - regex: 'Gini[ _]s5Pro'
      model: 'S5 Pro'
    - regex: 'Gini[ _]Tab[ _](V[78])'
      device: 'tablet'
      model: 'Tab $1'

# MIVO (mivo.com.my)
MIVO:
  regex: '(Caryota [1245789]|Jazz J[13] 2018)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(Caryota [1245789])(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Jazz (J[13]) 2018'
      model: 'Jazz $1 (2018)'

# Jesy (en.jesy.com)
Jesy:
  regex: 'Jesy_(J7)|J9S_PRO(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'J9S_PRO'
      model: 'J9s Pro'
    - regex: 'Jesy_(J7)'
      model: '$1'

# Teknosa or Tekno S.A
Teknosa:
  regex: 'Preo[ _]'
  device: 'smartphone'
  models:
    - regex: 'Preo Teknosa P1'
      model: 'Preo P1'
    - regex: 'Preo[ _]P([23])'
      model: 'Preo P$1'

# Hyve
Hyve:
  regex: '(?:Pryme 01|ST01)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Pryme 01'
      model: 'Pryme 01'
    - regex: 'ST01'
      model: 'Storm ST01'

# EWIS
EWIS:
  regex: '(?:OCTA T720Q|OCTA-T700M-T2)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'OCTA T720Q'
      model: 'Octa T720Q'
    - regex: 'OCTA-T700M-T2'
      model: 'Octa T700M T2'

# Leader Phone or LP (lp.tn) or LP (TN)
Leader Phone:
  regex: '(Vyper|N-5[07]|N-45|LP DAISY|LP_(?:VEYRON|PRADO|Pro1|B-50)|LP_T70|LP INFINITY\+|LP T70 Lite|INFINITY_light|Alphatel_T1)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'N-45 light'
      model: 'N-45 Light'
    - regex: 'Vyper PRO'
      model: 'Vyper Pro'
    - regex: 'LP DAISY'
      model: 'Daisy'
    - regex: 'LP_VEYRON'
      model: 'Veyron'
    - regex: 'LP_PRADO'
      model: 'Prado'
    - regex: 'LP_B-50'
      model: 'B50'
    - regex: 'INFINITY_light'
      model: 'Infinity Light'
    - regex: 'LP INFINITY\+'
      model: 'Infinity Plus'
    - regex: 'LP T70 Lite'
      device: 'tablet'
      model: 'T70 Lite'
    - regex: 'LP_T70'
      device: 'tablet'
      model: 'T70'
    - regex: '(?:LP_)?(Vyper|N-5[07]|N-45|Pro1|Alphatel_T1)(?:[);/ ]|$)'
      model: '$1'

# Cavion (cavion.pl)
Cavion:
  regex: '(?:Cavion[_ ](?:Solid[_ ]4[\._]5|Base[ _](?:7|7_3G_Silver|5[._]0|10|7.2 Quad)|10_3GRQ)|base10_3g_silver|Cavion7.1quad|M1092Q)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Cavion[_ ]Solid[_ ]4[._]5'
      model: 'Solid 4.5"'
    - regex: 'Cavion[ _]BASE[ _]5[._]0'
      model: 'Base 5.0"'
    - regex: 'CAVION_10_3GRQ'
      device: 'tablet'
      model: 'Base 10 3GR Quad'
    - regex: 'Cavion(?:7.1quad)'
      device: 'tablet'
      model: 'Base 7.1" Quad'
    - regex: 'Cavion Base 7.2 Quad'
      device: 'tablet'
      model: 'Base 7.2" Quad'
    - regex: 'Cavion Base 10'
      device: 'tablet'
      model: 'Base 10'
    - regex: 'Cavion Base 7 Dual'
      device: 'tablet'
      model: 'Base 7.0" Dual'
    - regex: 'Cavion Base 7 Quad'
      device: 'tablet'
      model: 'Base 7.0" Quad'
    - regex: '(?:Cavion_)?Base_?(7|10)_3G_Silver'
      device: 'tablet'
      model: 'Base $1.0" 3G Silver'
    - regex: '(M1092Q)'
      device: 'tablet'
      model: '$1'

# GLX or JLX
GLX:
  regex: '(?:GLX (?:Aria|Dorna|Taban|Shine|Spark|ASA)|Maad\+?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'GLX ASA'
      model: 'Asa'
    - regex: 'Maad\+'
      model: 'Maad Plus'
    - regex: 'Maad'
      model: 'Maad'
    - regex: 'GLX (Aria|Taban|Shine|Spark)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'GLX (Dorna)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'

# Seeken (seekenmobile.com)
Seeken:
  regex: 'Seeken[ _-]'
  device: 'smartphone'
  models:
    - regex: 'Seeken[_ -](SG1|SJ1)'
      model: '$1'
    - regex: 'Seeken[_ -](ST-101)'
      device: 'tablet'
      model: '$1'

# Jivi Mobiles (jivi.in)
Jivi:
  regex: '(?:Revolution TnT3|Xtreme_(?:[37]|3x)|Xtreme (?:XT84|XT309|XT309 Plus|1)|Opus S3|JSPQ65|Prime (?:P3[09]0|P4442?|P30))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Revolution (TnT3)'
      model: 'Revolution $1'
    - regex: 'Opus S3'
      model: 'Opus S3'
    - regex: 'JSPQ65'
      model: 'JSP Q65'
    - regex: 'Xtreme (XT84)'
      model: 'Xtreme Klick $1'
    - regex: 'Prime (P4442?|P3[09]0|P30)'
      model: 'Prime $1'
    - regex: 'Xtreme (XT309) Plus'
      model: 'Xtreme View Pro $1 Plus'
    - regex: 'Xtreme (XT309)'
      model: 'Xtreme View $1'
    - regex: 'Xtreme[ _]([137]|3x)(?:[);/ ]|$)'
      model: 'Xtreme $1'

# NOVO
NOVO:
  regex: '(Bonvi Note|Bonvi Prime|Bonvi Pro|Borneo_Pro|Vi_Note)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Winnovo (www.mywinnovo.com)
Winnovo:
  regex: 'Winnovo|(?:T10LTE|H10_US)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'T10LTE(?:[);/ ]|$)'
      model: 'T10 LTE'
    - regex: 'H10_US(?:[);/ ]|$)'
      model: 'H10'
    - regex: 'Winnovo[ _]?(M866|M798|VTab|750[PK]|T2)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Winnovo[ _](V51)'
      device: 'smartphone'
      model: '$1'
    - regex: 'Winnovo[ _](K5[46]|K43)[a-z]{2}'
      device: 'smartphone'
      model: '$1'

# WE or WM Mobile or AAMRA WE
WE:
  regex: 'WE (A[15]0|B3|F[12]0|E[12]|L[3469]|R[34]|V[34]|S1|X[13]|T1)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Trio or triomobiles (http://triomobiles.com/products.html)
Trio:
  regex: 'Trio V51 DT(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'V51DT'

# Seuic (en.seuic.com)
Seuic:
  regex: '(?:AUTOID ?(?:9N|Q[79])|CRUISE1)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(CRUISE1)(?:[);/ ]|$)'
      model: '$1'
    # smartphone + post-terminal
    - regex: 'AUTOID ?(9N|Q[79])(?:[);/ ]|$)'
      model: 'AUTOID $1'

# Centric
Centric:
  regex: '(?:Centric[- ]CM(?:5001|33[23]1|3321Plus)|CM4331|CM2221)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:Centric[- ])?CM5001'
      model: 'A1'
    - regex: '(?:Centric[- ])?CM3321Plus'
      model: 'P1 Plus'
    - regex: '(?:Centric[- ])?CM3321'
      model: 'P1'
    - regex: '(?:Centric[- ])?CM3331'
      model: 'L3'
    - regex: '(?:Centric[- ])?CM4331'
      model: 'G1'
    - regex: '(?:Centric[- ])?CM2221'
      model: 'L1'

# Kata mobile (secure.katadigital.com)
Kata:
  regex: 'Kata[ _-]'
  device: 'smartphone'
  models:
    - regex: 'Kata[ _-](C3|L1|M3s|M4s?|V[56])(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Kata[ _-]i5-\w'
      model: 'I5'
    - regex: 'Kata-(T5)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'
    - regex: 'Kata-Tmini4(?:[);/ ]|$)'
      device: 'tablet'
      model: 'T Mini 4'
    - regex: 'Kata Box 2(?:[);/ ]|$)'
      device: 'tv'
      model: 'Box 2'

# Hardkernel (www.hardkernel.com)
Hardkernel:
  regex: 'ODROID[-]?(C2|[NU]2|XU[34])(?:[);/ ]|$)'
  device: 'peripheral'
  model: 'ODROID $1'

# Wiseasy (wiseasy.com)
Wiseasy:
  regex: '(WISENET5|WPOS-3)(?:[);/ ]|$)'
  device: 'peripheral'
  model: '$1'

# Shtrikh-M
Shtrikh-M:
  regex: 'SHTRIH-SMARTPOS-F2(?:[);/ ]|$)'
  device: 'peripheral'
  model: 'Smartpos F2'

# BBK (bbk.ru)
BBK:
  regex: '(?:32LEX-7272|([65]5|50|4[03]|3[29]|2[48])LEX[-_](81(?:27|39|45|58|6[12]|7[34])|71(?:[23]7|4[345]|5[45]|6[2368]|[57]8|7[15]))[_/]([FU]?TS2C))(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: '(\d{2})LEX[-_](\d{3,4})[_/]([FU]?TS2C)'
      model: '$1LEX-$2/$3'
    - regex: '(\d{2})LEX[-_](\d{3,4})'
      model: '$1LEX-$2'

# 4ife
4ife:
  regex: '4ife (4K Smart TV Box)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Westpoint
Westpoint:
  regex: 'WESTPOINT[;,]'
  device: 'tv'
  models:
    - regex: '(TETS-4919SM)'
      model: '$1'

# Wintouch (http://www.wintouch.ae/)
Wintouch:
  regex: 'Q93S'
  device: 'tablet'
  model: 'Q93S'

# Aiuto
Aiuto:
  regex: '(AT702)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Seatel
Seatel:
  regex: 'Seatel'
  device: 'smartphone'
  models:
    - regex: 'Seatel[ _](L2|V8[AE]|T[5-8]|R6|V[89])(?:[);/ ]|$)'
      model: '$1'

# Ditecma (ditecma.com)
Ditecma:
  regex: '(M1092R(?:-[12]|V[45])?)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Datamini (datamini.co.in)
Datamini:
  regex: '(K908H4G)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# 3GNET (3gnet.com.tw)
3GNET:
  regex: '(?<!NetType/)3GNET[ _]'
  device: 'smartphone'
  models:
    - regex: '3GNET[ _](U8|T800|U6s)(?:[);/ ]|$)'
      model: '$1'
    - regex: '3GNET[ _]T ?900'
      model: 'T900'

# Yoka TV
'Yoka TV':
  regex: 'KB2 PRO(?:[);/ ]|$)'
  device: 'tv'
  model: 'KB2 Pro'

# Formuler (formuler.tv)
Formuler:
  regex: 'Formuler[ _]|(?:S_TURBO_PRO)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'Formuler[ _](Z8(?: Pro)?|Z Alpha)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'S_TURBO_PRO(?:[);/ ]|$)'
      model: 'S Turbo Pro'

# Malata
Malata:
  regex: '(?:Build/)?Malata[ _]?([a-z0-9]+)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# MBOX
MBOX:
  regex: 'MBOX3?(?:[);/ ]|$)'
  device: 'tv'
  model: ''

# IT
IT:
  regex: 'IT-(?:1101S?|1101-QUAD)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'IT-1101-QUAD'
      model: '1101 Quad'
    - regex: 'IT-(1101S?)'
      model: '$1'

# Navcity (www.navcity.com.br)
Navcity:
  regex: 'NP-752Go(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'NP-752Go'
      model: 'NP-752 Go'

# Jeka
Jeka:
  regex: '(?:JK(?:960|[71]03) 3G|JK702|JK101|JK[17]00 v2.0)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'JK(960|[71]03) 3G(?:[);/ ]|$)'
      model: 'JK $1 3G'
    - regex: 'JK(702|[17]00 v2.0|101)(?:[);/ ]|$)'
      model: 'JK $1'

# Jiake
Jiake:
  regex: 'JK-?(760)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'JK-$1'

# iQ&T (iqandt.com)
'iQ&T':
  regex: '(IFoo (?:U200|H55))(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Mantra (mantratec.com)
Mantra:
  regex: '(MFSTAB(?:_74G)?)(?:[);/ ]|$)'
  device: 'peripheral'
  model: '$1'

# Datalogic (datalogic.com)
Datalogic:
  regex: '(?:MEMOR )([12]0|1)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Memor $1'

# Naomi Phone
Naomi Phone:
  regex: '(?:NAOMIPHONE Ambar|DAMMAR)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'NAOMIPHONE Ambar(?:[);/ ]|$)'
      model: 'Ambar'
    - regex: 'DAMMAR(?:[);/ ]|$)'
      model: 'Dammar'

# Navitel (navitel.ru)
Navitel:
  regex: 'NAVITEL[ _]|(?:T737PRO|T505PRO|T500 3G)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(?:NAVITEL[ _])?(T70[07]|T500) 3G(?:[);/ ]|$)'
      model: '$1 3G'
    - regex: 'NAVITEL[ _](T757)LTE(?:[);/ ]|$)'
      model: '$1 LTE'
    - regex: 'NAVITEL[ _](A73[0157]|A650)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'T(505|737)PRO(?:[);/ ]|$)'
      model: 'T$1 Pro'
    - regex: 'RE900 Full HD(?:[);/ ]|$)'  # combo device table/navigator and camera
      model: 'RE900 Full HD'

# Linnex (www.linnex.com)
Linnex:
  regex: 'LI(22)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Li $1'

# Smartab
Smartab:
  regex: '(ST1009|ST7160)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# SuperTab (supertab-dz.com)
SuperTab:
  regex: 'SuperTab(A10|K7|S7G)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Suzuki (suzukitech.com)
Suzuki:
  regex: 'SUZUKI[ _]|(?:ECOPAD7|SUMOPad10)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'SUMOPAD(8100|10)(?:[);/ ]|$)'
      model: 'SumoPad $1'
    - regex: 'ECOPAD7'
      model: 'ECOPad 7'

# philips
Philips:
  regex: 'Philips|NETTV/|2020/2021 UHD Android|10BDL4151T|Xenium S[25]66|(?:PI3210G|TPM1[79]1E|70PUH6774_96|QM152E|QM16[134]E|TLE(?:821L|722G)|AND1E|S397|W5510|S410J)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(10BDL4151T)'
      device: 'smart display'
      model: '$1'
    - regex: '(?:Philips[_ ])?Xenium[ _](S[25]66|V787)(?:[);/ ]|$)'
      model: 'Xenium $1'
    - regex: '(?:Philips[_ ])?(X818|X588)(?:[);/ ]|$)'
      model: 'Xenium $1'
    - regex: '(?:Philips[_ ])?(S397|W5510)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'AND1E(?: TV)?(?:[);/ ]|$)'
      model: 'Android TV'
      device: 'tv'
    - regex: '(PI3210G)'
      model: '$1'
      device: 'tablet'
    - regex: '(TPM1[79]1E)' # Smart Tv 2018/2019
      model: '$1'
      device: 'tv'
    - regex: 'QM152E(?:[);/ ]|$)'
      model: ''
      device: 'tv'
    - regex: '(QM16[134]E)'
      model: '$1'
      device: 'tv'
    - regex: '(70PUH6774)_96'
      model: '$1/96 4K UHD'
      device: 'tv'
    - regex: '(202[01])/(?:20)?(2[12]) (?:Philips )?UHD Android'
      model: 'Smart TV UHD ($1-20$2)'
      device: 'tv'

    - regex: '(TLE821L)(?:[);/ ]|$)'
      model: '$1 4G LTE'
      device: 'tablet'
    - regex: '(TLE722G)(?:[);/ ]|$)'
      model: '$1'
      device: 'tablet'
    - regex: '(?:S410J)(?:[);/ ]|$)'
      model: 'M9 Pro'
      device: 'tablet'
    - regex: 'Philips, BDP([0-9]{4})'
      model: 'Blu-ray Player (BDP$1)'
      device: 'tv'
    - regex: 'Philips, ([a-z0-9-]+)'
      model: '$1'
      device: 'tv'
    - regex: '(NETTV/[0-9\.]{5})'
      model: 'NetTV Series'
      device: 'tv'
    - regex: 'Philips-FISIO ([a-z0-9]+)'
      model: 'Fisio $1'
    - regex: 'Philips[ _-]?([a-z0-9\-@]+)'
      model: '$1'

# INCAR
INCAR:
  regex: '(KZCAR)(?:[);/ ]|$)'
  device: 'car browser'
  model: '$1'

# FaRao Pro (www.faraopro.jp)
FaRao Pro:
  regex: '(FTRW100)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Nabi
Nabi:
  regex: '(?:DMTAB-(?:IN08A|NV08B|NV2[04]A)|NBTY07SMKG|NBFP07PMKG|SNB02-NV7A|NABI2-NV7A)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'DMTAB-(?:IN08A|NV08B)'
      model: 'Dream Tab HD 8.0"'
    - regex: 'DMTAB-NV(2[04])A'
      model: 'Big Tab HD $1.0"'
    - regex: 'NBTY07SMKG'
      model: 'Barbie Tab 7.0"'
    - regex: 'NBFP07PMKG'
      model: 'Fisher Price Learning Tab 7.0"'
    - regex: 'SNB02-NV7A'
      model: '2S Tab'
    - regex: 'NABI2-NV7A'
      model: '2 Tab'

# StrawBerry
StrawBerry:
  regex: 'StrawBerry[ _]'
  device: 'smartphone'
  models:
    - regex: 'StrawBerry[ _](SX|QX15)(?:[);/ ]|$)'
      model: '$1'

# STRONG (https://www.strong.tv/)
STRONG:
  regex: 'LEAP-S1|SH6B7CE_EU012'
  device: 'tv'
  models:
    - regex: 'LEAP-S1'
      model: 'LEAP-S1'
    - regex: '(SH6B7CE)_(EU012)'
      model: '$1-$2'

# Gresso
Gresso:
  regex: 'Gresso[ _]|(?:REGAL R2)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'REGAL R2'
      model: 'Regal R2'
    - regex: 'Gresso[ _]Regal(?:[);/ ]|$)'
      model: 'Regal'

# Pendoo  (pendoo.tv)
Pendoo:
  regex: 'Pendoo|A5X MAX(?:[\.-]\w+)?\.01\.d4'
  device: 'tv'
  models:
    - regex: 'Pendoo ?(T95Z|X10) PLUS'
      model: '$1 Plus'
    - regex: 'Pendoo ?X8PRO+'
      model: 'X8 Pro+'
    - regex: 'Pendoo[ \.]?(X9[29]|T95)'
      model: '$1'
    - regex: 'pendoo mini'
      model: 'Mini'
    - regex: 'A5X MAX(?:[\.-]\w+)?\.01\.d4'
      model: 'A5X Max'

# PiPO (pipo.com)
PiPO:
  regex: 'Pipo[_ ]|PipoM9Pro'
  device: 'tablet'
  models:
    - regex: 'Pipo[_ ]([TP]9)'
      model: '$1'
    - regex: 'PipoM9Pro'
      model: 'M9 Pro'
    - regex: 'PIPO[_ ](X10|X9S)'  # combo device tv/tablet/pc
      device: 'tv'
      model: '$1'

# Engel or Engel Axil (www.engelaxil.com)
Engel:
  regex: '(EN1007Q)plus(?:[);/ ]|$)'
  device: 'tv'
  model: '$1 Plus'

# Genesis
Genesis:
  regex: '(SK-Mtek GT730[15])(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# InfoKit
InfoKit:
  regex: '(TVB-906X)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Blloc (blloc.com)
Blloc:
  regex: '(Zero18)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Huskee
Huskee:
  regex: 'VULKANO(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Vulkano'

# SOLE
SOLE:
  regex: 'SOLE[_ ]POP[_ ]S([45]0)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Pop S$1'

# SOLO
SOLO:
  regex: '(?:SOLO[_ ](?:Aspire(?: M)?)|Inspire_U5(?:_PLUS)?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:SOLO[_ ](Aspire(?: M)?))'
      model: '$1'
    - regex: 'Inspire_U5_PLUS'
      model: 'Inspire U5 Plus'
    - regex: 'Inspire_U5'
      model: 'Inspire U5'

# OINOM
OINOM:
  regex: 'OINOM[_ ](V9D|V7H|V[679])(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Singtech (singtech.asia)
Singtech:
  regex: 'Singtech|(?:Sapphire[_ ](?:H50S|H7S?|H90)|Infinity_I(?:1|_Mix))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Sapphire[_ ](H50S|H7S?|H90)(?:[);/ ]|$)'
      model: 'Sapphire $1'
    - regex: 'Singtech[ _](Q2|S1)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Infinity_I1(?:[);/ ]|$)'
      model: 'Infinity I1'
    - regex: 'Infinity_I_Mix(?:[);/ ]|$)'
      model: 'Infinity I Mix'

# Sunny
Sunny:
  regex: '(?:SS4G9 Mira|SS4G7 Sole|SS4G1 Luna|SS4G8 Nora|SS4G6 Lola|SN7014S?|SN7016|SN10016)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(SS4G9 Mira|SS4G7 Sole|SS4G1 Luna|SS4G8 Nora|SS4G6 Lola)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(SN7014S?|SN7016|SN10016)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'

# TEENO sub brand GOWN(HK)
TEENO:
  regex: 'TEENO'
  device: 'smartphone'
  models:
    - regex: 'TEENO[_ ](S9|A1|i12|S11)(?:[);/ ]|$)'
      model: '$1'

# v-mobile or Vmobile - sub brand GOWN(HK)
v-mobile:
  regex: 'Vmobile[ _]'
  device: 'smartphone'
  models:
    - regex: 'Vmobile[ _](J7)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Vmobile XS Pro(?:[);/ ]|$)'
      model: 'XS Pro'

# OASYS (oasys.co)
OASYS:
  regex: '(TEG9300)(?:[);/ ]|$)'
  device: 'peripheral'
  model: '$1'

# Aspera (asperamobile.com)
Aspera:
  regex: 'ASPERA|(?:Wren|Jazz 2)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'ASPERA[ _](R5h|R9|RT3|A4[02]|A50)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Wren(?:[);/ ]|$)'
      model: 'Wren'
    - regex: 'Jazz 2(?:[);/ ]|$)'
      model: 'Jazz 2'

# Vision Touch
Vision Touch:
  regex: 'Vision ?Touch'
  device: 'smartphone'
  models:
    - regex: 'VisionTouchLife'
      model: 'Life'
    - regex: 'Inspire'
      model: 'Inspire'

NOBUX:
  regex: 'SMART_VOLT_NX5(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Smart Volt NX5'

# Hitachi
Hitachi:
  regex: 'HITACHI, ([a-z0-9_ \-]+), (?:wired|wireless)'
  device: 'tv'
  model: ''

# Hitech or Hitech Mobile (hitech-mobiles.com)
Hitech:
  regex: '(Amaze[ _](?:S2_4G|S[56] 4G|S1|S[56](?: Plus)?))(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# F150 or iiiF150 (sub brand Oukitel)
F150:
  regex: '(?:Bison2021|B2021|[HR]2022|Air1 Pro| Air1| B1 Pro)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '([HR]2022|Air1 (?:Ultra|Pro)|Air1|B1 Pro)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(?:Bison2021|B2021)(?:[);/ ]|$)'
      model: 'B2021'

# BilimLang (bilimlang.com)
BilimLand:
  regex: 'BilimBook mini(?:[);/ ]|$)'
  device: 'desktop'
  model: 'BilimBook Mini'

# Greentel (greentelmobile.com)
Greentel:
  regex: '(?:X1_Light(?:_Lte)?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'X1_Light(?:_Lte)?'
      model: 'X1 Light LTE'

# Gretel:
Gretel:
  regex: 'Gretel|(?:GT6000)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(GT6000)'
      model: '$1'
    - regex: 'Gretel; (A[67])'
      model: '$1'

# Kyowon
Kyowon:
  regex: '(KA-E410W)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# LT Mobile or LT Electronics (lt-smartphone.com or lt-yemen.com)
LT Mobile:
  regex: 'LT[ _-](?:P[89]|P10I|NOTE 10[SM]|NOTE 30|C1[45]00|C3[1235]00|S10[ _]Lite|S10|S9_NOTE)|(?:C3[67]00)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'LT[- ]NOTE ([13]0[SM]?)'
      model: 'Note $1'
    - regex: 'LT_S9_NOTE'
      model: 'Note S9'
    - regex: 'LT[ _-]C3100'
      model: 'P9'
    - regex: 'LT[ _-]C3200'
      model: 'P10'
    - regex: 'LT[ _-]C1400'
      model: 'P7s'
    - regex: 'LT[ _-]C3500'
      model: 'P10 Plus'
    - regex: '(?:LT[ _-])?C3600'
      model: 'P20'
    - regex: '(?:LT[ _-])?C3700'
      model: 'P30'
    - regex: 'LT[ _-](C3300|C1500)'
      model: '$1'
    - regex: 'LT[ _]S10[ _]Lite'
      model: 'S10 Lite'
    - regex: 'LT[ _]S10'
      model: 'S10'
    - regex: 'LT[ _]P10I'
      model: 'P10i'
    - regex: 'LT[ _]P([89])(?:[);/ ]|$)'
      model: 'P$1'

# ONYX BOOX (onyx-boox.ru)
ONYX BOOX:
  regex: '(?:KON_TIKI(2)?|Nova3Color|Lomonosov|Poke2Color|NovaAirC|NoteAir2P?)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'NovaAirC'
      model: 'Nova Air C'
    - regex: 'NoteAir2P'
      model: 'Nova Air 2 Plus'
    - regex: 'NoteAir2'
      model: 'Nova Air 2'
    - regex: 'Nova3Color'
      model: 'Nova 3 Color'
    - regex: 'Poke2Color'
      model: 'Poke 2 Color'
    - regex: 'KON_TIKI(2)?'
      model: 'Kon Tiki $1'
    - regex: 'Lomonosov'
      model: 'Lomonosov'

# AIRON (airon.ua)
AIRON:
  regex: 'AIRBOOK PRO 8S(?:[);/ ]|$)'
  device: 'tablet'
  model: 'AirBook Pro 8S'

# GFive or G'Five (www.gfivepakistan.com)
GFive:
  regex: '(?:PRESIDENT_GOLD_(9|10)|President Gpower 1|Stark(?![_ ]K1))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'PRESIDENT_GOLD_(9|10)'
      model: 'President Gold $1'
    - regex: 'President Gpower 1'
      model: 'President GPower 1'
    - regex: 'Stark'
      model: 'Stark'

# KINGZONE or KING ZONE
KINGZONE:
  regex: 'KINGZONE_|K1[_ ]turbo'
  device: 'smartphone'
  models:
    - regex: 'KINGZONE_(N5)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'K1[_ ]turbo'
      model: 'K1 Turbo'

# MTech
M-Tech:
  regex: '(?:Eros[_ ](4G|Star|Smart)|MTECH (?:ACE9|TURBO L\d+|TEZ 4G|JAZBAA)|Foto3)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'EROS 4G'
      model: 'Eros 4G'
    - regex: 'Eros[_ ]Star'
      model: 'Eros Star'
    - regex: 'Eros[_ ]Smart'
      model: 'Eros Smart'
    - regex: 'ACE9'
      model: 'Ace 9'
    - regex: 'JAZBAA'
      model: 'JAZBAA'
    - regex: 'TEZ 4G'
      model: 'TEZ 4G'
    - regex: 'Foto3'
      model: 'Foto 3'
    - regex: 'TURBO L(\d+)'
      model: 'Turbo L$1'

# Fantec Boogy
Fantec:
  regex: 'FAN-M300H(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'M300H'

# AURIS Mobile (en.aurismobile.com.tr)
AURIS:
  regex: '(TB-703G)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# YUHO Mobile
YUHO:
  regex: 'YUHO_|(?:Netra(?:[_ ](?:Plus|Lite))?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'YUHO_(O2|H2|Y[123])_PRO'
      model: '$1 Pro'
    - regex: 'YUHO_Vast_Plus'
      model: 'Vast Plus'
    - regex: 'YUHO_Y1_ACE'
      model: 'Y1 Ace'
    - regex: 'YUHO_Y1_STAR'
      model: 'Y1 Star'
    - regex: 'YUHO_O1_LITE'
      model: 'O1 Lite'
    - regex: '(?:YUHO_)?(Vast2?|O[12]|Y2|Netra(?:[_ ](?:Plus|Lite))?)(?:[);/ ]|$)'
      model: '$1'

# F2 Mobile OR 2F Mobile (f2mexico.com)
F2 Mobile:
  regex: '(?:Z8PLUS|Z8POCKET|LT5216|F80s_plus|C8Finger|F80 PIABELLA|i8_ROKR|LT1[68])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Z8PLUS'
      model: 'Z8 Plus'
    - regex: 'i8_ROKR'
      model: 'i8 Rokr'
    - regex: 'Z8POCKET'
      model: 'Z8 Pocket'
    - regex: 'F80s_plus'
      model: 'F80s Plus'
    - regex: 'F80 PIABELLA'
      model: 'F80 Piabella'
    - regex: '(LT5216|LT1[68])(?:[);/ ]|$)'
      model: '$1'
    - regex: 'C8Finger'
      model: 'C8 Finger'

# Zaith
Zaith:
  regex: '(Z3211G)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Zealot
Zealot:
  regex: 'Zealot(?:[);/ ]|$)'
  device: 'tv'
  model: 'TV Box'

# Spectralink (spectralink.com)
Spectralink:
  regex: '(Versity (?:9640|9553))(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Vega
Vega:
  regex: 'Vega (Q7128)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Bleck (www.bleck.com.mx)
Bleck:
  regex: '(?:BE_(xl|se|o2|fr|et|dg)|BL-919845)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'BE_(xl|se|o2|fr|et|dg)(?:[);/ ]|$)'
      model: 'BE $1'
    - regex: 'BL-919845'
      device: 'tablet'
      model: 'BE clever 7.0"'

# BS Mobile
BS Mobile:
  regex: '(?:RUNE III?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'RUNE (III?)(?:[);/ ]|$)'
      model: 'Rune $1'

# RoyQueen
RoyQueen:
  regex: '(?:RQ[ -](Regal R8|713S|712|768)|Bishop-RQ451)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'RQ (Regal R8)'
      model: '$1'
    - regex: 'Bishop-RQ451'
      model: 'Bishop'
    - regex: 'RQ-(713S|712|768)'
      device: 'tablet'
      model: '$1'

# Remdun (https://www.remdun.com/)
Remdun:
  regex: 'RD(?:16Q|86E)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'RD(16Q|86E)(?:[);/ ]|$)'
      model: 'RD$1'

# Revo or RevoPhone or RevoPad (revophone.com)
Revo:
  regex: 'Revo[_ ](?:Youplus|555)|RevoYou'
  device: 'smartphone'
  models:
    - regex: 'Revo_Youplus'
      model: 'You Plus'
    - regex: 'Revo[ _]?(You|555)'
      model: '$1'

# Axioo
Axioo:
  regex: 'Axioo[_ ]|PICOp(?:hone|ad)[_-]'
  device: 'smartphone'
  models:
    - regex: 'Axioo[_ ](AX[45])'
      model: '$1'
    - regex: 'PICOphone_(L1|M4N|M4P_M3|M4U_M2_M)'
      model: 'PicoPhone $1'
    - regex: 'PICOphone_M2'
      model: 'PicoPhone M2 M'
    - regex: 'PICOpad[_-](7H_7|7H|GGT)(?:_3G)?'
      device: 'tablet'
      model: 'PicoPad $1 3G'

# Pico (pico-interactive.com)
Pico:
  regex: 'Pico (G2 4K)(?:[);/ ]|$)'
  device: 'wearable'
  model: '$1'

# STG Telecom (stgtelecom.com)
STG Telecom:
  regex: 'STG[ _](A[12] Pro|[AS]1|X[1-3]|X20|S[1-3]0|[BCP]10)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Rivo
Rivo:
  regex: 'PHANTOM (?:PZ|RX)|RHYTHM[ _]RX'
  device: 'smartphone'
  models:
    - regex: 'PHANTOM PZ ?(2[05]|[13]5|4|18)(?:[);/ ]|$)'
      model: 'Phantom PZ$1'
    - regex: 'PHANTOM RX ?(298|387)(?:[);/ ]|$)'
      model: 'Phantom RX$1'
    - regex: 'RHYTHM[ _]RX ?([15-9]0|[467]5|[12]80|150|[14]00)(?:[);/ ]|$)'
      model: 'Rhythm RX$1'

# Four Mobile or 4mobile
Four Mobile:
  regex: '(?:Four[ _]?(S600|S300I|S185|K500|S61)|S62_Eco_3|S186_Sky_3|S710 Ruby)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Four[ _]?(S600|S300I|K500)'
      model: '$1'
    - regex: 'Four[ _]?S185'
      model: 'S185 Sky 2'
    - regex: 'S186_Sky_3'
      model: 'S186 Sky 3'
    - regex: 'Four[ _]?S61'
      model: 'S61 Eco 2'
    - regex: 'S62_Eco_3'
      model: 'S62 Eco 3'
    - regex: 'S710 Ruby'
      model: 'S710 Ruby'

# Seven Mobile or 7mobile (www.7mobileafrica.com)
7 Mobile:
  regex: '(?:SWEGUE|DRENA|Kamba(?:_2)?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Swegue'
      model: 'Swegue'
    - regex: 'DRENA'
      model: 'Drena'
    - regex: 'Kamba_2'
      model: 'Kamba 2'
    - regex: 'Kamba'
      model: 'Kamba'

# UZ Mobile or Telecom Device Pro (idevice.uz)
UZ Mobile:
  regex: 'Uzbekistan(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Uzbekistan'

# KREZ
KREZ:
  regex: 'KREZ[_ ]'
  device: 'smartphone'
  models:
    - regex: 'KREZ[_ ](SL502)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'KREZ[_ ](TM100[12]S8)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1 3G'

# KRIP (https://www.krip.com/)
KRIP:
  regex: 'KRIP_|K(?:4[bm]|5[bdm]|6b|55h?|57|65)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:KRIP_)?K(4[bm]?|5[bdm]|6b|55h?|57|65)(?:[);/ ]|$)'
      model: 'K$1'

# Kurio or KD Interactive (www.group-kd.com, kdplanet.com)
Kurio:
  regex: 'Kurio|C15100m'
  device: 'tablet'
  models:
    - regex: 'C15100m(?:[);/ ]|$)'
      model: 'Tab 2'
    - regex: 'Kurio[_ ]?(10S|7S)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Kurio[_ ]?Phone(?:[);/ ]|$)'
      device: 'smartphone'
      model: 'Phone C14500'

# Inch
Inch:
  regex: 'Inch (?:Regulus (?:7.85|II)|Avior 3)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(Regulus 7.85)'
      model: '$1"'
    - regex: '(Regulus II|Avior 3)'
      model: '$1'

# UTime
UTime:
  regex: 'UTIME[ _](U6|G7|U100|[TX]1|FX)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# L-Max or LMAX (lmax-mobile.com)
L-Max:
  regex: '(?:Sapphire 8|Sapphire[76]|Mega plus[23])(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Mega plus([23])'
      model: 'Mega Plus $1'
    - regex: 'Sapphire ?([678])'
      model: 'Sapphire $1'

# WIWA (www.wiwa.info.pl)
WIWA:
  regex: 'WIWA DREAM PLAYER(?:[);/ ]|$)'
  device: 'tv'
  model: 'Dream Player TV'

# FMT OR Future Mobile Technology
FMT:
  regex: '(?:16M4HI105024|FMT-NM7058-02|FXT113R|176HS1050(?:232|531)|175WT1050231|175HS1050231|175FT1050241|Global3 B01)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '16M4HI105024'
      model: 'Netsurfer Storm'
    - regex: 'Global3 B01'
      model: 'Global3 B01'
    - regex: 'FMT-NM7058-02'
      model: 'Flash'
    - regex: '176HS1050531'
      model: 'Falcon'
    - regex: '176HS1050232'
      model: 'B52'
    - regex: '175WT1050231'
      model: 'Eagle'
    - regex: '175HS1050231'
      model: 'Tomcat'
    - regex: '175FT1050241'
      model: 'Viper'
    - regex: '(FXT113R)'
      device: 'tablet'
      model: '$1'

# mPhone
mPhone:
  regex: 'mPhone ?([68]|7 Plus|7s)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Cobalt
Cobalt:
  regex: 'Cobalt[ _-](?:SM|T)'
  device: 'smartphone'
  models:
    - regex: 'Cobalt[ _-]SM_(55?|6)'
      model: 'SM$1'
    - regex: 'Cobalt[ _-]T((?:7|10))[ _]3G'
      device: 'tablet'
      model: 'T$1 3G'
    - regex: 'Cobalt[ _-]T((?:7|10))[ _]wifi'
      device: 'tablet'
      model: 'T$1 WiFi'

# New Balance or NB
New Balance:
  regex: 'NB (RunIQ)(?:[);/ ]|$)'
  device: 'wearable'
  model: '$1'

# AOYODKG
AOYODKG:
  regex: 'AOYODKG'
  device: 'tablet'
  models:
    - regex: 'AOYODKG[_ ](A38)(?:[);/ ]|$)'
      model: '$1'

# Xtratech (xtratech.com)
Xtratech:
  regex: '(?:BRIO[_ ]X31|XM14G|X10MT16)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(BRIO[_ ]X31)'
      model: '$1'
    - regex: 'XM14G'
      device: 'tablet'
      model: 'IguanaPad XM14G'
    - regex: 'X10MT16'
      device: 'tablet'
      model: 'X10MT16'

# XGIMI (www.xgimi.com)
XGIMI:
  regex: 'XGIMI TV(?:[);/ ]|$)'
  device: 'peripheral'
  model: '$1'

# Raspberry (raspberrypi.org)
Raspberry:
  regex: 'Raspberry (Pi [0-9]+)(?:[);/ ]|$)'
  device: 'peripheral'
  model: '$1'

# Tambo
Tambo:
  regex: '(TA-(?:2[_ ](?:3G|Pro)|5[05][_ ]Power|[1-4]|[1246]0))(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Smooth Mobile (https://www.smoothmobile.us/)
Smooth Mobile:
  regex: '(?:Smooth ?(?:5.[05]|626|6.26 (?:Lite|Max|Pro)|6.[15])|S2 Advance)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'S2 Advance'
      model: 'S2 Advance'
    - regex: 'Smooth 5.5 lite'
      model: 'Smooth 5.5 Lite'
    - regex: 'Smooth (5.[05]|6.[15])(?:[);/ ]|$)'
      model: 'Smooth $1'
    - regex: 'Smooth626(?:[);/ ]|$)'
      model: 'Smooth 6.26'
    - regex: 'Smooth 6.26 (Lite|Max|Pro)(?:[);/ ]|$)'
      model: 'Smooth 6.26 $1'

# Smotreshka
Smotreshka:
  regex: 'Smotreshka Box (115NA|413NA|213a?)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Gooweel (gooweel.com)
Gooweel:
  regex: 'Gooweel| M5 Pro(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Gooweel; (S7);'
      model: '$1'
    - regex: 'M5 Pro'
      model: 'M5 Pro'

# Vargo or Ivargo
Vargo:
  regex: 'Vargo[; _]|(?:V210101)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(V210101)(?:[);/ ]|$)'
      model: '$1'

# Elekta (elektagulf.com)
Elekta:
  regex: 'ELED-(?:4[238]S[AM]{2}RT|5[05](?:CV_)?SMART_UHD|32SMART)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'ELED-(4[238])S[AM]{2}RT(?:[);/ ]|$)'
      model: '$1" FHD LED Smart TV'
    - regex: 'ELED-55CV_SMART_UHD(?:[);/ ]|$)'
      model: '55" UHD Curved LED Smart TV'
    - regex: 'ELED-(50)SMART_UHD(?:[);/ ]|$)'
      model: '$1" UHD LED Smart TV'
    - regex: 'ELED-(32)SMART(?:[);/ ]|$)'
      model: '$1" HD LED Smart TV'

# YASIN (yasintv.kz)
YASIN:
  regex: 'YASIN Android TV(?:[);/ ]|$)'
  device: 'tv'
  model: ''

# Blow (blow.pl)
Blow:
  regex: '(?:LaserTAB10|PlatinumTAB10_4G_V\d|BlackTab7_3G_V2|BlackTAB7)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'LaserTAB10'
      model: 'Laser Tab 10'
    - regex: 'PlatinumTAB10_4G_(V\d)'
      model: 'Platinum Tab 10 4G $1'
    - regex: 'BlackTab7_3G_V2'
      model: 'Black Tab 3G V2'
    - regex: 'BlackTAB7'
      model: 'Black Tab 3G'

# FNF
FNF:
  regex: 'ifive(?:[_ ]mini[_ ][43]G?S|X2|Mini3|3| Air)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'ifive[_ ]mini[_ ]([43]G?S)'
      model: 'iFive Mini $1'
    - regex: 'ifive(X2|3)'
      model: 'iFive $1'
    - regex: 'ifiveMini3'
      model: 'iFive Mini 3'
    - regex: 'ifive Air'
      model: 'iFive Air'

# iMan
iMan:
  regex: '(i5800C|i6800|Victor(?:_S)?)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Vava
VAVA:
  regex: 'VAVA[ _](X3)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# ivvi
ivvi:
  regex: 'ivvi[ _]'
  device: 'smartphone'
  models:
    - regex: 'ivvi P60_X11 Plus'
      model: 'P60-X11 Plus'
    - regex: 'ivvi[ _](P60)[_ ](\w\d+)'
      model: '$1-$2'
    - regex: 'ivvi[ _]([^/;)]+)(?: Build|[);])'
      model: '$1'

# Dragon Touch (dragontouch.com)
Dragon Touch:
  regex: '(?:Notepad[_ ](?:K10|102|Y80)|MAX 10)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'MAX 10'
      model: 'Max 10'
    - regex: 'Notepad[_ ](K10|102|Y80)'
      model: 'Notepad $1'

# Dreamgate
Dreamgate:
  regex: 'Sens 5(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Sens 5(?:[);/ ]|$)'
      model: 'Sens 5'

# AOpen (www.aopen.com)
AOpen:
  regex: '(WT(?:22|19)M-FI)(?:[);/ ]|$)'
  device: 'smart display'
  model: 'eTILE $1'

# AG or AG Mobile
AG Mobile:
  regex: '(Hashtag|Shine|Chacer)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# DIGIFORS (digifors.ru)
DIGIFORS:
  regex: 'DIGIFORS (400)(?:[);/ ]|$)'
  device: 'tv'
  model: 'Smart $1'

# DISH (https://www.dish.com/)
DISH:
  regex: 'WTCELERO5G(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'WTCELERO5G'
      model: 'Celero 5G'

# VIWA
VIWA:
  regex: '(?:LIGHT MINI|VIWA A5\+|LIGHT PLUS|LIGHT ONE|POWER P1)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'LIGHT MINI'
      model: 'Light Mini'
    - regex: 'LIGHT PLUS'
      model: 'Light Plus'
    - regex: 'LIGHT ONE'
      model: 'Light One'
    - regex: 'VIWA A5\+'
      model: 'Light A5 Plus'
    - regex: 'POWER P1'
      model: 'Power P1'

# M-Horse (www.mhorse.com)
M-Horse:
  regex: 'M-HORSE|(?:Pure (?:3|2A?)|Pure ?1|Power1)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Pure ?([13]|2A?)(?:[);/ ]|$)'
      model: 'Pure $1'
    - regex: 'Power1'
      model: 'Power 1'

# ProVision (www.provision.co.ir/en)
ProVision:
  regex: 'ProVision (S1)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Sirin Labs (https://sirinlabs.com/)
Sirin Labs:
  regex: '(?:FINNEY U1|SOLARIN)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:FINNEY U1)(?:[);/ ]|$)'
      model: 'Finney U1'
    - regex: '(?:SOLARIN)(?:[);/ ]|$)'
      model: 'Solarin'

# SK Broadband (https://www.skbroadband.com/)
SK Broadband:
  regex: 'BHX-UH200'
  device: 'tv'
  models:
    - regex: 'BHX-UH200(?:[);/ ]|$)' # Humax
      model: 'BHX-UH200'

# Humax (https://automotive-en.humaxdigital.com/)
Humax:
  regex: '(AIVI-N3000RV)(?:[);/ ]|$)'
  device: 'car browser'
  model: '$1'

# Perfeo (perfeo.ru)
Perfeo:
  regex: 'Perfeo'
  device: 'tv'
  models:
    - regex: 'Perfeo_PF_A4551'
      model: 'CHRONO'
    - regex: 'Perfeo_PF_A4552'
      model: 'RATE'
    - regex: 'Perfeo_PF_A4553'
      model: 'MATRIX'

# CGV (www.cgv.fr)
CGV:
  regex: 'CGV_(Ultimate T8)'
  device: 'smartphone'
  model: '$1'

# Telia (telia.se or telia.com)
Telia:
  regex: 'Telia box'
  device: 'tv'
  model: 'Box'

# Canal Digital
Canal Digital:
  regex: 'S70CDS(?:[);/ ]|$)'
  device: 'tv'
  model: 'OnePlace'

# ZIFRO
ZIFRO:
  regex: 'ZIFRO|(?:ZT-97003G)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(ZT-9700)3G'
      model: '$1 3G'

# SmartBook
SmartBook:
  regex: 'SMARTBOOK[ _]S'
  device: 'tablet'
  models:
    - regex: 'SMARTBOOK[ _]SB ?13'
      model: 'SB13'
    - regex: 'SMARTBOOK[ _](S9Q9|S7QS)'
      model: '$1'

# Kiowa
Kiowa:
  regex: 'KIOWA[_ ]|(?:[AS]5|X4)_CRISTAL(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(X4|[AS]5)_CRISTAL'
      model: '$1 Cristal'
    - regex: 'S5 ULTRA'
      model: 'S5 Ultra'

# Sprint
Sprint:
  regex: 'AQT(100|8[02])(?:[);/ ]|$)'
  device: 'tablet'
  model: 'AQT$1'

# Bundy Mobile (bundy-mobile.fr)
Bundy:
  regex: '(?:BTOUCH7_PLUS|SWEET 5\+ 2019|SWEET ?[56]\+)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'SWEET 5\+ 2019'
      model: 'Sweet 5 Plus (2019)'
    - regex: 'SWEET ?([65])\+'
      model: 'Sweet $1 Plus'
    - regex: 'BTOUCH7_PLUS'
      device: 'tablet'
      model: 'B-Touch 7 Plus'

# Covia (covia.net)
Covia:
  regex: '(CP-J55a|CP-J55aW|CP-J55aX)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Elevate
Elevate:
  regex: '(?:LUNA (V57|V55A|G58|G62|G60X)|V55C|G55 LITE)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(V55C)'
      model: 'Luna $1'
    - regex: '(G55)[_ ]LITE'
      model: 'Luna $1 Lite'
    - regex: 'LUNA (V57|V55A|G58|G62|G60X)'
      model: 'Luna $1'

# Stylo
Stylo:
  regex: 'STYLO|(?:TARISTAB[234]|Luna|CPE91|VS571|VS5502|S57_A[ZL]URE|BOLD_PLUS|INKOSI(?:_PRO)?|INKULU_PRO|Ithemba|S56 MIST|S55 Nova|S40_VISTA|S50_JADE|S50_BOLD|S64_ALPHA|S53_STARK|S40_LIFE|LIFE_2|S49[_ ](?:MONO|POISE|ECO)| [27]21|721_PRO|DQR22|MOSCOW|STEP_UP|ARCTIC|S61 JAZZ)(?:[);/ ]|$)| BRAVE(?: Build|[;)])'
  device: 'smartphone'
  models:
    - regex: 'STYLO[ _](F1|Viva)'
      model: '$1'
    - regex: 'STEP_UP'
      model: 'Step Up'
    - regex: '721_PRO'
      model: '721 Pro'
    - regex: ' ([27]21)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'STYLO[ _]S9[_ ]TOPAZ'
      model: 'S9 Topaz'
    - regex: 'SV61 VECTOR\+'
      model: 'SV61 Vector Plus'
    - regex: 'SM61 MAGIC\+'
      model: 'SM61 Magic Plus'
    - regex: 'S61 JAZZ'
      model: 'S61 Jazz'
    - regex: 'S57_AZURE'
      model: 'S57 Azure'
    - regex: 'S57_ALURE'
      model: 'S57 Alure'
    - regex: 'S56 MIST'
      model: 'S56 Mist'
    - regex: 'CPE91'
      model: 'S54 Zen'
    - regex: 'S55 Nova'
      model: 'S55 Nova'
    - regex: 'S40_VISTA'
      model: 'S40 Vista'
    - regex: 'S50_JADE'
      model: 'S50 Jade'
    - regex: 'S50_BOLD'
      model: 'S50 Bold'
    - regex: 'Ithemba'
      model: 'Ithemba'
    - regex: 'ARCTIC'
      model: 'Arctic'
    - regex: 'S53_STARK'
      model: 'S53 Stark'
    - regex: 'S40_LIFE'
      model: 'S40 Life'
    - regex: 'LIFE_2'
      model: 'Life 2'
    - regex: 'MOSCOW'
      model: 'Moscow'
    - regex: 'S49[_ ]POISE'
      model: 'S49 Poise'
    - regex: 'S49[_ ]MONO'
      model: 'S49 Mono'
    - regex: 'S49[_ ]ECO'
      model: 'S49 Eco'
    - regex: 'S64_ALPHA'
      model: 'S64 Alpha'
    - regex: 'Luna'
      model: 'Luna'
    - regex: 'DQR22'
      model: 'Jupiter'
    - regex: 'INKOSI_PRO'
      model: 'Inkosi Pro'
    - regex: 'INKOSI'
      model: 'Inkosi'
    - regex: 'INKULU_PRO'
      model: 'Inkulu Pro'
    - regex: 'BOLD_PLUS'
      model: 'Bold Plus'
    - regex: 'BRAVE'
      model: 'Brave'
    - regex: 'Stylo[_ ](521)'
      model: '$1'
    - regex: '(VS571|VS5502)'
      model: '$1'
    - regex: 'TARISTAB([2-4])'
      device: 'tablet'
      model: 'Taris Tab $1'

# galaxy innovations or GI  (www.galaxy-innovations.ru)
Galaxy Innovations:
  regex: 'GI (?:UNI2|iTV912|Fly T2)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'GI iTV912'
      model: 'iTV912'
    - regex: 'GI UNI2'
      model: 'Uni 2'
    - regex: 'GI Fly T2'
      model: 'Fly T2'

# Benzo
Benzo:
  regex: '(Class S300 LTE)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Vexia (www.vexia.eu)
Vexia:
  regex: '(?:Zippers Tab 10i 3G)|Vexia FCS E2 CLM'
  device: 'tablet'
  models:
    - regex: 'Vexia FCS E2 CLM'
      model: 'Elegance E2 CLM'
    - regex: '(Zippers Tab 10i 3G)'
      model: '$1'

# HiMax (himaxmobilebd.com)
HiMax:
  regex: ' HIMAX[_ ]'
  device: 'smartphone'
  models:
    - regex: 'POLYMER( X)?'
      model: 'Polymer$1'
    - regex: 'HIMAX[_ ]PURE[_ ]3S'
      model: 'Pure 3S'

# Packard Bell (sub brand Acer www.packardbell.com, packard-bell.co.za)
Packard Bell:
  regex: '(PB1009|M10[45]00|M7500|M7600-D|DAYTONA-G12|MONZA-T7|SILVERSTONE-T10|EasyNote TV11HC)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'DAYTONA-G12'
      device: 'smartphone'
      model: 'Daytona G12'
    - regex: 'MONZA-T7'
      model: 'Monza T7'
    - regex: 'SILVERSTONE-T10'
      model: 'Silverstone T10'
    - regex: '(PB1009|M10[45]00|M7500|M7600-D)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'EasyNote TV11HC'
      device: 'desktop'
      model: 'EasyNote TV11HC'

# Qnet Mobile (qnetmobile.com)
Qnet Mobile:
  regex: ' Passion[ _]P|Hynex plus|Stark K1|Hynex H[356]|Levin V[12]'
  device: 'smartphone'
  models:
    - regex: 'Passion[ _](P[0-9]+)'
      model: 'Passion $1'
    - regex: 'Hynex plus( 2)?'
      model: 'Hynex Plus$1'
    - regex: 'Stark K1'
      model: 'Stark K1'
    - regex: 'Hynex (H[356])\+'
      model: 'Hynex $1 Plus'
    - regex: 'Hynex (H[35])'
      model: 'Hynex $1'
    - regex: 'Levin (V[12])'
      model: 'Levin $1'

# Bluebird (www.bluebirdcorp.com)
Bluebird:
  regex: '(VF550|EF501R?)(:_RU)?(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1' # terminal + smartphone

# Mara or MaraPhones (maraphones.com)
Mara:
  regex: 'Mara(?: Phones)?[ _](Z1?|X1|S)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# BMAX (www.bmaxit.com)
BMAX:
  regex: '(?:(?:I11|I10(Plus)?)_EEA|Android 11;(?: [\w-]+;)? I11|I10_Pro)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'I10_?(Plus|Pro)?(?:_(?:EEA|ROW))?(?:[);/ ]|$)'
      model: 'MaxPad I10 $1'
    - regex: ' I11(?:_EEA)?(?:[);/ ]|$)'
      model: 'MaxPad I11'

# Geotex (geotex.tv)
Geotex:
  regex: '(GTX-R10i Pro)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# DING DING
DING DING:
  regex: 'DINGDING[ _-](SK\d)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Trident (www.trident.com.tr)
Trident:
  regex: '(A23 Max|A75 Pro Max)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# OKSI
OKSI:
  regex: '(GEN-10|GT1001)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Taiga System or TaigaPhone (taigaphone.ru)
Taiga System:
  regex: '(?:TP_1_3000)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'TaigaPhone 1'

# Glofiish (glofiish.ua)
Glofiish:
  regex: '(?:Gpad_U)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'G Pad U'

# Polar (polar.ru)
Polar:
  regex: 'Polar(?:_WK)?[_ ](P32L32T2CSM|P24L51T2CSM|P40L33T2CSM|P43U51T2SCSM|P39L21T2CSM)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Polarline (sub brand Polar)
PolarLine:
  regex: 'PolarLine[_ ](?:W?K?[_ ])?(24PL51TC-SM|32PL1[34]TC-SM|40PL(?:52|11)TC-SM|55PU11TC-SM)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# MyGica (www.mygica.com)
MyGica:
  regex: 'MyGica[_ ]'
  device: 'tv'
  models:
    - regex: 'HDR (Quad Core|Smart TV) Box'
      model: 'HDR $1 Box'
    - regex: 'Quad core Enjoy tv box'
      model: 'Quad Core Enjoy TV Box'
    - regex: 'ATV(19[60]0|495 Pro 16G)'
      model: 'ATV$1'

# neoCore (https://neocore.store/)
neoCore:
  regex: 'neocore_?'
  device: 'tablet'
  models:
    - regex: 'neocore_N1G1(?:[);/ ]|$)'
      model: 'N1 G1'
    - regex: 'neocore E1-2(?:[);/ ]|$)'
      model: 'E1+'
    - regex: 'NEOCORE_E2(?:[);/ ]|$)'
      model: 'E2'

# Novex
Novex:
  regex: '(NWX-40F171MSY)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Epson (epson.com)
Epson:
  regex: 'Projector(?:[);/ ]|$)'
  device: 'peripheral'
  model: 'HA14A LCD Projector' # sti6200-d101

# Awow or AWOW (awowtech.com)
Awow:
  regex: '(UTBook|CreaPad_1009_EEA)'
  device: 'tablet'
  models:
    - regex: '(UTBook|CreaPad_1009)'
      model: '$1'

# Mitsui (www.diamond-electronics.com)
Mitsui:
  regex: '(MC32020)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Gocomma
Gocomma:
  regex: 'H1-C-ALADENG'
  device: 'wearable'
  model: 'W5'

# LEMFO
LEMFO:
  regex: '(?:LEM1[45]|LEM12Pro)(?:[);/ ]|$)'
  device: 'wearable'
  models:
    - regex: '(LEM12)Pro'
      model: '$1 Pro'
    - regex: '(LEM1[45])'
      model: '$1'

# Urovo (en.urovo.com)
Urovo:
  regex: '(?:DT[45]0)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(DT[45]0)'
      device: 'peripheral'
      model: '$1'

# Neon IQ or NeonIQ
Neon IQ:
  regex: '(?:NQT-(?:101|7)[34]GIQ|NQT-7W)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'NQT-101([34])GIQ'
      model: 'Tab 10.1" $1G'
    - regex: 'NQT-7([34])GIQ'
      model: 'Tab 7" $1G'
    - regex: 'NQT-7W'
      model: 'Tab 7" WiFi'

# Aocos
Aocos:
  regex: 'AOCOS ([^);/]+)(?: Build|[);])'
  device: 'tablet'
  model: '$1'

# Parrot Mobile
Parrot Mobile:
  regex: '(Xplorer_2)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Partner Mobile (https://partnermobile.com/)
Partner Mobile:
  regex: 'EV1 PRO|Partner[_ ]Evolution(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Partner[_ ]Evolution'
      model: 'Evolution'
    - regex: 'EV1 PRO'
      model: 'EV1 Pro'

# Bubblegum (bubblegumtablets.co.za)
Bubblegum:
  regex: '(BUB6R-3T)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Erisson
Erisson:
  regex: '(42FLEA73T2SM|42FLX9060T2|39LES80T2SM)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Liberton (liberton.ua)
Liberton:
  regex: '((?:24|32)TP1HDTA1)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Soho Style
Soho Style:
  regex: '(SS5214G)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Shivaki
Shivaki:
  regex: 'STV[-_](40LED25S|40LED42S|32LED42S|32LED30C)(?:[);/ ]|$)'
  device: 'tv'
  model: 'STV-$1'

# Meizu
Meizu:
  regex: 'Meizu|MZ-(?!Fast)[A-Z]|(?<!POCO )(M04[05]|MZ-16th(?: Plus)?|MZ-16[st]|M7[12]1C|M35[1356]|M612C|M578CA|M181[36]|M1822|M681C|M6T|MX[ -]?[2345](?: Pro)?|(?:MZ-)?m[1-6] note|M621C|M1852|M57[18]C|M3[ESX]|M3 Max|M031|m1 metal|M1 E|(?<!Nubia |STELLAR )M2|M2 E|M5s Build|PRO [567]|PRO 7-[HS]| 15 Lite| 16th|MZ-15 (?:Lite|Plus)|15 Plus|MZ-16 X| 16 X| 16T|MX6| M5c|16s Pro|Android 8(?:[\d.]*);(?: [\w-]+;)? 16)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(?:MZ-)?M571C'
      device: 'phablet'
      model: 'M2 Note'
    - regex: '(?:MZ-|Meizu-)?m([1-6])[_ ]note(?:[);/ ]|$)'
      device: 'phablet'
      model: 'M$1 Note'
    - regex: '(?:MZ-)?M1 E(?:[);/ ]|$)'
      model: 'M1E'
    - regex: 'M2 E(?:[);/ ]|$)'
      model: 'M2E'
    - regex: '(?:MZ-)?M578C[A]?|M2(?:[);/ ]|$)'
      model: 'M2'
    - regex: 'M681C(?:[);/ ]|$)'
      model: 'M3 Note'
      device: 'phablet'
    - regex: 'M621C(?:[);/ ]|$)'
      model: 'M5 Note'
      device: 'phablet'
    - regex: 'M711C(?:[);/ ]|$)'
      model: 'M6'
    - regex: 'M721C(?:[);/ ]|$)'
      model: 'M6 Note'
      device: 'phablet'
    - regex: '(M6T|MX6|M3E|M3X)(?:[);/ ]|$)'
      model: '$1'
    - regex: '(?:MZ-)?M3S(?:[);/ ]|$)'
      model: 'M3s'
    - regex: '(?:MZ-)?M3 Max(?:[);/ ]|$)'
      model: 'M3 Max'
    - regex: 'M5S|M612C'
      model: 'M5S'
    - regex: '(?:MZ-)?M5c(?:[);/ ]|$)'
      model: 'M5c'
    - regex: '(M04[05]|MX[ -]?2)(?:[);/ ]|$)'
      model: 'MX2'
    - regex: '(M35[1356]|MX[ -]?3)(?:[);/ ]|$)'
      model: 'MX3'
    - regex: 'MX[ -]?4 Pro(?:[);/ ]|$)'
      model: 'MX4 Pro'
    - regex: 'MX[ -]?4(?:[);/ ]|$)'
      model: 'MX4'
    - regex: '(Meizu[- _])?MX[ -]?5(?:[);/ ]|$)'
      model: 'MX5'
    - regex: 'm1 metal'
      model: 'M1 Metal'
    - regex: 'M1813(?:[);/ ]|$)'
      model: 'M8'
    - regex: '(?:M1816|M8 lite)(?:[);/ ]|$)'
      model: 'M8 Lite'
    - regex: 'M8c Pro(?:[);/ ]|$)'
      model: 'M8c Pro'
    - regex: 'PRO 7-[HS](?:[);/ ]|$)'
      model: 'PRO 7'
    - regex: 'PRO ([76]) Plus(?:[);/ ]|$)'
      model: 'PRO $1 Plus'
    - regex: 'PRO ([567])'
      model: 'PRO $1'
    - regex: 'M031(?:[);/ ]|$)'
      model: 'MX Dual Core'
    - regex: 'M1852(?:[);/ ]|$)'
      model: 'X8'
    - regex: 'M1822(?:[);/ ]|$)'
      model: 'Note 8'
    - regex: '(?:MZ-)?16T(?:[);/ ]|$)'
      model: '16T'
    - regex: '(?:MZ-)?16th Plus(?:[);/ ]|$)'
      model: '16th Plus'
    - regex: '(?:MZ-)?15 Plus(?:[);/ ]|$)'
      model: '15 Plus'
    - regex: '(?:MZ-15 Lite| 15 Lite)(?:[);/ ]|$)'
      model: '15 Lite'
    - regex: 'MZ-16th| 16th(?:[);/ ]|$)'
      model: '16th'
    - regex: '(?:MZ-)?16 X(?:[);/ ]|$)'
      model: '16X'
    - regex: ' 16(?: Build|[;)]|$)'
      model: '16'
    - regex: '(?:MZ-)?16s Pro(?:[);/ ]|$)'
      model: '16s Pro'
    - regex: 'meizu (17|C9) Pro(?:[);/ ]|$)'
      model: '$1 Pro'
    - regex: 'MZ-?M3(?:[);/ ]|$)'
      model: 'M3'
    - regex: '(?:Meizu[_ ])?note([89])(?:[);/ ]|$)'
      device: 'phablet'
      model: 'Note $1'

    - regex: '(?:MZ-)?Meizu[_ ]([^/;]+) Build'
      model: '$1'
    - regex: '(?:MZ-)?Meizu[_ ]([a-z0-9_]+)'
      model: '$1'
    - regex: 'MZ-([^/;]+) Build'
      model: '$1'

# Athesi (https://www.athesi-professional.com/)
Athesi:
  regex: '(?:AP570[12]|AP5705S)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(AP570[12]|AP5705S)(?:[);/ ]|$)'
      model: '$1'

# Atmaca Elektronik (http://www.atmacaelektronik.com.tr/)
Atmaca Elektronik:
  regex: 'ATMACA_'
  device: 'tv'
  model: ''

# Atvio
Atvio:
  regex: '(100011886BK)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Alps
Alps:
  regex: '(?:FF-5000|ZQ8003|825X_Pro|03_v89_jbl|benz_hy1920x720|8227L_demo)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(FF-5000)' # for Ford Mustang (FFKJ)
      device: 'car browser'
      model: '$1'
    - regex: '(ZQ8003|825X_Pro|benz_hy|8227L_demo)(?:1920x720)?'
      device: 'car browser'
      model: '$1'

# Starwind (starwind.com.ru)
Starwind:
  regex: 'Smart_Starwind|(?:SW-LED32SB302|SW-LED42SB300)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: '(SW-LED32SB302|SW-LED42SB300)'
      model: '$1'

# QTECH (https://www.qtech.ru/en/)
QTECH:
  regex: '(?:QMP_K8| QMP-M1-N-IP)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'QMP[_-](K8|M1)'
      model: 'QMP $1'

# Prology (www.prology.ru)
Prology:
  regex: '(MPC-(?:[57]0|65)|MPC-110DSP)(?:[);/ ]|$)'
  device: 'car browser'
  model: '$1'

# Polestar (polestar.com)
Polestar:
  regex: 'Polestar(?:[);/ ]|$)'
  device: 'car browser'
  model: ''

# Porsche (porsche.com)
Porsche:
  regex: 'Porsche Rear Seat Entertainment'
  device: 'car browser'
  model: ''

# NavRoad (navroad.com)
NavRoad:
  regex: '(?:NEXO (?:Smarty|handy|SMART DUO|Evo)|MOVIO 2)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Nexo Smarty'
      model: 'Nexo Smarty'
    - regex: 'Nexo handy'
      model: 'Nexo Handy'
    - regex: 'NEXO SMART DUO'
      device: 'tablet'
      model: 'Nexo Smart Duo'
    - regex: 'NEXO EVO'
      device: 'tablet'
      model: 'Nexo Evo'
    - regex: 'MOVIO 2'
      device: 'tablet'
      model: 'Movio 2'

# Smarty (smarty.by)
Smarty:
  regex: 'Smarty[_ ]'
  device: 'tablet'
  models:
    - regex: 'Mini ?(7L?)'
      model: 'Mini $1'
    - regex: 'Maxi 10L'
      model: 'Maxi 10L'

# Leff
Leff:
  regex: '(32H540S|32H5[235]0T)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# DF or DFGroup (dfgroup.ru)
DF:
  regex: '(?:JAGUAR|SATURN|TIGER|PUMA)-0\dC?(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'JAGUAR-01'
      model: 'Jaguar 01'
    - regex: 'SATURN-(02C?)'
      model: 'Saturn $1'
    - regex: 'TIGER-01'
      model: 'Tiger 01'
    - regex: 'PUMA-01'
      model: 'Puma 01'

# BDQ or BDQ Mobile (bdqholdings.co.mz)
BDQ:
  regex: '(?:SMART_B19|Destiny)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'SMART_B19'
      model: 'Smart B19'
    - regex: 'Destiny'
      device: 'tablet'
      model: 'Destiny'

# TuCEL
TuCEL:
  regex: '(TL554B|TC504B)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# FEONAL
FEONAL:
  regex: '(K118)_EEA(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Sunmi (www.sunmi.com)
Sunmi:
  regex: '(?:V1s-G|T2s_LITE)(?:[);/ ]|$)'
  device: 'peripheral'
  models:
    - regex: 'T2s_LITE(?:[);/ ]|$)' # monoblock and terminal
      device: 'smart display'
      model: 'T2s Lite'
    - regex: '(V1s)-G'
      model: '$1'

# iData (idataglobal.com)
iData:
  regex: 'iData (K1)'
  device: 'peripheral'
  model: '$1'

# AIDATA
AIDATA:
  regex: '(?:AIDATA ELDE 10 TABLET|ADT_?1061(?:_1)?|ADT1012L)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'ADT_?1061(?:_1)?'
      model: 'ADT 1061'
    - regex: 'ADT1012L'
      model: 'ADT 1012L'
    - regex: 'ELDE 10'
      model: 'ELDE 10'

# Ematic (ematic.us)
Ematic:
  regex: '(EGQ101)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# GLONYX
GLONYX:
  regex: 'Quartz(T10-3)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'Quartz $1'

# Zyrex
Zyrex:
  regex: 'ZT216'
  device: 'tablet'
  model: 'ZT216'

# Orbita or Orbit
Orbita:
  regex: '(OT-DVB\d{2})(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# TAG Tech or TAG-Tech or Talal Abu-Ghazaleh Global (www.tagtech.global)
TAG Tech:
  regex: 'TAG[ -]TAB[ -]III?(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'TAG[ -]TAB[ -](III?)'
      model: 'Tab $1'

# DUNNS Mobile or DUNNS
DUNNS Mobile:
  regex: 'DUNNS[ _]'
  device: 'smartphone'
  models:
    - regex: 'DUNNS[ _](?:MOBILE[ _])?(703GDC|AT1001)(?:[);/ ]|$)'
      device: 'tablet'
      model: '$1'

# iNOVA
iNOVA:
  regex: '(EX1080)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# eNOVA
eNOVA:
  regex: 'eNOVA'
  device: 'smartphone'
  models:
    - regex: 'eNOVA TAB 10 LTE'
      device: 'tablet'
      model: 'Tab 10" LTE'

# Amino or Aminocom (www.amino.tv)
Amino:
  regex: '(?:Amigo7x?(?:YUF|SCB)?)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'Amigo7x'
      model: 'Amigo 7x'
    - regex: 'Amigo7'
      model: 'Amigo 7'

# Saiet (acquistaonline.saiet.it)
Saiet:
  regex: '(?:STS5[57]0)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(STS5[57]0)'
      model: 'Sicuro Smart $1'

# Magicsee (magicsees.com)
Magicsee:
  regex: 'N5NOVA(?:[);/ ]|$)'
  device: 'tv'
  model: 'N5 Nova'

# Obabox (www.obabox.com.br)
Obabox:
  regex: '(?:OBA_?(?:SMART_3|Conecta_Max|Conecta_4G))(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'OBASMART_3'
      model: 'Smart 3'
    - regex: 'OBA_(Conecta_(?:Max|4G))'
      model: '$1'

# iKon (ikonhome.com)
iKon:
  regex: '(IK-102[58]|IK-1106|IK-7108|IK-787)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# QLink
QLink:
  regex: '(?:Scepter[ _]8(?: Tablet)?)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(Scepter[ _]8)'
      model: '$1'

# IRA or IRA (explore more) (wishtel.com)
IRA:
  regex: '(?:IRA_DUO|IRAW7258)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(IRAW7258)'
      model: '$1'
    - regex: 'IRA_DUO'
      model: 'Duo Tablet'

# Microtech (microtech.store)
Microtech:
  regex: '(?:ETL101(?:GB|AL)|ETW101GT)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'ETW101GT'
      model: 'E-Tab WiFi'
    - regex: 'ETL101(?:GB|AL)'
      model: 'E-Tab LTE'

# Gplus (gpluselectronics.com)
Gplus:
  regex: 'Gplus[ _]([ZXP]10\+?|N809|F53|S9701|FW6950|A2_Plus)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Eurocase (eurocase.com)
Eurocase:
  regex: '(EUTB_758G?)'
  device: 'tablet'
  models:
    - regex: 'EUTB_758G_TABI_Argos_KIDS'
      model: 'TABI Argos Kids 758G'

# VEON
VEON:
  regex: 'VEON[_ ](C8680)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# FiGi (figi-mobile.com)
FiGi:
  regex: '(?:Note_(?:[37]|11)_Pro|Note_1C|Note_1_Lite|Nopal|[MGF]two)(?:[);/ ]|$)|Android 8(?:[\d.]*);(?: [\w-]+;)? Fj(?: Build|[;)])'
  device: 'smartphone'
  models:
    - regex: 'Nopal'
      model: 'Nopal'
    - regex: '([MGF])two'
      model: '$1two'
    - regex: ' Fj(?: Build|[;)])'
      model: 'Fj'
    - regex: 'Note_1C'
      model: 'Note 1C'
    - regex: 'Note_([37]|11)_Pro'
      device: 'phablet'
      model: 'Note $1 Pro'
    - regex: 'Note_(1)_Lite'
      device: 'phablet'
      model: 'Note $1 Lite'

# iSafe Mobile or i.safe (www.isafe-mobile.com)
iSafe Mobile:
  regex: '(?:IS655|IS[35]30)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(IS[35]30)'
      model: '$1'
    - regex: '(IS655)'
      model: '$1.RG'

# Tigers
Tigers:
  regex: 'TIS001[_-]|TIS_?001'
  device: 'smartphone'
  models:
    - regex: 'TIS001[_-]S([34])(?:[);/ ]|$)'
      model: 'TIS001 S$1'
    - regex: 'TIS001[_-]T2(?:[);/ ]|$)'
      model: 'TIS001 T2'
    - regex: 'TIS_?001([ABC])?'
      model: 'TIS001$1'

# Redfox (redfox.global)
Redfox:
  regex: '(?:Wizpad_)?Valuer_V8'
  device: 'tablet'
  models:
    - regex: '(?:Wizpad_)?Valuer_V8'
      model: 'Wizpad Valuer V8'

# Vinabox (vinabox.tv)
Vinabox:
  regex: 'Vinabox'
  device: 'tv'
  models:
    - regex: 'Vinabox[-_ ]X(\d*)[-_ ](2018)'
      model: 'X$1 ($2)'
    - regex: 'Vinabox[-_ ]X(\d*)[-_ ]?Plus'
      model: 'X$1 Plus'
    - regex: 'Vinabox[-_ ]([^/;)]+)(?: Build|[);])'
      model: '$1'

# Vios
Vios:
  regex: 'VMP0617'
  device: 'smartphone'
  models:
    - regex: 'VMP0617(?:[);/ ]|$)'
      model: 'VMP0617'

# Beista
Beista:
  regex: '(X104)-EEA(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# YOTOPT (www.yotopt.com)
YOTOPT:
  regex: '(Y103|Q11)[-_]EEA(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Ookee
Ookee:
  regex: 'OokeeOne'
  device: 'smartphone'
  model: 'One'

# TOSCIDO (www.toscido.com)
TOSCIDO:
  regex: '(?:(?:T1[235]|T151|T2[12])-EEA|W-?109)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(T1[235]|T151|T2[12])-EEA(?:[);/ ]|$)'
      model: '$1'
    - regex: 'W-?109(?:[);/ ]|$)'
      model: 'W109'

# b2m:
b2m:
  regex: 'Decade 53(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Decade 53'

# Koslam
Koslam:
  regex: '(KL1071Z|KL1084)'
  device: 'tablet'
  model: '$1'

# S2Tel
S2Tel:
  regex: 'S2TEL[ _-]'
  device: 'smartphone'
  models:
    - regex: 'S2TEL-(Q8)'
      device: 'tablet'
      model: '$1'

# Massgo
Massgo:
  regex: 'Massgo[ _]'
  device: 'smartphone'
  models:
    - regex: 'Massgo[ _]VI2S'
      model: 'Vi2 S'
    - regex: 'Massgo[ _]([^/;)]+)(?: Build|[);])'
      model: '$1'

# Angelcare
Angelcare:
  regex: 'angelcare[ _]'
  device: 'smartphone'
  models:
    - regex: 'F20 ?pro'
      model: 'F20 Pro'
    - regex: 'angelcare[ _]([^/;)]+)(?: Build|[);])'
      model: '$1'

# iPEGTOP
iPEGTOP:
  regex: 'IPEGTOP'
  device: 'smartphone'
  models:
    - regex: 'iPEGTOP[ _](Z26)'
      model: '$1'

# Jedi
Jedi:
  regex: 'Remix (?:Pro|Mini)'
  device: 'desktop'
  models:
    - regex: 'Remix Pro'
      device: 'tablet'
      model: 'Remix Pro'
    - regex: 'Remix Mini'
      model: 'Remix Mini'

# Technopc (en.technopc.com.tr)
Technopc:
  regex: '(?:UP10SI[34]6LA|UP918|UP7[67]8|UP1018|UP10_SH36LAG|Ultrapad_UP10\.S36LA)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(UP10SI[34]6LA|UP918|UP778|UP768|UP1018)'
      model: 'UltraPad $1'
    - regex: '(?:Ultrapad_)?UP10[_.](SH36LAG|S36LA)'
      model: 'UltraPad UP10$1'

# OMIX or OMIX Mobile (omixmobile.com)
OMIX:
  regex: 'OMIX[ _]|(?:X600 NFC)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'X600 NFC'
      model: 'X600 NFC'
    - regex: 'X(\d*)'
      model: 'X$1'

# Nexa
Nexa:
  regex: 'Nexa[ _](?:Atlas|Vega N1)'
  device: 'smartphone'
  models:
    - regex: 'Nexa[ _](Vega N1)'
      model: '$1'
    - regex: 'Nexa[ _](Atlas)'
      device: 'tablet'
      model: '$1'

# Onkyo (eu.onkyo.com)
Onkyo:
  regex: '(?:DP-CMX1|TA2C-M8)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(TA2C-M8)'
      device: 'tablet'
      model: '$1'
    - regex: '(DP-CMX1)'
      model: '$1'

# Royole (global.royole.com)
Royole:
  regex: 'Royole'
  device: 'tablet'
  models:
    - regex: 'FlexPai 2'
      model: 'FlexPai 2'
    - regex: 'FlexPai'
      model: 'FlexPai'

# DORLAND (dorland-tech.com/)
DORLAND:
  regex: '(Aloha_5G)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Hamlet (english.hamletcom.com)
Hamlet:
  regex: 'Hamlet[ _]|XZPAD412LTE'
  device: 'tablet'
  models:
    - regex: '(?:Hamlet[ _])?XZPAD(412W|412LTE)'
      model: 'Zelig Pad $1'

# Vorcom
Vorcom:
  regex: '(?:SXPro|S7-classic|SXPRO_classic)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'SXPRO_classic'
      model: 'SX Pro Classic'
    - regex: 'SXPro'
      model: 'SX Pro'
    - regex: 'S7-classic'
      model: 'S7 Classic'

# UNNO
UNNO:
  regex: 'UNNO[_ ]'
  device: 'smartphone'
  models:
    - regex: 'UNNO[_ ]([^/;)]+)(?: Build|[);])'
      model: '$1'

# VDVD
VDVD:
  regex: 'VDVD[_ ](P20|IX21)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Autan
Autan:
  regex: 'R2021W2(?:[);/ ]|$)'
  device: 'wearable'
  models:
    - regex: '(R2021W2)' # Shenzhen Le Dai Technology
      model: '$1'

# ecom Pepperl+Fuchs
ecom:
  regex: '(Smart-Ex02|Ex-Handy 10)(?: (?:ROW|RUS))?(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# LOKMAT
LOKMAT:
  regex: '(APPLLP Max|APPLLP2?)(?:[);/ ]|$)'
  device: 'wearable'
  model: '$1'

# Joy
Joy:
  regex: 'Joy (?:HH|JD)'
  device: 'smartphone'
  models:
    - regex: 'Joy[ _]([^/;)]+)(?: Build|[);])'
      model: '$1'

# iWaylink (https://www.imotiongroup.com/)
iWaylink:
  regex: '(?:MC401_GWL)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(MC401)_GWL'  # Mobile+Terminal
      device: 'peripheral'
      model: '$1'

# VOGA
VOGA:
  regex: 'VOGA[ _]'
  device: 'smartphone'
  models:
    - regex: 'VOGA 55909'
      model: 'V'

# Haipai
Haipai:
  regex: 'Haipai'
  device: 'smartphone'
  models:
    - regex: 'Haipai ?noble S6'
      model: 'Noble S6'

# OYSIN
OYSIN:
  regex: 'OYSIN[ _]([^/;)]+)(?: Build|[);])'
  device: 'smartphone'
  model: '$1'

# Leke
Leke:
  regex: 'Leke[ _]Pad-([^/;)]+)(?: Build|[);])'
  device: 'tablet'
  model: 'Pad-$1'

# ROADMAX
ROADMAX:
  regex: 'FORTIUS QUAD 7(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'Fortius Quad 7'
      model: 'Fortius Quad 7'

# BDsharing
BDsharing:
  regex: 'BDS2 Plus'
  device: 'smartphone'
  model: 'BDS2 Plus'

# Pelitt
Pelitt:
  regex: 'Pelitt[ _]'
  device: 'smartphone'
  models:
    - regex: 'Pelitt T1 MAX'
      model: 'T1 Max'
    - regex: 'Pelitt T1 PLUS'
      model: 'T1 Plus'

# Benesse
Benesse:
  regex: '(TAB-A03-(?:BR2|BS))(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Airtel
Airtel:
  regex: 'Airtel[ _]'
  model: 'smartphone'
  models:
    - regex: 'Airpad 7-s'
      device: 'tablet'
      model: 'AirPad 7S'

# MAXX
MAXX:
  regex: '(T1270G)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# TENPLUS
TENPLUS:
  regex: 'TENPLUS[_ ]([^/;)]+)(?: Build|[);])'
  device: 'tablet'
  model: '$1'

# HAOVM
HAOVM:
  regex: '(T2000)(?: Build|[);])'
  device: 'tablet'
  model: '$1'

# VUCATIMES
VUCATIMES:
  regex: 'VucaPad'
  device: 'tablet'
  models:
    - regex: 'VucaPad_(\w+)'
      model: '$1'

# Aoro (www.aoro.hk)
Aoro:
  regex: 'Aoro[ _]([^/;)]+)(?: Build|[);])'
  device: 'smartphone'
  model: '$1'

# EBEN
EBEN:
  regex: 'EBEN[ _]([^/;)]+)(?: Build|[);])'
  device: 'tablet'
  model: '$1'

# X-AGE or X-AGE Mobile
X-AGE:
  regex: 'G1LITE(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'G1 Lite'

# Zonko
Zonko:
  regex: 'K101_EEA(?:[);/ ]|$)'
  device: 'tablet'
  model: 'K101'

# TJC (www.tjc-jp.com)
TJC:
  regex: 'Metal_Tablet_10(?:[);/ ]|$)'
  device: 'tablet'
  model: 'Metal Tablet 10'

# HOTREALS
HOTREALS:
  regex: 'HOTREALS'
  device: 'tablet'
  models:
    - regex: 'HOTREALS(?:[);/]|$)'
      model: 'Tablet PC 10.1"'

# ZEEKER
Zeeker:
  regex: 'ZEEKER'
  device: 'smartphone'
  models:
    - regex: 'ZEEKER[ _]P10'
      model: 'P10'

# AUX
AUX:
  regex: 'AUX[ _]([^/;)]+)(?:_TD)'
  device: 'smartphone'
  model: '$1'

# Neolix
Neolix:
  regex: 'Neolix[ _-]'
  device: 'smartphone'
  models:
    - regex: 'Neolix[ _-]T7[_ ]'
      model: 'T7'
    - regex: 'Neolix[ _-]1-C-'
      model: '1C'
    - regex: 'Neolix[ _-]([^/;)]+)(?: Build|[);])'
      model: '$1'

# ATMAN
ATMAN:
  regex: 'ATMAN[ _-]([^/;)]+)(?: Build|[);])'
  device: 'smartphone'
  model: '$1'

# EYU
EYU:
  regex: 'EYU[ _-](T53|T7)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# FOODO
FOODO:
  regex: 'FOODO[ _-](X10)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# YEPEN
YEPEN:
  regex: 'M20201419(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'M20201419'
      model: 'X12 Pro Max'

# BROR
BROR:
  regex: 'BROR[_ ]([^/;)]+)(?: Build|[);])'
  device: 'smartphone'
  model: '$1'

# Vortex
Vortex:
  regex: '(SYNQ)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Xiaodu or Baidu Xiaodu
Xiaodu:
  regex: '(XDH-(?:0F-A1|1[78]-A1|21-A1|29-B1|2A-B1))(?:[);/ ]|$)'
  device: 'smart display'
  model: '$1'

# AXXA
AXXA:
  regex: 'AXXA[ _]'
  device: 'smartphone'
  models:
    - regex: 'AXXA[ _](S\d+)[ _]PLUS'
      model: '$1 Plus'
    - regex: 'AXXA[ _](S\d+)'
      model: '$1'

# AYYA
AYYA:
  regex: 'AYYA[ _](T1)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Future Mobile Technology
Future Mobile Technology:
  regex: '(FXT810R)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# MBI International
MBI:
  regex: 'MBI[_ ](R7)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# OUJIA
OUJIA:
  regex: 'OUJIA'
  device: 'smartphone'
  models:
    - regex: '2018-S10MAX'
      model: 'S10 Max'
    - regex: 'OUJIA(?:2018)?[-_ ]S20'
      model: 'S20'
    - regex: 'S27 PLUS'
      model: 'S27 Plus'
    - regex: 'OUJIA[ _](S10|S8|S11|T50|S2[79]|2019)(?:[);/ ]|$)'
      model: '$1'

# Qware
Qware:
  regex: 'QW[ _-]TB-\w+'
  device: 'tablet'
  models:
    - regex: 'TB-9718Q'
      model: 'Pro 5'
    - regex: 'TB-1380Q'
      model: 'Pro 4'
    - regex: 'TB-1317Q'
      model: 'Pro 3'
    - regex: 'TB-1517D'
      model: 'Tabby'
    - regex: 'QW[ _-](TB-\w+)'
      model: '$1'

# Listo
Listo:
  regex: 'Webpad[_ ]?(100[123]|7007)'
  device: 'tablet'
  model: 'WebPad $1'

# ECON
ECON:
  regex: '(EX-32HS016B)'
  device: 'tv'
  model: '$1'

# LNMBBS
LNMBBS:
  regex: '(H11)-EEA(?:[);/]|$)'
  device: 'tablet'
  model: '$1'

# SNAMI
SNAMI:
  regex: 'SNAMI[_ ]([^/;)]+)(?: Build|[);])'
  device: 'smartphone'
  model: '$1'

# TeachTouch (ttouch.ru)
TeachTouch:
  regex: 'TeachTouch[_ ]'
  device: 'peripheral'
  models:
    - regex: 'TeachTouch (Table)'
      model: '$1'

# Facetel
Facetel:
  regex: '(?:Q3_EEA|Q3pro)(?:[);/]|$)'
  device: 'tablet'
  models:
    - regex: 'Q3_EEA(?:[);/]|$)'
      model: 'Q3'
    - regex: 'Q3pro(?:[);/]|$)'
      model: 'Q3 Pro'

# HLLO or Exertis HLLO
HLLO:
  regex: '(SMB-H8009)(?:[);/]|$)'
  device: 'tablet'
  model: '$1'

# YUMKEM
YUMKEM:
  regex: '(L211|N10|U221)-EEA(?:[);/]|$)'
  device: 'tablet'
  model: '$1'

# TTK-TV (wwwttk.ru)
TTK-TV:
  regex: 'TTK Box 214'
  device: 'tv'
  model: 'SB-214'

# Famous or Famous Fones
Famous:
  regex: 'Famous|Red Royal Edition'
  device: 'smartphone'
  models:
    - regex: 'Red 5\+'
      model: 'Red 5 Plus'
    - regex: 'Red Royal Edition'
      model: 'Red Royal Edition'
    - regex: '5Plus'
      model: '5 Plus'
    - regex: 'Famous 5'
      model: '5'
    - regex: 'Famous[_ ]TAB[_ ]10'
      device: 'tablet'
      model: 'Tab 10'

# ZIK (zik.kz)
ZIK:
  regex: 'ZIK[_ ](W1027)(?:[);/]|$)'
  device: 'tablet'
  model: '$1'

# PlusStyle (plusstyle.jp)
PlusStyle:
  regex: 'PS_TAB_(WB01)(?:[);/]|$)'
  device: 'tablet'
  model: 'Tab $1'

# New Bridge
New Bridge:
  regex: '(NBTB10[12])(?:[);/]|$)'
  device: 'tablet'
  model: '$1'

# Intel (intel.com)
Intel:
  regex: 'NUC10i3FNH'
  device: 'desktop'
  models:
    - regex: 'NUC10i3FNH'
      model: 'NUC 10'

# infiniton (infiniton.es)
Infiniton:
  regex: 'INFINITON[_ -]|Earth 7.0''3G|EARTH10'
  device: 'smartphone'
  models:
    - regex: 'INFINITON[_ -]T5'
      model: 'T5'
    - regex: 'Earth 7.0''3G'
      device: 'tablet'
      model: 'Earth 7" 3G'
    - regex: 'EARTH10'
      device: 'tablet'
      model: 'Earth 10.1" 3G'

# Backcell
Backcell:
  regex: '(BK2021)(?:[);/]|$)'
  device: 'smartphone'
  model: '$1'

# PAPYRE
PAPYRE:
  regex: 'PAPYRE[_ ]'
  device: 'tablet'
  models:
    - regex: 'PAPYRE[_ ]pad_7.1'
      model: 'Pad 7.1"'

# I-INN
I-INN:
  regex: 'COMMUNICATOR[_ ]9.7[_ ]3G'
  device: 'tablet'
  model: 'Communicator 9.7" 3G'

# Emporia
Emporia:
  regex: 'emporia[_ ]([^/;)]+)(?: Build|[);])'
  device: 'smartphone'
  model: '$1'

# BLISS
BLISS:
  regex: '(BPM9727)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Entity
Entity:
  regex: 'ENT11QF12(?:[);/ ]|$)'
  device: 'tablet'
  model: 'ENT11QF12'

# Envizen
Envizen:
  regex: '(?:ClickTabDSh18)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'ClickTab DSH18'

# Denali
Denali:
  regex: '(DT0704K08|DT070[25]W08)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'E-Tab $1'

# DreamTab
DreamTab:
  regex: '(DRN-[78]09)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# DL
DL:
  regex: 'DL_Horizon_Selfie|Tablet_DL_\d{4}'
  device: 'smartphone'
  models:
    - regex: 'DL_Horizon_Selfie'
      model: 'Horizon Selfie'
    - regex: 'Tablet_DL_3910'
      device: 'tablet'
      model: 'iPlayer Kids'
    - regex: 'Tablet_DL_(\d{4})'
      device: 'tablet'
      model: '$1'

# DIGICOM
DIGICOM:
  regex: 'DIGICOM[_ ]'
  device: 'tablet'
  models:
    - regex: 'DIGICOM[_ ](A10_LTE)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'Digicom[_ ]DTOK'
      device: 'smartphone'
      model: 'DTok'

# InFone (nfone.co.th)
InFone:
  regex: '(?:INFONE (?:XE?)|GORILLA 9 PLUS|X_RAINBOW)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'GORILLA 9 PLUS'
      model: 'Gorilla 9 Plus'
    - regex: 'X_RAINBOW'
      model: 'X Rainbow'
    - regex: 'INFONE (XE?)(?:[);/ ]|$)'
      model: '$1'

# Redway
Redway:
  regex: '(?:Redway_7|redway7_pro|redway10_lite)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'redway10_lite'
      model: '10 Lite'
    - regex: 'redway7_pro'
      model: '7 Pro'
    - regex: 'Redway_7'
      model: '7'

# iNo Mobile or SGiNO (inomobile.com.sg)
iNo Mobile:
  regex: '(?:iNO SCOUT 2|SGINO6)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'iNO SCOUT 2'
      model: 'Scout 2'
    - regex: 'SGINO6'
      model: '6'


# iReplace
iReplace:
  regex: 'Frog ?One(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Frog One'

# GEOZON (geozon.ru)
GEOZON:
  regex: 'GEOZON[_ ]([^/;)]+)(?: Build|[);])'
  device: 'wearable'
  model: '$1'

# actiMirror (www.actimirror.com)
actiMirror:
  regex: 'Desk21T-03'
  device: 'peripheral'
  models:
    - regex: '(Desk21T-03)'  # smart mirror
      model: '$1'

# Raylandz
Raylandz:
  regex: 'XPOWER_P6000(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'XPOWER_P6000'
      model: 'XPower P6000'

# OTTO
OTTO:
  regex: 'OTTO (CR05)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Kenbo
Kenbo:
  regex: ' (O[76]1|E61Pro|O31 Plus)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'E61Pro'
      model: 'E61 Pro'
    - regex: 'O31 Plus'
      model: 'O31 Plus'
    - regex: '(O[76]1)(?:[);/ ]|$)'
      model: '$1'

# VALEM
VALEM:
  regex: 'PHANTOM_Z'
  device: 'tablet'
  model: 'Phantom Z'

# ENACOM
ENACOM:
  regex: '(PIXBA2019)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Yuno
Yuno:
  regex: 'YUNO\.|ULX-55UTCS3234|ULX-32TCS226|ULX-43UTCS347'
  device: 'tv'
  models:
    - regex: 'ULX-(\d{2}U?TCS\d{2,4})'
      model: 'ULX-$1'

# Handheld or Handheld Group or Handheld Wireless (https://www.handheldgroup.com/)
Handheld:
  regex: '(?:ALGIZ_RT8|NAUTIZ_X2)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(NAUTIZ_X2)(?:[);/ ]|$)'
      device: 'smartphone'
      model: '$1'
    - regex: '(ALGIZ_RT8)(?:[);/ ]|$)'
      model: '$1'

# HDC S.A (https://www.hdcsa.com.ar/)
HDC:
  regex: '(?:H10_ONE)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'H10_ONE'
      model: 'H10 One'

# Victurio
Victurio:
  regex: '(VI10[68]|VI86)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'TouchPad $1'

# MyMobile or My Mobile
MyMobile:
  regex: 'MY MOBILE (708)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Equator (http://equatormobilephones.com/)
Equator:
  regex: 'Axis(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Axis'

# Imose (https://imosemobile.com/)
Imose:
  regex: 'BAM-II'
  device: 'smartphone'
  model: 'BAM-II'

# OneClick
OneClick:
  regex: 'X-music II pro|X-music (?:S|Ⅲ|III)'
  device: 'smartphone'
  models:
    - regex: 'X-music II pro'
      model: 'X-Music II Pro'
    - regex: 'X-music (?:Ⅲ|III)'
      model: 'X-Music III'
    - regex: 'X-music (S)'
      model: 'X-Music $1'

# D-Tech (www.d-tech.dz)
D-Tech:
  regex: '(?:D5-L|DT07-TAB4G)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'DT07-TAB4G'
      device: 'tablet'
      model: 'DT07 Tab 4G'
    - regex: '(D5-L)(?:[);/ ]|$)'
      model: '$1'

# nJoy or Njoy
nJoy:
  regex: '(?:nJoy[_ ])?(Deimos 7|Kali_8|Turnus_8|Tityos_10|Arcas_7)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# iXTech
iXTech:
  regex: '(IX701)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Legend
Legend:
  regex: '(RST)_(B\d{4}HD)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1-$2'

# BlueSky
BlueSky:
  regex: 'BSS(45|50)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'BSS$1'

# Vue Micro
Vue Micro:
  regex: ' (81V)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Touch Plus or Touch+
Touch Plus:
  regex: ' (770[NG]|1100AS)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Elong Mobile or EL (www.elongmobile.com)
Elong Mobile:
  regex: ' (6CS)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# HexaByte
HexaByte:
  regex: '(?:HB_X7)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'X7'

# HiKing
HiKing:
  regex: 'HIKING[_ ]|(?:HK-MH501|Fun5)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'HIKING[_ ]([^/;)]+)(?: Build|[);])'
      model: '$1'
    - regex: 'HK-(MH501)'
      model: '$1'
    - regex: 'Fun5'
      model: 'Fun 5'

# Hytera
Hytera:
  regex: '(?:PTC760|PNC550)'
  device: 'smartphone'
  models:
    # radio station
    - regex: '(PTC760|PNC550)'
      device: 'peripheral'
      model: '$1'

# PIRANHA (piranha.com.tr)
PIRANHA:
  regex: 'PIRANHA[_ ]|(?:Ultra 4 Tab 9.0|Ultra 5 Tab White)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'Pro II Tab 7.0'
      model: 'Pro II'
    - regex: 'Ultra 4 Tab 9.0'
      model: 'Ultra 4'
    - regex: 'Ultra 5 Tab White'
      model: 'Ultra 5'

# CipherLab (www.cipherlab.com)
CipherLab:
  regex: '(RK25WO|RK[29]5|RS35)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# BrandCode (brandcode.co.id)
BrandCode:
  regex: '(?:L1f-pluss|Brandcode B6S)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'L1f-pluss'
      model: 'L1f Plus'
    - regex: 'Brandcode B6S'
      model: 'B6S'

# Lumitel
Lumitel:
  regex: '(L950[23])(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Mango
Mango:
  regex: 'Mango[_ ](S5|SQ7)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# NTT West (www.ntt-west.co.jp)
NTT West:
  regex: 'HB-(2000)(?:[);/ ]|$)'
  device: 'tv'
  model: 'HikariBox+ $1'

# JREN
JREN:
  regex: '(JR-J71)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Wanmukang (www.wanmuk.com)
Wanmukang:
  regex: '(?:ZC-339)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(ZC-339)'
      device: 'desktop'
      model: '$1'

# Tibuta
Tibuta:
  regex: 'Tibuta[_ ]'
  device: 'tablet'
  models:
    - regex: 'Tibuta[_ ]MasterPad-(E100)'
      model: 'MasterPad $1'

# ATOL (www.atol.ru)
ATOL:
  regex: '(?:ATOL (?:150F)|Smart_(?:Prime|SLIM_Plus))(?:[);/ ]|$)'
  device: 'peripheral'
  models:
    - regex: 'Smart_Prime'
      model: 'Smart Prime'
    - regex: 'Smart_Slim_plus'
      model: 'Smart Slim Plus'
    - regex: 'ATOL (150F)'
      model: '$1'

# FILIX or Filih
FILIX:
  regex: '(?:FX4423)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Ultra M FX4423'

# Odotpad or DotPad
Odotpad:
  regex: '(?:FIRE_V7|POMELO-MAX\+)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'FIRE_V7'
      model: 'Dragon Fruit Fire V7'
    - regex: 'POMELO-MAX\+'
      model: 'Pomelo Max+'

# Orbsmart (www.orbsmart.de)
Orbsmart:
  regex: 'Orbsmart[_ ]'
  device: 'tv'
  models:
    - regex: 'Orbsmart[_ ]([^/;)]+)(?: Build|[);])'
      model: '$1'

# TOX (trustonx.com)
TOX:
  regex: 'TOX1'
  device: 'tv'
  model: '1'

# Topsion
Topsion:
  regex: 'TOPSION|TP01_box(?:[);/ ]|$)'
  device: 'tv'
  model: 'TP01'

# Ceibal (www.ceibal.edu.uy)
Ceibal:
  regex: '(?:ACRUX|BELLATRIX|BETELGEUSE|Kil-82WFDC)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'ACRUX'
      model: 'Ácrux'
    - regex: 'BELLATRIX'
      model: 'Bellatrix'
    - regex: 'BETELGEUSE'
      model: 'Betelgeuse'
    - regex: 'Kil-82WFDC'
      model: 'Kiland T8'

# Wecool
Wecool:
  regex: '(WM1001)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Weelikeit
Weelikeit:
  regex: '(C81W)_EEA(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# M3 Mobile (www.m3mobile.net)
M3 Mobile:
  regex: 'M3US20W(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'M3US20W'
      device: 'peripheral'
      model: 'US20 W'

# Hugerock
Hugerock:
  regex: 'T101_2021(?:[);/ ]|$)'
  device: 'tablet'
  model: 'T101 (2021)'

# Geanee (geanee.jp or www.jenesis.jp)
Geanee:
  regex: '(JT08-X1|JT10-90|JT10-81B|JT10-X)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# TOPDON (topdon.com)
TOPDON:
  regex: '(ArtiDiag800 BT)(?:[);/ ]|$)'
  device: 'peripheral'
  model: '$1'

# Coopers
Coopers:
  regex: '(CP20)(?:_EEA)?(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Lovme
Lovme:
  regex: 'Lovme[-_ ]([^/;)]+)(?: Build|[);])'
  device: 'smartphone'
  model: '$1'

# Stream or Stream System
Stream:
  regex: '(B3 (?:Maxi|Simply)|B3Pro|Android 8(?:[\d.]*);(?: [\w-]+;)? B1s)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(B3 (?:Maxi|Simply)|B1s)(?:[);/ ]|$)'
      model: '$1'
    - regex: 'B3Pro(?:[);/ ]|$)'
      model: 'B3 Pro'

# DASS
DASS:
  regex: 'DASS[-_ ](H-ONE)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Redbean
Redbean:
  regex: '(i-Jupiter)(?: Build|[);])'
  device: 'smartphone'
  model: '$1'

# ENIE
ENIE:
  regex: '(?:8.*; E4Pro)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'E4 Pro'

# Dcode (dcode.com.pk)
Dcode:
  regex: 'DS-(?:BD1|CR1)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'DS-CR1'
      model: 'Cypher'
    - regex: 'DS-BD1'
      model: 'Bold'

# Pritom
Pritom:
  regex: 'Pritom_|(?:Android 1[01];(?: [\w-]+;)? (?:M10_Lite|M10_(?:PLUS|Air)(?:_EEA)?)|P7PRO)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'M10_Lite'
      model: 'M10 Lite'
    - regex: 'M10_Air'
      model: 'M10 Air'
    - regex: 'M10_PLUS'
      model: 'M10 Plus'
    - regex: 'Pritom[_ ]M10'
      model: 'M10'
    - regex: 'P7PRO'
      model: 'TronPad P7 Pro'

# Unblock Tech
Unblock Tech:
  regex: '(?:S900PROBT|S900_Pro)(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'S900PROBT'
      model: 'S900 Pro BT'
    - regex: 'S900_Pro'
      model: 'S900 Pro'

# Chainway (www.chainway.net)
Chainway:
  regex: ' (?:C66)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: ' (C66)'
      model: '$1'

# Harper
Harper:
  regex: '(ABX-332|ABX-[12]10)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Venstar
Venstar:
  regex: '(ACE10)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Nothing Phone
Nothing Phone:
  regex: '(?:A063)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '1'

# Gazer (gazer.com)
Gazer:
  regex: 'Gazer_TV'
  device: 'tv'
  model: ''

# WIZARPOS (www.wizarpos.com)
WizarPos:
  regex: 'WIZARPOS[ _]([^/;)]+)(?: Build|[);])'
  device: 'peripheral'
  model: '$1'

# Optoma (optoma.ru)
Optoma:
  regex: 'Optoma[-_ ]'
  device: 'peripheral'
  models:
    - regex: 'Optoma-UHD'
      model: 'UHD55'

# Zinox (zinoxtechnologies.com)
Zinox:
  regex: 'KidsLegacyTabPro|Zpad-X8-PRO'
  device: 'tablet'
  models:
    - regex: 'KidsLegacyTabPro'
      model: 'Kids Legacy Tab Pro'
    - regex: 'Zpad-X8-PRO'
      model: 'Zpad X8 Pro'

# YUNDOO
YUNDOO:
  regex: 'YUNDOO[ _-]([^/;)]+)(?: Build|[);])'
  device: 'tv'
  model: '$1'

# Billow Technology
Billow:
  regex: '(MD09TV)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Dany
Dany:
  regex: '(?:Signature-S8|Monster 4GXX)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(Signature-S8)'
      model: '$1'
    - regex: 'Monster 4GXX'
      model: 'Monster 4G'

# DreamStar
DreamStar:
  regex: 'DREAMSTAR([^/;)]+)(?: Build|[);])'
  device: 'tv'
  model: '$1'

# Ollee
Ollee:
  regex: 'Ollee008twoa(?:[);/ ]|$)'
  device: 'tablet'
  model: '008 TwoA'

# Dtac
Dtac:
  regex: 'Dtac[_ ]?Phone[_ ]?([^/;)]+)(?: Build|[);])'
  device: 'smartphone'
  model: 'Phone $1'

# NINETEC (www.ninetec.de)
NINETEC:
  regex: 'NINETEC'
  device: 'tablet'
  models:
    - regex: 'UltraTab 10 Pro'
      model: 'UltraTab 10 Pro'
    - regex: 'Platinum 10 G3'
      model: 'Platinum 10 G3'

# NASCO
NASCO:
  regex: '(?:NASCO (?:TANGO 7)|SNAP_PRO)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: 'TANGO 7'
      model: 'Tango 7'
    - regex: 'SNAP_PRO'
      model: 'Snap Pro'

# Elecson
Elecson:
  regex: 'Meeplus_1(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'MeePlus One'

# NEXT
NEXT:
  regex: '(Discovery_XT)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# iMuz (shop.imuz.com)
iMuz:
  regex: '(?:Revolution A8|muPAD[_ ][KT]10|muPAD104|muPADT7|muPAD 7S)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(Revolution A8|muPAD[_ ][KT]10)'
      model: '$1'
    - regex: 'muPAD[ _]?(104|T7|7S)'
      model: 'muPAD $1'

# ECOO
ECOO:
  regex: 'ECOO[ _]E0[45]'
  device: 'smartphone'
  models:
    - regex: 'ECOO[ _]E04[ _]3GB\+|Ecoo E04_PLUS'
      model: 'Aurora Plus'
    - regex: 'ECOO[ _]E04[ _]3GB'
      model: 'Aurora'
    - regex: 'ECOO[ _](E0[45])'
      model: '$1'


# Dom.ru
Dom.ru:
  regex: '(Movix Pro(?: Voice)?)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Carbon Mobile (www.carbonmobile.com)
Carbon Mobile:
  regex: 'Carbon 1 Mark II'
  device: 'smartphone'
  model: 'One Mark II'

# Chili Green (chiligreen.com)
ChiliGreen:
  regex: 'E-Board[ -]MX05[45]'
  model: 'tablet'
  models:
    - regex: 'E-Board[ -](MX05[45])'
      model: 'E-Board $1'

# D-Link
D-Link:
  regex: '(DTB-7168G)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Scosmos (scosmosphone.com)
Scosmos:
  regex: '(Pi 5\.5L)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# QFX USA (store.qfxusa.com)
QFX:
  regex: '(TLW-100[BG]?)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Dinax
Dinax:
  regex: 'DX_TA_?(7001|SL83)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'DX TA $1'

# EFT Group (eft-survey.ru)
EFT:
  regex: 'EFT_(H2)(?:[);/ ]|$)'
  device: 'peripheral'
  model: '$1'

# Youin
Youin:
  regex: 'YOU-BOX(?:[);/ ]|$)'
  device: 'tv'
  models:
    - regex: 'YOU-BOX(?:[);/ ]|$)'
      model: 'You-Box'

# Youwei
Youwei:
  regex: 'Youwei[ _]'
  device: 'tv'
  models:
    - regex: 'youwei[ _]mini5G(?:[);/ ]|$)'
      model: 'Mini 5G'

# Yooz
Yooz:
  regex: 'YPAD(P70[12])(?:[);/ ]|$)'
  device: 'tablet'
  model: 'MyPad $1'

# VIDA Mobile (vida-mobile.com)
VIDA:
  regex: 'VIDA[-_ ](?:i-?([45]01|512|450)|V401)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'VIDA[-_ ](?:i-?(\d+))'
      model: 'i$1'
    - regex: 'VIDA[-_ ](V401)'
      model: '$1'

# iMI
iMI:
  regex: '(?:Vin 5|Vin3 S|Vin3(?: Lite)?|Messi No\.1|Messi 3)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Vin3 S'
      model: 'Vin 3 S'
    - regex: 'Vin3 Lite'
      model: 'Vin 3 Lite'
    - regex: 'Vin ?(3|5)'
      model: 'Vin $1'
    - regex: 'Messi (No\.1|3)'
      model: 'Messi $1'

# Marshal
Marshal:
  regex: 'Marshal[_ -]?ME'
  device: 'smartphone'
  models:
    - regex: 'Marshal[_ -]?ME-(700A|720|617)'
      device: 'tablet'
      model: 'ME-$1'
    - regex: 'Marshal[_ -]?ME-(34[78]|352|36[456])'
      model: 'ME-$1'

# V-HOME
V-HOME:
  regex: '(32LH1210)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# V-HOPE
V-HOPE:
  regex: 'V[- ]hope[_ ]([^/;)]+)(?: Build|[);])'
  device: 'smartphone'
  model: '$1'

# BuzzTV (buzztv.com)
BuzzTV:
  regex: '(XR4500)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Avaya (avaya.com)
Avaya:
  regex: 'Avaya Vantage(?:[);/ ]|$)'
  device: 'peripheral'
  model: 'Vantage K175'

# PINE (pine64.org)
PINE:
  regex: 'PINE ([^/;)]+)(?: Build|[);])'
  device: 'peripheral'
  model: '$1'

# Duubee (www.duubee.com)
Duubee:
  regex: 'Duubee[ _]([^/;)]+)(?: Build|[);])'
  device: 'smartphone'
  model: '$1'

# Blackpcs (blackpcs.com)
Blackpcs:
  regex: '(EO104K)[-_]BL(?:[);/ ]|$)'
  device: 'tv'
  model: '$1-BL'

# GoldMaster
GoldMaster:
  regex: 'BENGAL_6(?:[);/ ]|$)'
  device: 'tablet'
  model: 'Bengal 6'

# Facime
Facime:
  regex: 'FLEET_7(?:[);/ ]|$)'
  device: 'tablet'
  model: 'Fleet 7'

# FPT or FPT Trading
FPT:
  regex: 'FPT[_ ](X1[05]|X[39]|X50|S68 4G)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# iNavi (www.inavi.com)
iNavi:
  regex: '(ITP-XD80L)(?: Build|[);])'
  device: 'tablet'
  models:
    - regex: 'ITP-XD80L'
      model: 'U+ Pad8'

# 10moons (eng.10moons.com)
10moons:
  regex: '10moons[_ ]([^/;)]+)(?: Build|[);])'
  device: 'tv'
  model: '$1'

# Soda
Soda:
  regex: 'soda (?:S2|[SE]1|FIRE)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'soda FIRE'
      model: 'Fire'
    - regex: 'soda (S2|[SE]1)'
      model: '$1'

# Rizzen (ruggedsa.co.za)
Rizzen:
  regex: '(NovaTab_R10)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Figgers (www.figgers.com)
Figgers:
  regex: 'Figgers'
  device: 'smartphone'
  models:
    - regex: 'Figgers[_ ](F3|DragonX)'
      model: '$1'

# DRAGON
DRAGON:
  regex: 'DRAGON[_ ](OTT)'
  device: 'tv'
  model: '$1'

# Skyline (skylinetv.ru)
Skyline:
  regex: '(?:SKYLINE[_ ])?(32YST5970|50UST5970)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Hiberg (hiberg.ru)
Hiberg:
  regex: '(32Y_STV-R)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Hartens
Hartens:
  regex: '(HTY-\d{2}\w+-(?:S2|HC22)|HTY-32HDR06G)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# AMA
AMA:
  regex: 'AMA[ _](A703)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Xcruiser
Xcruiser:
  regex: '(XDSR785HDR_AVANT)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Revomovil
Revomovil:
  regex: '(?:S6523(?:[ _]RU)?)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'S6523'
      model: 'S21'

# OSCAL (www.oscal.hk)
OSCAL:
  regex: '(?:S60Pro)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'S60Pro'
      model: 'S60 Pro'

# UE or United Education (www.ue.cn)
UE:
  regex: 'UE Pad 1'
  device: 'tablet'
  model: 'Pad 1'

# Hykker (www.hykker.com)
Hykker:
  regex: 'Hykker_MyTab10'
  device: 'tablet'
  model: 'MyTab10'

# Fluo
Fluo:
  regex: 'S554020(?:[);/ ]|$)'
  device: 'tablet'
  model: 'L'

# Quatro
Quatro:
  regex: 'Quatro (8|10|FSM1453)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# White Mobile
White Mobile:
  regex: 'AM1010V(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'AM1010V'
      model: 'Omega Lite 3'

# ALLINmobile Or Allin Mobile
ALLINmobile:
  regex: 'ALLINmobile_ARENA(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Arena'

# PRIME (prime-phone.com)
PRIME:
  regex: 'PRIME (O8)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# TETC
TETC:
  regex: 'TETC[ -](F\d)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Vizmo
Vizmo:
  regex: 'VIZ(?:101|070)TAB[78]11'
  device: 'tablet'
  models:
    - regex: 'VIZ070TAB(\d{3})'
      model: 'TAB $1 7"'
    - regex: 'VIZ101TAB(\d{3})'
      model: 'TAB $1 10.1"'

# Uniden
Uniden:
  regex: 'Uniden[ _](C505)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# FoxxD
FoxxD:
  regex: '(L590A)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# KZG (Ke Zhi Guang)
KZG:
  regex: 'KZG[_ ](Scope)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# iYou
iYou:
  regex: 'iYOU[_ ](M1)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Master-G
Master-G:
  regex: 'NEOQC4G(?:[);/ ]|$)'
  device: 'tablet'
  model: 'GPad Neo QC 4G'

# Sewoo post terminals
Sewoo:
  regex: '(NBP-60)(?:[);/ ]|$)'
  device: 'peripheral'
  model: '$1'

# Switel
Switel:
  regex: 'eSmart[_ ]([EM]2|M3)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'eSmart $1'

# Farassoo
Farassoo:
  regex: '(FAST81[08])(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Xwave
Xwave:
  regex: 'Xpad_(M9_3G)'
  device: 'tablet'
  model: 'xPad $1'# Xwave

# DEALDIG
DEALDIG:
  regex: '(BOXD7)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# TecToy (www.tectoy.com.br)
TecToy:
  regex: 'TECTOY_5029Y(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'ON 128GB'

# MygPad
MygPad:
  regex: 'MygPad[_ ]([^/;)]+)(?: Build|[);])'
  device: 'tablet'
  model: '$1'

# Mobell (mobell.vn)
Mobell:
  regex: '(?:Mobell[ _](?:S50)|NOVA P3)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'Mobell[ _](S50)'
      model: '$1'
    - regex: 'NOVA P3'
      model: 'Nova P3'

# Smartex
Smartex:
  regex: '(?:Android 7(?:[\d.]*);(?: [\w-]+;)? M512)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(M512)(?:[);/ ]|$)'
      model: '$1'

# Citycall
Citycall:
  regex: '(Life X6)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Maxfone (www.maxfone.cc)
Maxfone:
  regex: '(Max80 Plus)(?: Build|[);])'
  device: 'smartphone'
  model: '$1'

# Fxtec (www.fxtec.com)
Fxtec:
  regex: 'QX1000(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Pro1 X'

# Netmak (netmak.ar)
Netmak:
  regex: 'NM-NETPAD7(?:[);/ ]|$)'
  device: 'tablet'
  model: 'NetPad 7'

# VIVIMAGE
VIVIMAGE:
  regex: 'VIVIMAGE[ _]([^/;)]+)(?:_EEA)?(?: Build|[);])'
  device: 'tablet'
  model: '$1'

# X-Mobile (xmobile.ne.jp)
X-Mobile:
  regex: '(?:XM-SW1)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Smart WiFi'

# JOYSURF
JoySurf:
  regex: '(?:TB-JS101A)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'JS10'

# DEYI
DEYI:
  regex: 'DEYI-?(10M18)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Khadas (www.khadas.com)
Khadas:
  regex: ' (VIM2)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Sunmax or sunmax mobile (sunmaxmobile.com)
Sunmax:
  regex: '(Model Y)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Kapsys (kapsys.com)
Kapsys:
  regex: '(SmartVision3)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# YELLYOUTH
YELLYOUTH:
  regex: '(YY-\d{3}[a-z]?)'
  device: 'tablet'
  model: '$1'

# SSKY
SSKY:
  regex: '(Y777_Fire)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# XCOM
XCOM:
  regex: 'XCOM[ _](?:X520|ISMART)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'XCOM[ _](X520)'
      model: '$1'
    - regex: 'XCOM[ _]ISMART'
      model: 'iSmart'

# Winstar
Winstar:
  regex: 'Winstar S-?5'
  device: 'smartphone'
  models:
    - regex: 'Winstar S-?5'
      model: 'S5'

# Waltter
Waltter:
  regex: 'Waltter NEO 10\.1'
  device: 'tablet'
  model: 'Neo 10.1"'

# LPX-G
LPX-G:
  regex: 'LPX-G BOX'
  device: 'tv'
  models:
    - regex: 'LPX-G Box Max'
      model: 'Box Max'

# VALTECH
VALTECH:
  regex: 'TAB7Q804VAL'
  device: 'tablet'
  model: 'TAB-7Q804VAL'

# Sankey
Sankey:
  regex: 'TAB7A3G05'
  device: 'tablet'
  model: 'TAB-7A3G05'

# GIRASOLE
GIRASOLE:
  regex: '(?:Android 8(?:[\d.]*);(?: [\w-]+;)? TAB5)(?: Build|[;)])'
  device: 'tablet'
  model: 'TAB5'

# MOVISUN
MOVISUN:
  regex: '(TAB-S1)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Samtech
Samtech:
  regex: '(T3G_04)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# MwalimuPlus (www.mwalimuplus.com)
MwalimuPlus:
  regex: '(MP01A3G)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# OLTO (olto.su)
OLTO:
 regex: 'OLTO-(43ST20U)(?:[);/ ]|$)'
 device: 'tv'
 model: '$1'

# DSIC
DSIC:
  regex: '(RD86QE)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Mascom
Mascom:
  regex: 'Mascom (S750)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Vormor
Vormor:
  regex: 'VORMOR-X5-pro(?:[);/ ]|$)'
  device: 'peripheral'
  model: 'X5 Pro'

# SOSH
SOSH:
  regex: 'SoshPhone'
  device: 'smartphone'
  model: 'SoshPhone'

# Oangcc
Oangcc:
  regex: '(Tab_A6)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Everex
Everex:
  regex: 'Fine 7B(?:[);/ ]|$)'
  device: 'tablet'
  model: 'Fine 7B'

# Guophone
Guophone:
  regex: '(XP9800)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Unitech (ute.com)
Unitech:
  regex: '(EA630)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# GTMEDIA
GTMEDIA:
  regex: '(GTCOMBO)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# Energy Sistem
'Energy Sistem':
  regex: 'ENERGY[ _-]?([^;/)]+)(?: Build|[;)])'
  device: 'smartphone'
  models:
    - regex: 'Energy Phone ([^;/)]+)(?: Build|[;)])'
      model: 'Energy Phone $1'
    - regex: 'Energy Tablet ([^;/)]+)(?: Build|[;)])'
      device: 'tablet'
      model: 'Energy Tablet $1'
    - regex: ' ENERGY i10 DUAL'
      device: 'tablet'
      model: 'i10 Dual'
    - regex: 'ENERGY[ _-]?([^;/]+) Build'
      device: 'tablet'
      model: '$1'

# WANSA
WANSA:
  regex: '(WUD55H7762SN|WUD55G7762S)(?:[);/ ]|$)'
  device: 'tv'
  model: '$1'

# XElectron
XElectron:
  regex: '(V1277)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# ViBox
ViBox:
  regex: 'ViBox[ _](V[25])[_ ]Pro(?:[);/ ]|$)'
  device: 'tv'
  model: '$1 Pro'

# BMXC
BMXC:
  regex: '(?:BMXC[_ ]?(?:80[01])| M863(?:-EEA)?)(?:[);/ ]|$)'
  device: 'tablet'
  models:
    - regex: '(M863)'
      model: '$1'
    - regex: 'BMXC[_ ]?(80[01])'
      model: '$1'

# V-Gen
V-Gen:
  regex: '(Albatros C2)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Nedaphone
Nedaphone:
  regex: 'NEDAPHONE[ _](V9)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Beafon (https://beafon.com/)
Beafon:
  regex: '(?:Class_C250|TW10)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: '(TW10)'
      device: 'tablet'
      model: 'Tab Lite $1'
    - regex: '(Class_C250)'
      model: '$1'

# RelNAT or RelNAT Mobile
RelNAT:
  regex: 'RelNAT[_ ](Premier)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# TeloSystems or TELO
TeloSystems:
  regex: 'TELO[_ ](TE6)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Frunsi
Frunsi:
  regex: '(RubensTab_T11)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# MIWANG
MIWANG:
  regex: 'MIWANG[_ ](M2s)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# HeadWolf (headwolf.net)
HeadWolf:
  regex: 'Hpad([12])(?:[);/ ]|$)'
  device: 'tablet'
  model: 'HPad$1'

# Zamolxe
Zamolxe:
  regex: '(ZXT-10HL323S|ZXT-10FL323G-PRO)'
  device: 'tablet'
  model: '$1'

# REGAL
REGAL:
  regex: 'Regal (TAB 10\.1)'
  device: 'tablet'
  model: '$1'

# Great Asia or GreatAsia (www.sz-tabletpc.com)
Great Asia:
  regex: '(E101GCM)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# PC Smart
PC Smart:
  regex: 'QUICKTAB PLUS'
  device: 'tablet'
  model: 'QuickTab Plus'

# Ephone
Ephone:
  regex: '(?:EP19_star|EP19)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'EP19_star'
      model: 'EP19 Star'
    - regex: 'EP19'
      model: 'EP19'

# SYH or SYH Mobile
SYH:
  regex: 'Young (Y56|Y36\+|Y[35]5|Y51\+)(?:[);/ ]|$)'
  device: 'smartphone'
  model: 'Young $1'

# YunSong
YunSong:
  regex: '(?:YS[78]pro|YS6 Pro)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'YS([678]) ?pro'
      model: 'YS$1 Pro'

# iRobot or I.Robot
iRobot:
  regex: '(PALADIN EVO)'
  device: 'tablet'
  model: '$1'

# BRAVE
BRAVE:
  regex: '(BT7X1)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Attila
Attila:
  regex: '(Magic_1)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Roam Cat or RoamCat
Roam Cat:
  regex: 'ROAM[_ ]CAT[ _](M8)'
  device: 'smartphone'
  model: '$1'

# DIMO
DIMO:
  regex: '(8800i)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# NuVision
NuVision:
  regex: '(TM800A620M|TM101A620M)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# SANY
SANY:
  regex: 'SANY V8'
  device: 'smartphone'
  models:
    - regex: 'SANY V8 Pro'
      model: 'V8 Pro'
    - regex: 'SANY V8'
      model: 'V8'

# Bookeen
Bookeen:
  regex: '(Cybook)[ -]Tablet(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# Pano
Pano:
  regex: '(Boom P1)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# Bluslate or Blu Slate
BluSlate:
  regex: 'BLUSLATE([67])(?:[);/ ]|$)'
  device: 'tablet'
  model: 'Educational Tablet $1'

# Lectrus
Lectrus:
  regex: 'LECT-TAB(1011|0711)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'LECT-TAB$1'

# LeBest
LeBest:
  regex: 'LeBest[_ ](L9)(?:[);/ ]|$)'
  device: 'smartphone'
  model: '$1'

# BenWee
BenWee:
  regex: 'BenWee[ _-]?(?:[^;/)]+)(?: Build|[;)])'
  device: 'smartphone'
  models:
    - regex: 'BenWee W5 ?pro'
      model: 'W5 Pro'
    - regex: 'BenWee[ _-]?([^;/)]+)(?: Build|[;)])'
      model: '$1'

# FFF or FFF Smart Life Connected (www.fff-no1.co.jp)
FFF SmartLife:
  regex: '(?:FFFTAB10a4)(?:[);/ ]|$)'
  device: 'tablet'
  model: 'TAB-10A4'

# Versus
Versus:
  regex: '(V-Pad Pop)(?:[);/ ]|$)'
  device: 'tablet'
  model: '$1'

# NGPon
NGpon:
   regex: 'Android 4(?:[\d.]*);(?: [\w-]+;)? (3188HD)(?: Build|[;)])'
   device: 'tv'
   model: '$1'

# Rupa
Rupa:
   regex: 'Pyramid A5X'
   device: 'tv'
   model: 'Pyramid A5X'

# Devices with undectable brand, but detectable model
Unknown:
  regex: 'Plasma Mobile|WebTV/(\d+\.\d+)|TV Bro|(?:M10 Ultra|FO-R15|TVBOX|Smart[ _]?TV|SmartATV|M8S\+ 4K|PCBox|rk(?:3128|322x|3368)(?:[_-]box)?|H10 PLAY|Smart AIO TV|TVBOX_L|L-BOX|TVBOX-5G|mips.+(?:Opera TV|wireless|wired)|smartbox|TV BOX|I12Pro Max|(?:audi_)?ks1280x480|AT&T TV|RealtekATV|AOSP on r33a0|hx322x_box)(?:[);/ ]|$)'
  device: 'smartphone'
  models:
    - regex: 'WebTV/(\d+\.\d+)'
      device: 'tv'
      model: 'Web TV'
    - regex: 'M10 Ultra(?:[);/ ]|$)'
      device: 'phablet'
      model: 'M10 Ultra' # clone xiaomi m10 ultra
    - regex: 'FO-R15(?:[);/ ]|$)'
      device: 'tv'
      model: 'FO-R15'
    - regex: '(Smart[ _]?TV|SmartATV|PCBox|hx322x_box|rk(?:3128|322x|3368)(?:[_-]box)?|TVBOX|Smart AIO TV|TVBOX_L|L-BOX|TVBOX-5G|AT&T TV|RealtekATV|TV Bro|AOSP on r33a0)(?:[);/ ]|$)'
      device: 'tv'
      model: ''
    - regex: 'M8S\+ 4K(?:[);/ ]|$)'
      device: 'tv'
      model: 'M8S+ 4K'
    - regex: 'H10 PLAY(?:[);/ ]|$)'
      device: 'tv'
      model: 'H10 Play'
    - regex: '(?:Opera TV|wireless|wired|smartbox|TV BOX)(?:[);/ ]|$)'
      device: 'tv'
      model: ''
    - regex: 'I12Pro Max(?:[);/ ]|$)'
      model: 'i12 Pro Max'
    - regex: '(?:audi_)?ks1280x480'
      device: 'car browser'
      model: 'Audi KS'
