PageRenderTime 102ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 1ms

/plugins/UserSettings/tests/UserSettings.test.php

https://github.com/quarkness/piwik
PHP | 860 lines | 712 code | 70 blank | 78 comment | 2 complexity | 13b322ac2d52b8a773ba6753a4c1eab4 MD5 | raw file
  1. <?php
  2. if(!defined('PIWIK_CONFIG_TEST_INCLUDED'))
  3. {
  4. require_once dirname(__FILE__)."/../../../tests/config_test.php";
  5. }
  6. if(!class_exists('Piwik_UserSettings', false))
  7. {
  8. require_once 'UserSettings/UserSettings.php';
  9. }
  10. require_once 'UserSettings/functions.php';
  11. class Test_Piwik_UserSettings extends UnitTestCase
  12. {
  13. // User agent strings and expected parser results
  14. protected $userAgents = array(
  15. // 'User Agent String' => array(
  16. // array( browser_id, name, short_name, version, major_number, minor_number, family ),
  17. // array( os_id, name, short_name )),
  18. // ABrowse
  19. 'Mozilla/5.0 (compatible; U; ABrowse 0.6; Syllable) AppleWebKit/420+ (KHTML, like Gecko)' => array(
  20. array('AB', 'ABrowse', 'ABrowse', '0.6', '0', '6', 'webkit'),
  21. array('SYL', 'Syllable', 'Syllable')),
  22. 'Mozilla/5.0 (compatible; ABrowse 0.4; Syllable)' => array(
  23. array('AB', 'ABrowse', 'ABrowse', '0.4', '0', '4', 'webkit'),
  24. array('SYL', 'Syllable', 'Syllable')),
  25. // Acoo Browser (treat as IE)
  26. 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; Acoo Browser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)' => array(
  27. array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
  28. array('WXP', 'Windows XP', 'Win XP')),
  29. 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Acoo Browser; .NET CLR 2.0.50727; .NET CLR 1.1.4322)' => array(
  30. array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
  31. array('WXP', 'Windows XP', 'Win XP')),
  32. 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Acoo Browser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)' => array(
  33. array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
  34. array('WXP', 'Windows XP', 'Win XP')),
  35. // Amaya
  36. 'amaya/9.52 libwww/5.4.0' => array(
  37. array('AM', 'Amaya', 'Amaya', '9.52', '9', '52', 'unknown'),
  38. false),
  39. // AmigaVoyager
  40. 'AmigaVoyager/3.2 (AmigaOS/MC680x0)' => array(
  41. array('AV', 'AmigaVoyager', 'AmigaVoyager', '3.2', '3', '2', 'unknown'),
  42. array('AMI', 'AmigaOS', 'AmigaOS')),
  43. 'AmigaVoyager/2.95 (compatible; MC680x0; AmigaOS; SV1)' => array(
  44. array('AV', 'AmigaVoyager', 'AmigaVoyager', '2.95', '2', '95', 'unknown'),
  45. array('AMI', 'AmigaOS', 'AmigaOS')),
  46. 'AmigaVoyager/2.95 (compatible; MC680x0; AmigaOS)' => array(
  47. array('AV', 'AmigaVoyager', 'AmigaVoyager', '2.95', '2', '95', 'unknown'),
  48. array('AMI', 'AmigaOS', 'AmigaOS')),
  49. // Android
  50. 'Mozilla/5.0 (Linux; U; Android 1.1; en-us; dream) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2' => array(
  51. array('SF', 'Safari', 'Safari', '3.0', '3', '0', 'webkit'),
  52. array('AND', 'Android', 'Android')),
  53. 'Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; Nexus One Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array(
  54. array('SF', 'Safari', 'Safari', '4.0', '4', '0', 'webkit'),
  55. array('AND', 'Android', 'Android')),
  56. 'Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; device Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Safari/533.1' => array(
  57. array('SF', 'Safari', 'Safari', '4.0', '4', '0', 'webkit'),
  58. array('AND', 'Android', 'Android')),
  59. // Android - Mobile Chrome
  60. /*
  61. 'Mozilla/5.0 (Linux; U; Android 4.1; en-us) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.16 Safari/534.24' => array(
  62. array('CH', 'Chrome', 'Chrome', '11.0', '11', '0', 'webkit'),
  63. array('AND', 'Android', 'Android')),
  64. */
  65. // AOL / America Online Browser (treat as IE)
  66. 'Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.43; Windows NT 5.1; .NET CLR 1.1.4322)' => array(
  67. array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
  68. array('WXP', 'Windows XP', 'Win XP')),
  69. 'Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.1; AOLBuild 4334.5009; Windows NT 5.1; GTB5; .NET CLR 1.1.4322)' => array(
  70. array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
  71. array('WXP', 'Windows XP', 'Win XP')),
  72. 'Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.0; Windows NT 5.1; InfoPath.1)' => array(
  73. array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
  74. array('WXP', 'Windows XP', 'Win XP')),
  75. 'Mozilla/4.0 (compatible; MSIE 6.0; AOL 8.0; Windows NT 5.1; SV1)' => array(
  76. array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
  77. array('WXP', 'Windows XP', 'Win XP')),
  78. 'Mozilla/4.0 (compatible; MSIE 7.0; AOL 7.0; Windows NT 5.1)' => array(
  79. array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
  80. array('WXP', 'Windows XP', 'Win XP')),
  81. 'Mozilla/4.0 (compatible; MSIE 5.5; AOL 6.0; Windows 98; Win 9x 4.90)' => array(
  82. array('IE', 'Internet Explorer', 'IE', '5.5', '5', '5', 'ie'),
  83. array('WME', 'Windows Me', 'Win Me')),
  84. 'Mozilla/4.0 (compatible; MSIE 5.5; AOL 5.0; Windows NT 5.0)' => array(
  85. array('IE', 'Internet Explorer', 'IE', '5.5', '5', '5', 'ie'),
  86. array('W2K', 'Windows 2000', 'Win 2000')),
  87. 'Mozilla/4.0 (compatible; MSIE 4.01; AOL 4.0; Windows 95)' => array(
  88. array('IE', 'Internet Explorer', 'IE', '4.01', '4', '01', 'ie'),
  89. array('W95', 'Windows 95', 'Win 95')),
  90. 'Mozilla/4.0 (compatible; MSIE 7.0; America Online Browser 1.1; Windows NT 5.1; (R1 1.5); .NET CLR 2.0.50727; InfoPath.1)' => array(
  91. array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
  92. array('WXP', 'Windows XP', 'Win XP')),
  93. 'Mozilla/4.0 (compatible; MSIE 6.0; America Online Browser 1.1; Windows 98)' => array(
  94. array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
  95. array('W98', 'Windows 98', 'Win 98')),
  96. // Arora
  97. 'Mozilla/5.0 (X11; U; Linux; de-DE) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.8.0' => array(
  98. array('AR', 'Arora', 'Arora', '0.8', '0', '8', 'webkit'),
  99. array('LIN', 'Linux', 'Linux')),
  100. 'Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6' => array(
  101. array('AR', 'Arora', 'Arora', '0.6', '0', '6', 'webkit'),
  102. array('LIN', 'Linux', 'Linux')),
  103. 'Mozilla/5.0 (Windows; U; Windows NT 5.2; pt-BR) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.4 (Change: )' => array(
  104. array('AR', 'Arora', 'Arora', '0.4', '0', '4', 'webkit'),
  105. array('WS3', 'Windows Server 2003 / XP x64', 'Win S2003')),
  106. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)' => array(
  107. array('AR', 'Arora', 'Arora', '0.3', '0', '3', 'webkit'),
  108. array('WXP', 'Windows XP', 'Win XP')),
  109. 'Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.2 (Change: 189 35c14e0)' => array(
  110. array('AR', 'Arora', 'Arora', '0.2', '0', '2', 'webkit'),
  111. array('LIN', 'Linux', 'Linux')),
  112. // Avant (treat as IE)
  113. 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser; .NET CLR 2.0.50727; MAXTHON 2.0)' => array(
  114. array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
  115. array('WXP', 'Windows XP', 'Win XP')),
  116. 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; Avant Browser; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)' => array(
  117. array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
  118. array('WI7', 'Windows 7', 'Win 7')),
  119. // AWeb
  120. 'Amiga-AWeb/3.5.07 beta' => array(
  121. array('AW', 'Amiga AWeb', 'AWeb', '3.5', '3', '5', 'unknown'),
  122. array('AMI', 'AmigaOS', 'AmigaOS')),
  123. 'Mozilla/6.0; (Spoofed by Amiga-AWeb/3.5.07 beta)' => array(
  124. array('AW', 'Amiga AWeb', 'AWeb', '3.5', '3', '5', 'unknown'),
  125. array('AMI', 'AmigaOS', 'AmigaOS')),
  126. 'MSIE/6.0; (Spoofed by Amiga-AWeb/3.4APL)' => array(
  127. array('AW', 'Amiga AWeb', 'AWeb', '3.4', '3', '4', 'unknown'),
  128. array('AMI', 'AmigaOS', 'AmigaOS')),
  129. // Beonex
  130. 'Mozilla/5.0 (Windows; U; WinNT; en; rv:1.0.2) Gecko/20030311 Beonex/0.8.2-stable' => array(
  131. array('BE', 'Beonex', 'Beonex', '0.8', '0', '8', 'unknown'),
  132. array('WNT', 'Windows NT', 'Win NT')),
  133. 'Mozilla/5.0 (Windows; U; WinNT; en; Preview) Gecko/20020603 Beonex/0.8-stable' => array(
  134. array('BE', 'Beonex', 'Beonex', '0.8', '0', '8', 'unknown'),
  135. array('WNT', 'Windows NT', 'Win NT')),
  136. // BlackBerry
  137. 'BlackBerry8700/4.1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1' => array(
  138. array('BB', 'BlackBerry', 'BlackBerry', '4.1', '4', '1', 'webkit'),
  139. array('BLB', 'BlackBerry', 'BlackBerry')),
  140. 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, Like Gecko) Version/6.0.0.141 Mobile Safari/534.1+' => array(
  141. array('BB', 'BlackBerry', 'BlackBerry', '6.0', '6', '0', 'webkit'),
  142. array('BLB', 'BlackBerry', 'BlackBerry')),
  143. 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 1.0.0; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/0.0.1 Safari/534.11+' => array(
  144. array('BP', 'PlayBook', 'PlayBook', '0.0', '0', '0', 'webkit' ),
  145. array('QNX', 'QNX', 'QNX')),
  146. // BrowseX
  147. 'Mozilla/4.61 [en] (X11; U; ) - BrowseX (2.0.0 Windows)' => array(
  148. array('BX', 'BrowseX', 'BrowseX', '2.0', '2', '0', 'unknown'),
  149. false),
  150. // Camino (formerly known as Chimera; not to be confused with another browser also named Chimera)
  151. 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en; rv:1.9.0.8pre) Gecko/2009022800 Camino/2.0b3pre' => array(
  152. array('CA', 'Camino', 'Camino', '2.0', '2', '0', 'gecko'),
  153. array('MAC', 'Mac OS', 'Mac OS')),
  154. 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en; rv:1.9.0.10pre) Gecko/2009041800 Camino/2.0b3pre (like Firefox/3.0.10pre)' => array(
  155. array('CA', 'Camino', 'Camino', '2.0', '2', '0', 'gecko'),
  156. array('MAC', 'Mac OS', 'Mac OS')),
  157. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en; rv:1.8.1.4pre) Gecko/20070511 Camino/1.6pre' => array(
  158. array('CA', 'Camino', 'Camino', '1.6', '1', '6', 'gecko'),
  159. array('MAC', 'Mac OS', 'Mac OS')),
  160. 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en; rv:1.8.1.6) Gecko/20070809 Firefox/2.0.0.6 Camino/1.5.1' => array(
  161. array('CA', 'Camino', 'Camino', '1.5', '1', '5', 'gecko'),
  162. array('MAC', 'Mac OS', 'Mac OS')),
  163. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.0.1) Gecko/20030306 Camino/0.7' => array(
  164. array('CA', 'Camino', 'Camino', '0.7', '0', '7', 'gecko'),
  165. array('MAC', 'Mac OS', 'Mac OS')),
  166. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; pl-PL; rv:1.0.1) Gecko/20021111 Chimera/0.6' => array(
  167. array('CA', 'Camino', 'Camino', '0.6', '0', '6', 'gecko'),
  168. array('MAC', 'Mac OS', 'Mac OS')),
  169. // Cheshire
  170. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.8 (KHTML, like Gecko, Safari) Cheshire/1.0.UNOFFICIAL' => array(
  171. array('CS', 'Cheshire', 'Cheshire', '1.0', '1', '0', 'webkit'),
  172. array('MAC', 'Mac OS', 'Mac OS')),
  173. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/419 (KHTML, like Gecko, Safari/419.3) Cheshire/1.0.ALPHA' => array(
  174. array('CS', 'Cheshire', 'Cheshire', '1.0', '1', '0', 'webkit'),
  175. array('MAC', 'Mac OS', 'Mac OS')),
  176. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.9 (KHTML, like Safari) Cheshire/1.0.ALPHA' => array(
  177. array('CS', 'Cheshire', 'Cheshire', '1.0', '1', '0', 'webkit'),
  178. array('MAC', 'Mac OS', 'Mac OS')),
  179. // Chrome / Chromium
  180. 'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9' => array(
  181. array('CH', 'Chrome', 'Chrome', '5.0', '5', '0', 'webkit'),
  182. array('WS3', 'Windows Server 2003 / XP x64', 'Win S2003')),
  183. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.48 Safari/525.19' => array(
  184. array('CH', 'Chrome', 'Chrome', '1.0', '1', '0', 'webkit'),
  185. array('WXP', 'Windows XP', 'Win XP')),
  186. 'Mozilla/5.0 (Linux; U; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13' => array(
  187. array('CH', 'Chrome', 'Chrome', '0.2', '0', '2', 'webkit'),
  188. array('LIN', 'Linux', 'Linux')),
  189. 'Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.16 Safari/534.24' => array(
  190. array('CH', 'Chrome', 'Chrome', '11.0', '11', '0', 'webkit'),
  191. array('WVI', 'Windows Vista', 'Win Vista')),
  192. 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.16 Safari/534.24' => array(
  193. array('CH', 'Chrome', 'Chrome', '11.0', '11', '0', 'webkit'),
  194. array('LIN', 'Linux', 'Linux')),
  195. // ChromePlus (treat as Chrome)
  196. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) ChromePlus/4.0.222.3 Chrome/4.0.222.3 Safari/532.2' => array(
  197. array('CH', 'Chrome', 'Chrome', '4.0', '4', '0', 'webkit'),
  198. array('WXP', 'Windows XP', 'Win XP')),
  199. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 ChromePlus/4.0.222.3 Chrome/4.0.222.3 Safari/525.28.3' => array(
  200. array('CH', 'Chrome', 'Chrome', '3.2', '3', '2', 'webkit'),
  201. array('WXP', 'Windows XP', 'Win XP')),
  202. // CometBird
  203. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2009011615 Firefox/3.0.5 CometBird/3.0.5' => array(
  204. array('CO', 'CometBird', 'CometBird', '3.0', '3', '0', 'gecko'),
  205. array('WXP', 'Windows XP', 'Win XP')),
  206. // Crazy Browser (treat as IE)
  207. 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 1.1.4322; Crazy Browser 3.0.0 Beta2)' => array(
  208. array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
  209. array('WXP', 'Windows XP', 'Win XP')),
  210. 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser; .NET CLR 2.0.50727; .NET CLR 3.0.04506.590; .NET CLR 3.5.20706; Crazy Browser 2.0.1)' => array(
  211. array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
  212. array('WXP', 'Windows XP', 'Win XP')),
  213. // Dillo
  214. 'Dillo/2.0' => array(
  215. array('DI', 'Dillo', 'Dillo', '2.0', '2', '0', 'unknown'),
  216. false),
  217. 'Dillo/0.6.4' => array(
  218. array('DI', 'Dillo', 'Dillo', '0.6', '0', '6', 'unknown'),
  219. false),
  220. // Dolfin (or Dolphin, depending on which Samsung documentation you read); and yes, it's "bada" (lower-case)
  221. 'Mozilla/5.0 (SAMSUNG; SAMSUNG-GT-S5250/S5250AIJI3; U; Bada/1.0; it-it) AppleWebKit/533.1 (KHTML, like Gecko) Dolfin/2.0 Mobile WQVGA SMM-MMS/1.2.0 NexPlayer/3.0 profile/MIDP-2.1 configuration/CLDC-1.1 OPN-B' => array(
  222. array('DF', 'Dolfin', 'Dolfin', '2.0', '2', '0', 'webkit'),
  223. array('SBA', 'bada', 'bada')),
  224. 'Mozilla/5.0 (SAMSUNG; SAMSUNG-GT-S8530/S8530XXJKA; U; Bada/1.2; en-us) AppleWebKit/533.1 (KHTML, like Gecko) Dolfin/2.2 Mobile WVGA SMM-MMS/1.2.0 OPN-B' => array(
  225. array('DF', 'Dolfin', 'Dolfin', '2.2', '2', '2', 'webkit'),
  226. array('SBA', 'bada', 'bada')),
  227. // ELinks
  228. 'ELinks/0.12~pre2.dfsg0-1ubuntu1-lite (textmode; Debian; Linux 2.6.32-4-jolicloud i686; 143x37-2)' => array(
  229. array('EL', 'ELinks', 'ELinks', '0.12', '0', '12', 'unknown'),
  230. array('LIN', 'Linux', 'Linux')),
  231. 'ELinks/0.12pre5.GIT (textmode; CYGWIN_NT-6.1 1.7.1(0.218/5/3) i686; 80x24-2)' => array(
  232. array('EL', 'ELinks', 'ELinks', '0.12', '0', '12', 'unknown'),
  233. array('WI7', 'Windows 7', 'Win 7')),
  234. 'ELinks (0.4.3; NetBSD 3.0.2_PATCH sparc64; 141x19)' => array(
  235. array('EL', 'ELinks', 'ELinks', '0.4', '0', '4', 'unknown'),
  236. array('NBS', 'NetBSD', 'NetBSD')),
  237. // Epiphany
  238. 'Mozilla/5.0 (X11; U; Linux i686; en-us) AppleWebKit/531.2+ (KHTML, like Gecko) Safari/531.2+ Epiphany/2.29.5' => array(
  239. array('EP', 'Epiphany', 'Epiphany', '2.29', '2', '29', 'webkit'),
  240. array('LIN', 'Linux', 'Linux')),
  241. 'Mozilla/5.0 (X11; U; Linux i686; en; rv:1.9.0.11) Gecko/20080528 Epiphany/2.22 Firefox/3.0' => array(
  242. // technically, this should be 'gecko' but UserAgentParser only supports one browserType (family) per browser
  243. array('EP', 'Epiphany', 'Epiphany', '2.22', '2', '22', 'webkit'),
  244. array('LIN', 'Linux', 'Linux')),
  245. // Fennec
  246. 'Mozilla/5.0 (Android; Linux armv7l; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1' => array(
  247. array('FE', 'Fennec', 'Fennec', '2.0', '2', '0', 'gecko'),
  248. array('AND', 'Android', 'Android')),
  249. 'Mozilla/5.0 (Maemo; Linux armv7l; rv2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1' => array(
  250. array('FE', 'Fennec', 'Fennec', '2.0', '2', '0', 'gecko'),
  251. array('MAE', 'Maemo', 'Maemo')),
  252. 'Mozilla/5.0 (X11; Linux i686; rv2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1' => array(
  253. array('FE', 'Fennec', 'Fennec', '2.0', '2', '0', 'gecko'),
  254. array('LIN', 'Linux', 'Linux')),
  255. 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2a1pre) Gecko/20090626 Fennec/1.0b2' => array(
  256. array('FE', 'Fennec', 'Fennec', '1.0', '1', '0', 'gecko'),
  257. array('MAC', 'Mac OS', 'Mac OS')),
  258. 'Mozilla/5.0 (X11; U; Linux armv6l; en-US; rv:1.9.1b1pre) Gecko/20081005220218 Gecko/2008052201 Fennec/0.9pre' => array(
  259. array('FE', 'Fennec', 'Fennec', '0.9', '0', '9', 'gecko'),
  260. array('LIN', 'Linux', 'Linux')),
  261. 'Mozilla/5.0 (X11; U; Linux armv6l; en-US; rv:1.9.1a1pre) Gecko/2008071707 Fennec/0.5' => array(
  262. array('FE', 'Fennec', 'Fennec', '0.5', '0', '5', 'gecko'),
  263. array('LIN', 'Linux', 'Linux')),
  264. // Firefox (formerly Firebird, formerly Phoenix; and rebranded versions)
  265. 'Mozilla/5.0 (X11; Linux i686; rv:5.0a2) Gecko/20110413 Firefox/5.0a2' => array(
  266. array('FF', 'Firefox', 'Firefox', '5.0', '5', '0', 'gecko'),
  267. array('LIN', 'Linux', 'Linux')),
  268. 'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1' => array(
  269. array('FF', 'Firefox', 'Firefox', '4.0', '4', '0', 'gecko'),
  270. array('WI7', 'Windows 7', 'Win 7')),
  271. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:2.0a1pre) Gecko/2008060602 Minefield/4.0a1pre' => array(
  272. array('FF', 'Firefox', 'Firefox', '4.0', '4', '0', 'gecko'),
  273. array('LIN', 'Linux', 'Linux')),
  274. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:2.0a1pre) Gecko/2008060602 Minefield/4.0a1p' => array(
  275. array('FF', 'Firefox', 'Firefox', '4.0', '4', '0', 'gecko'),
  276. array('LIN', 'Linux', 'Linux')),
  277. 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2a2pre) Gecko/20090826 Namoroka/3.6a2pre' => array(
  278. array('FF', 'Firefox', 'Firefox', '3.6', '3', '6', 'gecko'),
  279. array('WVI', 'Windows Vista', 'Win Vista')),
  280. 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2) Gecko/20100119 Namoroka/3.6' => array(
  281. array('FF', 'Firefox', 'Firefox', '3.6', '3', '6', 'gecko'),
  282. array('WI7', 'Windows 7', 'Win 7')),
  283. 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1b4pre) Gecko/20090420 Shiretoko/3.5b4pre (.NET CLR 3.5.30729)' => array(
  284. array('FF', 'Firefox', 'Firefox', '3.5', '3', '5', 'gecko'),
  285. array('WI7', 'Windows 7', 'Win 7')),
  286. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.2) Gecko/20090803 Ubuntu/9.04 (jaunty) Shiretoko/3.5.2' => array(
  287. array('FF', 'Firefox', 'Firefox', '3.5', '3', '5', 'gecko'),
  288. array('LIN', 'Linux', 'Linux')),
  289. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6' => array(
  290. array('FF', 'Firefox', 'Firefox', '3.0', '3', '0', 'gecko'),
  291. array('WXP', 'Windows XP', 'Win XP')),
  292. 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9a7) Gecko/2007080210 GranParadiso/3.0a7' => array(
  293. array('FF', 'Firefox', 'Firefox', '3.0', '3', '0', 'gecko'),
  294. array('WVI', 'Windows Vista', 'Win Vista')),
  295. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008072716 IceCat/3.0.1-g1' => array(
  296. array('FF', 'Firefox', 'Firefox', '3.0', '3', '0', 'gecko'),
  297. array('LIN', 'Linux', 'Linux')),
  298. 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.1) Gecko/2008071420 Iceweasel/3.0.1 (Debian-3.0.1-1)' => array(
  299. array('FF', 'Firefox', 'Firefox', '3.0', '3', '0', 'gecko'),
  300. array('LIN', 'Linux', 'Linux')),
  301. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1b2) Gecko/20060821 BonEcho/2.0b2' => array(
  302. array('FF', 'Firefox', 'Firefox', '2.0', '2', '0', 'gecko'),
  303. array('LIN', 'Linux', 'Linux')),
  304. 'Mozilla/5.0 (X11; U; Darwin Power Macintosh; en-US; rv:1.8.0.12) Gecko/20070803 Firefox/1.5.0.12 Fink Community Edition' => array(
  305. array('FF', 'Firefox', 'Firefox', '1.5', '1', '5', 'gecko'),
  306. array('MAC', 'Mac OS', 'Mac OS')),
  307. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6b) Gecko/20031212 Firebird/0.7+' => array(
  308. array('FB', 'Firebird', 'Firebird', '0.7', '0', '7', 'gecko'),
  309. array('WXP', 'Windows XP', 'Win XP')),
  310. 'Mozilla/5.0 (Windows; U; Win98; de-DE; rv:1.4b) Gecko/20030516 Mozilla Firebird/0.6' => array(
  311. array('FB', 'Firebird', 'Firebird', '0.6', '0', '6', 'gecko'),
  312. array('W98', 'Windows 98', 'Win 98')),
  313. 'Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.3a) Gecko/20021207 Phoenix/0.5' => array(
  314. array('PX', 'Phoenix', 'Phoenix', '0.5', '0', '5', 'gecko'),
  315. array('WNT', 'Windows NT', 'Win NT')),
  316. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.2b) Gecko/20020923 Phoenix/0.1' => array(
  317. array('PX', 'Phoenix', 'Phoenix', '0.1', '0', '1', 'gecko'),
  318. array('WXP', 'Windows XP', 'Win XP')),
  319. 'Mozilla/5.0 (Nintendo DS v4; U; M3 Adapter CF + PassMe2; en-US; rv:1.8.0.6 ) Gecko/20060728 Firefox/1.5.0.6 (firefox.gba.ds)' => array(
  320. array('FF', 'Firefox', 'Firefox', '1.5', '1', '5', 'gecko'),
  321. array('NDS', 'Nintendo DS', 'DS')),
  322. // Flock
  323. 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Flock/3.0.0.3737 Chrome/4.1.249.1071 Safari/532.5' => array(
  324. array('FL', 'Flock', 'Flock', '3.0', '3', '0', 'webkit'),
  325. array('WI7', 'Windows 7', 'Win 7')),
  326. // pre-3.0 is actually gecko
  327. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 Flock/2.5.6 (.NET CLR 3.5.30729)' => array(
  328. array('FL', 'Flock', 'Flock', '2.5', '2', '5', 'webkit'),
  329. array('WXP', 'Windows XP', 'Win XP')),
  330. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 AppleWebKit/531.21.8 KHTML/4.3.5 (like Gecko) Firefox/3.5.7 Flock/2.5.6 (.NET CLR 3.5.30729)' => array(
  331. array('FL', 'Flock', 'Flock', '2.5', '2', '5', 'webkit'),
  332. array('WXP', 'Windows XP', 'Win XP')),
  333. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 AppleWebKit/531.21.8 (KHTML, like Gecko) Firefox/3.5.7 Flock/2.5.6 (.NET CLR 3.5.30729)' => array(
  334. array('FL', 'Flock', 'Flock', '2.5', '2', '5', 'webkit'),
  335. array('WXP', 'Windows XP', 'Win XP')),
  336. 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.9) Gecko/20071106 Firefox/2.0.0.9 Flock/1.0.1' => array(
  337. array('FL', 'Flock', 'Flock', '1.0', '1', '0', 'webkit'),
  338. array('MAC', 'Mac OS', 'Mac OS')),
  339. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.1.8) Gecko/20071101 Firefox/2.0.0.8 Flock/1.0' => array(
  340. array('FL', 'Flock', 'Flock', '1.0', '1', '0', 'webkit'),
  341. array('MAC', 'Mac OS', 'Mac OS')),
  342. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8b5) Gecko/20051021 Flock/0.4 Firefox/1.0+' => array(
  343. array('FL', 'Flock', 'Flock', '0.4', '0', '4', 'webkit'),
  344. array('MAC', 'Mac OS', 'Mac OS')),
  345. // Fluid
  346. 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; nl-nl) AppleWebKit/532.3+ (KHTML, like Gecko) Fluid/0.9.6 Safari/532.3+' => array(
  347. array('FD', 'Fluid', 'Fluid', '0.9', '0', '9', 'webkit'),
  348. array('MAC', 'Mac OS', 'Mac OS')),
  349. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Fluid/0.9.4 Safari/525.13' => array(
  350. array('FD', 'Fluid', 'Fluid', '0.9', '0', '9', 'webkit'),
  351. array('WXP', 'Windows XP', 'Win XP')),
  352. // Galeon
  353. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko/20090327 Galeon/2.0.7' => array(
  354. array('GA', 'Galeon', 'Galeon', '2.0', '2', '0', 'gecko'),
  355. array('LIN', 'Linux', 'Linux')),
  356. 'Mozilla/5.0 (X11; U; OpenBSD i386; en-US; rv:1.8.1.19) Gecko/20090701 Galeon/2.0.7' => array(
  357. array('GA', 'Galeon', 'Galeon', '2.0', '2', '0', 'gecko'),
  358. array('OBS', 'OpenBSD', 'OpenBSD')),
  359. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.19) Gecko/20081216 Galeon/2.0.4 Firefox/2.0.0.19' => array(
  360. array('GA', 'Galeon', 'Galeon', '2.0', '2', '0', 'gecko'),
  361. array('LIN', 'Linux', 'Linux')),
  362. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.13pre) Gecko/20080207 Galeon/2.0.1 (Ubuntu package 2.0.1-1ubuntu2) Firefox/1.5.0.13pre' => array(
  363. array('GA', 'Galeon', 'Galeon', '2.0', '2', '0', 'gecko'),
  364. array('LIN', 'Linux', 'Linux')),
  365. 'Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.6) Gecko/20040406 Galeon/1.3.15' => array(
  366. array('GA', 'Galeon', 'Galeon', '1.3', '1', '3', 'gecko'),
  367. array('BSD', 'FreeBSD', 'FreeBSD')),
  368. 'Mozilla/5.0 Galeon/1.2.9 (X11; Linux i686; U;) Gecko/20021213 Debian/1.2.9-0.bunk' => array(
  369. array('GA', 'Galeon', 'Galeon', '1.2', '1', '2', 'gecko'),
  370. array('LIN', 'Linux', 'Linux')),
  371. 'Mozilla/5.0 Galeon/1.0.3 (X11; Linux i686; U;) Gecko/0' => array(
  372. array('GA', 'Galeon', 'Galeon', '1.0', '1', '0', 'gecko'),
  373. array('LIN', 'Linux', 'Linux')),
  374. // Google Earth embedded browser
  375. 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.4 (KHTML, like Gecko) Google Earth/5.2.1.1329 Safari/532.4' => array(
  376. array('GE', 'Google Earth', 'Google Earth', '5.2', '5', '2', 'webkit'),
  377. array('WI7', 'Windows 7', 'Win 7')),
  378. // GreenBrowser (treat as IE)
  379. 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0; .NET CLR 3.5.21022; GreenBrowser)' => array(
  380. array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
  381. array('WXP', 'Windows XP', 'Win XP')),
  382. 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; InfoPath.2; .NET CLR 3.0.30729; GreenBrowser)' => array(
  383. array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
  384. array('WVI', 'Windows Vista', 'Win Vista')),
  385. // Hana
  386. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.9 (KHTML, like Gecko) Hana/1.1' => array(
  387. array('HA', 'Hana', 'Hana', '1.1', '1', '1', 'webkit'),
  388. array('MAC', 'Mac OS', 'Mac OS')),
  389. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/417.9 (KHTML, like Gecko) Hana/1.0' => array(
  390. array('HA', 'Hana', 'Hana', '1.0', '1', '0', 'webkit'),
  391. array('MAC', 'Mac OS', 'Mac OS')),
  392. // HotJava
  393. 'HotJava/1.1.2 FCS' => array(
  394. array('HJ', 'HotJava', 'HotJava', '1.1', '1', '1', 'unknown'),
  395. false),
  396. 'HotJava/1.0.1/JRE1.1.x' => array(
  397. array('HJ', 'HotJava', 'HotJava', '1.0', '1', '0', 'unknown'),
  398. false),
  399. // iBrowse
  400. 'Mozilla/5.0 (compatible; IBrowse 3.0; AmigaOS4.0)' => array(
  401. array('IB', 'IBrowse', 'IBrowse', '3.0', '3', '0', 'unknown'),
  402. array('AMI', 'AmigaOS', 'AmigaOS')),
  403. 'Mozilla/4.0 (compatible; IBrowse 2.3; AmigaOS4.0)' => array(
  404. array('IB', 'IBrowse', 'IBrowse', '2.3', '2', '3', 'unknown'),
  405. array('AMI', 'AmigaOS', 'AmigaOS')),
  406. 'IBrowse/2.4 (AmigaOS 3.9; 68K)' => array(
  407. array('IB', 'IBrowse', 'IBrowse', '2.4', '2', '4', 'unknown'),
  408. array('AMI', 'AmigaOS', 'AmigaOS')),
  409. 'IBrowse/2.3 (AmigaOS V51)' => array(
  410. array('IB', 'IBrowse', 'IBrowse', '2.3', '2', '3', 'unknown'),
  411. array('AMI', 'AmigaOS', 'AmigaOS')),
  412. 'IBrowse/2.3 (AmigaOS 4.0)' => array(
  413. array('IB', 'IBrowse', 'IBrowse', '2.3', '2', '3', 'unknown'),
  414. array('AMI', 'AmigaOS', 'AmigaOS')),
  415. // iCab
  416. 'iCab/4.5 (Macintosh; U; PPC Mac OS X)' => array(
  417. array('IC', 'iCab', 'iCab', '4.5', '4', '5', 'unknown'),
  418. array('MAC', 'Mac OS', 'Mac OS')),
  419. 'iCab/4.5 (Macintosh; U; Mac OS X Leopard 10.5.7)' => array(
  420. array('IC', 'iCab', 'iCab', '4.5', '4', '5', 'unknown'),
  421. array('MAC', 'Mac OS', 'Mac OS')),
  422. 'Mozilla/5.0 (compatible; iCab 3.0.5; Macintosh; U; PPC Mac OS)' => array(
  423. array('IC', 'iCab', 'iCab', '3.0', '3', '0', 'unknown'),
  424. array('MAC', 'Mac OS', 'Mac OS')),
  425. 'Mozilla/5.0 (compatible; iCab 3.0.5; Macintosh; U; PPC Mac OS X)' => array(
  426. array('IC', 'iCab', 'iCab', '3.0', '3', '0', 'unknown'),
  427. array('MAC', 'Mac OS', 'Mac OS')),
  428. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS; en) iCab 3' => array(
  429. array('IC', 'iCab', 'iCab', '3.0', '3', '0', 'unknown'),
  430. array('MAC', 'Mac OS', 'Mac OS')),
  431. 'Mozilla/4.5 (compatible; iCab 2.7.1; Macintosh; I; PPC)' => array(
  432. array('IC', 'iCab', 'iCab', '2.7', '2', '7', 'unknown'),
  433. array('MAC', 'Mac OS', 'Mac OS')),
  434. 'iCab/2.9.8 (Macintosh; U; 68K)' => array(
  435. array('IC', 'iCab', 'iCab', '2.9', '2', '9', 'unknown'),
  436. array('MAC', 'Mac OS', 'Mac OS')),
  437. 'Lynx/2.8 (compatible; iCab 2.9.8; Macintosh; U; 68K)' => array(
  438. array('IC', 'iCab', 'iCab', '2.9', '2', '9', 'unknown'),
  439. array('MAC', 'Mac OS', 'Mac OS')),
  440. 'Mozilla/4/5 (compatible; iCab 2.9.8; Macintosh; U; 68K)' => array(
  441. array('IC', 'iCab', 'iCab', '2.9', '2', '9', 'unknown'),
  442. array('MAC', 'Mac OS', 'Mac OS')),
  443. 'Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC)' => array(
  444. array('IE', 'Internet Explorer', 'IE', '5.0', '5', '0', 'ie'),
  445. array('MAC', 'Mac OS', 'Mac OS')),
  446. 'Mozilla/4.76 (Macintosh; I; PPC)' => array(
  447. array('NS', 'Netscape', 'Netscape', '4.76', '4', '76', 'gecko'),
  448. array('MAC', 'Mac OS', 'Mac OS')),
  449. // Internet Explorer
  450. 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)' => array(
  451. array('IE', 'Internet Explorer', 'IE', '10.0', '10', '0', 'ie'),
  452. array('WI7', 'Windows 7', 'Win 7')),
  453. 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0)' => array(
  454. array('IE', 'Internet Explorer', 'IE', '10.0', '10', '0', 'ie'),
  455. array('WI7', 'Windows 7', 'Win 7')),
  456. 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)' => array(
  457. array('IE', 'Internet Explorer', 'IE', '9.0', '9', '0', 'ie'),
  458. array('WI7', 'Windows 7', 'Win 7')),
  459. 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)' => array(
  460. array('IE', 'Internet Explorer', 'IE', '9.0', '9', '0', 'ie'),
  461. array('WVI', 'Windows Vista', 'Win Vista')),
  462. 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 3.0.04506; .NET CLR 3.5.21022; InfoPath.2; SLCC1; Zune 3.0)' => array(
  463. array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
  464. array('WI7', 'Windows 7', 'Win 7')),
  465. 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)' => array(
  466. array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
  467. array('WVI', 'Windows Vista', 'Win Vista')),
  468. 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)' => array(
  469. array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
  470. array('WVI', 'Windows Vista', 'Win Vista')),
  471. 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)' => array(
  472. array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
  473. array('WXP', 'Windows XP', 'Win XP')),
  474. 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)' => array(
  475. array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
  476. array('WXP', 'Windows XP', 'Win XP')),
  477. 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)' => array(
  478. array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
  479. array('WS3', 'Windows Server 2003 / XP x64', 'Win S2003')),
  480. 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; WOW64; SV1; .NET CLR 2.0.50727)' => array(
  481. array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
  482. array('WS3', 'Windows Server 2003 / XP x64', 'Win S2003')),
  483. 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Win64; x64; SV1; .NET CLR 2.0.50727)' => array(
  484. array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
  485. array('WS3', 'Windows Server 2003 / XP x64', 'Win S2003')),
  486. // IE Mobile
  487. 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; SGH-i917)' => array(
  488. array('IE', 'Internet Explorer', 'IE', '9.0', '9', '0', 'ie'),
  489. array('W75', 'Windows Phone OS 7.5', 'WinPhone 7.5')),
  490. 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; XBLWP7; ZuneWP7)' => array(
  491. array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
  492. array('WP7', 'Windows Phone OS 7.0', 'WinPhone 7')),
  493. 'Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; DeviceManufacturer; DeviceModel)' => array(
  494. array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
  495. array('WP7', 'Windows Phone OS 7.0', 'WinPhone 7')),
  496. 'Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)' => array(
  497. array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
  498. array('WCE', 'Windows CE', 'Win CE')),
  499. // Internet Explorer with misbehaving Google Tool Bar
  500. 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6.5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)' => array(
  501. array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
  502. array('WXP', 'Windows XP', 'Win XP')),
  503. 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB0.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)' => array(
  504. array('IE', 'Internet Explorer', 'IE', '8.0', '8', '0', 'ie'),
  505. array('WXP', 'Windows XP', 'Win XP')),
  506. // Iron
  507. 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/531.0 (KHTML, like Gecko) Iron/3.0.189.0 Safari/531.0' => array(
  508. array('IR', 'Iron', 'Iron', '3.0', '3', '0', 'webkit'),
  509. array('WI7', 'Windows 7', 'Win 7')),
  510. // K-Meleon
  511. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.21) Gecko/20090331 K-Meleon/1.5.3' => array(
  512. array('KM', 'K-Meleon', 'K-Meleon', '1.5', '1', '5', 'gecko'),
  513. array('LIN', 'Linux', 'Linux')),
  514. 'Mozilla/5.0 (Darwin; FreeBSD 5.6; en-GB; rv:1.8.1.17pre) Gecko/20080716 K-Meleon/1.5.0' => array(
  515. array('KM', 'K-Meleon', 'K-Meleon', '1.5', '1', '5', 'gecko'),
  516. array('MAC', 'Mac OS', 'Mac OS')),
  517. 'Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.2b) Gecko/20021016 K-Meleon 0.7' => array(
  518. array('KM', 'K-Meleon', 'K-Meleon', '0.7', '0', '7', 'gecko'),
  519. array('WNT', 'Windows NT', 'Win NT')),
  520. // Kapiko
  521. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.1) Gecko/20080722 Firefox/3.0.1 Kapiko/3.0' => array(
  522. array('KP', 'Kapiko', 'Kapiko', '3.0', '3', '0', 'gecko'),
  523. array('WXP', 'Windows XP', 'Win XP')),
  524. // Kazehakase
  525. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11) Gecko Kazehakase/0.5.4 Debian/0.5.4-2.1ubuntu3' => array(
  526. array('KZ', 'Kazehakase', 'Kazehakase', '0.5', '0', '5', 'gecko'),
  527. array('LIN', 'Linux', 'Linux')),
  528. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.13) Gecko/20080311 (Debian-1.8.1.13+nobinonly-0ubuntu1) Kazehakase/0.5.2' => array(
  529. array('KZ', 'Kazehakase', 'Kazehakase', '0.5', '0', '5', 'gecko'),
  530. array('LIN', 'Linux', 'Linux')),
  531. 'Mozilla/5.0 (X11; Linux x86_64; U;) Gecko/20060207 Kazehakase/0.3.5 Debian/0.3.5-1' => array(
  532. array('KZ', 'Kazehakase', 'Kazehakase', '0.3', '0', '3', 'gecko'),
  533. array('LIN', 'Linux', 'Linux')),
  534. // KKMAN (treat as IE)
  535. 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; KKMAN3.2)' => array(
  536. array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
  537. array('WXP', 'Windows XP', 'Win XP')),
  538. // Konqueror
  539. 'Mozilla/5.0 (compatible; Konqueror/4.0; Linux) KHTML/4.0.5 (like Gecko)' => array(
  540. array('KO', 'Konqueror', 'Konqueror', '4.0', '4', '0', 'khtml'),
  541. array('LIN', 'Linux', 'Linux')),
  542. 'Mozilla/5.0 (compatible; Konqueror/4.0; Microsoft Windows) KHTML/4.0.80 (like Gecko)' => array(
  543. array('KO', 'Konqueror', 'Konqueror', '4.0', '4', '0', 'khtml'),
  544. false),
  545. 'Mozilla/5.0 (compatible; Konqueror/3.5; GNU/kFreeBSD) KHTML/3.5.9 (like Gecko) (Debian)' => array(
  546. array('KO', 'Konqueror', 'Konqueror', '3.5', '3', '5', 'khtml'),
  547. array('BSD', 'FreeBSD', 'FreeBSD')),
  548. 'Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)' => array(
  549. array('KO', 'Konqueror', 'Konqueror', '2.1', '2', '1', 'khtml'),
  550. false),
  551. // Links
  552. 'Links' => array(
  553. false,
  554. false),
  555. 'Links (2.1pre31; Linux 2.6.21-omap1 armv6l; x)' => array(
  556. array('LI', 'Links', 'Links', '2.1', '2', '1', 'unknown'),
  557. array('LIN', 'Linux', 'Linux')),
  558. 'Links (0.99; OS/2 1 i386; 80x33)' => array(
  559. array('LI', 'Links', 'Links', '0.99', '0', '99', 'unknown'),
  560. array('OS2', 'OS/2', 'OS/2')),
  561. // Lunascape (identity crisis)
  562. 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1) Gecko/20090701 Firefox/3.5 Lunascape/5.1.2.3' => array(
  563. array('FF', 'Firefox', 'Firefox', '3.5', '3', '5', 'gecko'),
  564. array('WVI', 'Windows Vista', 'Win Vista')),
  565. 'Mozilla/5.0 (Windows; U; ; cs-CZ) AppleWebKit/532+ (KHTML, like Gecko, Safari/532.0) Lunascape/5.1.2.3' => array(
  566. array('SF', 'Safari', 'Safari', '4.0', '4', '0', 'webkit'),
  567. false),
  568. 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Lunascape 5.1.2.3)' => array(
  569. array('IE', 'Internet Explorer', 'IE', '6.0', '6', '0', 'ie'),
  570. array('WXP', 'Windows XP', 'Win XP')),
  571. // Lynx
  572. 'Lynx (textmode)' => array(
  573. false,
  574. false),
  575. 'Lynx/2.8.7dev.9 libwww-FM/2.14' => array(
  576. array('LX', 'Lynx', 'Lynx', '2.8', '2', '8', 'unknown'),
  577. false),
  578. // Maxathon (treat as IE)
  579. 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)' => array(
  580. array('IE', 'Internet Explorer', 'IE', '7.0', '7', '0', 'ie'),
  581. array('WXP', 'Windows XP', 'Win XP')),
  582. // Midori
  583. 'Midori/0.1.9 (X11; Linux i686; U; fr-fr) WebKit/532+' => array(
  584. array('MI', 'Midori', 'Midori', '0.1', '0', '1', 'webkit'),
  585. array('LIN', 'Linux', 'Linux')),
  586. // Mozilla Suite
  587. 'Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.7) Gecko/20070606' => array(
  588. array('MO', 'Mozilla', 'Mozilla', '1.7', '1', '7', 'gecko'),
  589. array('SOS', 'SunOS', 'SunOS')),
  590. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050927 Debian/1.7.8-1sarge3' => array(
  591. array('MO', 'Mozilla', 'Mozilla', '1.7', '1', '7', 'gecko'),
  592. array('LIN', 'Linux', 'Linux')),
  593. // NCSA Mosaic
  594. 'PATHWORKS Mosaic/1.0 libwww/2.15_Spyglass' => array(
  595. array('MC', 'NCSA Mosaic', 'Mosaic', '1.0', '1', '0', 'unknown'),
  596. false),
  597. 'WinMosaic/Version 2.0 (ALPHA 2)' => array(
  598. array('MC', 'NCSA Mosaic', 'Mosaic', '2.0', '2', '0', 'unknown'),
  599. false),
  600. 'VMS_Mosaic/3.8-1 (Motif;OpenVMS V7.3-2 DEC 3000 - M700) libwww/2.12_Mosaic' => array(
  601. array('MC', 'NCSA Mosaic', 'Mosaic', '3.8', '3', '8', 'unknown'),
  602. array('VMS', 'OpenVMS', 'OpenVMS')),
  603. 'Mosaic from Digital/1.02_Win32' => array(
  604. array('MC', 'NCSA Mosaic', 'Mosaic', '1.02', '1', '02', 'unknown'),
  605. array('W95', 'Windows 95', 'Win 95')),
  606. 'NCSA Mosaic/2.0.0b4 (Windows AXP)' => array(
  607. array('MC', 'NCSA Mosaic', 'Mosaic', '2.0', '2', '0', 'unknown'),
  608. false),
  609. 'NCSA_Mosaic/2.7b5 (X11;Linux 2.6.7 i686) libwww/2.12 modified' => array(
  610. array('MC', 'NCSA Mosaic', 'Mosaic', '2.7', '2', '7', 'unknown'),
  611. array('LIN', 'Linux', 'Linux')),
  612. 'mMosaic/3.6.6 (X11;SunOS 5.8 sun4m)' => array(
  613. array('MC', 'NCSA Mosaic', 'Mosaic', '3.6', '3', '6', 'unknown'),
  614. array('SOS', 'SunOS', 'SunOS')),
  615. // Netscape Navigator (9.x)
  616. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.8pre) Gecko/20071015 Firefox/2.0.0.7 Navigator/9.0' => array(
  617. array('NS', 'Netscape', 'Netscape', '9.0', '9', '0', 'gecko'),
  618. array('LIN', 'Linux', 'Linux')),
  619. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.5) Gecko/20070321 Netscape/9.0' => array(
  620. array('NS', 'Netscape', 'Netscape', '9.0', '9', '0', 'gecko'),
  621. array('LIN', 'Linux', 'Linux')),
  622. // Netscape (6.x - 8.x)
  623. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.5) Gecko/20070321 Netscape/8.1.3' => array(
  624. array('NS', 'Netscape', 'Netscape', '8.1', '8', '1', 'gecko'),
  625. array('LIN', 'Linux', 'Linux')),
  626. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2) Gecko/20040804 Netscape/7.2 (ax)' => array(
  627. array('NS', 'Netscape', 'Netscape', '7.2', '7', '2', 'gecko'),
  628. array('WXP', 'Windows XP', 'Win XP')),
  629. 'Mozilla/5.0 (X11; U; OSF1 alpha; en-US; rv:0.9.4.1) Gecko/20020517 Netscape6/6.2.3' => array(
  630. array('NS', 'Netscape', 'Netscape', '6.2', '6', '2', 'gecko'),
  631. array('T64', 'Tru64', 'Tru64')),
  632. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.2) Gecko/20010726 Netscape6/6.1' => array(
  633. array('NS', 'Netscape', 'Netscape', '6.1', '6', '1', 'gecko'),
  634. array('LIN', 'Linux', 'Linux')),
  635. // Netscape Communicator (4.x)
  636. 'Mozilla/4.76C-SGI [en] (X11; I; IRIX64 6.5 IP30)' => array(
  637. array('NS', 'Netscape', 'Netscape', '4.76', '4', '76', 'gecko'),
  638. array('IRI', 'IRIX', 'IRIX')),
  639. 'Mozilla/4.72 [en] (X11; I; HP-UX B.11.00 9000/800)' => array(
  640. array('NS', 'Netscape', 'Netscape', '4.72', '4', '72', 'gecko'),
  641. array('HPX', 'HP-UX', 'HP-UX')),
  642. 'Mozilla/4.41 (BEOS; U ;Nav)' => array(
  643. array('NS', 'Netscape', 'Netscape', '4.41', '4', '41', 'gecko'),
  644. array('BEO', 'BeOS', 'BeOS')),
  645. 'Mozilla/4.0 (compatible; Windows NT 5.1; U; en)' => array(
  646. array('NS', 'Netscape', 'Netscape', '4.0', '4', '0', 'gecko'),
  647. array('WXP', 'Windows XP', 'Win XP')),
  648. // Netscape Navigator (up to 3.x)
  649. 'Mozilla/3.0 (X11; I; AIX 2)' => array(
  650. array('NS', 'Netscape', 'Netscape', '3.0', '3', '0', 'gecko'),
  651. array('AIX', 'AIX', 'AIX')),
  652. 'Mozilla/2.02 [fr] (WinNT; I)' => array(
  653. array('NS', 'Netscape', 'Netscape', '2.02', '2', '02', 'gecko'),
  654. array('WNT', 'Windows NT', 'Win NT')),
  655. // Omniweb
  656. 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US) AppleWebKit/525.18 (KHTML, like Gecko, Safari/525.20) OmniWeb/v622.3.0.105198' => array(
  657. array('OW', 'OmniWeb', 'OmniWeb', '5.8', '5', '8', 'webkit'),
  658. array('MAC', 'Mac OS', 'Mac OS')),
  659. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613' => array(
  660. array('OW', 'OmniWeb', 'OmniWeb', '5.6', '5', '6', 'webkit'),
  661. array('MAC', 'Mac OS', 'Mac OS')),
  662. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607' => array(
  663. array('OW', 'OmniWeb', 'OmniWeb', '5.5', '5', '5', 'webkit'),
  664. array('MAC', 'Mac OS', 'Mac OS')),
  665. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34' => array(
  666. array('OW', 'OmniWeb', 'OmniWeb', '5.1', '5', '1', 'webkit'),
  667. array('MAC', 'Mac OS', 'Mac OS')),
  668. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v558.36' => array(
  669. array('OW', 'OmniWeb', 'OmniWeb', '5.0', '5', '0', 'webkit'),
  670. array('MAC', 'Mac OS', 'Mac OS')),
  671. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v496' => array(
  672. array('OW', 'OmniWeb', 'OmniWeb', '4.5', '4', '5', 'webkit'),
  673. array('MAC', 'Mac OS', 'Mac OS')),
  674. // Opera
  675. 'Opera/9.63 (Windows NT 5.1; U; en) Presto/2.1.1' => array(
  676. array('OP', 'Opera', 'Opera', '9.63', '9', '63', 'opera'),
  677. array('WXP', 'Windows XP', 'Win XP')),
  678. 'Opera/9.30 (Nintendo Wii; U; ; 2047-7; en)' => array(
  679. array('OP', 'Opera', 'Opera', '9.30', '9', '30', 'opera'),
  680. array('WII', 'Nintendo Wii', 'Wii')),
  681. 'Opera/9.64 (Windows ME; U; en) Presto/2.1.1' => array(
  682. array('OP', 'Opera', 'Opera', '9.64', '9', '64', 'opera'),
  683. array('WME', 'Windows Me', 'Win Me')),
  684. 'Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.00' => array(
  685. array('OP', 'Opera', 'Opera', '10.00', '10', '0', 'opera'),
  686. array('WXP', 'Windows XP', 'Win XP')),
  687. 'Mozilla/4.0 (compatible; MSIE 6.0; Nitro) Opera 8.50 [en Mozilla/4.0 (compatible; MSIE 6.0; Nitro) Opera 8.50 [ja]' => array(
  688. array('OP', 'Opera', 'Opera', '8.50', '8', '50', 'opera'),
  689. array('NDS', 'Nintendo DS', 'DS')),
  690. 'Opera/9.00 (Nintendo DS U; ; 1309-9; de)' => array(
  691. array('OP', 'Opera', 'Opera', '9.00', '9', '00', 'opera'),
  692. array('NDS', 'Nintendo DS', 'DS')),
  693. 'Opera/9.50 (Nintendo DSi; Opera/507; U; en-US) ' => array(
  694. array('OP', 'Opera', 'Opera', '9.50', '9', '50', 'opera'),
  695. array('DSI', 'Nintendo DSi', 'DSi')),
  696. // PlayStation
  697. 'Mozilla/5.0 (PLAYSTATION 3; 1.00)' => array(
  698. false,
  699. array('PS3', 'PlayStation 3', 'PS3')),
  700. // PSP
  701. 'PSP (PlayStation Portable); 2.00' => array(
  702. false,
  703. array('PSP', 'PlayStation Portable', 'PSP')),
  704. 'Mozilla/4.0 (PSP (PlayStation Portable); 2.00)' => array(
  705. false,
  706. array('PSP', 'PlayStation Portable', 'PSP')),
  707. // Safari
  708. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Version/3.1.2 Safari/525.21' => array(
  709. array('SF', 'Safari', 'Safari', '3.1', '3', '1', 'webkit'),
  710. array('WXP', 'Windows XP', 'Win XP')),
  711. 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5G77 Safari/525.20' => array(
  712. array('SF', 'Safari', 'Safari', '3.1', '3', '1', 'webkit'),
  713. array('IPH', 'iPhone', 'iPhone')),
  714. 'Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A100a Safari/419.3' => array(
  715. array('SF', 'Safari', 'Safari', '3.0', '3', '0', 'webkit'),
  716. array('IPD', 'iPod', 'iPod')),
  717. 'Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11a Safari/525.20' => array(
  718. array('SF', 'Safari', 'Safari', '3.1', '3', '1', 'webkit'),
  719. array('IPD', 'iPod', 'iPod')),
  720. 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; en-us) AppleWebKit/527.3+ (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1' => array(
  721. array('SF', 'Safari', 'Safari', '3.1', '3', '1', 'webkit'),
  722. array('MAC', 'Mac OS', 'Mac OS')),
  723. 'Mozilla/5.0 (iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10' => array(
  724. array('SF', 'Safari', 'Safari', '4.0', '4', '0', 'webkit'),
  725. array('IPA', 'iPad', 'iPad')),
  726. 'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10' => array(
  727. array('SF', 'Safari', 'Safari', '4.0', '4', '0', 'webkit'),
  728. array('IPA', 'iPad', 'iPad')),
  729. 'Mozilla/5.0 (iPod; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7' => array(
  730. array('SF', 'Safari', 'Safari', '4.0', '4', '0', 'webkit'),
  731. array('IPD', 'iPod', 'iPod')),
  732. 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7' => array(
  733. array('SF', 'Safari', 'Safari', '4.0', '4', '0', 'webkit'),
  734. array('IPH', 'iPhone', 'iPhone')),
  735. 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) ' => array(
  736. array('SF', 'Safari', 'Safari', '5.0', '5', '0', 'webkit'),
  737. array('WVI', 'Windows Vista', 'Win Vista')),
  738. 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50' => array(
  739. array('SF', 'Safari', 'Safari', '5.1', '5', '1', 'webkit'),
  740. array('MAC', 'Mac OS', 'Mac OS')),
  741. // SeaMonkey (formerly Mozilla Suite and rebranded versions)
  742. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.8) Gecko/20071008 Iceape/1.1.5 (Ubuntu-1.1.5-1ubuntu0.7.10)' => array(
  743. array('SM', 'SeaMonkey', 'SeaMonkey', '1.1', '1', '1', 'gecko'),
  744. array('LIN', 'Linux', 'Linux')),
  745. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b4pre) Gecko/20090405 SeaMonkey/2.0b1pre' => array(
  746. array('SM', 'SeaMonkey', 'SeaMonkey', '2.0', '2', '0', 'gecko'),
  747. array('LIN', 'Linux', 'Linux')),
  748. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9) Gecko' => array(
  749. // this pre-2.0 UA is missing the SeaMonkey/X.Y
  750. array('SM', 'SeaMonkey', 'SeaMonkey', '1.9', '1', '9', 'gecko'),
  751. array('WXP', 'Windows XP', 'Win XP')),
  752. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; cs; rv:1.9) Gecko/2008052906' => array(
  753. // this pre-2.0 UA is missing the SeaMonkey/X.Y
  754. array('SM', 'SeaMonkey', 'SeaMonkey', '1.9', '1', '9', 'gecko'),
  755. array('WXP', 'Windows XP', 'Win XP')),
  756. // Palm webOS
  757. 'Mozilla/5.0 (webOS/1.0; U; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Pre/1.0' => array(
  758. array('WO', 'Palm webOS', 'webOS', '1.0', '1', '0', 'webkit'),
  759. array('WOS', 'Palm webOS', 'webOS')),
  760. 'Mozilla/5.0 (webOS/Palm webOS 1.2.9; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Pixi/1.0' => array(
  761. array('WO', 'Palm webOS', 'webOS', '1.0', '1', '0', 'webkit'),
  762. array('WOS', 'Palm webOS', 'webOS')),
  763. 'Mozilla/5.0 [en] (PalmOS; U; WebPro/3.5; Palm-Zi72)' => array(
  764. array('WP', 'WebPro', 'WebPro', '3.5', '3', '5', 'unknown'),
  765. array('POS', 'Palm OS', 'Palm OS')),
  766. // Palm WebPro
  767. 'Mozilla/4.76 [en] (PalmOS; U; WebPro/3.0.1a; Palm-Cct1)' => array(
  768. array('WP', 'WebPro', 'WebPro', '3.0', '3', '0', 'unknown'),
  769. array('POS', 'Palm OS', 'Palm OS')),
  770. 'Mozilla/4.76 [en] (PalmOS; U; WebPro/3.0; Palm-Arz1)' => array(
  771. array('WP', 'WebPro', 'WebPro', '3.0', '3', '0', 'unknown'),
  772. array('POS', 'Palm OS', 'Palm OS')),
  773. // Shiira 1.x - treat as Safari since it uses the installed version of Safari's WebKit
  774. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/417.9 (KHTML, like Gecko, Safari) Shiira/1.1' => array(
  775. array('SF', 'Safari', 'Safari', '2.0', '2', '0', 'webkit'),
  776. array('MAC', 'Mac OS', 'Mac OS')),
  777. 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; pl-pl) AppleWebKit/312.8 (KHTML, like Gecko) Shiira/1.2.1 Safari/125' => array(
  778. array('SF', 'Safari', 'Safari', '1.3', '1', '3', 'webkit'),
  779. array('MAC', 'Mac OS', 'Mac OS')),
  780. // Shiira 2.x - ditto
  781. 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/525.28.3 (KHTML, like Gecko) Shiira Safari/125' => array(
  782. array('SF', 'Safari', 'Safari', '3.2', '3', '2', 'webkit'),
  783. array('MAC', 'Mac OS', 'Mac OS')),
  784. // SymbianOS
  785. 'Nokia3650/1.0 SymbianOS/6.1 Series60/1.2 Profile/MIDP-1.0 Configuration/CLDC-1.0' => array(
  786. false,
  787. array('SYM', 'SymbianOS', 'SymbianOS')),
  788. 'Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 Nokia5800d-1b/20.2.014; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array(
  789. array('SF', 'Safari', 'Safari', '2.0', '2', '0', 'webkit'),
  790. array('SYM', 'SymbianOS