selenium-webdriver 4.0.0.alpha2 → 4.0.0.alpha7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (259) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES +172 -4
  3. data/LICENSE +1 -1
  4. data/lib/selenium/server.rb +25 -9
  5. data/lib/selenium/webdriver.rb +12 -8
  6. data/lib/selenium/webdriver/atoms/findElements.js +121 -0
  7. data/lib/selenium/webdriver/atoms/getAttribute.js +104 -7
  8. data/lib/selenium/webdriver/atoms/isDisplayed.js +76 -78
  9. data/lib/selenium/webdriver/atoms/mutationListener.js +38 -0
  10. data/lib/selenium/webdriver/chrome.rb +10 -9
  11. data/lib/selenium/webdriver/chrome/bridge.rb +20 -4
  12. data/lib/selenium/webdriver/chrome/driver.rb +7 -49
  13. data/lib/selenium/webdriver/chrome/options.rb +97 -57
  14. data/lib/selenium/webdriver/chrome/profile.rb +3 -3
  15. data/lib/selenium/webdriver/chrome/service.rb +0 -4
  16. data/lib/selenium/webdriver/common.rb +6 -1
  17. data/lib/selenium/webdriver/common/driver.rb +81 -17
  18. data/lib/selenium/webdriver/common/driver_extensions/has_authentication.rb +89 -0
  19. data/lib/selenium/webdriver/common/driver_extensions/has_devtools.rb +39 -0
  20. data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +143 -0
  21. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +2 -1
  22. data/lib/selenium/webdriver/common/element.rb +5 -0
  23. data/lib/selenium/webdriver/common/logger.rb +48 -16
  24. data/lib/selenium/webdriver/common/manager.rb +5 -0
  25. data/lib/selenium/webdriver/common/options.rb +116 -0
  26. data/lib/selenium/webdriver/common/platform.rb +4 -1
  27. data/lib/selenium/webdriver/common/port_prober.rb +4 -6
  28. data/lib/selenium/webdriver/common/profile_helper.rb +10 -2
  29. data/lib/selenium/webdriver/common/proxy.rb +0 -0
  30. data/lib/selenium/webdriver/common/search_context.rb +3 -2
  31. data/lib/selenium/webdriver/common/service.rb +30 -113
  32. data/lib/selenium/webdriver/common/service_manager.rb +151 -0
  33. data/lib/selenium/webdriver/common/socket_lock.rb +2 -2
  34. data/lib/selenium/webdriver/common/takes_screenshot.rb +63 -0
  35. data/lib/selenium/webdriver/common/wait.rb +1 -1
  36. data/lib/selenium/webdriver/devtools.rb +132 -0
  37. data/lib/selenium/webdriver/devtools/console_event.rb +38 -0
  38. data/lib/selenium/webdriver/devtools/exception_event.rb +36 -0
  39. data/lib/selenium/webdriver/devtools/mutation_event.rb +37 -0
  40. data/lib/selenium/webdriver/devtools/v84/accessibility.rb +64 -0
  41. data/lib/selenium/webdriver/devtools/v84/animation.rb +100 -0
  42. data/lib/selenium/webdriver/devtools/v84/application_cache.rb +66 -0
  43. data/lib/selenium/webdriver/devtools/v84/audits.rb +63 -0
  44. data/lib/selenium/webdriver/devtools/v84/background_service.rb +69 -0
  45. data/lib/selenium/webdriver/devtools/v84/browser.rb +125 -0
  46. data/lib/selenium/webdriver/devtools/v84/cache_storage.rb +75 -0
  47. data/lib/selenium/webdriver/devtools/v84/cast.rb +72 -0
  48. data/lib/selenium/webdriver/devtools/v84/console.rb +59 -0
  49. data/lib/selenium/webdriver/devtools/v84/css.rb +167 -0
  50. data/lib/selenium/webdriver/devtools/v84/database.rb +66 -0
  51. data/lib/selenium/webdriver/devtools/v84/debugger.rb +231 -0
  52. data/lib/selenium/webdriver/devtools/v84/device_orientation.rb +55 -0
  53. data/lib/selenium/webdriver/devtools/v84/dom.rb +322 -0
  54. data/lib/selenium/webdriver/devtools/v84/dom_debugger.rb +95 -0
  55. data/lib/selenium/webdriver/devtools/v84/dom_snapshot.rb +67 -0
  56. data/lib/selenium/webdriver/devtools/v84/dom_storage.rb +81 -0
  57. data/lib/selenium/webdriver/devtools/v84/emulation.rb +182 -0
  58. data/lib/selenium/webdriver/devtools/v84/fetch.rb +99 -0
  59. data/lib/selenium/webdriver/devtools/v84/headless_experimental.rb +63 -0
  60. data/lib/selenium/webdriver/devtools/v84/heap_profiler.rb +109 -0
  61. data/lib/selenium/webdriver/devtools/v84/indexed_db.rb +102 -0
  62. data/lib/selenium/webdriver/devtools/v84/input.rb +142 -0
  63. data/lib/selenium/webdriver/devtools/v84/inspector.rb +57 -0
  64. data/lib/selenium/webdriver/devtools/v84/io.rb +61 -0
  65. data/lib/selenium/webdriver/devtools/v84/layer_tree.rb +97 -0
  66. data/lib/selenium/webdriver/devtools/v84/log.rb +68 -0
  67. data/lib/selenium/webdriver/devtools/v84/media.rb +59 -0
  68. data/lib/selenium/webdriver/devtools/v84/memory.rb +88 -0
  69. data/lib/selenium/webdriver/devtools/v84/network.rb +230 -0
  70. data/lib/selenium/webdriver/devtools/v84/overlay.rb +159 -0
  71. data/lib/selenium/webdriver/devtools/v84/page.rb +376 -0
  72. data/lib/selenium/webdriver/devtools/v84/performance.rb +65 -0
  73. data/lib/selenium/webdriver/devtools/v84/profiler.rb +113 -0
  74. data/lib/selenium/webdriver/devtools/v84/runtime.rb +195 -0
  75. data/lib/selenium/webdriver/devtools/v84/schema.rb +48 -0
  76. data/lib/selenium/webdriver/devtools/v84/security.rb +73 -0
  77. data/lib/selenium/webdriver/devtools/v84/service_worker.rb +118 -0
  78. data/lib/selenium/webdriver/devtools/v84/storage.rb +97 -0
  79. data/lib/selenium/webdriver/devtools/v84/system_info.rb +52 -0
  80. data/lib/selenium/webdriver/devtools/v84/target.rb +143 -0
  81. data/lib/selenium/webdriver/devtools/v84/tethering.rb +57 -0
  82. data/lib/selenium/webdriver/devtools/v84/tracing.rb +78 -0
  83. data/lib/selenium/webdriver/devtools/v84/web_audio.rb +72 -0
  84. data/lib/selenium/webdriver/devtools/v84/web_authn.rb +96 -0
  85. data/lib/selenium/webdriver/devtools/v85/accessibility.rb +64 -0
  86. data/lib/selenium/webdriver/devtools/v85/animation.rb +100 -0
  87. data/lib/selenium/webdriver/devtools/v85/application_cache.rb +66 -0
  88. data/lib/selenium/webdriver/devtools/v85/audits.rb +63 -0
  89. data/lib/selenium/webdriver/devtools/v85/background_service.rb +69 -0
  90. data/lib/selenium/webdriver/devtools/v85/browser.rb +125 -0
  91. data/lib/selenium/webdriver/devtools/v85/cache_storage.rb +75 -0
  92. data/lib/selenium/webdriver/devtools/v85/cast.rb +72 -0
  93. data/lib/selenium/webdriver/devtools/v85/console.rb +59 -0
  94. data/lib/selenium/webdriver/devtools/v85/css.rb +167 -0
  95. data/lib/selenium/webdriver/devtools/v85/database.rb +66 -0
  96. data/lib/selenium/webdriver/devtools/v85/debugger.rb +231 -0
  97. data/lib/selenium/webdriver/devtools/v85/device_orientation.rb +55 -0
  98. data/lib/selenium/webdriver/devtools/v85/dom.rb +322 -0
  99. data/lib/selenium/webdriver/devtools/v85/dom_debugger.rb +95 -0
  100. data/lib/selenium/webdriver/devtools/v85/dom_snapshot.rb +67 -0
  101. data/lib/selenium/webdriver/devtools/v85/dom_storage.rb +81 -0
  102. data/lib/selenium/webdriver/devtools/v85/emulation.rb +182 -0
  103. data/lib/selenium/webdriver/devtools/v85/fetch.rb +99 -0
  104. data/lib/selenium/webdriver/devtools/v85/headless_experimental.rb +63 -0
  105. data/lib/selenium/webdriver/devtools/v85/heap_profiler.rb +109 -0
  106. data/lib/selenium/webdriver/devtools/v85/indexed_db.rb +102 -0
  107. data/lib/selenium/webdriver/devtools/v85/input.rb +143 -0
  108. data/lib/selenium/webdriver/devtools/v85/inspector.rb +57 -0
  109. data/lib/selenium/webdriver/devtools/v85/io.rb +61 -0
  110. data/lib/selenium/webdriver/devtools/v85/layer_tree.rb +97 -0
  111. data/lib/selenium/webdriver/devtools/v85/log.rb +68 -0
  112. data/lib/selenium/webdriver/devtools/v85/media.rb +59 -0
  113. data/lib/selenium/webdriver/devtools/v85/memory.rb +88 -0
  114. data/lib/selenium/webdriver/devtools/v85/network.rb +230 -0
  115. data/lib/selenium/webdriver/devtools/v85/overlay.rb +160 -0
  116. data/lib/selenium/webdriver/devtools/v85/page.rb +376 -0
  117. data/lib/selenium/webdriver/devtools/v85/performance.rb +65 -0
  118. data/lib/selenium/webdriver/devtools/v85/profiler.rb +113 -0
  119. data/lib/selenium/webdriver/devtools/v85/runtime.rb +196 -0
  120. data/lib/selenium/webdriver/devtools/v85/schema.rb +48 -0
  121. data/lib/selenium/webdriver/devtools/v85/security.rb +73 -0
  122. data/lib/selenium/webdriver/devtools/v85/service_worker.rb +118 -0
  123. data/lib/selenium/webdriver/devtools/v85/storage.rb +97 -0
  124. data/lib/selenium/webdriver/devtools/v85/system_info.rb +52 -0
  125. data/lib/selenium/webdriver/devtools/v85/target.rb +145 -0
  126. data/lib/selenium/webdriver/devtools/v85/tethering.rb +57 -0
  127. data/lib/selenium/webdriver/devtools/v85/tracing.rb +78 -0
  128. data/lib/selenium/webdriver/devtools/v85/web_audio.rb +72 -0
  129. data/lib/selenium/webdriver/devtools/v85/web_authn.rb +96 -0
  130. data/lib/selenium/webdriver/devtools/v86/accessibility.rb +64 -0
  131. data/lib/selenium/webdriver/devtools/v86/animation.rb +100 -0
  132. data/lib/selenium/webdriver/devtools/v86/application_cache.rb +66 -0
  133. data/lib/selenium/webdriver/devtools/v86/audits.rb +63 -0
  134. data/lib/selenium/webdriver/devtools/v86/background_service.rb +69 -0
  135. data/lib/selenium/webdriver/devtools/v86/browser.rb +125 -0
  136. data/lib/selenium/webdriver/devtools/v86/cache_storage.rb +75 -0
  137. data/lib/selenium/webdriver/devtools/v86/cast.rb +72 -0
  138. data/lib/selenium/webdriver/devtools/v86/console.rb +59 -0
  139. data/lib/selenium/webdriver/devtools/v86/css.rb +181 -0
  140. data/lib/selenium/webdriver/devtools/v86/database.rb +66 -0
  141. data/lib/selenium/webdriver/devtools/v86/debugger.rb +233 -0
  142. data/lib/selenium/webdriver/devtools/v86/device_orientation.rb +55 -0
  143. data/lib/selenium/webdriver/devtools/v86/dom.rb +329 -0
  144. data/lib/selenium/webdriver/devtools/v86/dom_debugger.rb +95 -0
  145. data/lib/selenium/webdriver/devtools/v86/dom_snapshot.rb +67 -0
  146. data/lib/selenium/webdriver/devtools/v86/dom_storage.rb +81 -0
  147. data/lib/selenium/webdriver/devtools/v86/emulation.rb +193 -0
  148. data/lib/selenium/webdriver/devtools/v86/fetch.rb +99 -0
  149. data/lib/selenium/webdriver/devtools/v86/headless_experimental.rb +63 -0
  150. data/lib/selenium/webdriver/devtools/v86/heap_profiler.rb +109 -0
  151. data/lib/selenium/webdriver/devtools/v86/indexed_db.rb +102 -0
  152. data/lib/selenium/webdriver/devtools/v86/input.rb +143 -0
  153. data/lib/selenium/webdriver/devtools/v86/inspector.rb +57 -0
  154. data/lib/selenium/webdriver/devtools/v86/io.rb +61 -0
  155. data/lib/selenium/webdriver/devtools/v86/layer_tree.rb +97 -0
  156. data/lib/selenium/webdriver/devtools/v86/log.rb +68 -0
  157. data/lib/selenium/webdriver/devtools/v86/media.rb +59 -0
  158. data/lib/selenium/webdriver/devtools/v86/memory.rb +88 -0
  159. data/lib/selenium/webdriver/devtools/v86/network.rb +235 -0
  160. data/lib/selenium/webdriver/devtools/v86/overlay.rb +183 -0
  161. data/lib/selenium/webdriver/devtools/v86/page.rb +376 -0
  162. data/lib/selenium/webdriver/devtools/v86/performance.rb +65 -0
  163. data/lib/selenium/webdriver/devtools/v86/profiler.rb +113 -0
  164. data/lib/selenium/webdriver/devtools/v86/runtime.rb +196 -0
  165. data/lib/selenium/webdriver/devtools/v86/schema.rb +48 -0
  166. data/lib/selenium/webdriver/devtools/v86/security.rb +73 -0
  167. data/lib/selenium/webdriver/devtools/v86/service_worker.rb +118 -0
  168. data/lib/selenium/webdriver/devtools/v86/storage.rb +97 -0
  169. data/lib/selenium/webdriver/devtools/v86/system_info.rb +52 -0
  170. data/lib/selenium/webdriver/devtools/v86/target.rb +145 -0
  171. data/lib/selenium/webdriver/devtools/v86/tethering.rb +57 -0
  172. data/lib/selenium/webdriver/devtools/v86/tracing.rb +78 -0
  173. data/lib/selenium/webdriver/devtools/v86/web_audio.rb +72 -0
  174. data/lib/selenium/webdriver/devtools/v86/web_authn.rb +102 -0
  175. data/lib/selenium/webdriver/devtools/v87/accessibility.rb +73 -0
  176. data/lib/selenium/webdriver/devtools/v87/animation.rb +100 -0
  177. data/lib/selenium/webdriver/devtools/v87/application_cache.rb +66 -0
  178. data/lib/selenium/webdriver/devtools/v87/audits.rb +63 -0
  179. data/lib/selenium/webdriver/devtools/v87/background_service.rb +69 -0
  180. data/lib/selenium/webdriver/devtools/v87/browser.rb +125 -0
  181. data/lib/selenium/webdriver/devtools/v87/cache_storage.rb +75 -0
  182. data/lib/selenium/webdriver/devtools/v87/cast.rb +72 -0
  183. data/lib/selenium/webdriver/devtools/v87/console.rb +59 -0
  184. data/lib/selenium/webdriver/devtools/v87/css.rb +181 -0
  185. data/lib/selenium/webdriver/devtools/v87/database.rb +66 -0
  186. data/lib/selenium/webdriver/devtools/v87/debugger.rb +233 -0
  187. data/lib/selenium/webdriver/devtools/v87/device_orientation.rb +55 -0
  188. data/lib/selenium/webdriver/devtools/v87/dom.rb +329 -0
  189. data/lib/selenium/webdriver/devtools/v87/dom_debugger.rb +95 -0
  190. data/lib/selenium/webdriver/devtools/v87/dom_snapshot.rb +67 -0
  191. data/lib/selenium/webdriver/devtools/v87/dom_storage.rb +81 -0
  192. data/lib/selenium/webdriver/devtools/v87/emulation.rb +193 -0
  193. data/lib/selenium/webdriver/devtools/v87/fetch.rb +99 -0
  194. data/lib/selenium/webdriver/devtools/v87/headless_experimental.rb +63 -0
  195. data/lib/selenium/webdriver/devtools/v87/heap_profiler.rb +109 -0
  196. data/lib/selenium/webdriver/devtools/v87/indexed_db.rb +102 -0
  197. data/lib/selenium/webdriver/devtools/v87/input.rb +143 -0
  198. data/lib/selenium/webdriver/devtools/v87/inspector.rb +57 -0
  199. data/lib/selenium/webdriver/devtools/v87/io.rb +61 -0
  200. data/lib/selenium/webdriver/devtools/v87/layer_tree.rb +97 -0
  201. data/lib/selenium/webdriver/devtools/v87/log.rb +68 -0
  202. data/lib/selenium/webdriver/devtools/v87/media.rb +59 -0
  203. data/lib/selenium/webdriver/devtools/v87/memory.rb +88 -0
  204. data/lib/selenium/webdriver/devtools/v87/network.rb +247 -0
  205. data/lib/selenium/webdriver/devtools/v87/overlay.rb +183 -0
  206. data/lib/selenium/webdriver/devtools/v87/page.rb +376 -0
  207. data/lib/selenium/webdriver/devtools/v87/performance.rb +65 -0
  208. data/lib/selenium/webdriver/devtools/v87/profiler.rb +125 -0
  209. data/lib/selenium/webdriver/devtools/v87/runtime.rb +196 -0
  210. data/lib/selenium/webdriver/devtools/v87/schema.rb +48 -0
  211. data/lib/selenium/webdriver/devtools/v87/security.rb +73 -0
  212. data/lib/selenium/webdriver/devtools/v87/service_worker.rb +118 -0
  213. data/lib/selenium/webdriver/devtools/v87/storage.rb +97 -0
  214. data/lib/selenium/webdriver/devtools/v87/system_info.rb +52 -0
  215. data/lib/selenium/webdriver/devtools/v87/target.rb +145 -0
  216. data/lib/selenium/webdriver/devtools/v87/tethering.rb +57 -0
  217. data/lib/selenium/webdriver/devtools/v87/tracing.rb +78 -0
  218. data/lib/selenium/webdriver/devtools/v87/web_audio.rb +72 -0
  219. data/lib/selenium/webdriver/devtools/v87/web_authn.rb +102 -0
  220. data/lib/selenium/webdriver/edge.rb +29 -9
  221. data/lib/selenium/webdriver/edge_chrome/bridge.rb +37 -0
  222. data/lib/selenium/webdriver/edge_chrome/driver.rb +48 -0
  223. data/lib/selenium/webdriver/edge_chrome/options.rb +37 -0
  224. data/lib/selenium/webdriver/edge_chrome/profile.rb +33 -0
  225. data/lib/selenium/webdriver/edge_chrome/service.rb +36 -0
  226. data/lib/selenium/webdriver/{edge → edge_html}/driver.rb +3 -35
  227. data/lib/selenium/webdriver/{edge → edge_html}/options.rb +26 -22
  228. data/lib/selenium/webdriver/{edge → edge_html}/service.rb +2 -6
  229. data/lib/selenium/webdriver/firefox.rb +18 -15
  230. data/lib/selenium/webdriver/firefox/bridge.rb +1 -1
  231. data/lib/selenium/webdriver/firefox/driver.rb +2 -31
  232. data/lib/selenium/webdriver/firefox/extension.rb +8 -0
  233. data/lib/selenium/webdriver/firefox/options.rb +47 -52
  234. data/lib/selenium/webdriver/firefox/profile.rb +7 -78
  235. data/lib/selenium/webdriver/firefox/service.rb +0 -4
  236. data/lib/selenium/webdriver/ie.rb +8 -7
  237. data/lib/selenium/webdriver/ie/driver.rb +0 -33
  238. data/lib/selenium/webdriver/ie/options.rb +10 -33
  239. data/lib/selenium/webdriver/ie/service.rb +5 -9
  240. data/lib/selenium/webdriver/remote.rb +16 -10
  241. data/lib/selenium/webdriver/remote/bridge.rb +38 -42
  242. data/lib/selenium/webdriver/remote/capabilities.rb +25 -7
  243. data/lib/selenium/webdriver/remote/driver.rb +6 -13
  244. data/lib/selenium/webdriver/remote/http/default.rb +10 -6
  245. data/lib/selenium/webdriver/remote/http/persistent.rb +5 -6
  246. data/lib/selenium/webdriver/safari.rb +16 -8
  247. data/lib/selenium/webdriver/safari/bridge.rb +4 -4
  248. data/lib/selenium/webdriver/safari/driver.rb +3 -30
  249. data/lib/selenium/webdriver/safari/options.rb +18 -19
  250. data/lib/selenium/webdriver/safari/service.rb +0 -4
  251. data/lib/selenium/webdriver/support.rb +1 -0
  252. data/lib/selenium/webdriver/support/color.rb +2 -2
  253. data/lib/selenium/webdriver/support/event_firing_bridge.rb +1 -1
  254. data/lib/selenium/webdriver/support/relative_locator.rb +51 -0
  255. data/lib/selenium/webdriver/version.rb +1 -1
  256. data/selenium-webdriver.gemspec +7 -6
  257. metadata +225 -21
  258. data/lib/selenium/webdriver/firefox/binary.rb +0 -110
  259. data/lib/selenium/webdriver/firefox/extension/prefs.json +0 -69
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: bfdda64a93649dd407e9a99d0547280f33492826
4
- data.tar.gz: 7c643c63e461f17cabb016812cffa21e3001f813
2
+ SHA256:
3
+ metadata.gz: 98a5536f91ba3fce5d5a6065dfca9c19d97e911b80f2eb3b26ee5a95057a5d9d
4
+ data.tar.gz: 80f3216b300aa16f984183dffe014fbe4d5f2647f63a1f6deb84b9aa41209fac
5
5
  SHA512:
6
- metadata.gz: a5b8faba158cabc734b9f0fa8e7fc00bdea0b127bafc2b6f363cefd3bc2aea78d176cc5d042eda9c2271d1dd52d951bd93c8449fdb381e7fa35ebafab3ffe88f
7
- data.tar.gz: 113f4c13373c915447172e43cc5da4435bc785693c06e6a119f9ecdd5fcd3efc01a43b8d295f655be00e5176e3a901f721d6cfa053a606639e5c0b5d5092ecc5
6
+ metadata.gz: 8ea3a82cdb6fe8d089858101df6f614141ac90da8f3a2eb6e85a812beca801103acb24480293132ddc44330e897b22f666c588b7830aca1e23e1384d7970144a
7
+ data.tar.gz: 68d902ca4d337a844ff39479fe234fad9f08e6fcd21fee6a6e5c88abdabba98de41a12399f7d5df95fc8f49ecb8061b30ffe3d82e284dcd01607c36deeb0a776
data/CHANGES CHANGED
@@ -1,3 +1,121 @@
1
+ 4.0.0.alpha7 (2020-11-10)
2
+ =========================
3
+
4
+ Chrome:
5
+ * Fixed a link to download ChromeDriver when it's not found (thanks @masakazutakewaka).
6
+ * Fixed an issue when passing instance of Profile to an Options in capabilities
7
+ (thanks @masakazutakewaka).
8
+
9
+ DevTools:
10
+ * Added support for multiple version of CDP. Currently supported versions are
11
+ 84-87. The proper version is automatically selected when the browser is started
12
+ based on its version. The implementation is Chromium-based and is confirmed
13
+ to work in Chrome and Edge at least.
14
+ * Added support for basic authentication (see HasAuthentication).
15
+ * Added support for listening to JavaScript console messages (see HasLogEvents).
16
+ * Added support for listening to JavaScript exceptions (see HasLogEvents).
17
+ * Added support for listening to DOM mutations (see HasLogEvents).
18
+
19
+ Edge:
20
+ * Switched default Edge implementation to Chromium-based. To use older versions
21
+ of Edge, pass :edge_html when initializing the driver.
22
+
23
+ Firefox:
24
+ * Fixed an issue whereby using the new capabilities structure in local drivers
25
+ would cause the W3C check to complain that `browser_name` was an invalid
26
+ capability key name (thanks @luke-hill)
27
+
28
+ Ruby:
29
+ * Added support for taking screenshots of individual elements using Element#screenshot
30
+ (thanks @johndouthat).
31
+ * Fixed deprecation message of using Net::HTTP::Proxy (thanks @masakazutakewaka).
32
+ * Fixed false negative detection of Linux on WSL2 (thanks @snsten).
33
+ * Support ChildProcess 4.x versions (thanks @boutil).
34
+
35
+ Safari:
36
+ * Fixed browser name in capabilities for Safari Technology Preview.
37
+
38
+ 4.0.0.alpha6 (2020-05-28)
39
+ =========================
40
+
41
+ Chrome:
42
+ * Added DevTools classes and methods generated from the CDP specification.
43
+ It currently supports commands and events and provides Rubyish API:
44
+ driver.devtools.page.navigate(url: 'http://google.com')
45
+ driver.devtools.console.clear_messages
46
+ driver.devtools.page.enable
47
+ driver.devtools.page.on(:load_event_fired) do |params|
48
+ puts("Page loaded in #{params['timestamp']}")
49
+ end
50
+ Check https://chromedevtools.github.io/devtools-protocol/ for more information
51
+ about possible commands and events. Please note that this API is considered
52
+ to be experimental and may change any time before stable 4.0 release.
53
+ * Fixed an issue when passing :prompt_for_download (or similar snake_cased
54
+ symbols) in Options#prefs would be ignored by Chrome because Selenium
55
+ would internally convert it to camelCased format (:promptForDownload).
56
+ Now :prefs are left intact.
57
+
58
+ Edge:
59
+ * Fixed an issue when Driver#execute_cdp would not work for Chromium-based
60
+ Edge browser.
61
+
62
+ Ruby:
63
+ * Deprecated passing :desired_capabilities and :options to driver initialization
64
+ in favor of :capabilities. They now can be combined in an array to make
65
+ custom capabilities requirements:
66
+ caps = Selenium::WebDriver::Remote::Capabilities.chrome
67
+ opts = Selenium::WebDriver::Chrome::Options.new
68
+ Selenium::WebDriver.for(:remote, capabilities: :chrome)
69
+ Selenium::WebDriver.for(:remote, capabilities: caps)
70
+ Selenium::WebDriver.for(:remote, capabilities: opts)
71
+ Selenium::WebDriver.for(:remote, capabilities: [caps, opts])
72
+ * Deprecated passing Hash to :capabilities in favor of Remote::Capabilities object.
73
+ * Updated minimum require Ruby version to 2.5.
74
+ * Improved keyword arguments handling to avoid warnings in Ruby 2.7.
75
+
76
+ 4.0.0.alpha5 (2020-03-18)
77
+ =========================
78
+
79
+ The release is just to synchronize version with other bindings and does not
80
+ include any changes.
81
+
82
+ 4.0.0.alpha4 (2020-01-09)
83
+ =========================
84
+
85
+ Ruby:
86
+ * Added initial support for relative locators, which allow to find elements
87
+ above/below/left/right/near another element. For example, you can find all
88
+ the cells in a table to the right of your starting cell:
89
+ start_cell = driver.find_element(css: 'td')
90
+ right_cells = driver.find_elements(relative: {tag_name: 'td', right: start_cell})
91
+ The documentation is still lacking so refer to examples in df6be2e962.
92
+ * Added ability to silence certain logger messages by using it's identifiers:
93
+ Selenium::WebDriver.logger.ignore(:driver_path)
94
+ * Added new dependency: websocket. It's used for communicating with Chrome DevTools.
95
+ * Loosened childprocess dependency to allow using version 2.0+.
96
+ * Loosened rubyzip dependency to allow using version 2.0+.
97
+ * Fixed Errno::EACCES error on Linux DeX and similar distributes
98
+
99
+ Chrome:
100
+ * Added initial support for communicating with Chrome DevTools. The implementation
101
+ is very basic and lacks CDP domains, events and types - those will be added
102
+ in future releases. Still, it allows to execute simple commands to DevTools:
103
+ driver.devtools.send('Page.navigate', {url: 'https://google.com'})
104
+
105
+ 4.0.0.alpha3 (2019-07-08)
106
+ =========================
107
+
108
+ Ruby:
109
+ * All documented driver capabilities supported in respective browser Options class by constructor and accessor
110
+ * Driver constructor :options and :desired_capabilities generate the same capabilities for local and remote execution
111
+ * Deprecated :options as keyword for initializing browser Options classes
112
+
113
+ Chrome:
114
+ * Add support for browser logging with latest versions of chromedriver
115
+
116
+ Edge:
117
+ * Add support for Chromium based implementation
118
+
1
119
  4.0.0.alpha2 (2019-05-02)
2
120
  =========================
3
121
 
@@ -34,6 +152,56 @@ Firefox:
34
152
  result in NoMethodError. Now it will find a profile with such name on your
35
153
  system and use it accordingly (issue #7119)
36
154
 
155
+ 3.142.7 (2019-12-27)
156
+ ====================
157
+
158
+ Ruby:
159
+ * Fix keyword argument deprecations in Ruby 2.7 (thanks @connorshea)
160
+
161
+ 3.142.6 (2019-10-04)
162
+ ====================
163
+
164
+ Ruby:
165
+ * Loosen ChildProcess dependency so that 3.0+ can be used (thanks @jaredbeck)
166
+
167
+ 3.142.5 (2019-10-01)
168
+ ====================
169
+
170
+ Ruby:
171
+ * Loosen RubyZip dependency so that 1.3+ can be used (thanks @vtamara)
172
+
173
+ 3.142.4 (2019-09-02)
174
+ ====================
175
+
176
+ Chrome:
177
+ * Added support for new command for getting logs in ChromeDriver 76+
178
+ with W3C mode on
179
+
180
+ 3.142.3 (2019-05-21)
181
+ ====================
182
+
183
+ Firefox:
184
+ * Fixed a regression when Firefox binary path was not sent to GeckoDriver
185
+ by default and browser could not be located (issue #7219)
186
+
187
+ 3.142.2 (2019-05-11)
188
+ ====================
189
+
190
+ Chrome:
191
+ * Fixed an issue when getting/setting network conditions and sending CDP
192
+ commands didn't work with Grid (issue #7174)
193
+
194
+ Safari:
195
+ * Fixed an issue when getting/setting permissions and attaching debugger
196
+ didn't work with Grid (issue #7174)
197
+
198
+ 3.142.1 (2019-05-07)
199
+ ====================
200
+
201
+ Firefox:
202
+ * Fixed an issue when processing error in legacy driver would result
203
+ in NoMethodError (issue #7178)
204
+
37
205
  3.142.0 (2019-04-24)
38
206
  ====================
39
207
 
@@ -566,11 +734,11 @@ Ruby:
566
734
  * Fix bug in auto detection of drivers which allowed selection of non-executable binaries
567
735
 
568
736
  W3C:
569
- * Implement #cookie_named and #delete_all_cookies methods (thanks lmtierney)
570
- * Implement element #property method (thanks lmtierney)
737
+ * Implement #cookie_named and #delete_all_cookies methods (thanks lmtierney)
738
+ * Implement element #property method (thanks lmtierney)
571
739
 
572
740
  Chrome:
573
- * Fix bug in switches (thanks danvine)
741
+ * Fix bug in switches (thanks danvine)
574
742
 
575
743
  3.0.1 (2016-11-06)
576
744
  ===================
@@ -592,7 +760,7 @@ Ruby:
592
760
  * Add support for latest driver options
593
761
  * Add support for :port parameter for launching driver
594
762
  * Add support for :service_args parameter for driver command line switches
595
- * Improve reliability by increasing service shutdown timeout (#2815; thanks John Barbuto )
763
+ * Improve reliability by increasing service shutdown timeout (#2815; thanks John Barbuto )
596
764
 
597
765
  Firefox:
598
766
  * Add support for :firefox_options in geckodriver
data/LICENSE CHANGED
@@ -187,7 +187,7 @@
187
187
  same "printed page" as the copyright notice for easier
188
188
  identification within third-party archives.
189
189
 
190
- Copyright 2019 Software Freedom Conservancy (SFC)
190
+ Copyright 2020 Software Freedom Conservancy (SFC)
191
191
 
192
192
  Licensed under the Apache License, Version 2.0 (the "License");
193
193
  you may not use this file except in compliance with the License.
@@ -74,7 +74,7 @@ module Selenium
74
74
 
75
75
  begin
76
76
  File.open(download_file_name, 'wb') do |destination|
77
- net_http.start('selenium-release.storage.googleapis.com') do |http|
77
+ net_http_start('selenium-release.storage.googleapis.com') do |http|
78
78
  resp = http.request_get("/#{required_version[/(\d+\.\d+)\./, 1]}/#{download_file_name}") do |response|
79
79
  total = response.content_length
80
80
  progress = 0
@@ -85,7 +85,7 @@ module Selenium
85
85
  segment_count += 1
86
86
 
87
87
  if (segment_count % 15).zero?
88
- percent = (progress.to_f / total.to_f) * 100
88
+ percent = progress.fdiv(total) * 100
89
89
  print "#{CL_RESET}Downloading #{download_file_name}: #{percent.to_i}% (#{progress} / #{total})"
90
90
  segment_count = 0
91
91
  end
@@ -97,7 +97,7 @@ module Selenium
97
97
  raise Error, "#{resp.code} for #{download_file_name}" unless resp.is_a? Net::HTTPSuccess
98
98
  end
99
99
  end
100
- rescue
100
+ rescue StandardError
101
101
  FileUtils.rm download_file_name if File.exist? download_file_name
102
102
  raise
103
103
  end
@@ -111,7 +111,7 @@ module Selenium
111
111
 
112
112
  def latest
113
113
  require 'rexml/document'
114
- net_http.start('selenium-release.storage.googleapis.com') do |http|
114
+ net_http_start('selenium-release.storage.googleapis.com') do |http|
115
115
  versions = REXML::Document.new(http.get('/').body).root.get_elements('//Contents/Key').map do |e|
116
116
  e.text[/selenium-server-standalone-(\d+\.\d+\.\d+)\.jar/, 1]
117
117
  end
@@ -120,20 +120,27 @@ module Selenium
120
120
  end
121
121
  end
122
122
 
123
- def net_http
123
+ def net_http_start(address, &block)
124
124
  http_proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
125
125
 
126
126
  if http_proxy
127
127
  http_proxy = "http://#{http_proxy}" unless http_proxy.start_with?('http://')
128
128
  uri = URI.parse(http_proxy)
129
129
 
130
- Net::HTTP::Proxy(uri.host, uri.port)
130
+ Net::HTTP.start(address, nil, uri.host, uri.port, &block)
131
131
  else
132
- Net::HTTP
132
+ Net::HTTP.start(address, &block)
133
133
  end
134
134
  end
135
135
  end
136
136
 
137
+ #
138
+ # The Mode of the Server
139
+ # :standalone, #hub, #node
140
+ #
141
+
142
+ attr_accessor :role
143
+
137
144
  #
138
145
  # The server port
139
146
  #
@@ -175,11 +182,12 @@ module Selenium
175
182
 
176
183
  @jar = jar
177
184
  @host = '127.0.0.1'
185
+ @role = opts.fetch(:role, 'standalone')
178
186
  @port = opts.fetch(:port, 4444)
179
187
  @timeout = opts.fetch(:timeout, 30)
180
188
  @background = opts.fetch(:background, false)
181
189
  @log = opts[:log]
182
-
190
+ @log_file = nil
183
191
  @additional_args = []
184
192
  end
185
193
 
@@ -216,6 +224,10 @@ module Selenium
216
224
 
217
225
  private
218
226
 
227
+ def selenium4?
228
+ @jar.match?(/[^\.][4]\./) || @jar.include?('deploy')
229
+ end
230
+
219
231
  def stop_process
220
232
  return unless @process.alive?
221
233
 
@@ -234,7 +246,11 @@ module Selenium
234
246
  @process ||= begin
235
247
  # extract any additional_args that start with -D as options
236
248
  properties = @additional_args.dup - @additional_args.delete_if { |arg| arg[/^-D/] }
237
- server_command = ['java'] + properties + ['-jar', @jar, '-port', @port.to_s] + @additional_args
249
+ args = ['-jar', @jar]
250
+ args << @role if selenium4?
251
+ args << (selenium4? ? '--port' : '-port')
252
+ args << @port.to_s
253
+ server_command = ['java'] + properties + args + @additional_args
238
254
  cp = ChildProcess.build(*server_command)
239
255
  WebDriver.logger.debug("Executing Process #{server_command}")
240
256
 
@@ -23,9 +23,10 @@ require 'fileutils'
23
23
  require 'date'
24
24
  require 'json'
25
25
  require 'set'
26
+ require 'websocket'
26
27
 
27
- require 'selenium/webdriver/common'
28
28
  require 'selenium/webdriver/atoms'
29
+ require 'selenium/webdriver/common'
29
30
  require 'selenium/webdriver/version'
30
31
 
31
32
  module Selenium
@@ -35,13 +36,16 @@ module Selenium
35
36
  Rectangle = Struct.new(:x, :y, :width, :height)
36
37
  Location = Struct.new(:latitude, :longitude, :altitude)
37
38
 
38
- autoload :Chrome, 'selenium/webdriver/chrome'
39
- autoload :Edge, 'selenium/webdriver/edge'
40
- autoload :Firefox, 'selenium/webdriver/firefox'
41
- autoload :IE, 'selenium/webdriver/ie'
42
- autoload :Remote, 'selenium/webdriver/remote'
43
- autoload :Safari, 'selenium/webdriver/safari'
44
- autoload :Support, 'selenium/webdriver/support'
39
+ autoload :Chrome, 'selenium/webdriver/chrome'
40
+ autoload :DevTools, 'selenium/webdriver/devtools'
41
+ autoload :Edge, 'selenium/webdriver/edge'
42
+ autoload :EdgeHtml, 'selenium/webdriver/edge'
43
+ autoload :EdgeChrome, 'selenium/webdriver/edge'
44
+ autoload :Firefox, 'selenium/webdriver/firefox'
45
+ autoload :IE, 'selenium/webdriver/ie'
46
+ autoload :Remote, 'selenium/webdriver/remote'
47
+ autoload :Safari, 'selenium/webdriver/safari'
48
+ autoload :Support, 'selenium/webdriver/support'
45
49
 
46
50
  # @api private
47
51
 
@@ -0,0 +1,121 @@
1
+ function(){return (function(){var k=this||self;function aa(a){return"string"==typeof a}function ba(a,b){a=a.split(".");var c=k;a[0]in c||"undefined"==typeof c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c[d]&&c[d]!==Object.prototype[d]?c=c[d]:c=c[d]={}:c[d]=b}
2
+ function ca(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";
3
+ else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function da(a){return"function"==ca(a)}function ea(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}function ha(a,b,c){return a.call.apply(a.bind,arguments)}
4
+ function ia(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var e=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(e,d);return a.apply(b,e)}}return function(){return a.apply(b,arguments)}}function ja(a,b,c){Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ja=ha:ja=ia;return ja.apply(null,arguments)}
5
+ function ka(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();d.push.apply(d,arguments);return a.apply(this,d)}}function l(a,b){function c(){}c.prototype=b.prototype;a.prototype=new c;a.prototype.constructor=a};/*
6
+
7
+ The MIT License
8
+
9
+ Copyright (c) 2007 Cybozu Labs, Inc.
10
+ Copyright (c) 2012 Google Inc.
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to
14
+ deal in the Software without restriction, including without limitation the
15
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16
+ sell copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in
20
+ all copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
28
+ IN THE SOFTWARE.
29
+ */
30
+ function la(a,b,c){this.a=a;this.b=b||1;this.f=c||1};var ma;var na=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if("string"===typeof a)return"string"!==typeof b||1!=b.length?-1:a.indexOf(b,0);for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},q=Array.prototype.forEach?function(a,b,c){Array.prototype.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e="string"===typeof a?a.split(""):a,f=0;f<d;f++)f in e&&b.call(c,e[f],f,a)},oa=Array.prototype.filter?function(a,b){return Array.prototype.filter.call(a,
31
+ b,void 0)}:function(a,b){for(var c=a.length,d=[],e=0,f="string"===typeof a?a.split(""):a,g=0;g<c;g++)if(g in f){var h=f[g];b.call(void 0,h,g,a)&&(d[e++]=h)}return d},pa=Array.prototype.map?function(a,b){return Array.prototype.map.call(a,b,void 0)}:function(a,b){for(var c=a.length,d=Array(c),e="string"===typeof a?a.split(""):a,f=0;f<c;f++)f in e&&(d[f]=b.call(void 0,e[f],f,a));return d},qa=Array.prototype.reduce?function(a,b,c){return Array.prototype.reduce.call(a,b,c)}:function(a,b,c){var d=c;q(a,
32
+ function(e,f){d=b.call(void 0,d,e,f,a)});return d},ra=Array.prototype.some?function(a,b){return Array.prototype.some.call(a,b,void 0)}:function(a,b){for(var c=a.length,d="string"===typeof a?a.split(""):a,e=0;e<c;e++)if(e in d&&b.call(void 0,d[e],e,a))return!0;return!1},sa=Array.prototype.every?function(a,b,c){return Array.prototype.every.call(a,b,c)}:function(a,b,c){for(var d=a.length,e="string"===typeof a?a.split(""):a,f=0;f<d;f++)if(f in e&&!b.call(c,e[f],f,a))return!1;return!0};
33
+ function ta(a,b){a:{for(var c=a.length,d="string"===typeof a?a.split(""):a,e=0;e<c;e++)if(e in d&&b.call(void 0,d[e],e,a)){b=e;break a}b=-1}return 0>b?null:"string"===typeof a?a.charAt(b):a[b]}function ua(a){return Array.prototype.concat.apply([],arguments)}function va(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};function wa(a){var b=a.length-1;return 0<=b&&a.indexOf(" ",b)==b}var xa=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]};
34
+ function ya(a,b){var c=0;a=xa(String(a)).split(".");b=xa(String(b)).split(".");for(var d=Math.max(a.length,b.length),e=0;0==c&&e<d;e++){var f=a[e]||"",g=b[e]||"";do{f=/(\d*)(\D*)(.*)/.exec(f)||["","","",""];g=/(\d*)(\D*)(.*)/.exec(g)||["","","",""];if(0==f[0].length&&0==g[0].length)break;c=za(0==f[1].length?0:parseInt(f[1],10),0==g[1].length?0:parseInt(g[1],10))||za(0==f[2].length,0==g[2].length)||za(f[2],g[2]);f=f[3];g=g[3]}while(0==c)}return c}function za(a,b){return a<b?-1:a>b?1:0};var r;a:{var Aa=k.navigator;if(Aa){var Ba=Aa.userAgent;if(Ba){r=Ba;break a}}r=""}function v(a){return-1!=r.indexOf(a)};function Ca(){return v("Firefox")||v("FxiOS")}function Da(){return(v("Chrome")||v("CriOS"))&&!v("Edge")};function Ea(a){return String(a).replace(/\-([a-z])/g,function(b,c){return c.toUpperCase()})};function Fa(){return v("iPhone")&&!v("iPod")&&!v("iPad")};function Ga(a,b){var c=Ha;return Object.prototype.hasOwnProperty.call(c,a)?c[a]:c[a]=b(a)};var Ia=v("Opera"),w=v("Trident")||v("MSIE"),Ja=v("Edge"),Ka=v("Gecko")&&!(-1!=r.toLowerCase().indexOf("webkit")&&!v("Edge"))&&!(v("Trident")||v("MSIE"))&&!v("Edge"),La=-1!=r.toLowerCase().indexOf("webkit")&&!v("Edge");function Ma(){var a=k.document;return a?a.documentMode:void 0}var Na;
35
+ a:{var Oa="",Pa=function(){var a=r;if(Ka)return/rv:([^\);]+)(\)|;)/.exec(a);if(Ja)return/Edge\/([\d\.]+)/.exec(a);if(w)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(La)return/WebKit\/(\S+)/.exec(a);if(Ia)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Pa&&(Oa=Pa?Pa[1]:"");if(w){var Qa=Ma();if(null!=Qa&&Qa>parseFloat(Oa)){Na=String(Qa);break a}}Na=Oa}var Ha={};function Ra(a){return Ga(a,function(){return 0<=ya(Na,a)})}var x;x=k.document&&w?Ma():void 0;var y=w&&!(9<=Number(x)),Sa=w&&!(8<=Number(x));function Ta(a,b,c,d){this.a=a;this.nodeName=c;this.nodeValue=d;this.nodeType=2;this.parentNode=this.ownerElement=b}function Ua(a,b){var c=Sa&&"href"==b.nodeName?a.getAttribute(b.nodeName,2):b.nodeValue;return new Ta(b,a,b.nodeName,c)};function Va(a){this.b=a;this.a=0}function Wa(a){a=a.match(Xa);for(var b=0;b<a.length;b++)Ya.test(a[b])&&a.splice(b,1);return new Va(a)}var Xa=/\$?(?:(?![0-9-\.])(?:\*|[\w-\.]+):)?(?![0-9-\.])(?:\*|[\w-\.]+)|\/\/|\.\.|::|\d+(?:\.\d*)?|\.\d+|"[^"]*"|'[^']*'|[!<>]=|\s+|./g,Ya=/^\s/;function z(a,b){return a.b[a.a+(b||0)]}function A(a){return a.b[a.a++]}function Za(a){return a.b.length<=a.a};function $a(a,b){this.x=void 0!==a?a:0;this.y=void 0!==b?b:0}$a.prototype.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};$a.prototype.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};$a.prototype.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};function ab(a,b){this.width=a;this.height=b}ab.prototype.aspectRatio=function(){return this.width/this.height};ab.prototype.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};ab.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};ab.prototype.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};function bb(a){return a?new cb(B(a)):ma||(ma=new cb)}function db(a){for(;a&&1!=a.nodeType;)a=a.previousSibling;return a}function eb(a,b){if(!a||!b)return!1;if(a.contains&&1==b.nodeType)return a==b||a.contains(b);if("undefined"!=typeof a.compareDocumentPosition)return a==b||!!(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;return b==a}
36
+ function fb(a,b){if(a==b)return 0;if(a.compareDocumentPosition)return a.compareDocumentPosition(b)&2?1:-1;if(w&&!(9<=Number(x))){if(9==a.nodeType)return-1;if(9==b.nodeType)return 1}if("sourceIndex"in a||a.parentNode&&"sourceIndex"in a.parentNode){var c=1==a.nodeType,d=1==b.nodeType;if(c&&d)return a.sourceIndex-b.sourceIndex;var e=a.parentNode,f=b.parentNode;return e==f?gb(a,b):!c&&eb(e,b)?-1*hb(a,b):!d&&eb(f,a)?hb(b,a):(c?a.sourceIndex:e.sourceIndex)-(d?b.sourceIndex:f.sourceIndex)}d=B(a);c=d.createRange();
37
+ c.selectNode(a);c.collapse(!0);a=d.createRange();a.selectNode(b);a.collapse(!0);return c.compareBoundaryPoints(k.Range.START_TO_END,a)}function hb(a,b){var c=a.parentNode;if(c==b)return-1;for(;b.parentNode!=c;)b=b.parentNode;return gb(b,a)}function gb(a,b){for(;b=b.previousSibling;)if(b==a)return-1;return 1}function B(a){return 9==a.nodeType?a:a.ownerDocument||a.document}function ib(a,b){a&&(a=a.parentNode);for(var c=0;a;){if(b(a))return a;a=a.parentNode;c++}return null}
38
+ function cb(a){this.a=a||k.document||document}cb.prototype.getElementsByTagName=function(a,b){return(b||this.a).getElementsByTagName(String(a))};
39
+ function jb(a,b,c,d){a=d||a.a;var e=b&&"*"!=b?String(b).toUpperCase():"";if(a.querySelectorAll&&a.querySelector&&(e||c))c=a.querySelectorAll(e+(c?"."+c:""));else if(c&&a.getElementsByClassName)if(b=a.getElementsByClassName(c),e){a={};for(var f=d=0,g;g=b[f];f++)e==g.nodeName&&(a[d++]=g);a.length=d;c=a}else c=b;else if(b=a.getElementsByTagName(e||"*"),c){a={};for(f=d=0;g=b[f];f++){e=g.className;var h;if(h="function"==typeof e.split)h=0<=na(e.split(/\s+/),c);h&&(a[d++]=g)}a.length=d;c=a}else c=b;return c}
40
+ ;function C(a){var b=null,c=a.nodeType;1==c&&(b=a.textContent,b=void 0==b||null==b?a.innerText:b,b=void 0==b||null==b?"":b);if("string"!=typeof b)if(y&&"title"==a.nodeName.toLowerCase()&&1==c)b=a.text;else if(9==c||1==c){a=9==c?a.documentElement:a.firstChild;c=0;var d=[];for(b="";a;){do 1!=a.nodeType&&(b+=a.nodeValue),y&&"title"==a.nodeName.toLowerCase()&&(b+=a.text),d[c++]=a;while(a=a.firstChild);for(;c&&!(a=d[--c].nextSibling););}}else b=a.nodeValue;return b}
41
+ function kb(a,b,c){if(null===b)return!0;try{if(!a.getAttribute)return!1}catch(d){return!1}Sa&&"class"==b&&(b="className");return null==c?!!a.getAttribute(b):a.getAttribute(b,2)==c}function lb(a,b,c,d,e){return(y?mb:nb).call(null,a,b,aa(c)?c:null,aa(d)?d:null,e||new D)}
42
+ function mb(a,b,c,d,e){if(a instanceof ob||8==a.b||c&&null===a.b){var f=b.all;if(!f)return e;a=pb(a);if("*"!=a&&(f=b.getElementsByTagName(a),!f))return e;if(c){for(var g=[],h=0;b=f[h++];)kb(b,c,d)&&g.push(b);f=g}for(h=0;b=f[h++];)"*"==a&&"!"==b.tagName||e.add(b);return e}qb(a,b,c,d,e);return e}
43
+ function nb(a,b,c,d,e){b.getElementsByName&&d&&"name"==c&&!w?(b=b.getElementsByName(d),q(b,function(f){a.a(f)&&e.add(f)})):b.getElementsByClassName&&d&&"class"==c?(b=b.getElementsByClassName(d),q(b,function(f){f.className==d&&a.a(f)&&e.add(f)})):a instanceof E?qb(a,b,c,d,e):b.getElementsByTagName&&(b=b.getElementsByTagName(a.f()),q(b,function(f){kb(f,c,d)&&e.add(f)}));return e}
44
+ function rb(a,b,c,d,e){var f;if((a instanceof ob||8==a.b||c&&null===a.b)&&(f=b.childNodes)){var g=pb(a);if("*"!=g&&(f=oa(f,function(h){return h.tagName&&h.tagName.toLowerCase()==g}),!f))return e;c&&(f=oa(f,function(h){return kb(h,c,d)}));q(f,function(h){"*"==g&&("!"==h.tagName||"*"==g&&1!=h.nodeType)||e.add(h)});return e}return sb(a,b,c,d,e)}function sb(a,b,c,d,e){for(b=b.firstChild;b;b=b.nextSibling)kb(b,c,d)&&a.a(b)&&e.add(b);return e}
45
+ function qb(a,b,c,d,e){for(b=b.firstChild;b;b=b.nextSibling)kb(b,c,d)&&a.a(b)&&e.add(b),qb(a,b,c,d,e)}function pb(a){if(a instanceof E){if(8==a.b)return"!";if(null===a.b)return"*"}return a.f()};function D(){this.b=this.a=null;this.m=0}function tb(a){this.f=a;this.a=this.b=null}function ub(a,b){if(!a.a)return b;if(!b.a)return a;var c=a.a;b=b.a;for(var d=null,e,f=0;c&&b;){e=c.f;var g=b.f;e==g||e instanceof Ta&&g instanceof Ta&&e.a==g.a?(e=c,c=c.a,b=b.a):0<fb(c.f,b.f)?(e=b,b=b.a):(e=c,c=c.a);(e.b=d)?d.a=e:a.a=e;d=e;f++}for(e=c||b;e;)e.b=d,d=d.a=e,f++,e=e.a;a.b=d;a.m=f;return a}function vb(a,b){b=new tb(b);b.a=a.a;a.b?a.a.b=b:a.a=a.b=b;a.a=b;a.m++}
46
+ D.prototype.add=function(a){a=new tb(a);a.b=this.b;this.a?this.b.a=a:this.a=this.b=a;this.b=a;this.m++};function wb(a){return(a=a.a)?a.f:null}function xb(a){return(a=wb(a))?C(a):""}function yb(a,b){return new zb(a,!!b)}function zb(a,b){this.f=a;this.b=(this.v=b)?a.b:a.a;this.a=null}function F(a){var b=a.b;if(null==b)return null;var c=a.a=b;a.b=a.v?b.b:b.a;return c.f};function H(a){this.i=a;this.b=this.g=!1;this.f=null}function I(a){return"\n "+a.toString().split("\n").join("\n ")}function Ab(a,b){a.g=b}function Bb(a,b){a.b=b}function J(a,b){a=a.a(b);return a instanceof D?+xb(a):+a}function K(a,b){a=a.a(b);return a instanceof D?xb(a):""+a}function Cb(a,b){a=a.a(b);return a instanceof D?!!a.m:!!a};function Db(a,b,c){H.call(this,a.i);this.c=a;this.h=b;this.u=c;this.g=b.g||c.g;this.b=b.b||c.b;this.c==Eb&&(c.b||c.g||4==c.i||0==c.i||!b.f?b.b||b.g||4==b.i||0==b.i||!c.f||(this.f={name:c.f.name,A:b}):this.f={name:b.f.name,A:c})}l(Db,H);
47
+ function Gb(a,b,c,d,e){b=b.a(d);c=c.a(d);var f;if(b instanceof D&&c instanceof D){b=yb(b);for(d=F(b);d;d=F(b))for(e=yb(c),f=F(e);f;f=F(e))if(a(C(d),C(f)))return!0;return!1}if(b instanceof D||c instanceof D){b instanceof D?(e=b,d=c):(e=c,d=b);f=yb(e);for(var g=typeof d,h=F(f);h;h=F(f)){switch(g){case "number":h=+C(h);break;case "boolean":h=!!C(h);break;case "string":h=C(h);break;default:throw Error("Illegal primitive type for comparison.");}if(e==b&&a(h,d)||e==c&&a(d,h))return!0}return!1}return e?
48
+ "boolean"==typeof b||"boolean"==typeof c?a(!!b,!!c):"number"==typeof b||"number"==typeof c?a(+b,+c):a(b,c):a(+b,+c)}Db.prototype.a=function(a){return this.c.s(this.h,this.u,a)};Db.prototype.toString=function(){var a="Binary Expression: "+this.c;a+=I(this.h);return a+=I(this.u)};function Hb(a,b,c,d){this.Z=a;this.M=b;this.i=c;this.s=d}Hb.prototype.toString=function(){return this.Z};var Ib={};
49
+ function L(a,b,c,d){if(Ib.hasOwnProperty(a))throw Error("Binary operator already created: "+a);a=new Hb(a,b,c,d);return Ib[a.toString()]=a}L("div",6,1,function(a,b,c){return J(a,c)/J(b,c)});L("mod",6,1,function(a,b,c){return J(a,c)%J(b,c)});L("*",6,1,function(a,b,c){return J(a,c)*J(b,c)});L("+",5,1,function(a,b,c){return J(a,c)+J(b,c)});L("-",5,1,function(a,b,c){return J(a,c)-J(b,c)});L("<",4,2,function(a,b,c){return Gb(function(d,e){return d<e},a,b,c)});
50
+ L(">",4,2,function(a,b,c){return Gb(function(d,e){return d>e},a,b,c)});L("<=",4,2,function(a,b,c){return Gb(function(d,e){return d<=e},a,b,c)});L(">=",4,2,function(a,b,c){return Gb(function(d,e){return d>=e},a,b,c)});var Eb=L("=",3,2,function(a,b,c){return Gb(function(d,e){return d==e},a,b,c,!0)});L("!=",3,2,function(a,b,c){return Gb(function(d,e){return d!=e},a,b,c,!0)});L("and",2,2,function(a,b,c){return Cb(a,c)&&Cb(b,c)});L("or",1,2,function(a,b,c){return Cb(a,c)||Cb(b,c)});function Jb(a,b){if(b.a.length&&4!=a.i)throw Error("Primary expression must evaluate to nodeset if filter has predicate(s).");H.call(this,a.i);this.c=a;this.h=b;this.g=a.g;this.b=a.b}l(Jb,H);Jb.prototype.a=function(a){a=this.c.a(a);return Kb(this.h,a)};Jb.prototype.toString=function(){var a="Filter:"+I(this.c);return a+=I(this.h)};function Lb(a,b){if(b.length<a.L)throw Error("Function "+a.l+" expects at least"+a.L+" arguments, "+b.length+" given");if(null!==a.G&&b.length>a.G)throw Error("Function "+a.l+" expects at most "+a.G+" arguments, "+b.length+" given");a.Y&&q(b,function(c,d){if(4!=c.i)throw Error("Argument "+d+" to function "+a.l+" is not of type Nodeset: "+c);});H.call(this,a.i);this.C=a;this.c=b;Ab(this,a.g||ra(b,function(c){return c.g}));Bb(this,a.X&&!b.length||a.W&&!!b.length||ra(b,function(c){return c.b}))}
51
+ l(Lb,H);Lb.prototype.a=function(a){return this.C.s.apply(null,ua(a,this.c))};Lb.prototype.toString=function(){var a="Function: "+this.C;if(this.c.length){var b=qa(this.c,function(c,d){return c+I(d)},"Arguments:");a+=I(b)}return a};function Mb(a,b,c,d,e,f,g,h){this.l=a;this.i=b;this.g=c;this.X=d;this.W=!1;this.s=e;this.L=f;this.G=void 0!==g?g:f;this.Y=!!h}Mb.prototype.toString=function(){return this.l};var Nb={};
52
+ function M(a,b,c,d,e,f,g,h){if(Nb.hasOwnProperty(a))throw Error("Function already created: "+a+".");Nb[a]=new Mb(a,b,c,d,e,f,g,h)}M("boolean",2,!1,!1,function(a,b){return Cb(b,a)},1);M("ceiling",1,!1,!1,function(a,b){return Math.ceil(J(b,a))},1);M("concat",3,!1,!1,function(a,b){return qa(va(arguments,1),function(c,d){return c+K(d,a)},"")},2,null);M("contains",2,!1,!1,function(a,b,c){b=K(b,a);a=K(c,a);return a=-1!=b.indexOf(a)},2);M("count",1,!1,!1,function(a,b){return b.a(a).m},1,1,!0);
53
+ M("false",2,!1,!1,function(){return!1},0);M("floor",1,!1,!1,function(a,b){return Math.floor(J(b,a))},1);M("id",4,!1,!1,function(a,b){function c(h){if(y){var n=e.all[h];if(n){if(n.nodeType&&h==n.id)return n;if(n.length)return ta(n,function(t){return h==t.id})}return null}return e.getElementById(h)}var d=a.a,e=9==d.nodeType?d:d.ownerDocument;a=K(b,a).split(/\s+/);var f=[];q(a,function(h){h=c(h);!h||0<=na(f,h)||f.push(h)});f.sort(fb);var g=new D;q(f,function(h){g.add(h)});return g},1);
54
+ M("lang",2,!1,!1,function(){return!1},1);M("last",1,!0,!1,function(a){if(1!=arguments.length)throw Error("Function last expects ()");return a.f},0);M("local-name",3,!1,!0,function(a,b){return(a=b?wb(b.a(a)):a.a)?a.localName||a.nodeName.toLowerCase():""},0,1,!0);M("name",3,!1,!0,function(a,b){return(a=b?wb(b.a(a)):a.a)?a.nodeName.toLowerCase():""},0,1,!0);M("namespace-uri",3,!0,!1,function(){return""},0,1,!0);
55
+ M("normalize-space",3,!1,!0,function(a,b){return(b?K(b,a):C(a.a)).replace(/[\s\xa0]+/g," ").replace(/^\s+|\s+$/g,"")},0,1);M("not",2,!1,!1,function(a,b){return!Cb(b,a)},1);M("number",1,!1,!0,function(a,b){return b?J(b,a):+C(a.a)},0,1);M("position",1,!0,!1,function(a){return a.b},0);M("round",1,!1,!1,function(a,b){return Math.round(J(b,a))},1);M("starts-with",2,!1,!1,function(a,b,c){b=K(b,a);a=K(c,a);return 0==b.lastIndexOf(a,0)},2);M("string",3,!1,!0,function(a,b){return b?K(b,a):C(a.a)},0,1);
56
+ M("string-length",1,!1,!0,function(a,b){return(b?K(b,a):C(a.a)).length},0,1);M("substring",3,!1,!1,function(a,b,c,d){c=J(c,a);if(isNaN(c)||Infinity==c||-Infinity==c)return"";d=d?J(d,a):Infinity;if(isNaN(d)||-Infinity===d)return"";c=Math.round(c)-1;var e=Math.max(c,0);a=K(b,a);return Infinity==d?a.substring(e):a.substring(e,c+Math.round(d))},2,3);M("substring-after",3,!1,!1,function(a,b,c){b=K(b,a);a=K(c,a);c=b.indexOf(a);return-1==c?"":b.substring(c+a.length)},2);
57
+ M("substring-before",3,!1,!1,function(a,b,c){b=K(b,a);a=K(c,a);a=b.indexOf(a);return-1==a?"":b.substring(0,a)},2);M("sum",1,!1,!1,function(a,b){a=yb(b.a(a));b=0;for(var c=F(a);c;c=F(a))b+=+C(c);return b},1,1,!0);M("translate",3,!1,!1,function(a,b,c,d){b=K(b,a);c=K(c,a);var e=K(d,a);a={};for(d=0;d<c.length;d++){var f=c.charAt(d);f in a||(a[f]=e.charAt(d))}c="";for(d=0;d<b.length;d++)f=b.charAt(d),c+=f in a?a[f]:f;return c},3);M("true",2,!1,!1,function(){return!0},0);function E(a,b){this.h=a;this.c=void 0!==b?b:null;this.b=null;switch(a){case "comment":this.b=8;break;case "text":this.b=3;break;case "processing-instruction":this.b=7;break;case "node":break;default:throw Error("Unexpected argument");}}function Ob(a){return"comment"==a||"text"==a||"processing-instruction"==a||"node"==a}E.prototype.a=function(a){return null===this.b||this.b==a.nodeType};E.prototype.f=function(){return this.h};
58
+ E.prototype.toString=function(){var a="Kind Test: "+this.h;null===this.c||(a+=I(this.c));return a};function Pb(a){H.call(this,3);this.c=a.substring(1,a.length-1)}l(Pb,H);Pb.prototype.a=function(){return this.c};Pb.prototype.toString=function(){return"Literal: "+this.c};function ob(a,b){this.l=a.toLowerCase();a="*"==this.l?"*":"http://www.w3.org/1999/xhtml";this.c=b?b.toLowerCase():a}ob.prototype.a=function(a){var b=a.nodeType;if(1!=b&&2!=b)return!1;b=void 0!==a.localName?a.localName:a.nodeName;return"*"!=this.l&&this.l!=b.toLowerCase()?!1:"*"==this.c?!0:this.c==(a.namespaceURI?a.namespaceURI.toLowerCase():"http://www.w3.org/1999/xhtml")};ob.prototype.f=function(){return this.l};
59
+ ob.prototype.toString=function(){return"Name Test: "+("http://www.w3.org/1999/xhtml"==this.c?"":this.c+":")+this.l};function Qb(a){H.call(this,1);this.c=a}l(Qb,H);Qb.prototype.a=function(){return this.c};Qb.prototype.toString=function(){return"Number: "+this.c};function Rb(a,b){H.call(this,a.i);this.h=a;this.c=b;this.g=a.g;this.b=a.b;1==this.c.length&&(a=this.c[0],a.F||a.c!=Sb||(a=a.u,"*"!=a.f()&&(this.f={name:a.f(),A:null})))}l(Rb,H);function Tb(){H.call(this,4)}l(Tb,H);Tb.prototype.a=function(a){var b=new D;a=a.a;9==a.nodeType?b.add(a):b.add(a.ownerDocument);return b};Tb.prototype.toString=function(){return"Root Helper Expression"};function Ub(){H.call(this,4)}l(Ub,H);Ub.prototype.a=function(a){var b=new D;b.add(a.a);return b};Ub.prototype.toString=function(){return"Context Helper Expression"};
60
+ function Vb(a){return"/"==a||"//"==a}Rb.prototype.a=function(a){var b=this.h.a(a);if(!(b instanceof D))throw Error("Filter expression must evaluate to nodeset.");a=this.c;for(var c=0,d=a.length;c<d&&b.m;c++){var e=a[c],f=yb(b,e.c.v);if(e.g||e.c!=Wb)if(e.g||e.c!=Xb){var g=F(f);for(b=e.a(new la(g));null!=(g=F(f));)g=e.a(new la(g)),b=ub(b,g)}else g=F(f),b=e.a(new la(g));else{for(g=F(f);(b=F(f))&&(!g.contains||g.contains(b))&&b.compareDocumentPosition(g)&8;g=b);b=e.a(new la(g))}}return b};
61
+ Rb.prototype.toString=function(){var a="Path Expression:"+I(this.h);if(this.c.length){var b=qa(this.c,function(c,d){return c+I(d)},"Steps:");a+=I(b)}return a};function Yb(a,b){this.a=a;this.v=!!b}
62
+ function Kb(a,b,c){for(c=c||0;c<a.a.length;c++)for(var d=a.a[c],e=yb(b),f=b.m,g,h=0;g=F(e);h++){var n=a.v?f-h:h+1;g=d.a(new la(g,n,f));if("number"==typeof g)n=n==g;else if("string"==typeof g||"boolean"==typeof g)n=!!g;else if(g instanceof D)n=0<g.m;else throw Error("Predicate.evaluate returned an unexpected type.");if(!n){n=e;g=n.f;var t=n.a;if(!t)throw Error("Next must be called at least once before remove.");var p=t.b;t=t.a;p?p.a=t:g.a=t;t?t.b=p:g.b=p;g.m--;n.a=null}}return b}
63
+ Yb.prototype.toString=function(){return qa(this.a,function(a,b){return a+I(b)},"Predicates:")};function Zb(a,b,c,d){H.call(this,4);this.c=a;this.u=b;this.h=c||new Yb([]);this.F=!!d;b=this.h;b=0<b.a.length?b.a[0].f:null;a.aa&&b&&(a=b.name,a=y?a.toLowerCase():a,this.f={name:a,A:b.A});a:{a=this.h;for(b=0;b<a.a.length;b++)if(c=a.a[b],c.g||1==c.i||0==c.i){a=!0;break a}a=!1}this.g=a}l(Zb,H);
64
+ Zb.prototype.a=function(a){var b=a.a,c=this.f,d=null,e=null,f=0;c&&(d=c.name,e=c.A?K(c.A,a):null,f=1);if(this.F)if(this.g||this.c!=$b)if(b=yb((new Zb(ac,new E("node"))).a(a)),c=F(b))for(a=this.s(c,d,e,f);null!=(c=F(b));)a=ub(a,this.s(c,d,e,f));else a=new D;else a=lb(this.u,b,d,e),a=Kb(this.h,a,f);else a=this.s(a.a,d,e,f);return a};Zb.prototype.s=function(a,b,c,d){a=this.c.C(this.u,a,b,c);return a=Kb(this.h,a,d)};
65
+ Zb.prototype.toString=function(){var a="Step:"+I("Operator: "+(this.F?"//":"/"));this.c.l&&(a+=I("Axis: "+this.c));a+=I(this.u);if(this.h.a.length){var b=qa(this.h.a,function(c,d){return c+I(d)},"Predicates:");a+=I(b)}return a};function bc(a,b,c,d){this.l=a;this.C=b;this.v=c;this.aa=d}bc.prototype.toString=function(){return this.l};var cc={};function N(a,b,c,d){if(cc.hasOwnProperty(a))throw Error("Axis already created: "+a);b=new bc(a,b,c,!!d);return cc[a]=b}
66
+ N("ancestor",function(a,b){for(var c=new D;b=b.parentNode;)a.a(b)&&vb(c,b);return c},!0);N("ancestor-or-self",function(a,b){var c=new D;do a.a(b)&&vb(c,b);while(b=b.parentNode);return c},!0);
67
+ var Sb=N("attribute",function(a,b){var c=new D,d=a.f();if("style"==d&&y&&b.style)return c.add(new Ta(b.style,b,"style",b.style.cssText)),c;var e=b.attributes;if(e)if(a instanceof E&&null===a.b||"*"==d)for(a=0;d=e[a];a++)y?d.nodeValue&&c.add(Ua(b,d)):c.add(d);else(d=e.getNamedItem(d))&&(y?d.nodeValue&&c.add(Ua(b,d)):c.add(d));return c},!1),$b=N("child",function(a,b,c,d,e){return(y?rb:sb).call(null,a,b,aa(c)?c:null,aa(d)?d:null,e||new D)},!1,!0);N("descendant",lb,!1,!0);
68
+ var ac=N("descendant-or-self",function(a,b,c,d){var e=new D;kb(b,c,d)&&a.a(b)&&e.add(b);return lb(a,b,c,d,e)},!1,!0),Wb=N("following",function(a,b,c,d){var e=new D;do for(var f=b;f=f.nextSibling;)kb(f,c,d)&&a.a(f)&&e.add(f),e=lb(a,f,c,d,e);while(b=b.parentNode);return e},!1,!0);N("following-sibling",function(a,b){for(var c=new D;b=b.nextSibling;)a.a(b)&&c.add(b);return c},!1);N("namespace",function(){return new D},!1);
69
+ var dc=N("parent",function(a,b){var c=new D;if(9==b.nodeType)return c;if(2==b.nodeType)return c.add(b.ownerElement),c;b=b.parentNode;a.a(b)&&c.add(b);return c},!1),Xb=N("preceding",function(a,b,c,d){var e=new D,f=[];do f.unshift(b);while(b=b.parentNode);for(var g=1,h=f.length;g<h;g++){var n=[];for(b=f[g];b=b.previousSibling;)n.unshift(b);for(var t=0,p=n.length;t<p;t++)b=n[t],kb(b,c,d)&&a.a(b)&&e.add(b),e=lb(a,b,c,d,e)}return e},!0,!0);
70
+ N("preceding-sibling",function(a,b){for(var c=new D;b=b.previousSibling;)a.a(b)&&vb(c,b);return c},!0);var ec=N("self",function(a,b){var c=new D;a.a(b)&&c.add(b);return c},!1);function fc(a){H.call(this,1);this.c=a;this.g=a.g;this.b=a.b}l(fc,H);fc.prototype.a=function(a){return-J(this.c,a)};fc.prototype.toString=function(){return"Unary Expression: -"+I(this.c)};function gc(a){H.call(this,4);this.c=a;Ab(this,ra(this.c,function(b){return b.g}));Bb(this,ra(this.c,function(b){return b.b}))}l(gc,H);gc.prototype.a=function(a){var b=new D;q(this.c,function(c){c=c.a(a);if(!(c instanceof D))throw Error("Path expression must evaluate to NodeSet.");b=ub(b,c)});return b};gc.prototype.toString=function(){return qa(this.c,function(a,b){return a+I(b)},"Union Expression:")};function hc(a,b){this.a=a;this.b=b}function ic(a){for(var b,c=[];;){O(a,"Missing right hand side of binary expression.");b=jc(a);var d=A(a.a);if(!d)break;var e=(d=Ib[d]||null)&&d.M;if(!e){a.a.a--;break}for(;c.length&&e<=c[c.length-1].M;)b=new Db(c.pop(),c.pop(),b);c.push(b,d)}for(;c.length;)b=new Db(c.pop(),c.pop(),b);return b}function O(a,b){if(Za(a.a))throw Error(b);}function kc(a,b){a=A(a.a);if(a!=b)throw Error("Bad token, expected: "+b+" got: "+a);}
71
+ function lc(a){a=A(a.a);if(")"!=a)throw Error("Bad token: "+a);}function mc(a){a=A(a.a);if(2>a.length)throw Error("Unclosed literal string");return new Pb(a)}
72
+ function nc(a){var b=[];if(Vb(z(a.a))){var c=A(a.a);var d=z(a.a);if("/"==c&&(Za(a.a)||"."!=d&&".."!=d&&"@"!=d&&"*"!=d&&!/(?![0-9])[\w]/.test(d)))return new Tb;d=new Tb;O(a,"Missing next location step.");c=oc(a,c);b.push(c)}else{a:{c=z(a.a);d=c.charAt(0);switch(d){case "$":throw Error("Variable reference not allowed in HTML XPath");case "(":A(a.a);c=ic(a);O(a,'unclosed "("');kc(a,")");break;case '"':case "'":c=mc(a);break;default:if(isNaN(+c))if(!Ob(c)&&/(?![0-9])[\w]/.test(d)&&"("==z(a.a,1)){c=A(a.a);
73
+ c=Nb[c]||null;A(a.a);for(d=[];")"!=z(a.a);){O(a,"Missing function argument list.");d.push(ic(a));if(","!=z(a.a))break;A(a.a)}O(a,"Unclosed function argument list.");lc(a);c=new Lb(c,d)}else{c=null;break a}else c=new Qb(+A(a.a))}"["==z(a.a)&&(d=new Yb(pc(a)),c=new Jb(c,d))}if(c)if(Vb(z(a.a)))d=c;else return c;else c=oc(a,"/"),d=new Ub,b.push(c)}for(;Vb(z(a.a));)c=A(a.a),O(a,"Missing next location step."),c=oc(a,c),b.push(c);return new Rb(d,b)}
74
+ function oc(a,b){if("/"!=b&&"//"!=b)throw Error('Step op should be "/" or "//"');if("."==z(a.a)){var c=new Zb(ec,new E("node"));A(a.a);return c}if(".."==z(a.a))return c=new Zb(dc,new E("node")),A(a.a),c;if("@"==z(a.a)){var d=Sb;A(a.a);O(a,"Missing attribute name")}else if("::"==z(a.a,1)){if(!/(?![0-9])[\w]/.test(z(a.a).charAt(0)))throw Error("Bad token: "+A(a.a));var e=A(a.a);d=cc[e]||null;if(!d)throw Error("No axis with name: "+e);A(a.a);O(a,"Missing node name")}else d=$b;e=z(a.a);if(/(?![0-9])[\w\*]/.test(e.charAt(0)))if("("==
75
+ z(a.a,1)){if(!Ob(e))throw Error("Invalid node type: "+e);e=A(a.a);if(!Ob(e))throw Error("Invalid type name: "+e);kc(a,"(");O(a,"Bad nodetype");var f=z(a.a).charAt(0),g=null;if('"'==f||"'"==f)g=mc(a);O(a,"Bad nodetype");lc(a);e=new E(e,g)}else if(e=A(a.a),f=e.indexOf(":"),-1==f)e=new ob(e);else{g=e.substring(0,f);if("*"==g)var h="*";else if(h=a.b(g),!h)throw Error("Namespace prefix not declared: "+g);e=e.substr(f+1);e=new ob(e,h)}else throw Error("Bad token: "+A(a.a));a=new Yb(pc(a),d.v);return c||
76
+ new Zb(d,e,a,"//"==b)}function pc(a){for(var b=[];"["==z(a.a);){A(a.a);O(a,"Missing predicate expression.");var c=ic(a);b.push(c);O(a,"Unclosed predicate expression.");kc(a,"]")}return b}function jc(a){if("-"==z(a.a))return A(a.a),new fc(jc(a));var b=nc(a);if("|"!=z(a.a))a=b;else{for(b=[b];"|"==A(a.a);)O(a,"Missing next union location path."),b.push(nc(a));a.a.a--;a=new gc(b)}return a};function qc(a){switch(a.nodeType){case 1:return ka(rc,a);case 9:return qc(a.documentElement);case 11:case 10:case 6:case 12:return sc;default:return a.parentNode?qc(a.parentNode):sc}}function sc(){return null}function rc(a,b){if(a.prefix==b)return a.namespaceURI||"http://www.w3.org/1999/xhtml";var c=a.getAttributeNode("xmlns:"+b);return c&&c.specified?c.value||null:a.parentNode&&9!=a.parentNode.nodeType?rc(a.parentNode,b):null};function vc(a,b){if(!a.length)throw Error("Empty XPath expression.");a=Wa(a);if(Za(a))throw Error("Invalid XPath expression.");b?da(b)||(b=ja(b.lookupNamespaceURI,b)):b=function(){return null};var c=ic(new hc(a,b));if(!Za(a))throw Error("Bad token: "+A(a));this.evaluate=function(d,e){d=c.a(new la(d));return new P(d,e)}}
77
+ function P(a,b){if(0==b)if(a instanceof D)b=4;else if("string"==typeof a)b=2;else if("number"==typeof a)b=1;else if("boolean"==typeof a)b=3;else throw Error("Unexpected evaluation result.");if(2!=b&&1!=b&&3!=b&&!(a instanceof D))throw Error("value could not be converted to the specified type");this.resultType=b;switch(b){case 2:this.stringValue=a instanceof D?xb(a):""+a;break;case 1:this.numberValue=a instanceof D?+xb(a):+a;break;case 3:this.booleanValue=a instanceof D?0<a.m:!!a;break;case 4:case 5:case 6:case 7:var c=
78
+ yb(a);var d=[];for(var e=F(c);e;e=F(c))d.push(e instanceof Ta?e.a:e);this.snapshotLength=a.m;this.invalidIteratorState=!1;break;case 8:case 9:a=wb(a);this.singleNodeValue=a instanceof Ta?a.a:a;break;default:throw Error("Unknown XPathResult type.");}var f=0;this.iterateNext=function(){if(4!=b&&5!=b)throw Error("iterateNext called with wrong result type");return f>=d.length?null:d[f++]};this.snapshotItem=function(g){if(6!=b&&7!=b)throw Error("snapshotItem called with wrong result type");return g>=d.length||
79
+ 0>g?null:d[g]}}P.ANY_TYPE=0;P.NUMBER_TYPE=1;P.STRING_TYPE=2;P.BOOLEAN_TYPE=3;P.UNORDERED_NODE_ITERATOR_TYPE=4;P.ORDERED_NODE_ITERATOR_TYPE=5;P.UNORDERED_NODE_SNAPSHOT_TYPE=6;P.ORDERED_NODE_SNAPSHOT_TYPE=7;P.ANY_UNORDERED_NODE_TYPE=8;P.FIRST_ORDERED_NODE_TYPE=9;function wc(a){this.lookupNamespaceURI=qc(a)}
80
+ function xc(a,b){a=a||k;var c=a.Document&&a.Document.prototype||a.document;if(!c.evaluate||b)a.XPathResult=P,c.evaluate=function(d,e,f,g){return(new vc(d,f)).evaluate(e,g)},c.createExpression=function(d,e){return new vc(d,e)},c.createNSResolver=function(d){return new wc(d)}}ba("wgxpath.install",xc);ba("wgxpath.install",xc);var yc=window;function Q(a,b){this.code=a;this.a=S[a]||zc;this.message=b||"";a=this.a.replace(/((?:^|\s+)[a-z])/g,function(c){return c.toUpperCase().replace(/^[\s\xa0]+/g,"")});b=a.length-5;if(0>b||a.indexOf("Error",b)!=b)a+="Error";this.name=a;a=Error(this.message);a.name=this.name;this.stack=a.stack||""}l(Q,Error);var zc="unknown error",S={15:"element not selectable",11:"element not visible"};S[31]=zc;S[30]=zc;S[24]="invalid cookie domain";S[29]="invalid element coordinates";S[12]="invalid element state";
81
+ S[32]="invalid selector";S[51]="invalid selector";S[52]="invalid selector";S[17]="javascript error";S[405]="unsupported operation";S[34]="move target out of bounds";S[27]="no such alert";S[7]="no such element";S[8]="no such frame";S[23]="no such window";S[28]="script timeout";S[33]="session not created";S[10]="stale element reference";S[21]="timeout";S[25]="unable to set cookie";S[26]="unexpected alert open";S[13]=zc;S[9]="unknown command";var Ac={B:function(a){return!(!a.querySelectorAll||!a.querySelector)},o:function(a,b){if(!a)throw new Q(32,"No class name specified");a=xa(a);if(-1!==a.indexOf(" "))throw new Q(32,"Compound class names not permitted");if(Ac.B(b))try{return b.querySelector("."+a.replace(/\./g,"\\."))||null}catch(c){throw new Q(32,"An invalid or illegal class name was specified");}a=jb(bb(b),"*",a,b);return a.length?a[0]:null},j:function(a,b){if(!a)throw new Q(32,"No class name specified");a=xa(a);if(-1!==a.indexOf(" "))throw new Q(32,
82
+ "Compound class names not permitted");if(Ac.B(b))try{return b.querySelectorAll("."+a.replace(/\./g,"\\."))}catch(c){throw new Q(32,"An invalid or illegal class name was specified");}return jb(bb(b),"*",a,b)}};var Bc=Ca(),Cc=Fa()||v("iPod"),Dc=v("iPad"),Ec=v("Android")&&!(Da()||Ca()||v("Opera")||v("Silk")),Fc=Da(),Gc=v("Safari")&&!(Da()||v("Coast")||v("Opera")||v("Edge")||v("Edg/")||v("OPR")||Ca()||v("Silk")||v("Android"))&&!(Fa()||v("iPad")||v("iPod"));function Hc(a){return(a=a.exec(r))?a[1]:""}(function(){if(Bc)return Hc(/Firefox\/([0-9.]+)/);if(w||Ja||Ia)return Na;if(Fc)return Fa()||v("iPad")||v("iPod")?Hc(/CriOS\/([0-9.]+)/):Hc(/Chrome\/([0-9.]+)/);if(Gc&&!(Fa()||v("iPad")||v("iPod")))return Hc(/Version\/([0-9.]+)/);if(Cc||Dc){var a=/Version\/(\S+).*Mobile\/(\S+)/.exec(r);if(a)return a[1]+"."+a[2]}else if(Ec)return(a=Hc(/Android\s+([0-9.]+)/))?a:Hc(/Version\/([0-9.]+)/);return""})();var Ic,Jc,Kc=function(){if(!Ka)return!1;var a=k.Components;if(!a)return!1;try{if(!a.classes)return!1}catch(f){return!1}var b=a.classes;a=a.interfaces;var c=b["@mozilla.org/xpcom/version-comparator;1"].getService(a.nsIVersionComparator);b=b["@mozilla.org/xre/app-info;1"].getService(a.nsIXULAppInfo);var d=b.platformVersion,e=b.version;Ic=function(){return 0<=c.compare(d,"8")};Jc=function(f){c.compare(e,""+f)};return!0}(),Lc=w&&!(8<=Number(x)),Mc=w&&!(9<=Number(x));Ec&&Kc&&Jc(2.3);Ec&&Kc&&Jc(4);
83
+ Gc&&Kc&&Jc(6);var Nc={o:function(a,b){if(!da(b.querySelector)&&w&&(Kc?Ic():w?0<=ya(x,8):Ra(8))&&!ea(b.querySelector))throw Error("CSS selection is not supported");if(!a)throw new Q(32,"No selector specified");a=xa(a);try{var c=b.querySelector(a)}catch(d){throw new Q(32,"An invalid or illegal selector was specified");}return c&&1==c.nodeType?c:null},j:function(a,b){if(!da(b.querySelectorAll)&&w&&(Kc?Ic():w?0<=ya(x,8):Ra(8))&&!ea(b.querySelector))throw Error("CSS selection is not supported");if(!a)throw new Q(32,
84
+ "No selector specified");a=xa(a);try{return b.querySelectorAll(a)}catch(c){throw new Q(32,"An invalid or illegal selector was specified");}}};var Oc={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",
85
+ darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",
86
+ ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",
87
+ lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",
88
+ moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",
89
+ seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};var Pc="backgroundColor borderTopColor borderRightColor borderBottomColor borderLeftColor color outlineColor".split(" "),Qc=/#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])/,Rc=/^#(?:[0-9a-f]{3}){1,2}$/i,Sc=/^(?:rgba)?\((\d{1,3}),\s?(\d{1,3}),\s?(\d{1,3}),\s?(0|1|0\.\d*)\)$/i,Tc=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i;function Uc(a,b){b=b.toLowerCase();return"style"==b?Vc(a.style.cssText):Lc&&"value"==b&&T(a,"INPUT")?a.value:Mc&&!0===a[b]?String(a.getAttribute(b)):(a=a.getAttributeNode(b))&&a.specified?a.value:null}var Wc=/[;]+(?=(?:(?:[^"]*"){2})*[^"]*$)(?=(?:(?:[^']*'){2})*[^']*$)(?=(?:[^()]*\([^()]*\))*[^()]*$)/;
90
+ function Vc(a){var b=[];q(a.split(Wc),function(c){var d=c.indexOf(":");0<d&&(c=[c.slice(0,d),c.slice(d+1)],2==c.length&&b.push(c[0].toLowerCase(),":",c[1],";"))});b=b.join("");return b=";"==b.charAt(b.length-1)?b:b+";"}function T(a,b){b&&"string"!==typeof b&&(b=b.toString());return!!a&&1==a.nodeType&&(!b||a.tagName.toUpperCase()==b)};var U={};U.I=function(){var a={ba:"http://www.w3.org/2000/svg"};return function(b){return a[b]||null}}();
91
+ U.s=function(a,b,c){var d=B(a);if(!d.documentElement)return null;(w||Ec)&&xc(d?d.parentWindow||d.defaultView:window);try{var e=d.createNSResolver?d.createNSResolver(d.documentElement):U.I;if(w&&!Ra(7))return d.evaluate.call(d,b,a,e,c,null);if(!w||9<=Number(x)){for(var f={},g=d.getElementsByTagName("*"),h=0;h<g.length;++h){var n=g[h],t=n.namespaceURI;if(t&&!f[t]){var p=n.lookupPrefix(t);if(!p){var G=t.match(".*/(\\w+)/?$");p=G?G[1]:"xhtml"}f[t]=p}}var R={},fa;for(fa in f)R[f[fa]]=fa;e=function(m){return R[m]||
92
+ null}}try{return d.evaluate(b,a,e,c,null)}catch(m){if("TypeError"===m.name)return e=d.createNSResolver?d.createNSResolver(d.documentElement):U.I,d.evaluate(b,a,e,c,null);throw m;}}catch(m){if(!Ka||"NS_ERROR_ILLEGAL_VALUE"!=m.name)throw new Q(32,"Unable to locate an element with the xpath expression "+b+" because of the following error:\n"+m);}};U.J=function(a,b){if(!a||1!=a.nodeType)throw new Q(32,'The result of the xpath expression "'+b+'" is: '+a+". It should be an element.");};
93
+ U.o=function(a,b){var c=function(){var d=U.s(b,a,9);return d?d.singleNodeValue||null:b.selectSingleNode?(d=B(b),d.setProperty&&d.setProperty("SelectionLanguage","XPath"),b.selectSingleNode(a)):null}();null===c||U.J(c,a);return c};
94
+ U.j=function(a,b){var c=function(){var d=U.s(b,a,7);if(d){for(var e=d.snapshotLength,f=[],g=0;g<e;++g)f.push(d.snapshotItem(g));return f}return b.selectNodes?(d=B(b),d.setProperty&&d.setProperty("SelectionLanguage","XPath"),b.selectNodes(a)):[]}();q(c,function(d){U.J(d,a)});return c};function Xc(a,b,c,d){this.c=a;this.a=b;this.b=c;this.f=d}Xc.prototype.ceil=function(){this.c=Math.ceil(this.c);this.a=Math.ceil(this.a);this.b=Math.ceil(this.b);this.f=Math.ceil(this.f);return this};Xc.prototype.floor=function(){this.c=Math.floor(this.c);this.a=Math.floor(this.a);this.b=Math.floor(this.b);this.f=Math.floor(this.f);return this};Xc.prototype.round=function(){this.c=Math.round(this.c);this.a=Math.round(this.a);this.b=Math.round(this.b);this.f=Math.round(this.f);return this};function V(a,b,c,d){this.a=a;this.b=b;this.width=c;this.height=d}V.prototype.ceil=function(){this.a=Math.ceil(this.a);this.b=Math.ceil(this.b);this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};V.prototype.floor=function(){this.a=Math.floor(this.a);this.b=Math.floor(this.b);this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};
95
+ V.prototype.round=function(){this.a=Math.round(this.a);this.b=Math.round(this.b);this.width=Math.round(this.width);this.height=Math.round(this.height);return this};var Yc="function"===typeof ShadowRoot;function Zc(a){for(a=a.parentNode;a&&1!=a.nodeType&&9!=a.nodeType&&11!=a.nodeType;)a=a.parentNode;return T(a)?a:null}
96
+ function W(a,b){b=Ea(b);if("float"==b||"cssFloat"==b||"styleFloat"==b)b=Mc?"styleFloat":"cssFloat";a:{var c=b;var d=B(a);if(d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(a,null))){c=d[c]||d.getPropertyValue(c)||"";break a}c=""}a=c||$c(a,b);if(null===a)a=null;else if(0<=na(Pc,b)){b:{var e=a.match(Sc);if(e&&(b=Number(e[1]),c=Number(e[2]),d=Number(e[3]),e=Number(e[4]),0<=b&&255>=b&&0<=c&&255>=c&&0<=d&&255>=d&&0<=e&&1>=e)){b=[b,c,d,e];break b}b=null}if(!b)b:{if(d=a.match(Tc))if(b=
97
+ Number(d[1]),c=Number(d[2]),d=Number(d[3]),0<=b&&255>=b&&0<=c&&255>=c&&0<=d&&255>=d){b=[b,c,d,1];break b}b=null}if(!b)b:{b=a.toLowerCase();c=Oc[b.toLowerCase()];if(!c&&(c="#"==b.charAt(0)?b:"#"+b,4==c.length&&(c=c.replace(Qc,"#$1$1$2$2$3$3")),!Rc.test(c))){b=null;break b}b=[parseInt(c.substr(1,2),16),parseInt(c.substr(3,2),16),parseInt(c.substr(5,2),16),1]}a=b?"rgba("+b.join(", ")+")":a}return a}
98
+ function $c(a,b){var c=a.currentStyle||a.style,d=c[b];void 0===d&&da(c.getPropertyValue)&&(d=c.getPropertyValue(b));return"inherit"!=d?void 0!==d?d:null:(a=Zc(a))?$c(a,b):null}
99
+ function ad(a,b,c){function d(g){var h=bd(g);return 0<h.height&&0<h.width?!0:T(g,"PATH")&&(0<h.height||0<h.width)?(g=W(g,"stroke-width"),!!g&&0<parseInt(g,10)):"hidden"!=W(g,"overflow")&&ra(g.childNodes,function(n){return 3==n.nodeType||T(n)&&d(n)})}function e(g){return cd(g)==X&&sa(g.childNodes,function(h){return!T(h)||e(h)||!d(h)})}if(!T(a))throw Error("Argument to isShown must be of type Element");if(T(a,"BODY"))return!0;if(T(a,"OPTION")||T(a,"OPTGROUP"))return a=ib(a,function(g){return T(g,"SELECT")}),
100
+ !!a&&ad(a,!0,c);var f=dd(a);if(f)return!!f.image&&0<f.rect.width&&0<f.rect.height&&ad(f.image,b,c);if(T(a,"INPUT")&&"hidden"==a.type.toLowerCase()||T(a,"NOSCRIPT"))return!1;f=W(a,"visibility");return"collapse"!=f&&"hidden"!=f&&c(a)&&(b||0!=ed(a))&&d(a)?!e(a):!1}
101
+ function fd(a){function b(c){if(T(c)&&"none"==W(c,"display"))return!1;var d;if((d=c.parentNode)&&d.shadowRoot&&void 0!==c.assignedSlot)d=c.assignedSlot?c.assignedSlot.parentNode:null;else if(c.getDestinationInsertionPoints){var e=c.getDestinationInsertionPoints();0<e.length&&(d=e[e.length-1])}if(Yc&&d instanceof ShadowRoot){if(d.host.shadowRoot!==d)return!1;d=d.host}return!d||9!=d.nodeType&&11!=d.nodeType?d&&T(d,"DETAILS")&&!d.open&&!T(c,"SUMMARY")?!1:!!d&&b(d):!0}return ad(a,!1,b)}var X="hidden";
102
+ function cd(a){function b(m){function u(Fb){if(Fb==g)return!0;var tc=W(Fb,"display");return 0==tc.lastIndexOf("inline",0)||"contents"==tc||"absolute"==uc&&"static"==W(Fb,"position")?!1:!0}var uc=W(m,"position");if("fixed"==uc)return t=!0,m==g?null:g;for(m=Zc(m);m&&!u(m);)m=Zc(m);return m}function c(m){var u=m;if("visible"==n)if(m==g&&h)u=h;else if(m==h)return{x:"visible",y:"visible"};u={x:W(u,"overflow-x"),y:W(u,"overflow-y")};m==g&&(u.x="visible"==u.x?"auto":u.x,u.y="visible"==u.y?"auto":u.y);return u}
103
+ function d(m){if(m==g){var u=(new cb(f)).a;m=u.scrollingElement?u.scrollingElement:La||"CSS1Compat"!=u.compatMode?u.body||u.documentElement:u.documentElement;u=u.parentWindow||u.defaultView;m=w&&Ra("10")&&u.pageYOffset!=m.scrollTop?new $a(m.scrollLeft,m.scrollTop):new $a(u.pageXOffset||m.scrollLeft,u.pageYOffset||m.scrollTop)}else m=new $a(m.scrollLeft,m.scrollTop);return m}var e=gd(a),f=B(a),g=f.documentElement,h=f.body,n=W(g,"overflow"),t;for(a=b(a);a;a=b(a)){var p=c(a);if("visible"!=p.x||"visible"!=
104
+ p.y){var G=bd(a);if(0==G.width||0==G.height)return X;var R=e.a<G.a,fa=e.b<G.b;if(R&&"hidden"==p.x||fa&&"hidden"==p.y)return X;if(R&&"visible"!=p.x||fa&&"visible"!=p.y){R=d(a);fa=e.b<G.b-R.y;if(e.a<G.a-R.x&&"visible"!=p.x||fa&&"visible"!=p.x)return X;e=cd(a);return e==X?X:"scroll"}R=e.f>=G.a+G.width;G=e.c>=G.b+G.height;if(R&&"hidden"==p.x||G&&"hidden"==p.y)return X;if(R&&"visible"!=p.x||G&&"visible"!=p.y){if(t&&(p=d(a),e.f>=g.scrollWidth-p.x||e.a>=g.scrollHeight-p.y))return X;e=cd(a);return e==X?X:
105
+ "scroll"}}}return"none"}
106
+ function bd(a){var b=dd(a);if(b)return b.rect;if(T(a,"HTML"))return a=B(a),a=((a?a.parentWindow||a.defaultView:window)||window).document,a="CSS1Compat"==a.compatMode?a.documentElement:a.body,a=new ab(a.clientWidth,a.clientHeight),new V(0,0,a.width,a.height);try{var c=a.getBoundingClientRect()}catch(d){return new V(0,0,0,0)}b=new V(c.left,c.top,c.right-c.left,c.bottom-c.top);w&&a.ownerDocument.body&&(a=B(a),b.a-=a.documentElement.clientLeft+a.body.clientLeft,b.b-=a.documentElement.clientTop+a.body.clientTop);
107
+ return b}function dd(a){var b=T(a,"MAP");if(!b&&!T(a,"AREA"))return null;var c=b?a:T(a.parentNode,"MAP")?a.parentNode:null,d=null,e=null;c&&c.name&&(d=U.o('/descendant::*[@usemap = "#'+c.name+'"]',B(c)))&&(e=bd(d),b||"default"==a.shape.toLowerCase()||(a=hd(a),b=Math.min(Math.max(a.a,0),e.width),c=Math.min(Math.max(a.b,0),e.height),e=new V(b+e.a,c+e.b,Math.min(a.width,e.width-b),Math.min(a.height,e.height-c))));return{image:d,rect:e||new V(0,0,0,0)}}
108
+ function hd(a){var b=a.shape.toLowerCase();a=a.coords.split(",");if("rect"==b&&4==a.length){b=a[0];var c=a[1];return new V(b,c,a[2]-b,a[3]-c)}if("circle"==b&&3==a.length)return b=a[2],new V(a[0]-b,a[1]-b,2*b,2*b);if("poly"==b&&2<a.length){b=a[0];c=a[1];for(var d=b,e=c,f=2;f+1<a.length;f+=2)b=Math.min(b,a[f]),d=Math.max(d,a[f]),c=Math.min(c,a[f+1]),e=Math.max(e,a[f+1]);return new V(b,c,d-b,e-c)}return new V(0,0,0,0)}function gd(a){a=bd(a);return new Xc(a.b,a.a+a.width,a.b+a.height,a.a)}
109
+ function id(a){return a.replace(/^[^\S\xa0]+|[^\S\xa0]+$/g,"")}function jd(a){var b=[];Yc?kd(a,b):ld(a,b);a=pa(b,id);return id(a.join("\n")).replace(/\xa0/g," ")}
110
+ function md(a,b,c){if(T(a,"BR"))b.push("");else{var d=T(a,"TD"),e=W(a,"display"),f=!d&&!(0<=na(nd,e)),g=void 0!==a.previousElementSibling?a.previousElementSibling:db(a.previousSibling);g=g?W(g,"display"):"";var h=W(a,"float")||W(a,"cssFloat")||W(a,"styleFloat");!f||"run-in"==g&&"none"==h||/^[\s\xa0]*$/.test(b[b.length-1]||"")||b.push("");var n=fd(a),t=null,p=null;n&&(t=W(a,"white-space"),p=W(a,"text-transform"));q(a.childNodes,function(G){c(G,b,n,t,p)});a=b[b.length-1]||"";!d&&"table-cell"!=e||!a||
111
+ wa(a)||(b[b.length-1]+=" ");f&&"run-in"!=e&&!/^[\s\xa0]*$/.test(a)&&b.push("")}}function ld(a,b){md(a,b,function(c,d,e,f,g){3==c.nodeType&&e?od(c,d,f,g):T(c)&&ld(c,d)})}var nd="inline inline-block inline-table none table-cell table-column table-column-group".split(" ");
112
+ function od(a,b,c,d){a=a.nodeValue.replace(/[\u200b\u200e\u200f]/g,"");a=a.replace(/(\r\n|\r|\n)/g,"\n");if("normal"==c||"nowrap"==c)a=a.replace(/\n/g," ");a="pre"==c||"pre-wrap"==c?a.replace(/[ \f\t\v\u2028\u2029]/g,"\u00a0"):a.replace(/[ \f\t\v\u2028\u2029]+/g," ");"capitalize"==d?a=a.replace(/(^|[^\d\p{L}\p{S}])([\p{Ll}|\p{S}])/gu,function(e,f,g){return f+g.toUpperCase()}):"uppercase"==d?a=a.toUpperCase():"lowercase"==d&&(a=a.toLowerCase());c=b.pop()||"";wa(c)&&0==a.lastIndexOf(" ",0)&&(a=a.substr(1));
113
+ b.push(c+a)}function ed(a){if(Mc){if("relative"==W(a,"position"))return 1;a=W(a,"filter");return(a=a.match(/^alpha\(opacity=(\d*)\)/)||a.match(/^progid:DXImageTransform.Microsoft.Alpha\(Opacity=(\d*)\)/))?Number(a[1])/100:1}return pd(a)}function pd(a){var b=1,c=W(a,"opacity");c&&(b=Number(c));(a=Zc(a))&&(b*=pd(a));return b}
114
+ function qd(a,b,c,d,e){if(3==a.nodeType&&c)od(a,b,d,e);else if(T(a))if(T(a,"CONTENT")||T(a,"SLOT")){for(var f=a;f.parentNode;)f=f.parentNode;f instanceof ShadowRoot?(a=T(a,"CONTENT")?a.getDistributedNodes():a.assignedNodes(),q(a,function(g){qd(g,b,c,d,e)})):kd(a,b)}else if(T(a,"SHADOW")){for(f=a;f.parentNode;)f=f.parentNode;if(f instanceof ShadowRoot&&(a=f))for(a=a.olderShadowRoot;a;)q(a.childNodes,function(g){qd(g,b,c,d,e)}),a=a.olderShadowRoot}else kd(a,b)}
115
+ function kd(a,b){a.shadowRoot&&q(a.shadowRoot.childNodes,function(c){qd(c,b,!0,null,null)});md(a,b,function(c,d,e,f,g){var h=null;1==c.nodeType?h=c:3==c.nodeType&&(h=c);null!=h&&(null!=h.assignedSlot||h.getDestinationInsertionPoints&&0<h.getDestinationInsertionPoints().length)||qd(c,d,e,f,g)})};var rd={B:function(a,b){return!(!a.querySelectorAll||!a.querySelector)&&!/^\d.*/.test(b)},o:function(a,b){var c=bb(b),d="string"===typeof a?c.a.getElementById(a):a;return d?Uc(d,"id")==a&&b!=d&&eb(b,d)?d:ta(jb(c,"*"),function(e){return Uc(e,"id")==a&&b!=e&&eb(b,e)}):null},j:function(a,b){if(!a)return[];if(rd.B(b,a))try{return b.querySelectorAll("#"+rd.S(a))}catch(c){return[]}b=jb(bb(b),"*",null,b);return oa(b,function(c){return Uc(c,"id")==a})},S:function(a){return a.replace(/([\s'"\\#.:;,!?+<>=~*^$|%&@`{}\-\/\[\]\(\)])/g,
116
+ "\\$1")}};var Y={},sd={};Y.N=function(a,b,c){try{var d=Nc.j("a",b)}catch(e){d=jb(bb(b),"A",null,b)}return ta(d,function(e){e=jd(e);e=e.replace(/^[\s]+|[\s]+$/g,"");return c&&-1!=e.indexOf(a)||e==a})};Y.K=function(a,b,c){try{var d=Nc.j("a",b)}catch(e){d=jb(bb(b),"A",null,b)}return oa(d,function(e){e=jd(e);e=e.replace(/^[\s]+|[\s]+$/g,"");return c&&-1!=e.indexOf(a)||e==a})};Y.o=function(a,b){return Y.N(a,b,!1)};Y.j=function(a,b){return Y.K(a,b,!1)};sd.o=function(a,b){return Y.N(a,b,!0)};
117
+ sd.j=function(a,b){return Y.K(a,b,!0)};var Z={D:function(a,b){return function(c){var d=Z.H(a);d=bd(d);c=bd(c);return b.call(null,d,c)}},P:function(a){return Z.D(a,function(b,c){return c.b+c.height<b.b})},R:function(a){return Z.D(a,function(b,c){return b.b+b.height<c.b})},U:function(a){return Z.D(a,function(b,c){return c.a+c.width<b.a})},$:function(a){return Z.D(a,function(b,c){return b.a+b.width<c.a})},V:function(a,b){if(b)var c=b;else"number"==typeof a.distance&&(c=a.distance,delete a.distance);c||(c=50);return function(d){var e=Z.H(a);
118
+ if(e===d)return!1;e=bd(e);d=bd(d);var f=d.a+d.width,g=e.b-e.height,h=d.b-d.height;return Math.abs(e.a+e.width-d.a)<=c||Math.abs(f-e.a)<=c?Math.abs(g-d.b)<=c||Math.abs(h-e.b)<=c:!1}},H:function(a){if(ea(a)&&1==a.nodeType)return a;if(da(a))return Z.H(a.call(null));if(ea(a)){var b;a:{if(b=td(a)){var c=ud[b];if(c&&da(c.o)){b=c.o(a[b],yc.document);break a}}throw new Q(61,"Unsupported locator strategy: "+b);}if(!b)throw new Q(7,"No element has been found by "+JSON.stringify(a));return b}throw new Q(61,
119
+ "Selector is of wrong type: "+JSON.stringify(a));}};Z.O={left:Z.U,right:Z.$,above:Z.P,below:Z.R,near:Z.V};Z.T=function(a,b){var c=[];q(a,function(d){d&&sa(b,function(e){var f=e.kind,g=Z.O[f];if(!g)throw new Q(61,"Cannot find filter suitable for "+f);return g.apply(null,e.args)(d)},null)&&c.push(d)},null);return c};Z.o=function(a,b){a=Z.j(a,b);return 0==a.length?null:a[0]};
120
+ Z.j=function(a,b){if(!a.hasOwnProperty("root")||!a.hasOwnProperty("filters"))throw new Q(61,"Locator not suitable for relative locators: "+JSON.stringify(a));var c=a.filters,d=ca(c);if("array"!=d&&("object"!=d||"number"!=typeof c.length))throw new Q(61,"Targets should be an array: "+JSON.stringify(a));var e;T(a.root)?e=[a.root]:e=vd(a.root,b);return 0==e.length?[]:Z.T(e,a.filters)};var wd={o:function(a,b){if(""===a)throw new Q(32,'Unable to locate an element with the tagName ""');return b.getElementsByTagName(a)[0]||null},j:function(a,b){if(""===a)throw new Q(32,'Unable to locate an element with the tagName ""');return b.getElementsByTagName(a)}};var ud={className:Ac,"class name":Ac,css:Nc,"css selector":Nc,relative:Z,id:rd,linkText:Y,"link text":Y,name:{o:function(a,b){b=jb(bb(b),"*",null,b);return ta(b,function(c){return Uc(c,"name")==a})},j:function(a,b){b=jb(bb(b),"*",null,b);return oa(b,function(c){return Uc(c,"name")==a})}},partialLinkText:sd,"partial link text":sd,tagName:wd,"tag name":wd,xpath:U};function td(a){for(var b in a)if(a.hasOwnProperty(b))return b;return null}
121
+ function vd(a,b){var c=td(a);if(c){var d=ud[c];if(d&&da(d.j))return d.j(a[c],b||yc.document)}throw new Q(61,"Unsupported locator strategy: "+c);};ba("_",vd);; return this._.apply(null,arguments);}).apply({navigator:typeof window!='undefined'?window.navigator:null,document:typeof window!='undefined'?window.document:null}, arguments);}