device_detector 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/regexes/oss.yml CHANGED
@@ -5,6 +5,263 @@
5
5
  # @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
6
6
  ###############
7
7
 
8
+ ##########
9
+ # WoPhone
10
+ ##########
11
+ - regex: 'WoPhone(?:/(\d+[\.\d]+))?'
12
+ name: 'WoPhone'
13
+ version: '$1'
14
+
15
+ ##########
16
+ # KIN OS (https://en.wikipedia.org/wiki/Microsoft_Kin)
17
+ ##########
18
+ - regex: 'KIN\.(?:One|Two) (\d+[\.\d]+)'
19
+ name: 'KIN OS'
20
+ version: '$1'
21
+
22
+ ##########
23
+ # Star-Blade OS
24
+ ##########
25
+ - regex: 'Star-Blade OS'
26
+ name: 'Star-Blade OS'
27
+ version: ''
28
+
29
+ ##########
30
+ # Qtopia (https://en.wikipedia.org/wiki/Qt_Extended)
31
+ ##########
32
+ - regex: 'Qtopia/(\d+[\.\d]+)'
33
+ name: 'Qtopia'
34
+ version: '$1'
35
+
36
+ ##########
37
+ # OpenVMS (https://vmssoftware.com/)
38
+ ##########
39
+ - regex: 'OpenVMS V(\d+[\.\d]+)'
40
+ name: 'OpenVMS'
41
+ version: '$1'
42
+
43
+ ##########
44
+ # AROS (https://aros.sourceforge.io/)
45
+ ##########
46
+ - regex: 'AROS'
47
+ name: 'AROS'
48
+ version: ''
49
+
50
+ ##########
51
+ # NeXTSTEP
52
+ ##########
53
+ - regex: '\(NEXT\)'
54
+ name: 'NeXTSTEP'
55
+ version: ''
56
+
57
+ ##########
58
+ # NEWS-OS (https://en.wikipedia.org/wiki/Sony_NEWS)
59
+ ##########
60
+ - regex: 'NEWS-OS (\d+[\.\d]+)'
61
+ name: 'NEWS-OS'
62
+ version: '$1'
63
+
64
+ ##########
65
+ # ULTRIX (https://en.wikipedia.org/wiki/Ultrix)
66
+ ##########
67
+ - regex: 'ULTRIX (\d+[\.\d]+)'
68
+ name: 'ULTRIX'
69
+ version: '$1'
70
+
71
+ ##########
72
+ # Turbolinux (http://www.turbolinux.com/)
73
+ ##########
74
+ - regex: 'Turbolinux/(\d+[\.\d]+)'
75
+ name: 'Turbolinux'
76
+ version: '$1'
77
+
78
+ ##########
79
+ # Joli OS (https://www.jolicloud.com/products/)
80
+ ##########
81
+ - regex: 'Joli OS/(\d+[\.\d]+)'
82
+ name: 'Joli OS'
83
+ version: '$1'
84
+
85
+ ##########
86
+ # GENIX
87
+ ##########
88
+ - regex: 'GENIX (\d+[\.\d]+)'
89
+ name: 'GENIX'
90
+ version: '$1'
91
+
92
+ ##########
93
+ # gNewSense (http://www.gnewsense.org)
94
+ ##########
95
+ - regex: 'gNewSense/.*\((\d+[\.\d]+)'
96
+ name: 'gNewSense'
97
+ version: '$1'
98
+
99
+ ##########
100
+ # GEOS
101
+ ##########
102
+ - regex: 'Geos (\d+[\.\d]+)'
103
+ name: 'GEOS'
104
+ version: '$1'
105
+
106
+ ##########
107
+ # Motorola EZX
108
+ ##########
109
+ - regex: 'MOT-.*LinuxOS/'
110
+ name: 'Motorola EZX'
111
+ version: ''
112
+
113
+ ##########
114
+ # Baidu Yi (https://en.wikipedia.org/wiki/Baidu_Yi)
115
+ ##########
116
+ - regex: 'Baidu Yi'
117
+ name: 'Baidu Yi'
118
+ version: ''
119
+
120
+ ##########
121
+ # Red Star (https://en.wikipedia.org/wiki/Red_Star_OS)
122
+ ##########
123
+ - regex: '붉은별|Fedora/(?:\d+\.[\d.-]+)\.rs(\d+(?:[_.]\d+)*)'
124
+ name: 'Red Star'
125
+ version: '$1'
126
+
127
+ ##########
128
+ # Proxmox VE (https://pve.proxmox.com/wiki/Main_Page)
129
+ ##########
130
+ - regex: 'Linux/(?:\d+\.[\d.-]+)-(?:pve|v(\d)\+)'
131
+ name: 'Proxmox VE'
132
+ version: '$1'
133
+
134
+ ##########
135
+ # OpenVZ (https://openvz.org/)
136
+ ##########
137
+ - regex: 'Linux/(?:\d+\.[\d.-]+)-(?:\d+[\.\d]+)stab(?:\d+[\.\d]+)'
138
+ name: 'OpenVZ'
139
+ version: ''
140
+
141
+ # Rocky Linux (https://rockylinux.org/)
142
+ ##########
143
+ - regex: 'rocky/(\d+[\.\d]+)'
144
+ name: 'Rocky Linux'
145
+ version: '$1'
146
+
147
+ ##########
148
+ # Clear Linux OS (https://www.clearlinux.org/)
149
+ ##########
150
+ - regex: 'clear-linux-os/(\d+[\.\d]+)'
151
+ name: 'Clear Linux OS'
152
+ version: '$1'
153
+
154
+ ##########
155
+ # Alpine Linux (https://www.alpinelinux.org/)
156
+ ##########
157
+ - regex: 'alpine/(\d+[\.\d]+)'
158
+ name: 'Alpine Linux'
159
+ version: '$1'
160
+
161
+ ##########
162
+ # Scientific Linux (https://scientificlinux.org/)
163
+ ##########
164
+ - regex: 'scientific/(\d+[\.\d]+)'
165
+ name: 'Scientific Linux'
166
+ version: '$1'
167
+
168
+ ##########
169
+ # EulerOS (https://developer.huaweicloud.com/intl/en-us/euleros/index.html)
170
+ ##########
171
+ - regex: 'eulerosv(\d)r(\d+)'
172
+ name: 'EulerOS'
173
+ version: '$1.$2'
174
+
175
+ ##########
176
+ # Loongnix (https://www.loongson.cn/EN/system/loongnix)
177
+ ##########
178
+ - regex: 'loongnix-server/(\d+[\.\d]+)'
179
+ name: 'Loongnix'
180
+ version: '$1'
181
+
182
+ - regex: 'Linux/(?:\d+\.[\d.-]+)\.lns(\d+(?:[_.]\d+)*)\.loongarch64'
183
+ name: 'Loongnix'
184
+ version: '$1'
185
+
186
+ ##########
187
+ # AOSC OS (https://aosc.io/)
188
+ ##########
189
+ - regex: 'AOSC OS'
190
+ name: 'AOSC OS'
191
+ version: ''
192
+
193
+ ##########
194
+ # SerenityOS (https://github.com/SerenityOS/serenity)
195
+ ##########
196
+ - regex: 'SerenityOS|Ladybird/'
197
+ name: 'SerenityOS'
198
+ version: ''
199
+
200
+ ##########
201
+ # HELIX OS (https://www.pegasusintelligence.com/communication-security/)
202
+ ##########
203
+ - regex: 'Helix Phone'
204
+ name: 'HELIX OS'
205
+ version: ''
206
+
207
+ ##########
208
+ # Armadillo OS (https://github.com/pacificresearchalliance/kernel_google_crosshatch)
209
+ ##########
210
+ - regex: 'Armadillo'
211
+ name: 'Armadillo OS'
212
+ version: ''
213
+
214
+ # Webian (https://www.webian.org/)
215
+ ##########
216
+ - regex: 'Webian'
217
+ name: 'Webian'
218
+ version: ''
219
+
220
+ ##########
221
+ # Liri OS (https://liri.io/ | https://github.com/lirios)
222
+ ##########
223
+ - regex: 'Linux.*Liri/'
224
+ name: 'Liri OS'
225
+ version: ''
226
+
227
+ ##########
228
+ # FRITZ!OS (https://en.avm.de/products/fritzos/)
229
+ ##########
230
+ - regex: 'FRITZ!OS(?:/0(\d+[\.\d]+))?'
231
+ name: 'FRITZ!OS'
232
+ version: '$1'
233
+
234
+ ##########
235
+ # UOS (https://www.chinauos.com/)
236
+ ##########
237
+ - regex: 'UOS$'
238
+ name: 'UOS'
239
+ version: ''
240
+
241
+ ##########
242
+ # Raspbian (https://www.raspbian.org/)
243
+ ##########
244
+ - regex: 'Raspbian/(\d+[\.\d]+)'
245
+ name: 'Raspbian'
246
+ version: '$1'
247
+
248
+ ##########
249
+ # Raspberry Pi OS (https://www.raspberrypi.com/software/)
250
+ ##########
251
+ - regex: 'Raspbian'
252
+ name: 'Raspberry Pi OS'
253
+ version: ''
254
+
255
+ ##########
256
+ # BrightSignOS (https://www.brightsign.biz/ecosystem/brightsign-os/)
257
+ ##########
258
+ - regex: 'BrightSign/(?:[A-Z0-9]+)/(\d+[\.\d]+)'
259
+ name: 'BrightSignOS'
260
+ version: '$1'
261
+ - regex: 'BrightSign/(\d+[\.\d]+)'
262
+ name: 'BrightSignOS'
263
+ version: '$1'
264
+
8
265
  ##########
9
266
  # LuneOS (https://www.webos-ports.org/)
10
267
  ##########
@@ -56,7 +313,7 @@
56
313
  ##########
57
314
  # RouterOS (https://help.mikrotik.com/docs/display/ROS/RouterOS)
58
315
  ##########
59
- - regex: 'Mikrotik/(\d).x'
316
+ - regex: 'Mikrotik/(\d)\.x'
60
317
  name: 'RouterOS'
61
318
  version: '$1'
62
319
 
@@ -91,7 +348,7 @@
91
348
  ##########
92
349
  # Amazon Linux (https://docs.aws.amazon.com/AL2/latest/relnotes/relnotes-al2.html)
93
350
  ##########
94
- - regex: '.+.amzn(\d).x86_64'
351
+ - regex: '.+.amzn(\d)(?:int)?.x86_64'
95
352
  name: 'Amazon Linux'
96
353
  version: '$1'
97
354
 
@@ -119,7 +376,7 @@
119
376
  ##########
120
377
  # KreaTV
121
378
  ##########
122
- - regex: 'KreaTV/0.0.0.0'
379
+ - regex: 'KreaTV/0\.0\.0\.0'
123
380
  name: 'KreaTV'
124
381
  version: ''
125
382
 
@@ -165,6 +422,14 @@
165
422
  name: 'Whale OS'
166
423
  version: '$1'
167
424
 
425
+ - regex: 'Zeasn/.*TBrowser/2\.0' # https://partner.zeasn.com/partnerportal/WhaleVersion1/index.jhtml
426
+ name: 'Whale OS'
427
+ version: '1'
428
+
429
+ - regex: 'Zeasn/'
430
+ name: 'Whale OS'
431
+ version: ''
432
+
168
433
  ##########
169
434
  # Tizen
170
435
  ##########
@@ -202,18 +467,18 @@
202
467
  name: 'Windows Mobile'
203
468
  version: '$1'
204
469
 
205
- - regex: 'Windows NT 6.2; ARM;'
470
+ - regex: 'Windows NT 6\.2; ARM;'
206
471
  name: 'Windows RT'
207
472
  version: ''
208
473
 
209
- - regex: 'Windows NT 6.3; ARM;'
474
+ - regex: 'Windows NT 6\.3; ARM;'
210
475
  name: 'Windows RT'
211
476
  version: '8.1'
212
477
 
213
478
  ##########
214
479
  # Windows IoT
215
480
  ##########
216
- - regex: 'Windows IoT 10.0'
481
+ - regex: 'Windows IoT 10\.0'
217
482
  name: 'Windows IoT'
218
483
  version: '10'
219
484
 
@@ -250,24 +515,43 @@
250
515
  name: 'MocorDroid'
251
516
  version: '$1'
252
517
 
518
+ - regex: 'FydeOS'
519
+ name: 'FydeOS'
520
+ version: ''
521
+
522
+ ##########
523
+ # Fire OS (https://developer.amazon.com/docs/fire-tv/fire-os-overview.html)
524
+ ##########
253
525
  - regex: 'Fire OS(?:/(\d+[\.\d]*))?'
254
526
  name: 'Fire OS'
255
527
  version: '$1'
256
528
 
257
- - regex: '.+FIRETVSTICK2018'
529
+ - regex: '(?:Andr[o0]id (\d([\d.])*);? |Amazon;|smarttv_)AFT|AEO[ACBHKT]|KF[ADFGJKMORSTQ]|.*FIRETVSTICK2018'
258
530
  name: 'Fire OS'
259
- version: '6'
260
-
261
- - regex: 'AFTSO001'
262
- name: 'Fire OS'
263
- version: '7'
531
+ versions:
532
+ - regex: 'Andr[o0]id 1[01].+ (?:AFT|KF[ADFGJKMORSTQ])'
533
+ version: '8'
534
+ - regex: 'Andr[o0]id 9.+ (?:AEO[AHT]|AFT|KF[ADFGJKMORSTQ])|AFTSO001'
535
+ version: '7'
536
+ - regex: 'Andr[o0]id 7|.+FIRETVSTICK2018'
537
+ version: '6'
538
+ - regex: 'Andr[o0]id 5\.1'
539
+ version: '5'
540
+ - regex: 'Andr[o0]id 4\.4\.3'
541
+ version: '4.5.1'
542
+ - regex: 'Andr[o0]id 4\.4\.2'
543
+ version: '4'
544
+ - regex: 'Andr[o0]id 4\.2\.2'
545
+ version: '3'
546
+ - regex: 'Andr[o0]id 4\.0\.[34]'
547
+ version: '3'
548
+ - regex: 'Andr[o0]id 4\.0'
549
+ version: '2'
550
+ - regex: 'Andr[o0]id 2\.3\.3'
551
+ version: '1'
264
552
 
265
- - regex: 'Andr0id 9.+AFTdev'
553
+ - regex: 'cordova-amazon-fireos'
266
554
  name: 'Fire OS'
267
- version: '7'
268
-
269
- - regex: 'FydeOS'
270
- name: 'FydeOS'
271
555
  version: ''
272
556
 
273
557
  ##########
@@ -280,9 +564,49 @@
280
564
  ##########
281
565
  # Lineage OS
282
566
  ##########
283
- - regex: 'lineage_\w+'
567
+ - regex: 'Lineage_(\d+[\.\d]*)'
284
568
  name: 'Lineage OS'
285
- version: ''
569
+ version: '$1'
570
+
571
+ - regex: '(?:Android (\d([\d.])*);? )?lineage_\w+'
572
+ name: 'Lineage OS'
573
+ versions:
574
+ - regex: 'Android 14'
575
+ version: '21'
576
+ - regex: 'Android 13'
577
+ version: '20.0'
578
+ - regex: 'Android 12\.1'
579
+ version: '19.1'
580
+ - regex: 'Android 12'
581
+ version: '19.0'
582
+ - regex: 'Android 11'
583
+ version: '18.0'
584
+ - regex: 'Android 10'
585
+ version: '17.0'
586
+ - regex: 'Android 9'
587
+ version: '16.0'
588
+ - regex: 'Android 8\.1'
589
+ version: '15.1'
590
+ - regex: 'Android 8'
591
+ version: '15.0'
592
+ - regex: 'Android 7\.1'
593
+ version: '14.1'
594
+ - regex: 'Android 7'
595
+ version: '14.0'
596
+ - regex: 'Android 6'
597
+ version: '13.0'
598
+ - regex: 'Android 5\.1'
599
+ version: '12.1'
600
+ - regex: 'Android 5'
601
+ version: '12.0'
602
+ - regex: 'Android 4\.4'
603
+ version: '11.0'
604
+ - regex: 'Android 4\.3'
605
+ version: '10.2'
606
+ - regex: 'Android 4\.2'
607
+ version: '10.1'
608
+ - regex: 'Android 4'
609
+ version: '9.1.0'
286
610
 
287
611
  #########
288
612
  # Resurrection Remix OS (https://resurrectionremix.com/)
@@ -314,10 +638,24 @@
314
638
  ##########
315
639
  # Wear OS (https://wearos.google.com/)
316
640
  ##########
317
- - regex: 'Chrome/(\d+\.[.\d]+) Odd/|SM-R(?:8[6-9]|9)'
641
+ - regex: 'Chrome/(\d+\.[.\d]+) Odd/|SM-R(?:8[6-9]|9)|LEM14'
318
642
  name: 'Wear OS'
319
643
  version: ''
320
644
 
645
+ ##########
646
+ # SeewoOS
647
+ ##########
648
+ - regex: 'SeewoOS x86_64 (\d+[\.\d]+)'
649
+ name: 'SeewoOS'
650
+ version: '$1'
651
+
652
+ ##########
653
+ # ChromeOS
654
+ ##########
655
+ - regex: 'CrOS [a-z0-9_]+ (\d+[\.\d]+)|Chromebook'
656
+ name: 'Chrome OS'
657
+ version: '$1'
658
+
321
659
  ##########
322
660
  # Android TV (https://android.com/tv/)
323
661
  ##########
@@ -325,60 +663,66 @@
325
663
  name: 'Android TV'
326
664
  version: '$1'
327
665
 
328
- - regex: 'Android[; ](\d+[\.\d]*).+(?:(?:Android( UHD)?|AT&T|Google) TV|AOSP on r33a0|BRAVIA)'
666
+ - regex: 'Android[; ](\d+[\.\d]*).+(?:(?:Android(?: UHD)?|AT&T|Google|Smart)[ _]?TV|AOSP on r33a0|BRAVIA|wv-atv)'
329
667
  name: 'Android TV'
330
668
  version: '$1'
331
669
 
332
- - regex: 'Windows.+Andr0id TV|.+K_?Android_?TV_'
670
+ - regex: 'Windows.+Andr0id TV|.+(?:K_?Android_?TV_|AndroidTV|GoogleTV_)'
333
671
  name: 'Android TV'
334
672
  version: ''
335
673
 
336
674
  ##########
337
675
  # Android SDK Level Api
338
676
  ##########
339
- - regex: '(?:Android API \d+|\d+/tclwebkit(?:\d+[\.\d]*))'
677
+ - regex: '(?:Android API \d+|\d+/tclwebkit(?:\d+[\.\d]*)|(?:(?<!\d )Android/\d{2}|(?<!; |\d{4}/)Android (?!1[0-5])\d{2})(?![^ ]))'
340
678
  name: 'Android'
341
679
  versions:
342
- - regex: '(?:Android API 34|34/tclwebkit)'
680
+ - regex: '(?:Android API 35|35/tclwebkit|Android[ /]35)'
681
+ version: '15'
682
+ - regex: '(?:Android API 34|34/tclwebkit|Android[ /]34)'
343
683
  version: '14'
344
- - regex: '(?:Android API 33|33/tclwebkit)'
684
+ - regex: '(?:Android API 33|33/tclwebkit|Android[ /]33)'
345
685
  version: '13'
346
- - regex: '(?:Android API 32|32/tclwebkit)'
686
+ - regex: '(?:Android API 32|32/tclwebkit|Android[ /]32)'
347
687
  version: '12.1'
348
- - regex: '(?:Android API 31|31/tclwebkit)'
688
+ - regex: '(?:Android API 31|31/tclwebkit|Android[ /]31)'
349
689
  version: '12'
350
- - regex: '(?:Android API 30|30/tclwebkit)'
690
+ - regex: '(?:Android API 30|30/tclwebkit|Android[ /]30)'
351
691
  version: '11'
352
- - regex: '(?:Android API 29|29/tclwebkit)'
692
+ - regex: '(?:Android API 29|29/tclwebkit|Android[ /]29)'
353
693
  version: '10'
354
- - regex: '(?:Android API 28|28/tclwebkit)'
694
+ - regex: '(?:Android API 28|28/tclwebkit|Android[ /]28)'
355
695
  version: '9'
356
- - regex: '(?:Android API 27|27/tclwebkit)'
696
+ - regex: '(?:Android API 27|27/tclwebkit|Android[ /]27)'
357
697
  version: '8.1'
358
- - regex: '(?:Android API 26|26/tclwebkit)'
698
+ - regex: '(?:Android API 26|26/tclwebkit|Android[ /]26)'
359
699
  version: '8'
360
- - regex: '(?:Android API 25|25/tclwebkit)'
700
+ - regex: '(?:Android API 25|25/tclwebkit|Android[ /]25)'
361
701
  version: '7.1'
362
- - regex: '(?:Android API 24|24/tclwebkit)'
702
+ - regex: '(?:Android API 24|24/tclwebkit|Android[ /]24)'
363
703
  version: '7'
364
- - regex: '(?:Android API 23|23/tclwebkit)'
704
+ - regex: '(?:Android API 23|23/tclwebkit|Android[ /]23)'
365
705
  version: '6'
366
- - regex: '(?:Android API 22|22/tclwebkit)'
706
+ - regex: '(?:Android API 22|22/tclwebkit|Android[ /]22)'
367
707
  version: '5.1'
368
- - regex: '21/tclwebkit'
708
+ - regex: '(?:21/tclwebkit|Android[ /]21)'
369
709
  version: '5'
370
710
  - regex: '(?:20|19)/tclwebkit'
371
711
  version: '4.4'
372
- - regex: '18/tclwebkit'
712
+ - regex: 'Android[ /](?:20|19)'
713
+ version: '4.4'
714
+ - regex: '(?:18/tclwebkit|Android[ /]18)'
373
715
  version: '4.3'
374
- - regex: '17/tclwebkit'
716
+ - regex: '(?:17/tclwebkit|Android[ /]17)'
375
717
  version: '4.2'
376
- - regex: '16/tclwebkit'
718
+ - regex: '(?:16/tclwebkit|Android[ /]16)'
377
719
  version: '4.2'
378
720
  - regex: '15/tclwebkit'
379
721
  version: '4.0.3'
380
722
  - regex: '15/tclwebkit'
381
723
  version: '4.0.1'
724
+ - regex: 'Android[ /]15'
725
+ version: '4'
382
726
 
383
727
  ##########
384
728
  # Android
@@ -391,11 +735,11 @@
391
735
  name: 'Android'
392
736
  version: ''
393
737
 
394
- - regex: '(?:Android OS|OMDroid)[ /](\d+[\.\d]*)'
738
+ - regex: '(?:Android OS|OMDroid|sdk_gphone64_arm64-userdebug)[ /](\d+[\.\d]*)'
395
739
  name: 'Android'
396
740
  version: '$1'
397
741
 
398
- - regex: 'Pinterest for Android/.*; (\d(?:[\d\.]*))\)$'
742
+ - regex: 'Pinterest for Android(?: Tablet)?/.*; (\d(?:[\d\.]*))\)$'
399
743
  name: 'Android'
400
744
  version: '$1'
401
745
 
@@ -407,7 +751,7 @@
407
751
  name: 'Android'
408
752
  version: '$1'
409
753
 
410
- - regex: '(?:(?:Orca-)?(?<!like |/|RadioPublic |Anghami )Android|Adr|AOSP)[ /]?(?:[a-z]+ )?(\d+[\.\d]*)'
754
+ - regex: '(?:(?:Orca-)?(?<!like |/|RadioPublic |Anghami |Callpod Keeper for )Android|Adr|AOSP)[ /]?(?:[a-z]+ )?(\d+[\.\d]*)'
411
755
  name: 'Android'
412
756
  version: '$1'
413
757
 
@@ -415,7 +759,7 @@
415
759
  name: 'Android'
416
760
  version: '$1'
417
761
 
418
- - regex: 'Android ?(?:jelly bean|Kit Kat|S.O. Ginger Bread|The FireCyano|:) (\d+[\.\d]*)'
762
+ - regex: 'Android ?(?:jelly bean|Kit Kat|S\.O\. Ginger Bread|The FireCyano|:) (\d+[\.\d]*)'
419
763
  name: 'Android'
420
764
  version: '$1'
421
765
 
@@ -423,15 +767,19 @@
423
767
  name: 'Android'
424
768
  version: '$1'
425
769
 
426
- - regex: ' Adr |DDG-Android|(?<!like )Android|Silk-Accelerated=[a-z]{4,5}'
770
+ - regex: '(?:TwitterAndroid).*[ /](?:[a-z]+ )?(\d+[\.\d]*)'
427
771
  name: 'Android'
428
- version: ''
772
+ version: '$1'
429
773
 
430
- - regex: '(?:TwitterAndroid).*[ /](?:[a-z]+ )?(\d+[\.\d]*)'
774
+ - regex: '\(Android:.*\); API (\d+[\.\d]*)'
431
775
  name: 'Android'
432
776
  version: '$1'
433
777
 
434
- - regex: 'BeyondPod|AntennaPod|Podkicker|DoggCatcher|Player FM|okhttp|Podcatcher Deluxe|Sonos/.+\(ACR_|Linux x86_64; Quest'
778
+ - regex: ' Adr |.*(?<!like |/ )Android|Silk-Accelerated=[a-z]{4,5}'
779
+ name: 'Android'
780
+ version: ''
781
+
782
+ - regex: 'BeyondPod|AntennaPod|Podkicker|DoggCatcher|okhttp|Podcatcher Deluxe|Sonos/.+\(ACR_|Linux x86_64; Quest|.*WhatsApp/.*A$'
435
783
  name: 'Android'
436
784
  version: ''
437
785
 
@@ -465,7 +813,7 @@
465
813
  ##########
466
814
  # ThreadX
467
815
  ##########
468
- - regex: 'ThreadX(?:/(\d+[\.\d]*))?'
816
+ - regex: 'ThreadX(?:_OS)?(?:/(\d+[\.\d]*))?'
469
817
  name: 'ThreadX'
470
818
  version: '$1'
471
819
 
@@ -596,10 +944,26 @@
596
944
  name: 'VectorLinux'
597
945
  version: '$1'
598
946
 
947
+ - regex: 'sles/(\d+[\.\d]+)'
948
+ name: 'SUSE'
949
+ version: '$1'
950
+
951
+ - regex: '(?:rhel|Red Hat Enterprise Linux Server)/(\d+[\.\d]+)'
952
+ name: 'Red Hat'
953
+ version: '$1'
954
+
955
+ - regex: '.+redhat-linux-gnu|rhel|Red Hat Enterprise Linux Server'
956
+ name: 'Red Hat'
957
+ version: ''
958
+
599
959
  - regex: 'CentOS Stream (\d)'
600
960
  name: 'CentOS Stream'
601
961
  version: '$1'
602
962
 
963
+ - regex: 'centos(?: Linux)?/(\d+[\.\d]+) '
964
+ name: 'CentOS'
965
+ version: '$1'
966
+
603
967
  - regex: '.+.el(\d+(?:[_\.]\d+)*).(?:centos|x86_64)'
604
968
  name: 'CentOS'
605
969
  version: '$1'
@@ -624,6 +988,34 @@
624
988
  name: 'ZorinOS'
625
989
  version: '$1'
626
990
 
991
+ - regex: 'Ubuntu[-/]hardy'
992
+ name: 'Ubuntu'
993
+ version: '8.04'
994
+
995
+ - regex: 'debian/stretch'
996
+ name: 'Debian'
997
+ version: '9.13'
998
+
999
+ - regex: 'Ubuntu[-/]feisty'
1000
+ name: 'Ubuntu'
1001
+ version: '7.04'
1002
+
1003
+ - regex: 'Ubuntu[-/]edgy'
1004
+ name: 'Ubuntu'
1005
+ version: '6.10'
1006
+
1007
+ - regex: 'Ubuntu[-/]dapper'
1008
+ name: 'Ubuntu'
1009
+ version: '6.06'
1010
+
1011
+ - regex: 'Ubuntu[-/]breezy'
1012
+ name: 'Ubuntu'
1013
+ version: '5.10'
1014
+
1015
+ - regex: 'Ubuntu[ /](\d+[\.\d]+)'
1016
+ name: 'Ubuntu'
1017
+ version: '$1'
1018
+
627
1019
  - regex: 'Linux; .*((?:Debian|Knoppix|Mint|Ubuntu|Kubuntu|Xubuntu|Lubuntu|Fedora|Red Hat|Mandriva|Gentoo|Sabayon|Slackware|SUSE|CentOS|BackTrack))[ /](\d+[\.\d]+)'
628
1020
  name: '$1'
629
1021
  version: '$2'
@@ -632,14 +1024,10 @@
632
1024
  name: 'Deepin'
633
1025
  version: '$1'
634
1026
 
635
- - regex: '(Debian|Knoppix|Mint(?! Browser)|Ubuntu|Kubuntu|Xubuntu|Lubuntu|Fedora|Red Hat|Mandriva|Gentoo|Sabayon|Slackware|SUSE|CentOS|BackTrack|Freebox)(?:(?: Enterprise)? Linux)?(?:[ /\-](\d+[\.\d]+))?'
1027
+ - regex: '(Debian|Knoppix|Mint(?! Browser)|Ubuntu|Kubuntu|Xubuntu|Lubuntu|Fedora|Red Hat|Mandriva|Gentoo|Sabayon|Slackware|SUSE|CentOS|BackTrack|Freebox|ASPLinux)(?:(?: Enterprise)? Linux)?(?:[ /\-](\d+[\.\d]+))?'
636
1028
  name: '$1'
637
1029
  version: '$2'
638
1030
 
639
- - regex: '.+redhat-linux-gnu'
640
- name: 'Red Hat'
641
- version: ''
642
-
643
1031
  - regex: 'OS ROSA; Linux'
644
1032
  name: 'Rosa'
645
1033
  version: ''
@@ -695,7 +1083,7 @@
695
1083
  name: 'Windows'
696
1084
  version: '$1'
697
1085
 
698
- - regex: 'mingw32|winhttp'
1086
+ - regex: 'mingw32|winhttp|WhatsApp/.*W$'
699
1087
  name: 'Windows'
700
1088
  version: ''
701
1089
 
@@ -703,59 +1091,71 @@
703
1091
  name: 'Windows'
704
1092
  version: '$1'
705
1093
 
706
- - regex: 'CYGWIN_NT-10.0|Windows NT 10.0|Windows 10'
1094
+ - regex: 'CYGWIN_NT-10\.0|Windows NT 10\.0|Windows[ /]10'
707
1095
  name: 'Windows'
708
1096
  version: '10'
709
1097
 
710
- - regex: 'CYGWIN_NT-6.4|Windows NT 6.4|Windows 10|win10'
1098
+ - regex: 'CYGWIN_NT-6\.4|Windows NT 6\.4|Windows 10|win10'
711
1099
  name: 'Windows'
712
1100
  version: '10'
713
1101
 
714
- - regex: 'CYGWIN_NT-6.3|Windows NT 6.3|Windows 8.1'
1102
+ - regex: 'Windows/2012ServerR2'
1103
+ name: 'Windows'
1104
+ version: 'Server 2012 R2'
1105
+
1106
+ - regex: 'CYGWIN_NT-6\.3|Windows NT 6\.3|Windows[ /]8\.1'
715
1107
  name: 'Windows'
716
1108
  version: '8.1'
717
1109
 
718
- - regex: 'CYGWIN_NT-6.2|Windows NT 6.2|Windows 8'
1110
+ - regex: 'Windows/2012Server'
1111
+ name: 'Windows'
1112
+ version: 'Server 2012'
1113
+
1114
+ - regex: 'CYGWIN_NT-6\.2|Windows NT 6\.2|Windows 8|post2008Server'
719
1115
  name: 'Windows'
720
1116
  version: '8'
721
1117
 
722
- - regex: 'CYGWIN_NT-6.1|Windows NT 6.1|Windows 7|win7|Windows \(6.1'
1118
+ - regex: 'Windows/2008ServerR2'
1119
+ name: 'Windows'
1120
+ version: 'Server 2008 R2'
1121
+
1122
+ - regex: 'CYGWIN_NT-6\.1|Windows NT 6\.1|Windows[ /]7|win7|Windows \(6\.1'
723
1123
  name: 'Windows'
724
1124
  version: '7'
725
1125
 
726
- - regex: 'CYGWIN_NT-6.0|Windows NT 6.0|Windows Vista'
1126
+ - regex: 'CYGWIN_NT-6\.0|Windows NT 6\.0|Windows Vista'
727
1127
  name: 'Windows'
728
1128
  version: 'Vista'
729
1129
 
730
- - regex: 'CYGWIN_NT-5.2|Windows NT 5.2|Windows Server 2003 / XP x64'
1130
+ - regex: 'CYGWIN_NT-5\.2|Windows NT 5\.2|Windows Server 2003 / XP x64|Windows/2003Server'
731
1131
  name: 'Windows'
732
1132
  version: 'Server 2003'
733
1133
 
734
- - regex: 'CYGWIN_NT-5.1|Windows NT 5.1|Windows XP'
1134
+ - regex: 'CYGWIN_NT-5\.1|Windows NT 5\.1|Windows XP'
735
1135
  name: 'Windows'
736
1136
  version: 'XP'
737
1137
 
738
- - regex: 'CYGWIN_NT-5.0|Windows NT 5.0|Windows 2000'
1138
+ - regex: 'CYGWIN_NT-5\.0|Windows NT 5\.0|Windows 2000'
739
1139
  name: 'Windows'
740
1140
  version: '2000'
741
1141
 
742
- - regex: 'CYGWIN_NT-4.0|Windows NT 4.0|WinNT|Windows NT'
1142
+ - regex: 'CYGWIN_NT-4\.0|Windows NT 4\.0|WinNT|Windows NT'
743
1143
  name: 'Windows'
744
1144
  version: 'NT'
745
1145
 
746
- - regex: 'CYGWIN_ME-4.90|Win 9x 4.90|Windows ME'
1146
+ - regex: 'CYGWIN_ME-4\.90|Win 9x 4\.90|Windows ME'
747
1147
  name: 'Windows'
748
1148
  version: 'ME'
749
1149
 
750
- - regex: 'CYGWIN_98-4.10|Win98|Windows 98'
1150
+ - regex: 'CYGWIN_98-4\.10|Win98|Windows 98'
751
1151
  name: 'Windows'
752
1152
  version: '98'
753
1153
 
754
- - regex: 'CYGWIN_95-4.0|Win32|Win95|Windows 95|Windows_95'
1154
+ - regex: 'CYGWIN_95-4\.0|Win32|Win95|Windows 95|Windows_95'
755
1155
  name: 'Windows'
756
1156
  version: '95'
757
1157
 
758
- - regex: 'Windows 3.1'
1158
+ - regex: 'Windows 3\.1'
759
1159
  name: 'Windows'
760
1160
  version: '3.1'
761
1161
 
@@ -777,15 +1177,23 @@
777
1177
  ##########
778
1178
  # tvOS (https://developer.apple.com/tvos/)
779
1179
  ##########
780
- - regex: 'Apple ?TV.*CPU (?:iPhone )?OS ((?:9|1[0-7])[_\.]\d+(?:[_.]\d+)*)'
1180
+ - regex: 'Apple ?TV.*CPU (?:iPhone )?OS ((?:9|1[0-8])[_\.]\d+(?:[_.]\d+)*)'
781
1181
  name: 'tvOS'
782
1182
  version: '$1'
783
1183
 
784
- - regex: 'iOS(?:; |/)((?:9|1[0-7]).\d+(?:[_\.]\d+)*) (?:model/)?AppleTV'
1184
+ - regex: 'Apple TV; iOS ((?:9|1[0-8])[_\.]\d+(?:[_.]\d+)*)'
785
1185
  name: 'tvOS'
786
1186
  version: '$1'
787
1187
 
788
- - regex: 'tvOS((?:9|1[0-7]).\d+(?:[_\.]\d+)*);'
1188
+ - regex: 'iOS(?:; |/)((?:9|1[0-8])\.\d+(?:[_\.]\d+)*) (?:model/)?AppleTV'
1189
+ name: 'tvOS'
1190
+ version: '$1'
1191
+
1192
+ - regex: 'tvOS[ /]?((?:9|1[0-8])\.\d+(?:[_\.]\d+)*);?'
1193
+ name: 'tvOS'
1194
+ version: '$1'
1195
+
1196
+ - regex: 'AppleTV(?:/?(\d+[\.\d]+))?'
789
1197
  name: 'tvOS'
790
1198
  version: '$1'
791
1199
 
@@ -802,34 +1210,38 @@
802
1210
  ##########
803
1211
  # iPadOS (https://www.apple.com/ipados/)
804
1212
  ##########
805
- - regex: 'FBMD/iPad;.*FBSV/ ?(1[3-7]).(\d+[\.\d]*);'
1213
+ - regex: 'FBMD/iPad;.*FBSV/ ?(1[3-8]).(\d+[\.\d]*);'
806
1214
  name: 'iPadOS'
807
1215
  version: '$1.$2'
808
1216
 
809
- - regex: 'iPad(?:OS)?/(1[3-7]).(\d+[\.\d]*)'
1217
+ - regex: 'iPad(?:OS)?[ /](1[3-8])\.(\d+[\.\d]*)'
810
1218
  name: 'iPadOS'
811
1219
  version: '$1.$2'
812
1220
 
813
- - regex: '^iPad(?:\d+[\,\d]*)/(1[3-7]).(\d+[\.\d]*)'
1221
+ - regex: '^iPad(?:\d+[\,\d]*)/(1[3-8])\.(\d+[\.\d]*)'
814
1222
  name: 'iPadOS'
815
1223
  version: '$1.$2'
816
1224
 
817
- - regex: 'iPad(?:; (?:iOS|iPadOS|iPhone OS)|.+CPU OS) ((1[3-7])+(?:[_\.]\d+)*)'
1225
+ - regex: 'iPad(?:; (?:iOS|iPadOS|iPhone OS)|.+CPU (?:iPad |iPhone )?OS) ((1[3-8])+(?:[_\.]\d+)*)'
818
1226
  name: 'iPadOS'
819
1227
  version: '$1'
820
1228
 
821
- - regex: 'iOS/(1[3-7]).(\d+[\.\d]*).+Apple/iPad'
1229
+ - regex: 'iOS/(1[3-8])\.(\d+[\.\d]*).+Apple/iPad'
822
1230
  name: 'iPadOS'
823
1231
  version: '$1.$2'
824
1232
 
825
- - regex: 'iPhone OS,(1[3-7]).(\d+[\.\d]*).+iPad'
1233
+ - regex: 'iPhone OS,(1[3-8])\.(\d+[\.\d]*).+iPad'
826
1234
  name: 'iPadOS'
827
1235
  version: '$1.$2'
828
1236
 
1237
+ - regex: 'Pinterest for iOS/.*iPad.*; (\d(?:[\d\.]*))[)]$'
1238
+ name: 'iPadOS'
1239
+ version: '$1'
1240
+
829
1241
  ##########
830
1242
  # iOS
831
1243
  ##########
832
- - regex: 'iPad/([89]|1[012]).(\d+[\.\d]*)'
1244
+ - regex: 'iPad/([89]|1[012])\.(\d+[\.\d]*)'
833
1245
  name: 'iOS'
834
1246
  version: '$1.$2'
835
1247
 
@@ -837,7 +1249,7 @@
837
1249
  name: 'iOS'
838
1250
  version: '$1'
839
1251
 
840
- - regex: 'Pinterest for iOS/.*; (\d(?:[\d\.]*))[)]$'
1252
+ - regex: 'Pinterest for iOS/.*iPhone.*; (\d(?:[\d\.]*))[)]$'
841
1253
  name: 'iOS'
842
1254
  version: '$1'
843
1255
 
@@ -845,92 +1257,108 @@
845
1257
  name: 'iOS'
846
1258
  version: '$1'
847
1259
 
1260
+ - regex: 'iPhone OS ([0-9]{1})([0-9]{1})([0-9]{1})'
1261
+ name: 'iOS'
1262
+ version: '$1.$2.$3'
1263
+
1264
+ - regex: '(?:CPU OS|iPh(?:one)?[ _]OS|iPhone.+ OS|PodMN.+iPhone|iOS)[ _/](\d+(?:[_\.]\d+)*)'
1265
+ name: 'iOS'
1266
+ version: '$1'
1267
+
848
1268
  - regex: '(?:iPhone ?OS|iOS(?: Version)?)(?:/|; |,)(\d+[\.\d]+)'
849
1269
  name: 'iOS'
850
1270
  version: '$1'
851
1271
 
852
- - regex: '^(?!com.apple.Safari.SearchHelper|Safari).*CFNetwork/.+ Darwin/(\d+[\.\d]+)(?!.*(?:x86_64|i386|PowerMac|Power%20Macintosh))'
1272
+ - regex: '^(?!com\.apple\.Safari\.SearchHelper|Safari).*(?:CFNetwork|Mana)/.+ Darwin/(\d+[\.\d]+)(?!.*(?:x86_64|i386|PowerMac|Power%20Macintosh))'
853
1273
  name: 'iOS'
854
1274
  versions:
855
- - regex: 'Darwin/23.2.0'
1275
+ - regex: 'Darwin/24\.0\.0'
1276
+ version: '18.0'
1277
+ - regex: 'Darwin/23\.5\.0'
1278
+ version: '17.5'
1279
+ - regex: 'Darwin/23\.4\.0'
1280
+ version: '17.4'
1281
+ - regex: 'Darwin/23\.3\.0'
1282
+ version: '17.3'
1283
+ - regex: 'Darwin/23\.2\.0'
856
1284
  version: '17.2'
857
- - regex: 'Darwin/23.1.0'
1285
+ - regex: 'Darwin/23\.1\.0'
858
1286
  version: '17.1'
859
- - regex: 'Darwin/23.0.0'
1287
+ - regex: 'Darwin/23\.0\.0'
860
1288
  version: '17.0'
861
- - regex: 'Darwin/22.6.0'
1289
+ - regex: 'Darwin/22\.6\.0'
862
1290
  version: '16.6'
863
- - regex: 'Darwin/22.5.0'
1291
+ - regex: 'Darwin/22\.5\.0'
864
1292
  version: '16.5'
865
- - regex: 'Darwin/22.4.0'
1293
+ - regex: 'Darwin/22\.4\.0'
866
1294
  version: '16.4'
867
- - regex: 'Darwin/22.3.0'
1295
+ - regex: 'Darwin/22\.3\.0'
868
1296
  version: '16.3'
869
- - regex: 'Darwin/22.2.0'
1297
+ - regex: 'Darwin/22\.2\.0'
870
1298
  version: '16.2'
871
- - regex: 'Darwin/22.1.0'
1299
+ - regex: 'Darwin/22\.1\.0'
872
1300
  version: '16.1'
873
- - regex: 'Darwin/22.0.0'
1301
+ - regex: 'Darwin/22\.0\.0'
874
1302
  version: '16.0'
875
- - regex: 'Darwin/21.6.0'
1303
+ - regex: 'Darwin/21\.6\.0'
876
1304
  version: '15.6'
877
- - regex: 'Darwin/21.5.0'
1305
+ - regex: 'Darwin/21\.5\.0'
878
1306
  version: '15.5'
879
- - regex: 'Darwin/21.4.0'
1307
+ - regex: 'Darwin/21\.4\.0'
880
1308
  version: '15.4'
881
- - regex: 'Darwin/21.3.0'
1309
+ - regex: 'Darwin/21\.3\.0'
882
1310
  version: '15.3'
883
- - regex: 'Darwin/21.2.0'
1311
+ - regex: 'Darwin/21\.2\.0'
884
1312
  version: '15.2'
885
- - regex: 'Darwin/21.1.0'
1313
+ - regex: 'Darwin/21\.1\.0'
886
1314
  version: '15.1'
887
- - regex: 'Darwin/21.0.0'
1315
+ - regex: 'Darwin/21\.0\.0'
888
1316
  version: '15.0'
889
- - regex: 'Darwin/20.6.0'
1317
+ - regex: 'Darwin/20\.6\.0'
890
1318
  version: '14.7'
891
- - regex: 'Darwin/20.5.0'
1319
+ - regex: 'Darwin/20\.5\.0'
892
1320
  version: '14.6'
893
- - regex: 'Darwin/20.4.0'
1321
+ - regex: 'Darwin/20\.4\.0'
894
1322
  version: '14.5'
895
- - regex: 'Darwin/20.3.0'
1323
+ - regex: 'Darwin/20\.3\.0'
896
1324
  version: '14.4'
897
- - regex: 'Darwin/20.2.0'
1325
+ - regex: 'Darwin/20\.2\.0'
898
1326
  version: '14.3'
899
- - regex: 'Darwin/20.1.0'
1327
+ - regex: 'Darwin/20\.1\.0'
900
1328
  version: '14.2'
901
- - regex: 'Darwin/20.0.0'
1329
+ - regex: 'Darwin/20\.0\.0'
902
1330
  version: '14.0'
903
- - regex: 'Darwin/19.6.0'
1331
+ - regex: 'Darwin/19\.6\.0'
904
1332
  version: '13.6'
905
- - regex: 'Darwin/19.5.0'
1333
+ - regex: 'Darwin/19\.5\.0'
906
1334
  version: '13.5'
907
- - regex: 'Darwin/19.4.0'
1335
+ - regex: 'Darwin/19\.4\.0'
908
1336
  version: '13.4'
909
- - regex: 'Darwin/19.3.0'
1337
+ - regex: 'Darwin/19\.3\.0'
910
1338
  version: '13.3.1'
911
- - regex: 'Darwin/19.2.0'
1339
+ - regex: 'Darwin/19\.2\.0'
912
1340
  version: '13.3'
913
- - regex: 'Darwin/19.0.0'
1341
+ - regex: 'Darwin/19\.0\.0'
914
1342
  version: '13.0'
915
- - regex: 'Darwin/18.7.0'
1343
+ - regex: 'Darwin/18\.7\.0'
916
1344
  version: '12.4'
917
- - regex: 'Darwin/18.6.0'
1345
+ - regex: 'Darwin/18\.6\.0'
918
1346
  version: '12.3'
919
- - regex: 'Darwin/18.5.0'
1347
+ - regex: 'Darwin/18\.5\.0'
920
1348
  version: '12.2'
921
- - regex: 'Darwin/18.2.0'
1349
+ - regex: 'Darwin/18\.2\.0'
922
1350
  version: '12.1'
923
- - regex: 'Darwin/18.0.0'
1351
+ - regex: 'Darwin/18\.0\.0'
924
1352
  version: '12.0'
925
- - regex: 'Darwin/17.7.0'
1353
+ - regex: 'Darwin/17\.7\.0'
926
1354
  version: '11.4.1'
927
- - regex: 'Darwin/17.6.0'
1355
+ - regex: 'Darwin/17\.6\.0'
928
1356
  version: '11.4'
929
- - regex: 'Darwin/17.5.0'
1357
+ - regex: 'Darwin/17\.5\.0'
930
1358
  version: '11.3'
931
- - regex: 'Darwin/17.4.0'
1359
+ - regex: 'Darwin/17\.4\.0'
932
1360
  version: '11.2.6'
933
- - regex: 'Darwin/17.3.0'
1361
+ - regex: 'Darwin/17\.3\.0'
934
1362
  version: '11.2'
935
1363
  - regex: 'CFNetwork/889'
936
1364
  version: '11.1'
@@ -1009,14 +1437,6 @@
1009
1437
  name: 'iOS'
1010
1438
  version: '$1.$2'
1011
1439
 
1012
- - regex: 'iPhone OS ([0-9]{1})([0-9]{1})([0-9]{1})'
1013
- name: 'iOS'
1014
- version: '$1.$2.$3'
1015
-
1016
- - regex: '(?:CPU OS|iPh(?:one)?[ _]OS|iPhone.+ OS|PodMN.+iPhone|iOS)[ _/](\d+(?:[_\.]\d+)*)'
1017
- name: 'iOS'
1018
- version: '$1'
1019
-
1020
1440
  - regex: 'FBMD/iPhone;.*FBSV/ ?(\d+[\.\d]+);'
1021
1441
  name: 'iOS'
1022
1442
  version: '$1'
@@ -1053,7 +1473,7 @@
1053
1473
  name: 'iOS'
1054
1474
  version: '$1'
1055
1475
 
1056
- - regex: '(?:Podcasts/(?:[\d\.]+)|Instacast(?:HD)?/(?:\d\.[\d\.abc]+)|Pocket Casts, iOS|\(iOS\)|iOS; Opera|Overcast|Castro|Podcat|iCatcher|RSSRadio/|MobileSafari/)(?!.*x86_64)'
1476
+ - regex: '(?:Podcasts/(?:[\d\.]+)|Instacast(?:HD)?/(?:\d\.[\d\.abc]+)|Pocket Casts, iOS|\(iOS\)|iOS; Opera|Overcast|Castro|Podcat|iCatcher|RSSRadio/|MobileSafari/|WhatsApp/.*i$)(?!.*x86_64)'
1057
1477
  name: 'iOS'
1058
1478
  version: ''
1059
1479
 
@@ -1061,7 +1481,7 @@
1061
1481
  name: 'iOS'
1062
1482
  version: ''
1063
1483
 
1064
- - regex: 'iOS/Version ([\d\.]+)'
1484
+ - regex: 'iOS[ /]Version ([\d\.]+)'
1065
1485
  name: 'iOS'
1066
1486
  version: '$1'
1067
1487
 
@@ -1069,185 +1489,193 @@
1069
1489
  name: 'iOS'
1070
1490
  version: ''
1071
1491
 
1072
- - regex: 'CaptiveNetworkSupport|AirPlay'
1492
+ - regex: 'CaptiveNetworkSupport|AirPlay|.*[ \.\-/]iOS'
1073
1493
  name: 'iOS'
1074
1494
  version: ''
1075
1495
 
1076
1496
  ##########
1077
1497
  # Mac
1078
1498
  ##########
1079
- - regex: '(?:CFNetwork|StudioDisplay)/.+Darwin(?:/|; )(?:[\d\.]+).+(?:x86_64|i386|Power%20Macintosh)|(?:x86_64-apple-)?darwin(?:[\d\.]+)|PowerMac|com.apple.Safari.SearchHelper|^Safari'
1499
+ - regex: '(?:CFNetwork|Mana|StudioDisplay)/.+Darwin(?:/|; )(?:[\d\.]+).+(?:x86_64|i386|Power%20Macintosh)|(?:x86_64-apple-)?darwin(?:[\d\.]+)|C?Python.*Darwin|PowerMac|com\.apple\.Safari\.SearchHelper|^Safari'
1080
1500
  name: 'Mac'
1081
1501
  versions:
1082
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?23.2.0'
1502
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?24\.0\.0'
1503
+ version: '15.0'
1504
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?23\.5\.0'
1505
+ version: '14.5'
1506
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?23\.4\.0'
1507
+ version: '14.4'
1508
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?23\.3\.0'
1509
+ version: '14.3'
1510
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?23\.2\.0'
1083
1511
  version: '14.2'
1084
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?23.1.0'
1512
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?23\.1\.0'
1085
1513
  version: '14.1'
1086
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?23.0.0'
1514
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?23\.0\.0'
1087
1515
  version: '14.0'
1088
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?22.6.0'
1516
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?22\.6\.0'
1089
1517
  version: '13.5'
1090
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?22.5.0'
1518
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?22\.5\.0'
1091
1519
  version: '13.4'
1092
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?22.4.0'
1520
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?22\.4\.0'
1093
1521
  version: '13.3'
1094
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?22.3.0'
1522
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?22\.3\.0'
1095
1523
  version: '13.2'
1096
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?22.2.0'
1524
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?22\.2\.0'
1097
1525
  version: '13.1'
1098
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?22.1.0'
1526
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?22\.1\.0'
1099
1527
  version: '13.0.1'
1100
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?22.0.0'
1528
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?22\.0\.0'
1101
1529
  version: '13.0'
1102
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?21.6.0'
1530
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?21\.6\.0'
1103
1531
  version: '12.5'
1104
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?21.5.0'
1532
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?21\.5\.0'
1105
1533
  version: '12.4'
1106
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?21.4.0'
1534
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?21\.4\.0'
1107
1535
  version: '12.3'
1108
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?21.3.0'
1536
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?21\.3\.0'
1109
1537
  version: '12.2'
1110
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?21.2.0'
1538
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?21\.2\.0'
1111
1539
  version: '12.1'
1112
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?21.1.0'
1540
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?21\.1\.0'
1113
1541
  version: '12.0.1'
1114
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?21.0.0'
1542
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?21\.0\.0'
1115
1543
  version: '12.0'
1116
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?20.6.0'
1544
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?20\.6\.0'
1117
1545
  version: '11.5'
1118
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?20.5.0'
1546
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?20\.5\.0'
1119
1547
  version: '11.4'
1120
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?20.4.0'
1548
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?20\.4\.0'
1121
1549
  version: '11.3'
1122
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?20.3.0'
1550
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?20\.3\.0'
1123
1551
  version: '11.2'
1124
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?20.2.0.*'
1552
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?20\.2\.0.*'
1125
1553
  version: '11.1'
1126
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?20.[01].0'
1554
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?20\.[01]\.0'
1127
1555
  version: '11.0'
1128
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?19.6.0'
1556
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?19\.6\.0'
1129
1557
  version: '10.15.6'
1130
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?19.5.0'
1558
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?19\.5\.0'
1131
1559
  version: '10.15.5'
1132
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?19.4.0'
1560
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?19\.4\.0'
1133
1561
  version: '10.15.4'
1134
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?19.3.0'
1562
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?19\.3\.0'
1135
1563
  version: '10.15.3'
1136
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?19.2.0'
1564
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?19\.2\.0'
1137
1565
  version: '10.15.2'
1138
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?19.0.0'
1566
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?19\.0\.0'
1139
1567
  version: '10.15'
1140
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?18.7.0'
1568
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?18\.7\.0'
1141
1569
  version: '10.14'
1142
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?18.6.0'
1570
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?18\.6\.0'
1143
1571
  version: '10.14.5'
1144
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?18.5.0'
1572
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?18\.5\.0'
1145
1573
  version: '10.14.4'
1146
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?18.2.0'
1574
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?18\.2\.0'
1147
1575
  version: '10.14.1'
1148
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?18.0.0'
1576
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?18\.0\.0'
1149
1577
  version: '10.14'
1150
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?17.7.0'
1578
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?17\.7\.0'
1151
1579
  version: '10.13.6'
1152
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?17.6.0'
1580
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?17\.6\.0'
1153
1581
  version: '10.13.5'
1154
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?17.5.0'
1582
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?17\.5\.0'
1155
1583
  version: '10.13.4'
1156
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?17.4.0'
1584
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?17\.4\.0'
1157
1585
  version: '10.13.3'
1158
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?17.3.0'
1586
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?17\.3\.0'
1159
1587
  version: '10.13.2'
1160
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?17.2.0'
1588
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?17\.2\.0'
1161
1589
  version: '10.13.1'
1162
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?17.0.0'
1590
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?17\.0\.0'
1163
1591
  version: '10.13'
1164
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16.7.0'
1592
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16\.7\.0'
1165
1593
  version: '10.12.6'
1166
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16.6.0'
1594
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16\.6\.0'
1167
1595
  version: '10.12.5'
1168
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16.5.0'
1596
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16\.5\.0'
1169
1597
  version: '10.12.4'
1170
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16.4.0'
1598
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16\.4\.0'
1171
1599
  version: '10.12.3'
1172
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16.3.0'
1600
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16\.3\.0'
1173
1601
  version: '10.12.2'
1174
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16.2.0'
1602
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16\.2\.0'
1175
1603
  version: '10.12.2'
1176
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16.1.0'
1604
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16\.1\.0'
1177
1605
  version: '10.12.1'
1178
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16.0.0'
1606
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?16\.0\.0'
1179
1607
  version: '10.12'
1180
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?15.6.0'
1608
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?15\.6\.0'
1181
1609
  version: '10.11.6'
1182
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?15.5.0'
1610
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?15\.5\.0'
1183
1611
  version: '10.11.5'
1184
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?15.4.0'
1612
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?15\.4\.0'
1185
1613
  version: '10.11.4'
1186
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?15.3.0'
1614
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?15\.3\.0'
1187
1615
  version: '10.11.3'
1188
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?15.2.0'
1616
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?15\.2\.0'
1189
1617
  version: '10.11.2'
1190
1618
  - regex: 'CFNetwork/760'
1191
1619
  version: '10.11'
1192
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?14.5.0'
1620
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?14\.5\.0'
1193
1621
  version: '10.10.5'
1194
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?14.4.0'
1622
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?14\.4\.0'
1195
1623
  version: '10.10.4'
1196
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?14.3.0'
1624
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?14\.3\.0'
1197
1625
  version: '10.10.3'
1198
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?14.1.0'
1626
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?14\.1\.0'
1199
1627
  version: '10.10.2'
1200
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?14.0.0'
1628
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?14\.0\.0'
1201
1629
  version: '10.10'
1202
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?13.4.0'
1630
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?13\.4\.0'
1203
1631
  version: '10.9.5'
1204
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?13.3.0'
1632
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?13\.3\.0'
1205
1633
  version: '10.9.4'
1206
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?13.2.0'
1634
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?13\.2\.0'
1207
1635
  version: '10.9.3'
1208
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?13.1.0'
1636
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?13\.1\.0'
1209
1637
  version: '10.9.2'
1210
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?13.0.0'
1638
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?13\.0\.0'
1211
1639
  version: '10.9.0'
1212
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?12.6.0'
1640
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?12\.6\.0'
1213
1641
  version: '10.8.5'
1214
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?12.5.0'
1642
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?12\.5\.0'
1215
1643
  version: '10.8.5'
1216
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?12.4.0'
1644
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?12\.4\.0'
1217
1645
  version: '10.8.4'
1218
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?12.3.0'
1646
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?12\.3\.0'
1219
1647
  version: '10.8.3'
1220
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?12.2.0'
1648
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?12\.2\.0'
1221
1649
  version: '10.8.2'
1222
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?12.1.0'
1650
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?12\.1\.0'
1223
1651
  version: '10.8.1'
1224
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?11.5.0'
1652
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?11\.5\.0'
1225
1653
  version: '10.7.5'
1226
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?11.4.2'
1654
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?11\.4\.2'
1227
1655
  version: '10.7.5'
1228
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?11.4.0'
1656
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?11\.4\.0'
1229
1657
  version: '10.7.4'
1230
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?11.3.0'
1658
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?11\.3\.0'
1231
1659
  version: '10.7.3'
1232
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?11.2.0'
1660
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?11\.2\.0'
1233
1661
  version: '10.7.2'
1234
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?11.1.0'
1662
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?11\.1\.0'
1235
1663
  version: '10.7.1'
1236
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?10.8.0'
1664
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?10\.8\.0'
1237
1665
  version: '10.6.8'
1238
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?10.7.[34]'
1666
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?10\.7\.[34]'
1239
1667
  version: '10.6.7'
1240
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?10.3.0'
1668
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?10\.3\.0'
1241
1669
  version: '10.6.3'
1242
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?10.0.0'
1670
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?10\.0\.0'
1243
1671
  version: '10.6'
1244
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?9.8.0'
1672
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?9\.8\.0'
1245
1673
  version: '10.5.8'
1246
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?9.7.1'
1674
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?9\.7\.1'
1247
1675
  version: '10.5.7'
1248
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?9.6.2'
1676
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?9\.6\.2'
1249
1677
  version: '10.5.6'
1250
- - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?9.5.[05]'
1678
+ - regex: '(?:x86_64-apple-)?Darwin(?:/|; )?9\.5\.[05]'
1251
1679
  version: '10.5.5'
1252
1680
 
1253
1681
  - regex: 'Macintosh;Mac OS X \((\d+[\.\d]+)\);'
@@ -1262,7 +1690,7 @@
1262
1690
  name: 'Mac'
1263
1691
  version: '$1'
1264
1692
 
1265
- - regex: '(?:macOS[ /,]|Mac-)(\d+[\.\d]+)'
1693
+ - regex: '(?:macOS(?:\(Catalyst\))?[ /,]|Mac-)(\d+[\.\d]+)'
1266
1694
  name: 'Mac'
1267
1695
  version: '$1'
1268
1696
 
@@ -1270,23 +1698,13 @@
1270
1698
  name: 'Mac'
1271
1699
  version: '$1'
1272
1700
 
1273
- - regex: 'Darwin|Macintosh|Mac_PowerPC|PPC|Mac PowerPC|iMac|MacBook|macOS|AppleExchangeWebServices|com.apple.trustd|Sonos/.+\(MDCR_'
1701
+ - regex: 'OSX/(\d+[\.\d]+)'
1274
1702
  name: 'Mac'
1275
- version: ''
1276
-
1277
- ##########
1278
- # SeewoOS
1279
- ##########
1280
- - regex: 'SeewoOS x86_64 (\d+[\.\d]+)'
1281
- name: 'SeewoOS'
1282
1703
  version: '$1'
1283
1704
 
1284
- ##########
1285
- # ChromeOS
1286
- ##########
1287
- - regex: 'CrOS [a-z0-9_]+ (\d+[\.\d]+)'
1288
- name: 'Chrome OS'
1289
- version: '$1'
1705
+ - regex: 'Darwin|Macintosh|Mac[ _]PowerPC|PPC|iMac|MacBook|.*macOS|AppleExchangeWebServices|com\.apple\.trustd|Sonos/.+\(MDCR_|WhatsApp/.*N$'
1706
+ name: 'Mac'
1707
+ version: ''
1290
1708
 
1291
1709
  ##########
1292
1710
  # Fuchsia
@@ -1413,10 +1831,6 @@
1413
1831
  name: 'Google TV'
1414
1832
  version: '$1'
1415
1833
 
1416
- - regex: 'AppleTV(?:/?(\d+[\.\d]+))?'
1417
- name: 'tvOS'
1418
- version: '$1'
1419
-
1420
1834
  - regex: 'WebTV/(\d+[\.\d]+)'
1421
1835
  name: 'WebTV'
1422
1836
  version: '$1'
@@ -1436,6 +1850,11 @@
1436
1850
  name: 'HP-UX'
1437
1851
  version: '$1'
1438
1852
 
1853
+ # ElectroBSD (https://www.fabiankeil.de/gehacktes/electrobsd/)
1854
+ - regex: 'ElectroBSD(?:[/ ]?(\d+[\.\d]+))?'
1855
+ name: 'ElectroBSD'
1856
+ version: '$1'
1857
+
1439
1858
  - regex: 'FreeBSD(?:[/ ]?(\d+[\.\d]+))?'
1440
1859
  name: 'FreeBSD'
1441
1860
  version: '$1'
@@ -1497,6 +1916,10 @@
1497
1916
  ##########
1498
1917
  # IBM
1499
1918
  ##########
1919
+ - regex: 'OS/2; Warp (\d+[\.\d]+)'
1920
+ name: 'OS/2'
1921
+ version: '$1'
1922
+
1500
1923
  - regex: 'OS/2'
1501
1924
  name: 'OS/2'
1502
1925
  version: ''
@@ -1508,13 +1931,13 @@
1508
1931
  name: 'GNU/Linux'
1509
1932
  version: '$1'
1510
1933
 
1511
- - regex: 'Linux(?:OS)?[^a-z]|Cinnamon/(?:\d+[\.\d]+)|.+(?:pc|unknown)-linux-gnu'
1934
+ - regex: 'Linux[^a-z]|Cinnamon/(?:\d+[\.\d]+)|.+(?:pc|unknown)-linux-gnu|X11'
1512
1935
  name: 'GNU/Linux'
1513
1936
  version: ''
1514
1937
 
1515
1938
  ##########
1516
1939
  # Java ME (Java Platform, Micro Edition)
1517
1940
  ##########
1518
- - regex: 'Java ME|(J2ME|Profile)/MIDP|MIDP-(?:\d+[\.\d]+)/CLDC|Configuration/CLDC|Java; U; MIDP|MMP/\d.\d'
1941
+ - regex: 'Java ME|(J2ME|Profile)/MIDP|MIDP-(?:\d+[\.\d]+)/CLDC|Configuration/CLDC|Java; U; MIDP|MMP/\d\.\d'
1519
1942
  name: 'Java ME'
1520
1943
  version: ''