Import webkit2gtk_2.6.2+dfsg1-4.debian.tar.xz
authorAlberto Garcia <berto@igalia.com>
Fri, 6 Mar 2015 07:33:11 +0000 (07:33 +0000)
committerAlberto Garcia <berto@igalia.com>
Fri, 6 Mar 2015 07:33:11 +0000 (07:33 +0000)
[dgit import tarball webkit2gtk 2.6.2+dfsg1-4 webkit2gtk_2.6.2+dfsg1-4.debian.tar.xz]

56 files changed:
changelog [new file with mode: 0644]
compat [new file with mode: 0644]
control [new file with mode: 0644]
copyright [new file with mode: 0644]
gbp.conf [new file with mode: 0644]
gir1.2-javascriptcoregtk-4.0.install [new file with mode: 0644]
gir1.2-webkit2-4.0.install [new file with mode: 0644]
jquery-1.9.1.js [new file with mode: 0644]
jsc.1 [new file with mode: 0644]
libjavascriptcoregtk-4.0-18.install [new file with mode: 0644]
libjavascriptcoregtk-4.0-bin.install [new file with mode: 0644]
libjavascriptcoregtk-4.0-bin.manpages [new file with mode: 0644]
libjavascriptcoregtk-4.0-dev.install [new file with mode: 0644]
libwebkit2gtk-4.0-37.install [new file with mode: 0644]
libwebkit2gtk-4.0-37.lintian-overrides [new file with mode: 0644]
libwebkit2gtk-4.0-37.symbols [new file with mode: 0644]
libwebkit2gtk-4.0-dev.install [new file with mode: 0644]
libwebkit2gtk-4.0-doc.doc-base [new file with mode: 0644]
libwebkit2gtk-4.0-doc.install [new file with mode: 0644]
libwebkit2gtk-4.0-doc.links [new file with mode: 0644]
patches/at-spi2.patch [new file with mode: 0644]
patches/atomic_build_fix.patch [new file with mode: 0644]
patches/ax-focus-events.patch [new file with mode: 0644]
patches/check-tls-errors.patch [new file with mode: 0644]
patches/css-image-set.patch [new file with mode: 0644]
patches/dfg-jit.patch [new file with mode: 0644]
patches/fix-ax-crash.patch [new file with mode: 0644]
patches/fix-clearselection-segfault.patch [new file with mode: 0644]
patches/fix-date.patch [new file with mode: 0644]
patches/fix-ftbfs-hppa.patch [new file with mode: 0644]
patches/fix-gstreamer-leak.patch [new file with mode: 0644]
patches/fix-integer-overflow.patch [new file with mode: 0644]
patches/fix-jit-crash.patch [new file with mode: 0644]
patches/fix-mips64-build.patch [new file with mode: 0644]
patches/fix-null-renderer.patch [new file with mode: 0644]
patches/fix-null-string-conversion.patch [new file with mode: 0644]
patches/fix-timers-animations.patch [new file with mode: 0644]
patches/flash-crash.patch [new file with mode: 0644]
patches/http-latin1.patch [new file with mode: 0644]
patches/install-minibrowser.patch [new file with mode: 0644]
patches/local-label-string-hurd.patch [new file with mode: 0644]
patches/no-ssl-record-version.patch [new file with mode: 0644]
patches/nullptr-accessibilitymenulistoption.patch [new file with mode: 0644]
patches/nullptr-applystylecommand.patch [new file with mode: 0644]
patches/nullptr-frameprogresstracker.patch [new file with mode: 0644]
patches/protect-document.patch [new file with mode: 0644]
patches/remote-inspector.patch [new file with mode: 0644]
patches/render-block-cast.patch [new file with mode: 0644]
patches/render-text-control.patch [new file with mode: 0644]
patches/restore_sparc_code.patch [new file with mode: 0644]
patches/serialized-script-value.patch [new file with mode: 0644]
patches/series [new file with mode: 0644]
patches/twitter-inserted-text.patch [new file with mode: 0644]
rules [new file with mode: 0755]
source/format [new file with mode: 0644]
watch [new file with mode: 0644]

diff --git a/changelog b/changelog
new file mode 100644 (file)
index 0000000..6863a5b
--- /dev/null
+++ b/changelog
@@ -0,0 +1,1812 @@
+webkit2gtk (2.6.2+dfsg1-4) unstable; urgency=medium
+
+  * debian/patches/fix-ftbfs-hppa.patch:
+    + Fix FTBFS in HPPA (Closes: #776281).
+  * debian/libwebkit2gtk-4.0-doc.links:
+    + Add symbolic link to make the documentation appear in devhelp
+      (Closes: #777589).
+  * debian/patches/fix-gstreamer-leak.patch:
+    + Fix memory leak in GStreamer code.
+  * debian/patches/remote-inspector.patch:
+    + Make the remote inspector work again.
+  * debian/patches/render-block-cast.patch:
+    + Fix invalid cast in WebCore::RenderBlock::blockSelectionGaps.
+  * debian/patches/fix-jit-crash.patch:
+    + Fix crash in SpeculativeJIT::compile() when loading theblaze.com.
+  * debian/patches/fix-null-renderer.patch:
+    + NULL pointer check in HTMLPlugInImageElement.
+  * debian/patches/fix-integer-overflow.patch:
+    + Fix crash due to integer overflow.
+  * debian/patches/serialized-script-value.patch:
+    + Prevent unsafe access to internal types.
+  * debian/patches/http-latin1.patch:
+    + HTTP header values should be treated as latin1, not UTF-8.
+  * debian/patches/fix-null-string-conversion.patch:
+    + Add NULL check to convertToUTF8String().
+  * debian/patches/fix-timers-animations.patch:
+    + Timers might never be fired during animations.
+  * debian/patches/fix-ax-crash.patch:
+    + Recursive crash at WebCore::accessibleNameForNode.
+  * debian/patches/fix-clearselection-segfault.patch:
+    + Fix segfault when calling clearSelection on a detached RenderObject.
+  * debian/patches/fix-date.patch:
+    + String(new Date(Mar 30 2014 01:00:00)) is wrong in CET.
+  * debian/patches/check-tls-errors.patch:
+    + Check TLS errors as soon as they are set in the SoupMessage.
+
+ -- Alberto Garcia <berto@igalia.com>  Fri, 06 Mar 2015 09:33:11 +0200
+
+webkit2gtk (2.6.2+dfsg1-3) unstable; urgency=medium
+
+   * debian/patches/no-ssl-record-version.patch:
+     + Don't use a SSL3.0 record version in client hello.
+   * debian/patches/nullptr-accessibilitymenulistoption.patch:
+     + Check for NULL pointers in AccessibilityMenuListOption.
+   * debian/patches/nullptr-applystylecommand.patch:
+     + Check for NULL pointer in ApplyStyleCommand.
+   * debian/patches/nullptr-frameprogresstracker.patch:
+     + Check for NULL pointer in FrameProgressTracker.
+   * debian/patches/render-text-control.patch:
+     + Check for NULL pointer in SearchInputType.
+   * debian/patches/twitter-inserted-text.patch:
+     + Fix inserted text when typing in the Twitter message box.
+   * debian/patches/protect-document.patch:
+     + Protect Document in ProcessingInstruction::setXSLStyleSheet(). This
+       is a security fix, see https://codereview.chromium.org/579133004.
+   * debian/patches/at-spi2.patch:
+     + Accessible values are no longer accessible via AT-SPI2.
+   * debian/patches/ax-focus-events.patch:
+     + Fix accessible focus events in non-focused combo boxes.
+
+ -- Alberto Garcia <berto@igalia.com>  Sun, 07 Dec 2014 17:53:25 +0100
+
+webkit2gtk (2.6.2+dfsg1-2) unstable; urgency=medium
+
+  * debian/patches/fix-mips64-build.patch:
+    + Fix mips64el build (Closes: #767598).
+  * debian/patches/flash-crash.patch:
+    + Fix crash in the Flash player (Closes: #768341).
+
+ -- Alberto Garcia <berto@igalia.com>  Mon, 10 Nov 2014 11:44:56 +0200
+
+webkit2gtk (2.6.2+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release.
+
+ -- Alberto Garcia <berto@igalia.com>  Thu, 23 Oct 2014 12:17:48 +0300
+
+webkit2gtk (2.6.1+dfsg1-2) unstable; urgency=medium
+
+  * debian/rules:
+    + Disable debugging symbols in armel and kfreebsd-amd64.
+  * debian/control:
+    + Bump Standards-Version to 3.9.6; no changes needed.
+
+ -- Alberto Garcia <berto@igalia.com>  Wed, 15 Oct 2014 15:03:26 +0300
+
+webkit2gtk (2.6.1+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release.
+  * debian/patches/fix-header-template.patch:
+    + Remove.
+
+ -- Alberto Garcia <berto@igalia.com>  Mon, 13 Oct 2014 15:18:12 +0300
+
+webkit2gtk (2.6.0+dfsg1-3) unstable; urgency=medium
+
+  * debian/patches/atomic_build_fix.patch:
+    + Make -latomic work also when --as-needed is present (Closes:
+      764193).
+  * debian/rules:
+    + Don't build -dbg packages if we don't have debugging symbols.
+    + Disable debugging symbols in armhf (Closes: #764192).
+
+ -- Alberto Garcia <berto@igalia.com>  Mon, 06 Oct 2014 15:18:03 +0300
+
+webkit2gtk (2.6.0+dfsg1-2) unstable; urgency=medium
+
+  [ Alberto Garcia ]
+  * debian/patches/atomic_build_fix.patch:
+    + Add -latomic also to shared libraries.
+
+  [ Emilio Pozuelo Monfort ]
+  * debian/rules:
+    + Disable debugging symbols on powerpc. Should fix the build
+      as otherwise the linker needs too much memory and fails.
+    + Disable JIT on armel. Should fix the build.
+  * Upload to unstable.
+
+ -- Emilio Pozuelo Monfort <pochu@debian.org>  Thu, 02 Oct 2014 00:42:20 +0200
+
+webkit2gtk (2.6.0+dfsg1-1) experimental; urgency=medium
+
+  * New upstream release.
+  * debian/patches/fix-textrel-x86.patch,
+    debian/patches/change-libexec-dir.patch:
+    + Remove.
+  * debian/patches/dfg-jit.patch,
+    debian/patches/install-minibrowser.patch,
+    debian/patches/restore_sparc_code.patch:
+    + Refresh.
+  * debian/patches/atomic_build_fix.patch:
+    + Add -latomic to fix build in some architectures.
+  * debian/patches/css-image-set.patch:
+    + Enable CSS_IMAGE_SET, required in order to display all inspector
+      icons.
+  * debian/rules:
+    + Disable JIT completely in mips and mipsel, it does not build at the
+      moment, see https://bugs.webkit.org/show_bug.cgi?id=136753.
+    + Enable JIT in armel and armhf.
+  * debian/copyright:
+    + Update with all the changes in 2.6.0 (Closes: #760477).
+  * debian/libwebkit2gtk-4.0-37.symbols:
+    + Update.
+  * Make gir1.2- and -dev packages multi-arch compliant:
+    + debian/gir1.2-javascriptcoregtk-4.0.install,
+      debian/gir1.2-webkit2-4.0.install:
+      - Put .typelib files in /usr/lib/<arch>/girepository-1.0.
+    + debian/control:
+      - Add Multi-Arch field to the affected packages.
+    + debian/gir1.2-javascriptcoregtk-4.0.links,
+      debian/libjavascriptcoregtk-4.0-dev.links:
+      - Remove old compatibility links.
+    + debian/patches/fix-header-template.patch:
+      - Make WebKitEnumTypes.h equal in all builds by not including the
+        name of the build directory.
+
+ -- Alberto Garcia <berto@igalia.com>  Mon, 29 Sep 2014 15:48:56 +0300
+
+webkit2gtk (2.5.3+dfsg1-1) experimental; urgency=medium
+
+  * New upstream release from the upcoming 2.6 branch.
+    + Rename source package to webkit2gtk, since now WebKitGTK+ only
+      provides the new WebKit2 API. We have to keep the old webkitgtk
+      packages around until all apps using the old API have ben ported.
+    + Add the +dfsg1 suffix to the version number since we have to remove
+      a few non-free files from the source tarball.
+  * debian/gbp.conf:
+    + Update upstream branch name.
+  * debian/watch:
+    + Add dversionmangle rule to strip +dfsg1 from the package.
+  * debian/rules:
+    + Rewrite completely using the debhelper sequencer and build with
+      cmake instead of autotools.
+    + Disable JIT and MacroAssembler in all architectures unless we know
+      it works.
+    + Add get-orig-source target.
+  * debian/control:
+    + Remove all packages that use the old WebKit API, as well as the
+      -common packages.
+    + libjavascriptcoregtk-3.0-0 => libjavascriptcoregtk-4.0-18.
+    + libwebkit2gtk-3.0-25 => libwebkit2gtk-4.0-37.
+    + Don't depend on any specific compiler.
+    + Add build dependencies on cmake and slimit.
+    + Replace libgeoclue-dev with geoclue-2.0.
+    + Split libwebkit2gtk-4.0-doc from the -dev package.
+    + Remove Mike Hommey from the Uploaders field.
+  * debian/copyright:
+    + Make it compliant with the copyright format v1.0 and refactor the
+      licenses a bit.
+  * debian/jquery-1.9.1.js:
+    + Provide uncompressed version of jquery to replace the compressed one
+      that had to be removed from the original tarball.
+  * debian/patches/enable_llint.patch,
+    debian/patches/02_notebook_scroll.patch,
+    debian/patches/atomic_build_fix.patch,
+    debian/patches/fix-gtkdoc-error.patch,
+    debian/patches/ftbfs-armhf.patch:
+    + Remove.
+  * debian/patches/dfg-jit.patch,
+    debian/patches/local-label-string-hurd.patch,
+    debian/patches/restore_sparc_code.patch,
+    debian/patches/fix-textrel-x86.patch:
+    + Refresh.
+  * debian/patches/install-minibrowser.patch:
+    + Rewrite to make it work with cmake.
+  * debian/patches/change-libexec-dir.patch:
+    + Install all auxiliary binaries in the same directory.
+  * debian/source/lintian-overrides:
+    + Remove.
+  * debian/libwebkit2gtk-4.0-37.lintian-overrides:
+    + Override shared-lib-without-dependency-information warning in
+      libwebkit2gtkinjectedbundle.so, that's a module used internally
+      by webkit.
+  * debian/symbols.filter:
+    + Remove.
+
+ -- Alberto Garcia <berto@igalia.com>  Wed, 27 Aug 2014 06:18:56 +0000
+
+webkitgtk (2.4.1-1) experimental; urgency=medium
+
+  * New upstream release.
+  * debian/patches/ftbfs-armhf.patch:
+    + Fix FTBFS in armhf.
+  * debian/patches/local-label-string-hurd.patch:
+    + Fix FTBFS in hurd-i386.
+
+ -- Alberto Garcia <berto@igalia.com>  Mon, 14 Apr 2014 20:22:51 +0000
+
+webkitgtk (2.4.0-1) experimental; urgency=medium
+
+  * New upstream stable release.
+  * debian/patches/fix-textrel-x86.patch:
+    + Remove TEXTREL tag in x86.
+
+ -- Alberto Garcia <berto@igalia.com>  Tue, 25 Mar 2014 11:18:17 +0200
+
+webkitgtk (2.3.92-1) experimental; urgency=low
+
+  * New upstream release.
+  * debian/patches/dfg-jit.patch,
+    debian/patches/install-minibrowser.patch:
+    + Refresh.
+
+ -- Alberto Garcia <berto@igalia.com>  Mon, 17 Mar 2014 21:07:56 +0000
+
+webkitgtk (2.3.90-1) experimental; urgency=medium
+
+  * New upstream release.
+  * debian/libwebkitgtk-1.0-0.symbols,
+    debian/libwebkitgtk-3.0-0.symbols,
+    debian/libwebkit2gtk-3.0-25.symbols:
+    + Add new symbols.
+  * debian/control:
+    + Update package descriptions.
+    + Remove redundant Priority fields from libwebkitgtk-{1,3}.0-common.
+    + Remove duplicate build dependency on flex.
+  * debian/patches/install-minibrowser.patch:
+    + Ship the MiniBrowser binary, which is useful for testing purposes.
+  * debian/patches/dfg-jit.patch:
+    + Enable DFG JIT on FreeBSD and Hurd.
+  * debian/patches/fix-gtkdoc-error.patch:
+    + Fix error in gtk-doc generation.
+  * debian/patches/02_notebook_scroll.patch:
+    + Refresh.
+
+ -- Alberto Garcia <berto@igalia.com>  Tue, 18 Feb 2014 11:33:19 +0000
+
+webkitgtk (2.3.5-1) experimental; urgency=low
+
+  * New upstream release.
+  * debian/patches/02_notebook_scroll.patch,
+    debian/patches/enable_llint.patch,
+    debian/patches/restore_sparc_code.patch:
+    + Refresh.
+  * debian/patches/x86_asm_fix.patch:
+    + Remove, this has been merged upstream.
+  * Build a libjavascriptcoregtk-3.0-bin package with the jsc interpreter
+    + debian/control: add the new entry.
+    + debian/rules: rename the binary from jsc-3 to jsc and add the
+      suitable debhelper rules.
+    + debian/libjavascriptcoregtk-3.0-bin.install: list package contents.
+    + debian/libjavascriptcoregtk-3.0-bin.manpages,
+      debian/jsc.1: add manual page.
+  * debian/libwebkit2gtk-3.0-25.symbols:
+    + Add new symbols.
+
+ -- Alberto Garcia <berto@igalia.com>  Fri, 07 Feb 2014 10:22:37 +0000
+
+webkitgtk (2.3.4-4) experimental; urgency=low
+
+  * debian/patches/atomic_build_fix.patch:
+    + Update the patch with a fix that actually works.
+
+ -- Alberto Garcia <berto@igalia.com>  Sat, 01 Feb 2014 09:18:42 +0000
+
+webkitgtk (2.3.4-3) experimental; urgency=low
+
+  * debian/patches/atomic_build_fix.patch:
+    + Add -latomic to fix build in some architectures.
+  * debian/patches/x86_asm_fix.patch:
+    + Update patch with a better fix.
+  * debian/patches/enable_llint.patch:
+    + Refresh.
+
+ -- Alberto Garcia <berto@igalia.com>  Tue, 28 Jan 2014 10:47:31 +0000
+
+webkitgtk (2.3.4-2) experimental; urgency=low
+
+  * debian/patches/x86_asm_fix.patch:
+    + Fix build failure on x86 due to incorrect asm generation.
+  * debian/patches/enable_llint.patch:
+    + Enable LLINT in FreeBSD and Hurd.
+  * debian/patches/restore_sparc_code.patch:
+    + Restore removed SPARC code.
+
+ -- Alberto Garcia <berto@igalia.com>  Thu, 16 Jan 2014 08:30:14 +0000
+
+webkitgtk (2.3.4-1) experimental; urgency=low
+
+  * New upstream release.
+  * WebKit is now built in fast-install mode by default, there's no need
+    to run chrpath anymore.
+    + debian/rules: remove it from the installation process.
+    + debian/control: don't build depend on it.
+  * debian/libwebkit2gtk-3.0-25.symbols:
+    + Added new symbols.
+
+ -- Alberto Garcia <berto@igalia.com>  Mon, 13 Jan 2014 19:48:47 +0000
+
+webkitgtk (2.3.3-1) experimental; urgency=low
+
+  * New upstream release.
+  * debian/patches/02_notebook_scroll.patch:
+    + Refreshed.
+  * Multi-arch support:
+    + debian/control: Add Multi-Arch and Pre-Depends fields to all
+      packages with shared libraries.
+    + debian/*.install: replace usr/lib/ with usr/lib/*/, but keep
+      GObject Introspection .typelib files in /usr/lib
+    + debian/rules: adapt libdir and libexecdir to multi-arch.
+  * debian/control:
+    + Add myself to Uploaders.
+    + Update package descriptions.
+    + Build depend on libpng-dev, not libpng12-dev.
+    + Bump Standards-Version to 3.9.5; no changes needed.
+    + Use canonical versions of VCS URLs.
+  * debian/rules:
+    + Support noopt and debug in DEB_BUILD_OPTIONS.
+    + Disable JIT and MacroAssembler on powerpcspe and mips64el.
+    + No need to pass --enable-wayland-target anymore, it's automatically
+      enabled now.
+    + Disable parallel builds since they're unstable at the moment.
+    + Don't create the libexec dirs manually, this is no longer needed.
+    + Remove rpath from WebKitPluginProcess and WebKitWebProcess.
+  * debian/libwebkitgtk-1.0-0.symbols,
+    debian/libwebkitgtk-3.0-0.symbols,
+    debian/libwebkit2gtk-3.0-25.symbols:
+    + Updated for the new symbols.
+
+ -- Alberto Garcia <berto@igalia.com>  Fri, 03 Jan 2014 23:49:07 +0000
+
+webkitgtk (2.3.2-1) experimental; urgency=low
+
+  * New upstream release.
+  * debian/patches/40_hppa_platform_h.patch,
+    debian/patches/41_hppa_build_fix.patch,
+    debian/patches/50_bsd-hurd-build-fix.patch,
+    debian/patches/60_add-missing-include.patch,
+    debian/patches/61_add-another-missing-include.patch,
+    debian/patches/70_Add-stubs-for-missing-symbols-in-dom-bindings.patch:
+    + Removed, merged upstream.
+  * debian/patches/30_gtkdoc_fixxref_warnings.patch:
+    + Drop unapplied patch that we don't need anymore.
+  * debian/patches/13_thread-safe-icon-db.patch:
+    + Drop unapplied patch that was fixed upstream a long time ago.
+  * debian/patches/12_large-mem-page.patch:
+    + Drop unapplied patch, it hasn't been applied in quite some time
+      and we haven't heard of any complains. Besides, the patch no
+      longer applies as the code it touched has been largely reworked
+      or removed.
+  * debian/patches/14_ia64-wide-ptr.patch,
+    debian/patches/15_ia64-use-system-malloc.patch:
+    + Dropped. The former wasn't been applied and needs rebasing if still
+      needed. The second is probably useless given all the other patches
+      that were needed on IA64 are gone. It may not be needed anymore as
+      the code that the patch tries to workaround may be fixed now.
+      If these or any other patches are needed for IA64, they should be
+      sent upstream so we don't run into problems like this again.
+  * debian/rules:
+    + Disable debugging symbols on powerpcspe. Closes: #696472.
+  * debian/libwebkitgtk-1.0-0.symbols,
+    debian/libwebkitgtk-3.0-0.symbols,
+    debian/libwebkit2gtk-3.0-25.symbols:
+    + Updated for the new symbols.
+
+ -- Emilio Pozuelo Monfort <pochu@debian.org>  Thu, 21 Nov 2013 22:15:28 +0100
+
+webkitgtk (2.3.1-1) experimental; urgency=low
+
+  [ Michael Biebl ]
+  * debian/rules:
+    + Replace another occurence of findstring with filter.
+
+  [ Emilio Pozuelo Monfort ]
+  * debian/watch,
+    debian/gbp.conf:
+    + Update for 2.3 packages in experimental.
+  * New upstream development release.
+    + Re-enables MathML support. Closes: #649067.
+  * debian/control,
+    debian/rules:
+    + Enable wayland support on linux.
+  * debian/rules:
+    + Use gcc / g++ 4.8 instead of 4.7. We should just be using the
+      default here but some architectures are still defaulting to 4.6.
+  * debian/patches/01_do-not-build-testing-tools.patch:
+    + Removed, no longer needed.
+  * debian/patches:
+    + Refreshed.
+  * debian/patches/50_bsd-hurd-build-fix.patch:
+    + Fix the build on !linux.
+  * debian/patches/60_add-missing-include.patch:
+    + Patch from upstream bugzilla, fix another build issue.
+  * debian/patches/61_add-another-missing-include.patch:
+    + Another missing include, patch from upstream bugzilla.
+  * debian/patches/40_hppa_platform_h.patch:
+    + WTF_CPU_HPPA was already being defined, so only define the missing
+      remaining bits.
+    + Don't disable YARR, JIT and MacroAssembler here, this is a more general
+      problem as explained in https://bugs.webkit.org/show_bug.cgi?id=113638
+      and we already disable those in debian/rules.
+  * debian/patches/70_Add-stubs-for-missing-symbols-in-dom-bindings.patch:
+    + New patch, add stubs for a few missing symbols in the DOM bindings
+      which are gone because the underlying objects have been removed.
+  * debian/libwebkitgtk-1.0-0.symbols,
+    debian/libwebkitgtk-3.0-0.symbols,
+    debian/libwebkit2gtk-3.0-25.symbols:
+    + Updated for the new symbols.
+  * debian/source/lintian-overrides:
+    + Override license-problem-json-evil, the file is mentioning the original
+      implementation's license but doesn't actually have that license.
+    + Drop an old override.
+
+ -- Emilio Pozuelo Monfort <pochu@debian.org>  Tue, 05 Nov 2013 14:24:07 +0100
+
+webkitgtk (2.2.1-1) unstable; urgency=low
+
+  * debian/gbp.conf:
+    + Added.
+  * New upstream stable release.
+
+ -- Emilio Pozuelo Monfort <pochu@debian.org>  Tue, 29 Oct 2013 20:44:42 +0100
+
+webkitgtk (2.2.0-2) unstable; urgency=low
+
+  * debian/rules:
+    + Disable JIT on mips, should fix the FTBFS.
+  * Upload to unstable.
+
+ -- Emilio Pozuelo Monfort <pochu@debian.org>  Mon, 14 Oct 2013 19:00:57 +0200
+
+webkitgtk (2.2.0-1) experimental; urgency=low
+
+  * New upstream stable release.
+  * debian/control:
+    + Remove gail build dependencies, no longer needed.
+  * debian/patches:
+    + Refreshed.
+
+ -- Emilio Pozuelo Monfort <pochu@debian.org>  Wed, 09 Oct 2013 16:01:05 +0200
+
+webkitgtk (2.1.91-1) experimental; urgency=low
+
+  [ Michael Biebl ]
+  * debian/rules:
+    + Use filter instead of findstring to match the current architecture as
+      findstring also matches substrings so we accidentally used stabs debug
+      symbols for i386 and amd64 and disabled jit for mips.
+
+  [ Emilio Pozuelo Monfort ]
+  * debian/rules:
+    + Use CPPFLAGS instead of JSC_CPPFLAGS to disable JIT and MacroAssembler
+      as JSC_CPPFLAGS is no longer honored by the build system. This fixes
+      the build (again) on ia64 powerpc sparc s390 and s390x.
+  * debian/patches/40_hppa_platform_h.patch,
+    debian/patches/41_hppa_build_fix.patch,
+    debian/rules:
+    + Add support for HPPA. Thanks to John David Anglin for the patches.
+      Closes: #721206.
+  * debian/patches/20_mesa-llvmpipe-crash.patch,
+    debian/patches/25_bison_2.6_ftbfs.patch:
+    + Remove patches that were cherry-picked from upstream 2.1.x and we
+      no longer use.
+  * debian/rules:
+    + Disable JIT and MacroAssembler on alpha. Closes: #721863.
+    + Likewise for ppc64 and sparc64.
+
+  [ Gustavo Noronha Silva ]
+  * debian/rules:
+    + Disable GLX on ARM, thanks to Sjoerd Simons.
+  * debian/patches/10_hurd_getCurrentExecutablePath.patch,
+    debian/patches/20_bsd-hurd-gtest-port.patch:
+    + removed, applied upstream
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Mon, 16 Sep 2013 15:02:08 -0300
+
+webkitgtk (2.1.90.1-1) experimental; urgency=low
+
+  [ Gustavo Noronha Silva ]
+  * New development release
+  * debian/patches/series, debian/patches/03_dom_bindings_compat.patch:
+  - removed patch; applied upstream
+  * debian/patches/02_notebook_scroll.patch:
+  - refreshed
+  * debian/*.symbols:
+  - updated with ABI additions
+
+  [ Emilio Pozuelo Monfort ]
+  * debian/rules:
+    + Switch powerpc to stabs as it's currently taking too much space in
+      the buildds.
+  * debian/control:
+    + Add myself to Uploaders.
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Thu, 29 Aug 2013 21:32:48 -0300
+
+webkitgtk (2.1.4-3) experimental; urgency=low
+
+  * debian/control, debian/libwebkitgtk-common-dev.install:
+  - install the webkitdom headers in a separate dev package that can be
+    depended on by both libwebkitgtk-3.0-dev and libwebkit2gtk-3.0-dev
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Fri, 23 Aug 2013 15:03:44 -0300
+
+webkitgtk (2.1.4-2) experimental; urgency=low
+
+  * debian/rules:
+  - merge build and install rules so we can install right after building
+    each flavor, and save space by cleaning up the build
+  - clean *.pyc files in the clean target, to allow multiple builds in the
+    same source tree again
+  * debian/rules:
+  - disable debug symbols sparc, and use stabs for armel, like we already
+    do for armhf; their buildds are too constrained in terms of hardware
+    resources
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Wed, 21 Aug 2013 23:13:58 -0300
+
+webkitgtk (2.1.4-1) experimental; urgency=low
+
+  * New development release
+  * debian/patches/01_do-not-build-testing-tools.patch:
+  - refreshed
+  * debian/libjavascriptcore*dev.install, gir1.2-*.install,
+    debian/libjavascriptcore*dev.links, gir1.2-*.links:
+  - Install the GObject Introspection support files, and compatibility
+    links that cover the old names
+  * debian/patches/03_dom_bindings_compat.patch:
+  - Add symbols that went missing since the last stable release
+  * debian/*.symbols:
+  - updated symbols files to contain the newly added APIs
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Mon, 19 Aug 2013 21:11:33 -0300
+
+webkitgtk (2.0.4-2) unstable; urgency=low
+
+  [ Jeremy Bicha ]
+  * Don't recommend universe gstreamer codecs on Ubuntu. Closes: #714299.
+
+  [ Gustavo Noronha ]
+  * debian/patches/03_atomics-buildfix.patch:
+  - patch from upstream to fix build in architectures which do not support
+    some atomic builtins for 64 bits types (should fix powerpc and sparc)
+  * debian/libwebkit2gtk-3.0-25.symbols, debian/symbols.filter:
+  - export the WebGtkExtensionManager, used by WebKit2GTK+ for loading
+    injected bundle plugins
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Wed, 14 Aug 2013 22:13:41 -0300
+
+webkitgtk (2.0.4-1) experimental; urgency=low
+
+  [ Emilio Pozuelo Monfort ]
+  * debian/compat:
+    + Go back to compat 8 for now as compressed symbol files kill .deb
+      compression. Also objcopy seems to take a lot of memory to compress
+      debugging symbols, killing the build in some cases.
+  * debian/rules:
+    + Stop building with -O1 on armhf. Hopefully the compiler error we were
+      getting has been fixed.
+    + Build with -gstabs on armhf and kfreebsd to try to eat less memory
+      and make the build succeed. If it doesn't we may have to disable
+      debugging symbols as we do in many other arches.
+
+  [ Gustavo Noronha Silva ]
+  * New upstream release
+  * debian/*.symbols, debian/*.install, debian/symbols.filter,
+    debian/patches/01_do-not-build-testing-tools.patch, debian/rules:
+  - Avoid exposing a ton of C++ symbols by not building the testing
+    tools
+  - We no longer build the test browsers, as well
+  * debian/rules:
+  - move dh_autoreconf call to its own rule with its own custom stamp,
+    so we can just call binary if the build fails and we want to try again
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Thu, 08 Aug 2013 20:00:46 -0300
+
+webkitgtk (2.0.3-1) experimental; urgency=low
+
+  * Team upload.
+
+  * debian/libwebkit2gtk-3.0-25.symbols:
+    + Added missing i386 symbols. Should really fix the i386 build.
+      Closes: #704886.
+  * debian/rules:
+    + Pass -I Source/autotools to autoreconf to make sure aclocal can find
+      the necessary macros, as otherwise some versions such as aclocal-1.11
+      have some trouble with this.
+    + Add --disable-jit back on mipsel, armel and powerpc. The change was
+      probably lost with the webkit2 addition.
+    + Don't pass --with-gstreamer=1.0 anymore, GStreamer support is always
+      1.0 now and the configure flag has been dropped.
+    + Don't pass --disable-plugin-process. The flag is gone and the plugin
+      process is always built for WebKit2, which is what we were doing.
+    + Don't pass --disable-jit on powerpc. Instead disable JIT, YARR and
+      assembler in ia64 powerpc sparc s390 and s390x as there's no
+      support for MacroAssembler for them.
+  * debian/patches/changeset_145551.diff:
+    + Backport from upstream, implement Double2Ints in CLoop backend for
+      32 bit architectures, needed for the above architectures where we
+      disable JIT, YARR and assembler.
+  * debian/control:
+    + Build depend on libgudev-1.0-dev on linux for gamepad support.
+  * debian/patches/10_hurd_getCurrentExecutablePath.patch:
+    + Readd patch from #669059 that was lost. Fixes build on hurd.
+
+  * New upstream release.
+  * changeset_150117.diff, changeset_150326.diff, changeset_150963.diff:
+    + Dropped, included upstream.
+
+  * debian/patches/changeset_147557.diff:
+    + Backport from upstream, fix a dispose/finalize mistake that can
+      cause crashes in some scenarios.
+  * debian/patches/20_bsd-hurd-gtest-port.patch:
+    + New patch. Fix kfreebsd and hurd builds by making gtest know about
+      them.
+
+ -- Emilio Pozuelo Monfort <pochu@debian.org>  Sun, 16 Jun 2013 20:52:37 +0200
+
+webkit (1.8.1-4) unstable; urgency=low
+
+  * Acknowledge NMUs. Thanks Samuel, Ansgar and Michael!
+  * debian/patches/20_mesa-llvmpipe-crash.patch:
+    + Backport change from upstream, fixes crashes when running
+      mesa llvmpipe drivers. Closes: #711584.
+  * debian/patches/25_bison_2.6_ftbfs.patch:
+    + Backport change from upstream, fix the build with bison >= 2.6.
+  * debian/patches/30_gtkdoc_fixxref_warnings.patch:
+    + New patch. Ignore warnings when generating the html documentation.
+      The broken links were probably already there in previous builds
+      as we don't build depend on the necessary -doc packages. We will
+      upload 2.0.x to unstable soonish anyway so no point in fixing
+      such minor issues here.
+
+ -- Emilio Pozuelo Monfort <pochu@debian.org>  Wed, 12 Jun 2013 21:48:22 +0200
+
+webkitgtk (2.0.2-2) experimental; urgency=low
+
+  * Team upload.
+
+  * debian/control,
+    debian/rules:
+    + Build depend on gcc-4.7 and g++-4.7 and set the C compiler and C++
+      compiler to this version as webkitgtk now requires GCC >= 4.7 and
+      the default on many architectures is still 4.6.
+  * debian/control,
+    debian/compat:
+    + Bump debhelper compat to 9. Among other things, this brings us
+      compressed debug info files. It also brings build-id debug info
+      files which greatly speed up gdb start up as gdb won't have to
+      checksum the (rather big) webkit debug info files anymore.
+  * debian/rules:
+    + Exclude libwebkit2gtkinjectedbundle.so from dh_makeshlibs as it's a
+      private library and debhelper looks at every shared lib in compat 9.
+  * debian/libwebkitgtk-1.0-0.symbols,
+    debian/libwebkitgtk-3.0-0.symbols:
+    + Add missing symbols for 32 bit arches. Closes: #704886.
+  * debian/libwebkit2gtk-3.0-25.symbols:
+    + Demangle symbols.
+  * debian/control:
+    + Bump required build dependencies according to Versions.mk.
+    + Add missing build dependency on flex. Thanks to Sjoerd Simons for
+      noticing this.
+    + Also add other missing build dependencies (cairo, freetype,
+      fontconfig and libxml).
+
+ -- Emilio Pozuelo Monfort <pochu@debian.org>  Tue, 04 Jun 2013 15:00:49 +0200
+
+webkitgtk (2.0.2-1) experimental; urgency=low
+
+  * Team upload.
+
+  * New upstream release.
+    + debian/patches/03_avoid_unresolved_x_symbols.patch:
+      - Removed, applied upstream.
+    + debian/patches/changeset_150117.diff,
+      debian/patches/changeset_150256.diff,
+      debian/patches/changeset_150326.diff,
+      debian/patches/changeset_150963.diff:
+      - Backport various build fixes from upstream.
+    + debian/*.symbols:
+      - Updated.
+    + debian/libwebkit2gtk-3.0-0.install:
+      - Don't install .la files.
+    + debian/rules:
+      - Re-enable parallel build support, the above patches should
+        make it work.
+    + debian/libwebkit2gtk-3.0-{0,25}.install,
+      debian/control,
+      debian/rules:
+      - Renamed libwebkit2gtk-3.0-0 to libwebkit2gtk-3.0-25.
+      - Make libwebkit2gtk-3.0-25 break/replace the old
+        libwebkit2gtk-3.0-0 as the injected-bundle module path
+        is the same.
+    + debian/libwebkit2gtk-3.0-25.symbols:
+      - Add a symbols file for libwebkit2gtk-3.0.
+  * debian/watch:
+    + Updated to work with the new page.
+  * debian/rules:
+    + Run dh_autoreconf. Makes it easier to backport upstream patches
+      that modify autotools files.
+  * debian/control:
+    + Mention "dummy" in libwebkit-dev's long description to shut
+      lintian up.
+    + Bump Standards-Version to 3.9.4; no changes needed.
+    + Bump libharfbuzz-dev's minimum build dependency to pick up a
+      dependency against the new libharfbuzz0a package.
+
+ -- Emilio Pozuelo Monfort <pochu@debian.org>  Wed, 29 May 2013 10:39:29 +0200
+
+webkitgtk (1.11.91-1) experimental; urgency=low
+
+  * New development release
+  * debian/patches/03_avoid_unresolved_x_symbols.patch:
+  - patch to avoid linking issue
+  * debian/rules:
+  - enable WebKit2 packages
+  * debian/*.symbols:
+  - updated with new symbols
+  * debian/control:
+  - add libwebp-dev to the build dependencies
+  - add libsecret-1-dev to build dependencies
+  - add libharfbuzz-dev >= 0.9.7 to build dependencies
+  * debian/libwebkitgtk-3.0-dev.install:
+  - install webkitdom includes, which now live in a new path
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Sun, 17 Mar 2013 11:43:34 -0300
+
+webkitgtk (1.10.2-2) experimental; urgency=low
+
+  * Integrate patches and acknowledge NMUs; thanks to Ansgar Burchardt
+    <ansgar@debian.org>, and Michael Gilbert <mgilbert@debian.org>
+  * debian/control, debian/rules:
+  - switch to building with GStreamer 1.0
+  * debian/control:
+  - added ruby to the Build-Dependencies, it is now required
+    for building WebKit
+  * debian/rules:
+  - ensure configure is the last command run in a single shell invocation,
+    so the build fails early if configure fails
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Sun, 24 Feb 2013 16:51:07 -0300
+
+webkitgtk (1.10.2-1) experimental; urgency=low
+
+  * New stable release
+  - source package renamed following upstream
+  - Includes the WebCore split patches, so the make command line
+    limit problem should not happen
+  * Acknowledge NMU to fix FreeBSD and Hurd, thanks to Samuel
+    Thibault <sthibault@debian.org>
+  * Acknowledge NMU to change deb compression to xz, thanks to
+    Ansgar Burchardt <ansgar@debian.org>
+  * Acknowledge NMU to use smaller debug format for ia64 as well,
+    thanks to Ansgar Burchardt <ansgar@debian.org>
+  * debian/*.symbols:
+  - updated
+  * debian/control:
+  - bump libsoup dependency to 2.40 accross the board,
+    following upstream's bump but using the first stable
+    release instead of the development one
+  * debian/*webkit2*, debian/rules, debian/control:
+  - new packages for the WebKit2GTK+ library, not built by default, you
+    can enable them by setting the make ENABLE_WEBKIT2 variable to yes
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Wed, 05 Dec 2012 23:41:36 -0200
+
+webkit (1.9.2-1) experimental; urgency=low
+
+  * New development release
+  * debian/patches/10_kfreebsd_support.patch:
+  - removed; applied upstream
+  * debian/rules:
+  - disable AR_FLAGS space optimization for now, since linking two libtool
+    convenience libraries seems to break that
+  * debian/*.symbols:
+  - updated with symbols of the new version
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Tue, 08 May 2012 12:01:33 -0300
+
+webkit (1.8.1-3.4) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * Fix wide pointer issues on ia64 (closes: #642750).
+  * Make favicon database thread-safe (closes: #697172).
+  * Support architectures with large page sizes (closes: #694971).
+  * Compile with --disable-jit on armel, mipsel, and powerpc (closes: #651636).
+
+ -- Michael Gilbert <mgilbert@debian.org>  Sat, 16 Feb 2013 21:46:48 +0000
+
+webkit (1.8.1-3.3) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * debian/rules: Disable debug symbols also for ia64.
+
+ -- Ansgar Burchardt <ansgar@debian.org>  Thu, 13 Sep 2012 23:39:52 +0200
+
+webkit (1.8.1-3.2) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * debian/rules: use xz compression for binary packages. (Closes: #684139)
+
+ -- Ansgar Burchardt <ansgar@debian.org>  Sat, 08 Sep 2012 18:40:04 +0200
+
+webkit (1.8.1-3.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Fix debian/patches/10_kfreebsd_support.patch
+  debian/patches/11_hurd_support.patch patches for kfreebsd and hurd build
+  (Closes: #669059).
+
+ -- Samuel Thibault <sthibault@debian.org>  Fri, 25 May 2012 11:00:30 +0200
+
+webkit (1.8.1-3) unstable; urgency=low
+
+  [ Samuel Thibault ]
+  * debian/rules:
+  - Disable debug symbols also for hurd-i386 (Closes: #664810)
+  * debian/patches/11_hurd_support.patch:
+  - Add Hurd-specific code path before the catch-all UNIX code path for
+    getting the executable path (Closes: 669059)
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Wed, 23 May 2012 22:54:54 -0300
+
+webkit (1.8.1-2) unstable; urgency=low
+
+  [ Michael Biebl ]
+  * debian/rules:
+  - Use set -e in for loops to fail early
+  - Standardize on $(shell ) for shell invocation and only add
+    -Wl,--no-keep-memory for 32 bits architectures
+  - Disable debugging symbols completely for architectures for
+    which we were using -gstabs before, since they keep hitting
+    memory limits on the buildds
+
+  [ Jeremy Bicha ]
+  * debian/rules:
+  - Remove duplicate LDFLAGS when running configure
+  * debian/watch:
+  - Look for tar.xz files from now on
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Fri, 04 May 2012 12:37:56 -0300
+
+webkit (1.8.1-1) unstable; urgency=low
+
+  * New upstream release
+  * debian/patches/10_kfreebsd_support.patch:
+  - Patch by Steven Chamberlain <steven@pyro.eu.org> to fix the
+    build for kFreeBSD (Closes: #669308)
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Thu, 26 Apr 2012 19:52:12 -0300
+
+webkit (1.8.0-2) unstable; urgency=low
+
+  * Upload to unstable
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Tue, 03 Apr 2012 16:50:54 -0300
+
+webkit (1.8.0-1) experimental; urgency=low
+
+  * New stable release
+  * debian/control:
+  - move libwebkit-dev to oldlibs
+  * debian/*.symbols:
+  - updated with symbols additions
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Wed, 28 Mar 2012 09:53:38 -0300
+
+webkit (1.7.92-1) experimental; urgency=low
+
+  * New development release
+  * debian/control:
+  - wrapped Build-Dependencies
+  * debian/rules:
+  - pass --no-keep-memory to the linker, to make build less likely
+    to fail with an OOM
+  * debian/*.symbols:
+  - updated with new symbols
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Mon, 26 Mar 2012 19:56:51 -0300
+
+webkit (1.7.91-1) experimental; urgency=low
+
+  * New development release
+  * debian/patches/05_sparc-needs-alignment.patch:
+  - removed; applied upstream
+  * debian/libwebkitgtk*.symbols:
+  - added DRT optional symbols that are different on i386/powerpc
+  * debian/control:
+  - replace dh_clean -k call with dh_prep
+  - bump Build-Depends on debhelper, for dh_prep
+  - bump Dependency on libsoup to for the -dev packages to match the
+    Build-Dependency
+  - Recommend gstreamer packages required to play most formats
+    with <video> and <audio>
+  * debian/rules:
+  - disable parallel builds to work-around the racy problems
+    we have seen in the wild
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Sat, 10 Mar 2012 23:25:33 -0300
+
+webkit (1.7.90+svn20120304-1) experimental; urgency=low
+
+  * New development release
+  * debian/patches/01_double-conversion.patch,
+    debian/patches/03_fix-documentation-build.patch,
+    debian/patches/04_hurd-fix.patch:
+  - removed; applied upstream
+  * debian/*.symbols:
+  - updated
+  * Merged changes done in 1.6.3-2
+  * debian/control:
+  - Put all gir1.2-* packages into the introspection section.
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Sun, 04 Mar 2012 16:28:56 -0300
+
+webkit (1.7.5-1) experimental; urgency=low
+
+  * New development release
+  * debian/patches/03_fix-documentation-build.patch:
+  - refreshed, with changes from upstream
+  * debian/patches/04_hurd-fix.patch:
+  - refreshed;
+  * Merged changes done in 1.6.3-1
+  * debian/*.symbols:
+  - updated symbols file with ABI changes
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Fri, 17 Feb 2012 11:48:31 -0200
+
+webkit (1.7.4-1) experimental; urgency=low
+
+  * New development release
+  * debian/patches/01_double-conversion.patch:
+  - refreshed; partially applied upstream
+  * debian/patches/03_freebsd-fix.patch,
+    debian/patches/04_pkgconfig-fix.patch:
+  - removed; applied upstream
+  * debian/patches/03_fix-documentation-build.patch:
+  - added; fix building docs for the GTK+ 2 library
+  * debian/control:
+  - update build-dependency for libsoup2.4-dev to 2.37.4
+  - add libgl1-mesa-dev as a B-D, since we now build with
+    WebGL enabled by default
+  * debian/rules:
+  - adapted doc installation to the new system
+  * debian/*.install:
+  - include directory got renamed webkit->webkitgtk
+  * debian/libwebkit*.symbols:
+  - updated
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Thu, 19 Jan 2012 00:09:29 -0200
+
+webkit (1.6.3-2) unstable; urgency=low
+
+  * debian/patches/05_sparc-needs-alignment.patch:
+  - patch by Jurij Smakov <jurij@wooyd.org> to fix JSC for SPARC
+    (Closes: #651934)
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Sun, 04 Mar 2012 12:05:04 -0300
+
+webkit (1.6.3-1) unstable; urgency=low
+
+  * debian/patches/04_pkgconfig-fix.patch:
+  - removed; applied in this upstream version
+  * debian/rules:
+  - move -Wl,--no-relax to LD_FLAGS, when building on alpha, and add
+    LDFLAGS as a parameter (part of #648761)
+  * debian/patches/01_double-conversion.patch:
+  - add CPU(ALPHA) to the list of cpus that pass the test
+    (Closes: #648761)
+  * debian/patches/04_hurd-fix.patch:
+  - patch by Pino Toscano <pino@debian.org> to fix FTBFS on Hurd
+    (Closes: #649192)
+  * debian/rules:
+  - accepted patch by Moritz Muehlenhoff <jmm@debian.org> to use
+    dpkg-buildflags for cflags/cppflags/ldflags (Closes: #659391)
+  * debian/control:
+  - add Conflicts and Replaces combo on libjavascriptcoregtk-1.0-dev also
+    for libwebkit-dev << 1.5.0 (Closes: #657408)
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Wed, 15 Feb 2012 23:29:11 -0200
+
+webkit (1.6.3-1) unstable; urgency=low
+
+  * debian/patches/04_pkgconfig-fix.patch:
+  - removed; applied in this upstream version
+  * debian/rules:
+  - move -Wl,--no-relax to LD_FLAGS, when building on alpha, and add
+    LDFLAGS as a parameter (part of #648761)
+  * debian/patches/01_double-conversion.patch:
+  - add CPU(ALPHA) to the list of cpus that pass the test
+    (Closes: #648761)
+  * debian/patches/04_hurd-fix.patch:
+  - patch by Pino Toscano <pino@debian.org> to fix FTBFS on Hurd
+    (Closes: #649192)
+  * debian/rules:
+  - accepted patch by Moritz Muehlenhoff <jmm@debian.org> to use
+    dpkg-buildflags for cflags/cppflags/ldflags (Closes: #659391)
+  * debian/control:
+  - add Conflicts and Replaces combo on libjavascriptcoregtk-1.0-dev also
+    for libwebkit-dev << 1.5.0 (Closes: #657408)
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Wed, 15 Feb 2012 23:29:11 -0200
+
+webkit (1.6.1-5) unstable; urgency=low
+
+  * debian/rules:
+  - also build with stabs debug symbols format when under s390x
+    patch by Aurelien Jarno <aurel32@debian.org> (Closes: #637228)
+  * debian/control:
+  - add Breaks for midori and claws-mail-fancy-plugin versions that
+    were using the private webkit_web_view_get_selected_text symbol
+    (Closes: #646095)
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Tue, 01 Nov 2011 23:20:19 -0200
+
+webkit (1.6.1-4) unstable; urgency=low
+
+  * debian/patches/03_freebsd-fix.patch:
+  - fix FreeBSD 64 bits build
+  * debian/patches/04_pkgconfig-fix.patch:
+  - import patch from upstream to fix pkg-config file to require the JSC
+    one
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Sun, 23 Oct 2011 20:10:53 -0200
+
+webkit (1.6.1-3) unstable; urgency=low
+
+  * debian/patches/01_double-conversion.patch:
+  - imported from upstream; fixes s390 double conversion, modified
+    to also include IA64
+  * debian/rules:
+  - try reducing the disk space used to build webkit by using thin
+    archives
+  - disable silent rules to make debugging easier
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Fri, 21 Oct 2011 10:38:17 -0200
+
+webkit (1.6.1-2) unstable; urgency=low
+
+  * Rename source package back to webkit
+  * debian/control:
+  - Build-Depend on gawk, since our GNUmakefile.in has lines that are too
+    long for mawk, which results in a broken GNUmakefile
+  * debian/rules:
+  - re-enable installing documentation
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Tue, 18 Oct 2011 09:59:20 -0200
+
+webkitgtk+ (1.6.1-1) experimental; urgency=low
+
+  * New upstream release
+  * debian/patches/01_fix-introspection.patch:
+  - Removed; applied upstream
+  * debian/patches/02_notebook_scroll.patch:
+  - Patch by Josselin Mouette <joss@debian.org> to ignore alt+wheel
+    (Closes: #640980)
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Mon, 26 Sep 2011 23:24:37 -0300
+
+webkitgtk+ (1.5.2-1) experimental; urgency=low
+
+  * New upstream development release
+  * debian/patches/01_spoof-ua-for-calendar.patch:
+  - Remove; applied upstream
+  * debian/patches/01_fix-introspection.patch:
+  - Fix the introspection build
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Wed, 24 Aug 2011 21:43:19 -0300
+
+webkitgtk+ (1.4.2-2) unstable; urgency=low
+
+  * debian/rules:
+  - fix armhf special-casing to actually work as intended; thanks to
+    mbiebl for finding the issue and helping resolve it
+  * debian/watch:
+  - provided by Michael Biebl <biebl@debian.org>; thanks! (Closes: #633446)
+  * debian/patches/01_spoof-ua-for-calendar.patch:
+  - steal patch from upstream (on track for 1.4.3) to make Google Calendar
+    behave and not give us the mobile version
+  * debian/control:
+  - Build-Depend on libjpeg-dev instead of libjpeg62-dev (See #635287)
+  - Re-add the libwebkit-dev package to automatically upgrade packages
+    using the GTK+ 2.0 version of WebKitGTK+.
+  - Fix capitalization of GTK+ in the description (Closes: #611871)
+  - Set Homepage to webkitgtk.org instead of webkit.org (Closes: #589431)
+  - Update to the new GI mini-policy by making the -dev packages depend on
+    the appropriate gir1.2-webkit-?.0 packages (Closes: #633962)
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Mon, 25 Jul 2011 21:08:52 -0300
+
+webkitgtk+ (1.4.2-1) unstable; urgency=low
+
+  * New upstream release
+  * debian/patches/01_add-missing-file.patch:
+  - removed; pushed upstream.
+  * debian/rules:
+  - use gstabs for mips and mipsel as well, to try to make it possible for
+    the builders to build webkit
+  - use -O1 for armhf to workaround compiler bug
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Sun, 10 Jul 2011 10:54:24 -0300
+
+webkitgtk+ (1.4.1-2) unstable; urgency=low
+
+  * debian/patches/01_add-missing-file.patch:
+  - copied MIPSAssembler.h from upstream's source repository; it's missing
+    from the sources list and didn't get included in the tarball, this will
+    fix the build on MIPS
+  * debian/control:
+  - fix dependency on gtk2 to please lintian (remove -1)
+  - adjust Standards-Version with no changes to the packaging
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Mon, 20 Jun 2011 14:50:27 -0300
+
+webkitgtk+ (1.4.1-1) unstable; urgency=low
+
+  * New upstream version, uploaded to unstable.
+  * debian/*.symbols:
+  - add optional symbols for some JIT stub symbols that show up in some
+    platforms (i.e. ARMEL)
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Mon, 06 Jun 2011 21:12:38 -0300
+
+webkitgtk+ (1.4.0-1) experimental; urgency=low
+
+  * debian/patches/02_plugin_check_mixed_symbols.patch,
+    debian/patches/01_plugin_path.patch:
+  - removed; applied upstream
+  * debian/control, debian/changelog:
+  - rename source package and remove the libwebkit-dev package to avoid
+    automatically transitioning packages to the new version
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Fri, 29 Apr 2011 10:57:23 -0300
+
+webkit (1.3.13-4) experimental; urgency=low
+
+  * debian/*.symbols:
+  - remove debian revision from WTFReportBacktrace@Base to make
+    lintian happy
+  - add optional C++ symbols for functions that use different data types
+    on 32 bits architectures
+  * debian/patches/02_plugin_check_mixed_symbols.patch:
+  - patch from upstream bugzilla that causes webkit itself to check for
+    mixed gtk symbols in a plugin before loading it
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Tue, 12 Apr 2011 09:21:29 -0300
+
+webkit (1.3.13-3) experimental; urgency=low
+
+  * debian/control:
+  - depend on a libgtk2.0-dev version that provides introspection information
+    (Closes: #621809)
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Fri, 08 Apr 2011 23:50:32 -0300
+
+webkit (1.3.13-2) experimental; urgency=low
+
+  * debian/patches/01_plugin_path.patch:
+  - obtained from upstream; will allow not disabling flash when used with
+    nspluginwrapper
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Fri, 08 Apr 2011 10:12:50 -0300
+
+webkit (1.3.13-1) experimental; urgency=low
+
+  * New upstream release.
+  * debian/patches/01_expose_less_symbols.patch:
+  - remove this patch; deal with the symbols instead
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Tue, 29 Mar 2011 11:14:00 -0300
+
+webkit (1.3.12-1) experimental; urgency=low
+
+  * New upstream release
+  * debian/*.symbols:
+  - updated with new symbols
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Tue, 15 Mar 2011 00:32:03 -0300
+
+webkit (1.3.11-3) experimental; urgency=low
+
+  * debian/*.symbols:
+  - fix demangled names (Closes: #614770)
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Wed, 23 Feb 2011 09:25:49 -0300
+
+webkit (1.3.11-2) experimental; urgency=low
+
+  * debian/libwebkit-{1,3}.0-0.symbols:
+  - tag exported WTF symbols as optional, and use their demangled name
+    with the c++ tag; this should fix the FTBFS
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Tue, 22 Feb 2011 14:31:14 -0300
+
+webkit (1.3.11-1) experimental; urgency=low
+
+  * New development release
+  * debian/patches/01_expose_less_symbols.patch:
+  - export less symbols, and don't build DRT
+  * debian/control:
+  - updated to reflect changes in naming of packages related to GTK+ 3
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Wed, 19 Jan 2011 11:05:31 -0200
+
+webkit (1.3.10-1) experimental; urgency=low
+
+  * New development release
+  * debian/control:
+  - Build-Depend on GTK+3 >= 2.99.1 to avoid problems with the multiple
+    breakages
+  * debian/rules:
+  - adapt for source layout changes
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Thu, 13 Jan 2011 10:37:55 -0200
+
+webkit (1.3.9-1) experimental; urgency=low
+
+  * New development release
+  - fixes build with newest GTK+
+  * debian/control:
+  - build-depend on GTK+ >= 2.91.7 for the GTK+3-based version
+  - build-depend on gir1.2-{gtk-2.0,soup-2.4}
+  - rename introspection packages to gir1.2-*
+  - updated Build-Depends on gobject-introspection
+  - tighten dependency of -dev packages on library packages
+  - add missing ${misc:Depends}
+  - update Standards-Version to 3.9.1
+  * debian/rules:
+  - add dh_girepository calls to actually do something to ${gir:Depends}
+  - run dh_makeshlibs targetting the appropriate packages (library ones,
+    not dev)
+  - remove rpath from the installed binaries
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Mon, 27 Dec 2010 14:06:08 -0200
+
+webkit (1.3.8-1) experimental; urgency=low
+
+  * New upstream development release
+  * debian/debian/gir1.0-webkit-1.0.install, debian/control,
+    debian/rules, debian/libwebkit-dev.install:
+  - add gir1.0-webkit-1.0 package, and enable introspection support
+  - rename packages to accomodate soname change
+  - add new packages for gtk3-based webkitgtk
+  * debian/control, debian/rules:
+  - enable building geolocation support
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Wed, 11 Aug 2010 11:10:28 -0300
+
+webkit (1.1.17-1) unstable; urgency=low
+
+  * New upstream release
+  * debian/copyright:
+  - updated with changes since 1.1.16
+  * debian/libwebkit-1.0-2.symbols:
+  - updated
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Wed, 02 Dec 2009 23:13:32 -0200
+
+webkit (1.1.16-3) unstable; urgency=low
+
+  * Fix building on kfresbsd-amd64 (Closes: #554718)
+    - Patch by Petr Salinger <Petr.Salinger@seznam.cz>
+  * Fix tightened dependency
+  * debian/rules:
+  - remove rpath from GtkLauncher and DumpRenderTree
+  * debian/control:
+  - depend on chrpath for change above
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Wed, 11 Nov 2009 21:21:12 -0200
+
+webkit (1.1.16-2) unstable; urgency=low
+
+  * debian/control:
+  - tighten libwebkit-dev dependency on the library
+    (Closes: #554014)
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Mon, 02 Nov 2009 17:07:03 -0200
+
+webkit (1.1.16-1) unstable; urgency=low
+
+  * New upstream release
+  * debian/copyright:
+  - updated with the copyright changes since 1.1.15
+  * debian/libwebkit-1.0-2.symbols:
+  - updated with new symbols
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Thu, 29 Oct 2009 19:06:20 -0200
+
+webkit (1.1.15.2-1) unstable; urgency=low
+
+  * New upstream (semi-stable) release
+  * Fix building on IA64 (Closes: #547797)
+    Thanks to Colin Watson <cjwatson@ubuntu.com>
+  * Fix building on alpha (Closes: #548499)
+  * Fix building on amd64 FreeBSD
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Tue, 06 Oct 2009 21:17:08 +0100
+
+webkit (1.1.15.1-1) unstable; urgency=low
+
+  * New upstream (semi-stable) release
+  * debian/libwebkit-1.0-2.symbols:
+  - remove revisions from the symbol versions
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Fri, 06 Aug 2010 11:19:52 -0300
+
+webkit (1.1.15-1) experimental; urgency=low
+
+  * New upstream release
+  - includes fix for crash that will be fixed in 1.1.15.1
+  * debian/copyright:
+  - updated with changes since 1.1.14
+  * debian/libwebkit-1.0-2.symbols:
+  - updated
+  * debian/control:
+  - force same upstream version for -common
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Mon, 21 Sep 2009 21:22:43 -0300
+
+webkit (1.1.14-1) experimental; urgency=low
+
+  * New upstream release
+  * debian/copyright:
+  - updated with changes since 1.1.13
+  * debian/control:
+  - made libwebkit-dev Arch: any (Closes: #539511)
+  * debian/libwebkit-1.0-2:
+  - updated
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Wed, 09 Sep 2009 11:32:23 -0300
+
+webkit (1.1.13-1) experimental; urgency=low
+
+  * New upstream release
+  - security fixes are already included in this release
+    (Closes: #538346, #538402)
+  * debian/control:
+  - update Build-Depends on libsoup to match upstream requirements
+    (Closes: #542272)
+  - Bump Build-Depends on libsoup2.4-dev to 2.27.91
+  * debian/copyright:
+  - updated with changes since 1.1.12
+  * debian/libwebkit-1.0-2.symbols:
+  - new symbols
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Mon, 24 Aug 2009 21:25:59 -0300
+
+webkit (1.1.12-1) unstable; urgency=low
+
+  * New upstream release
+  * debian/copyright:
+  - updated with changes since 1.1.10
+  * debian/libwebkit-1.0-2.symbols:
+  - adding new symbols
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Tue, 28 Jul 2009 21:04:56 +0200
+
+webkit (1.1.10-2) unstable; urgency=low
+
+  * debian/rules:
+  - trying to get the package built on s390, by using -gstabs
+    (Closes: #528524)
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Wed, 24 Jun 2009 23:05:07 -0300
+
+webkit (1.1.10-1) unstable; urgency=low
+
+  * debian/copyright:
+  - updated with the changes up to the current release
+  * debian/libwebkit-1.0-2.symbols:
+  - updated with new symbols
+  * debian/control:
+  - Build-Depend on libgail-dev
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Tue, 16 Jun 2009 18:52:32 -0300
+
+webkit (1.1.7-1) unstable; urgency=low
+
+  * New upstream release
+  * debian/libwebkit-1.0-2.symbols:
+  - updated with the new symbols in 1.1.7
+  * debian/libwebkit-dev.install, debian/libwebkit-dev.links,
+    debian/rules:
+  - Build, and ship gtk-doc documentation (Closes: #526683)
+  * debian/copyright:
+  - updated.
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Fri, 15 May 2009 18:30:58 -0300
+
+webkit (1.1.6-2) unstable; urgency=low
+
+  * Imported two changes from upstream to fix building on AMD64
+    (Closes: #527096)
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Tue, 12 May 2009 15:00:47 -0300
+
+webkit (1.1.6-1) unstable; urgency=low
+
+  [ Mike Hommey ]
+  * New upstream release.
+
+  [ Gustavo Noronha Silva ]
+  * Imported patch from upstream git mirror to avoid a regression in the
+    webkit_web_frame_load_string method.
+    See https://bugs.webkit.org/show_bug.cgi?id=25466
+  * debian/copyright:
+  - updated with changes since the last release
+  * debian/libwebkit-1.0-2.symbols:
+  - updated
+  * debian/control:
+  - added libenchant-dev to the Build-Depends
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Mon, 04 May 2009 21:40:15 -0300
+
+webkit (1.1.5-2) unstable; urgency=low
+
+  * Upload to unstable.
+  * debian/libwebkit-1.0-2.symbols:
+  - removed debian revision from the symbol versions
+  * debian/control:
+  - Put the libwebkit-1.0-2-dbg package in the "debug" section.
+  - Build depend on libgstreamer-plugins-base0.10-dev. (Closes: #525554)
+  * debian/rules:
+  - Bump shlibs to fit symbols file.
+
+ -- Mike Hommey <glandium@debian.org>  Sat, 25 Apr 2009 18:42:37 +0200
+
+webkit (1.1.5-1) experimental; urgency=low
+
+  [ Mike Hommey ]
+  * New upstream release:
+  - Filter out all C++ symbols. (Closes: #521569)
+  * debian/control:
+  - Change libwebkit-1.0-common section and priority to fit override.
+  - Bumped Standards-Version to 3.8.1.0. No changes required.
+  * debian/rules:
+  - Patch config.{sub|guess} in autotools/.
+
+  [ Gustavo Noronha Silva ]
+  * debian/copyright:
+  - updated with the copyright changes since last version
+  * debian/libwebkit-1.0-0.symbols:
+  - updated with the new symbols
+  * debian/libwebkit-1.0-common.install:
+  - also install translation files
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Thu, 16 Apr 2009 23:20:43 -0300
+
+webkit (1.1.3-3) experimental; urgency=low
+
+  [ Gustavo Noronha Silva ]
+  * debian/control:
+  - make libwebkit-1.0-dev depend on libsoup2.4-dev (>= 2.25.91)
+
+  [ Mike Hommey ]
+  * autotoolsconfig.h.in:
+  - Brown paper bag fix to add missing AC_DEFINEs.
+  * debian/control:
+  - libwebkit-dev doesn't need an outdated conflict with libwebkitgdk-dev.
+  - libwebkit-1.0-2-dbg doesn't need to conflict/replace libwebkit-1.0-1-dbg
+    thanks to the changes in previous release.
+  * debian/rules:
+  - Bump shlibs to fit symbols file.
+  * debian/copyright:
+  - Updated for a small discrepancy I spotted.
+  - Added Gustavo's copyright on debian/* files and updated mine.
+
+ -- Mike Hommey <glandium@debian.org>  Fri, 27 Mar 2009 21:20:48 +0100
+
+webkit (1.1.3-2) experimental; urgency=low
+
+  [ Gustavo Noronha Silva ]
+  * debian/control, debian/libwebkit-1.0-2.install:
+  - move the GtkLauncher and DumpRenderTree binaries to a directory named
+    after the soname of the library, so that different binary incompatible
+    versions of the library are installable in parallel (Closes: #520981)
+  * debian/libwebkit-1.0-2.symbols:
+  - removed debian revision from the symbol versions
+
+  [ Mike Hommey ]
+  * JavaScriptCore/jit/JITStubs.h:
+  - Use the first definition of RETURN_PAIR on x86-64.
+  * JavaScriptCore/assembler/MacroAssemblerX86_64.h,
+    JavaScriptCore/GNUmakefile.am, GNUmakefile.in, configure.ac, configure:
+  - Enable JIT on x86-64.
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Thu, 26 Mar 2009 17:46:30 -0300
+
+webkit (1.1.3-1) experimental; urgency=low
+
+  [ Gustavo Noronha Silva ]
+  * New upstream release
+  - correctly scrolls with space bar (Closes: #519883)
+  * debian/copyright:
+  - updated with changes since last release
+  * debian/libwebkit-1.0-2.symbols:
+  - added new symbols
+
+  [ Mike Hommey ]
+  * autotools/symbols.filter, debian/libwebkit-1.0-2.symbols:
+  - Hide JIT implementation specific symbols. (Closes: #519924, #520006)
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Tue, 17 Mar 2009 15:05:40 -0300
+
+webkit (1.1.1-1) experimental; urgency=low
+
+  * New 1.1.1 upstream release
+  * debian/rules, debian/control, debian/*:
+  - soversion was bumped, so rename packages accordingly
+  * debian/control:
+  - curl is not used anymore, so drop build-dependecy and replace it with
+    libsoup2.4 >= 2.25.91
+  * debian/libwebkit-1.0-2.symbols:
+  - updated symbols file; bumped required version of all symbols to 1.1.1,
+    since we had a soversion bump
+  * debian/copyright:
+  - updated with changes from last release we shipped, and updated
+    download location
+  * debian/control, debian/libwebkit-1.0-common.install:
+  - new package to distribute data files, such as the Web Inspector files
+  - libwebkit-1.0-2 now depends on libwebkit-1.0-common
+  * debian/control:
+  - add myself as an Uploader
+
+ -- Gustavo Noronha Silva <kov@debian.org>  Thu, 05 Mar 2009 16:28:43 -0300
+
+webkit (1.0.2~pre.svn37878-1) experimental; urgency=low
+
+  * Upstream 1.0.2 pre-release, taken from svn revision 37878.
+  * debian/rules:
+    - Use configure instead of autogen.sh, now configure is shipped.
+    - Don't remove automake/autoconf generated files.
+    - Bump shlibs because of some new symbols.
+    - Don't need --enable-svg-experimental anymore.
+    - Feed configure with --host and --build.
+    - Use config.guess and config.sub from autotools-dev.
+  * debian/control: Don't build depend on autoconf/automake/libtool, but
+    autotools-dev, instead.
+  * GNUmakefile.am, GNUmakefile.in: Add missing dash in version script option.
+  * debian/libwebkit-1.0-1.symbols: Add new symbols.
+  * WebCore/page/gtk/AXObjectCacheAtk.cpp: printfs being removed upstream,
+    we don't need to #include <stdio.h> anymore.
+  * configure.ac, configure, GNUmakefile.am, GNUmakefile.in: Properly check
+    and link against libpng. bz#21884.
+  * configure.ac, configure: Properly check and link against libpangoft2.
+    bz#21885.
+  * debian/copyright: Updated to fit additions/removals of files upstream.
+
+ -- Mike Hommey <glandium@debian.org>  Sat, 25 Oct 2008 15:19:56 +0200
+
+webkit (1.0.1-4) unstable; urgency=high
+
+  * WebCore/dom/Document.*, WebCore/loader/DocLoader.*: Avoid DoS via
+    crafted CSS import statements. Fixes: CVE-2008-3632. Closes: #499771.
+
+ -- Mike Hommey <glandium@debian.org>  Sat, 27 Sep 2008 08:57:48 +0200
+
+webkit (1.0.1-3) unstable; urgency=low
+
+  * WebCore/platform/graphics/gtk/FontCacheGtk.cpp,
+    WebCore/platform/graphics/gtk/FontGtk.cpp,
+    WebCore/platform/graphics/gtk/FontPlatformData.h,
+    WebCore/platform/graphics/gtk/FontPlatformDataGtk.cpp,
+    WebCore/platform/graphics/gtk/SimpleFontDataGtk.cpp: cherry-picked change
+    from SVN revision 36309 to fix various font selection problems.
+    Closes: #464477.
+
+ -- Mike Hommey <glandium@debian.org>  Sat, 20 Sep 2008 12:02:58 +0200
+
+webkit (1.0.1-2) unstable; urgency=low
+
+  * symbols.filter: As a workaround for #490173, hide all C++ mangled symbols.
+    This will be enough for now, while fixing FTBFS on ARM.
+  * debian/rules: Build with -Wl,--no-relax on alpha, to work around a
+    binutils bug causing FTBFS.
+
+ -- Mike Hommey <glandium@debian.org>  Thu, 10 Jul 2008 21:10:27 +0200
+
+webkit (1.0.1-1) unstable; urgency=low
+
+  * New upstream release. Closes: #489385.
+  * debian/copyright:
+    - Updated to fit additions/removals of files upstream.
+    - Updated where the source was gotten.
+    - Fixed typos for Collabora. Closes: #484661.
+  * JavaScriptCore/wtf/FastMalloc.cpp, JavaScriptCore/wtf/ListHashSet.h,
+    JavaScriptCore/wtf/Platform.h, JavaScriptCore/wtf/Vector.h,
+    WebCore/platform/text/AtomicString.cpp,
+    WebCore/platform/text/StringHash.h: Fixed some alignment problems on sparc
+    (and some that might occur on arm, too). Closes: #487745. Some compiler
+    warnings about alignment remain, but I don't know if they are a real
+    problem yet.
+  * debian/control:
+    - Added build dependency on libxt-dev.
+    - Relax libwebkit-dev dependency on libwebkit-1.0-1.
+    - Bumped Standards-Version to 3.8.0.1. No changes.
+  * WebCore/page/gtk/AXObjectCacheAtk.cpp: Include stdio.h to avoid FTBFS
+    because of undefined printf.
+  * GNUmakefile.am, symbols.filter: Filter out all std::* symbols exported
+    because of stl headers.
+  * debian/libwebkit-1.0-1.symbols: Add symbols file.
+  * debian/rules: Bump shlibs because of some new symbols.
+
+ -- Mike Hommey <glandium@debian.org>  Sun, 06 Jul 2008 15:09:55 +0200
+
+webkit (0~svn32442-1) unstable; urgency=low
+
+  [ Mike Hommey ]
+  * New upstream snapshot
+  * debian/copyright: Updated to fit additions/removals of files upstream.
+  * debian/control: Add libpango1.0-dev to build dependencies and tighten
+    libgtk2.0-dev build dependency. Closes: #477493.
+
+  [ Luca Bruno ]
+  * debian/libwebkit-1.0-1.install, debian/rules: Install GtkLauncher
+    and DumpRenderTree in /usr/lib/webkit-1.0/libexec. Closes: #476514.
+
+ -- Mike Hommey <glandium@debian.org>  Wed, 23 Apr 2008 22:20:25 +0200
+
+webkit (0~svn31841-1) unstable; urgency=low
+
+  * New upstream snapshot
+    + Includes proper Requires in .pc file. Closes: #450949.
+  * debian/copyright: Updated to fit additions/removals of files upstream.
+  * debian/control, debian/rules: Don't build QtWebKit, it will be built from
+    Qt sources.
+  * debian/libqtwebkit*: Removed.
+  * debian/rules: Replaced make calls with $(MAKE).
+  * debian/control, debian/rules: Don't use qmake anymore, but use autotools
+    instead.
+  * debian/libwebkitgtk-dev.install: Remove the .prl file that was generated
+    by qmake.
+  * WebCore/WebCore.pro, WebKit.pro: Revert previous changes, as we don't use
+    qmake anymore.
+  * JavaScriptCore/wtf/ASCIICType.h: Revert what were warning fixes, to avoid
+    diverging too much from upstream.
+  * debian/rules: Clean-up autotools generated files in the clean target.
+  * debian/control, debian/rules, debian/libwebkit*: Rename packages to fit
+    new library SONAME.
+  * debian/control: libwebkit-dev doesn't need to depend on libglib2.0-dev.
+  * debian/libwebkit-1.0-1.install, debian/rules: Install GtkLauncher and
+    DumpRenderTree in /usr/lib/webkit-1.0, and don't rename DumpRenderTree, as
+    Qt homonym lie elsewhere.
+  * debian/libwebkit-1.0-1.preinst, debian/libwebkit-1.0-1.postrm: Don't
+    divert anything, since we don't clash with older files anymore.
+  * debian/rules: Ugly hack to add -Wl,--as-needed without it getting reordered
+    by libtool.
+  * WebKitTools/GNUmakefile.am: Don't build GtkLauncher and DumpRenderTree
+    with rpath.
+
+ -- Mike Hommey <glandium@debian.org>  Sat, 12 Apr 2008 21:40:00 +0200
+
+webkit (0~svn27674-4) unstable; urgency=low
+
+  * debian/rules: Revert change from 0~svn27674-3, which was obviously not
+    enough.
+  * WebKit.pro: Don't build testkjs, that provokes the s390 FTBFSes ; we don't
+    install it anyways. Closes: #466848.
+  * JavaScriptCore/kjs/interpreter.cpp, JavaScriptCore/wtf/ASCIICType.h,
+    WebCore/dom/Position.cpp, WebCore/editing/Selection.cpp,
+    WebCore/editing/SelectionController.cpp,
+    WebCore/editing/VisiblePosition.cpp,
+    WebCore/ksvg2/svg/SVGFontFaceElement.cpp,
+    WebCore/loader/FTPDirectoryParser.cpp,
+    WebCore/loader/icon/IconDatabase.cpp,
+    WebCore/platform/TextCodecLatin1.cpp,
+    WebCore/platform/TextCodecUserDefined.cpp,
+    WebCore/platform/TextStream.cpp,
+    WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp: Fix FTBFS with
+    gcc 4.3 due to missing includes. Closes: #455125.
+
+ -- Mike Hommey <glandium@debian.org>  Thu, 21 Feb 2008 23:01:12 +0100
+
+webkit (0~svn27674-3) unstable; urgency=low
+
+  * debian/rules: Work around #466613 (FTBFS on s390) by building a little bit
+    less optimized (-O1). Thanks to Josselin Mouette.
+  * debian/control:
+    - Add Vcs-Browser and Vcs-Git fields, and turn Homepage indications in
+      descriptions into a control field.
+    - Bumped Standards-Version to 3.7.3.0. No changes.
+
+ -- Mike Hommey <glandium@debian.org>  Wed, 20 Feb 2008 21:49:33 +0100
+
+webkit (0~svn29752-1) experimental; urgency=low
+
+  * New upstream snapshot
+  * debian/copyright: Updated to fit additions/removals of files upstream.
+  * JavaScriptCore/wtf/TCSpinLock.h: Revert our work-around, now that a
+    proper patch has been applied upstream.
+  * WebCore/WebCore.pro: Don't use Qt version as SO version for QtWebKit.
+  * debian/control, debian/rules, debian/lib*0d.install: Bump SO version to
+    1d because of ABI incompatible changes, and change package names
+    accordingly.
+  * debian/rules: Don't remove -lqtwebico from QtWebKit.pc, since it's not
+    here anymore.
+  * debian/rules, debian/lib*1d.install:
+    - Install new Gtk port's DumpRenderTree tool.
+    - Rename both port's DumpRenderTree tools to <port name>DumpRenderTree
+      to avoid conflicting names.
+  * debian/lib*1d.postrm, debian/lib*1d.preinst: Avoid conflicting files with
+    lib*0d packages (*Launcher programs) but allow to install both new and old
+    libraries by using diversions.
+
+ -- Mike Hommey <glandium@debian.org>  Fri, 25 Jan 2008 00:31:51 +0100
+
+webkit (0~svn27674-2) unstable; urgency=low
+
+  * JavaScriptCore/JavaScriptCore.pri: cherry-picked change from revision
+    28692 to fix FTBFS due to lack of -lpthread on the linker command line.
+  * debian/control: Add dependencies on necessary development packages
+    (essentially for header files) to our own development packages.
+
+ -- Mike Hommey <glandium@debian.org>  Sat, 15 Dec 2007 11:04:47 +0100
+
+webkit (0~svn27674-1) unstable; urgency=low
+
+  * New upstream snapshot
+  * debian/copyright: Updated to fit additions/removals of files upstream.
+  * debian/control: Make libwebkitgtk-dev conflict with the old
+    libwebkitgdk-dev. Closes: #449001.
+  * debian/rules: Bump qtwebkit shlibs.
+  * WebKit/qt/Api/qwebpage.cpp: cherry-picked change from revision 27904 to
+    fix crashes when an event is caught outside of the webkit frame in Qt.
+    This occurred, for example, when hovering over the QtLauncher toolbar.
+
+ -- Mike Hommey <glandium@debian.org>  Mon, 19 Nov 2007 23:10:38 +0100
+
+webkit (0~svn26044-1) unstable; urgency=low
+
+  * New upstream snapshot
+  * debian/rules:
+    - Add support for DEB_BUILD_OPTIONS=noopt.
+    - Bump qtwebkit shlibs, and remove versioning on the webkitgtk ones,
+      as the library is new.
+  * debian/copyright: Updated to fit additions/removals of files upstream.
+  * debian/control, debian/rules, debian/libwebkitgtk-dev.install,
+    debian/libwebkitgtk0d.install: Replace occurences of gdk by gtk, and
+    rename libwebkitgdk*, to fit upstream rename of the Gtk port.
+    Closes: #445060.
+
+ -- Mike Hommey <glandium@debian.org>  Fri, 05 Oct 2007 00:05:06 +0200
+
+webkit (0~svn25144-2) unstable; urgency=low
+
+  * JavaScriptCore/wtf/Platform.h:
+    - Also test if __arm__ is defined, which should fix the FTBFS on arm.
+    - Use better defines for our various arm ports.
+  * JavaScriptCore/kjs/ustring.h, WebCore/platform/DeprecatedString.h: Use
+    these new defines. Thanks Riku Voipio.
+  * debian/control: Build depend on Qt >= 4.3. Thanks Hubert Figuiere.
+    Closes: #439672.
+  * debian/rules: Explicitely use qmake-qt4 instead of qmake to avoid build
+    failures when qt3-dev-tools is installed. Thanks Michael Biebl.
+    Closes: #441007.
+
+ -- Mike Hommey <glandium@debian.org>  Thu, 06 Sep 2007 08:12:21 +0200
+
+webkit (0~svn25144-1) unstable; urgency=low
+
+  * New upstream snapshot
+  * debian/copyright: Updated so as to fit what we actually remove (there were
+    missing removals previously, which were not appropriate for the most
+    anyways), and to fit the additions/removals of files upstream.
+  * JavaScriptCore/wtf/TCSpinLock.h: Work around an FTBFS on PPC due to a
+    probable regression in gcc (#438415).
+  * debian/rules:
+    + Change the place we install QtLauncher from, since it moved.
+    + Set binary packages' shlibs correctly.
+    + Use $(CURDIR) variable more safely to avoid problem with build
+      directories with spaces.
+  * WebKitQt/Plugins/Plugins.pro: Build plugins with hidden symbols, so that
+    they don't expose unwanted symbols.
+
+ -- Mike Hommey <glandium@debian.org>  Sun, 19 Aug 2007 15:54:12 +0200
+
+webkit (0~svn24735-1) unstable; urgency=low
+
+  * Initial release. (Closes: #428855)
+
+ -- Mike Hommey <glandium@debian.org>  Wed, 15 Aug 2007 14:19:46 +0200
+
diff --git a/compat b/compat
new file mode 100644 (file)
index 0000000..45a4fb7
--- /dev/null
+++ b/compat
@@ -0,0 +1 @@
+8
diff --git a/control b/control
new file mode 100644 (file)
index 0000000..19defbf
--- /dev/null
+++ b/control
@@ -0,0 +1,261 @@
+Source: webkit2gtk
+Priority: optional
+Section: web
+Maintainer: Debian WebKit Maintainers <pkg-webkit-maintainers@lists.alioth.debian.org>
+Uploaders: Gustavo Noronha Silva <kov@debian.org>,
+           Emilio Pozuelo Monfort <pochu@debian.org>,
+           Alberto Garcia <berto@igalia.com>
+Build-Depends: gawk,
+               cmake,
+               debhelper (>= 9),
+               libglib2.0-dev (>= 2.36.0),
+               libgtk2.0-dev (>= 2.24.10),
+               gir1.2-gtk-2.0,
+               libgtk-3-dev (>= 3.10.0),
+               gir1.2-gtk-3.0 (>= 3.10.0),
+               libpango1.0-dev (>= 1.30.0),
+               libharfbuzz-dev (>= 0.9.18),
+               libcairo2-dev (>= 1.10),
+               libfontconfig1-dev (>= 2.5),
+               libfreetype6-dev,
+               libicu-dev,
+               libxslt1-dev (>= 1.1.7),
+               libxml2-dev (>= 2.6),
+               libsoup2.4-dev (>= 2.42.0),
+               gir1.2-soup-2.4,
+               libsqlite3-dev (>= 3.0),
+               libgudev-1.0-dev [linux-any],
+               gperf,
+               bison,
+               flex,
+               ruby,
+               slimit,
+               libjpeg-dev,
+               libpng-dev,
+               libwebp-dev,
+               libxt-dev,
+               libgstreamer1.0-dev (>= 1.0.3),
+               libgstreamer-plugins-base1.0-dev (>= 1.0.3),
+               libenchant-dev (>= 0.22),
+               gtk-doc-tools,
+               geoclue-2.0,
+               libsecret-1-dev,
+               gobject-introspection (>= 1.32.0),
+               libgirepository1.0-dev (>= 0.9.12-4),
+               libgl1-mesa-dev
+Build-Conflicts: gir-repository-dev
+Standards-Version: 3.9.6
+Homepage: http://webkitgtk.org/
+Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-webkit/webkit.git
+Vcs-Git: git://anonscm.debian.org/pkg-webkit/webkit.git
+
+Package: libjavascriptcoregtk-4.0-18
+Section: libs
+Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${shlibs:Depends},
+         ${misc:Depends}
+Description: JavaScript engine library from WebKitGTK+
+ JavaScriptCore is the JavaScript engine used in WebKit. It consists
+ of the following building blocks: lexer, parser, start-up interpreter
+ (LLInt), baseline JIT, a low-latency optimizing JIT (DFG), and a
+ high-throughput optimizing JIT (FTL).
+ .
+ This build comes from the GTK+ port of WebKit (API version 4.0).
+ .
+ This package contains the shared libraries.
+
+Package: libjavascriptcoregtk-4.0-dev
+Section: libdevel
+Priority: extra
+Architecture: any
+Multi-Arch: same
+Depends: libjavascriptcoregtk-4.0-18 (= ${binary:Version}),
+         gir1.2-javascriptcoregtk-4.0 (= ${binary:Version}),
+         ${misc:Depends}
+Description: JavaScript engine library from WebKitGTK+ - development files
+ JavaScriptCore is the JavaScript engine used in WebKit. It consists
+ of the following building blocks: lexer, parser, start-up interpreter
+ (LLInt), baseline JIT, a low-latency optimizing JIT (DFG), and a
+ high-throughput optimizing JIT (FTL).
+ .
+ This build comes from the GTK+ port of WebKit (API version 4.0).
+ .
+ This package contains the development files.
+
+Package: libjavascriptcoregtk-4.0-18-dbg
+Section: debug
+Priority: extra
+Architecture: any
+Multi-Arch: same
+Depends: libjavascriptcoregtk-4.0-18 (= ${binary:Version}),
+         ${misc:Depends}
+Description: JavaScript engine library from WebKitGTK+ - debugging symbols
+ JavaScriptCore is the JavaScript engine used in WebKit. It consists
+ of the following building blocks: lexer, parser, start-up interpreter
+ (LLInt), baseline JIT, a low-latency optimizing JIT (DFG), and a
+ high-throughput optimizing JIT (FTL).
+ .
+ This build comes from the GTK+ port of WebKit (API version 4.0).
+ .
+ This package contains the debugging symbols.
+
+Package: libjavascriptcoregtk-4.0-bin
+Section: interpreters
+Architecture: any
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${shlibs:Depends},
+         ${misc:Depends}
+Conflicts: libjavascriptcoregtk-3.0-bin
+Description: JavaScript engine library from WebKitGTK+ - command-line interpreter
+ JavaScriptCore is the JavaScript engine used in WebKit. It consists
+ of the following building blocks: lexer, parser, start-up interpreter
+ (LLInt), baseline JIT, a low-latency optimizing JIT (DFG), and a
+ high-throughput optimizing JIT (FTL).
+ .
+ This build comes from the GTK+ port of WebKit (API version 4.0).
+ .
+ This package provides jsc, a command-line JavaScript interpreter.
+
+Package: gir1.2-javascriptcoregtk-4.0
+Section: introspection
+Architecture: any
+Multi-Arch: same
+Depends: ${gir:Depends},
+         ${misc:Depends}
+Conflicts: gobject-introspection-repository
+Description: JavaScript engine library from WebKitGTK+ - GObject introspection data
+ JavaScriptCore is the JavaScript engine used in WebKit. It consists
+ of the following building blocks: lexer, parser, start-up interpreter
+ (LLInt), baseline JIT, a low-latency optimizing JIT (DFG), and a
+ high-throughput optimizing JIT (FTL).
+ .
+ This build comes from the GTK+ port of WebKit (API version 4.0).
+ .
+ This package contains the introspection data, which can be used by
+ packages using the GIRepository format to generate dynamic bindings.
+
+Package: libwebkit2gtk-4.0-37
+Section: libs
+Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: libjavascriptcoregtk-4.0-18 (= ${binary:Version}),
+         ${shlibs:Depends},
+         ${misc:Depends}
+Recommends: gstreamer1.0-plugins-base,
+            gstreamer1.0-plugins-good,
+            ${gst:Recommends}
+Description: Web content engine library for GTK+
+ WebKit is a web content engine, derived from KHTML and KJS from KDE, and
+ used primarily in Apple's Safari browser.  It is made to be embedded in
+ other applications, such as mail readers, or web browsers.
+ .
+ It is able to display content such as HTML, SVG, XML, and others. It also
+ supports DOM, XMLHttpRequest, XSLT, CSS, JavaScript/ECMAScript and more.
+ .
+ WebKit2 is an API layer for WebKit designed from the ground up to
+ support a split process model, where the web content lives in a
+ separate process from the application UI.
+ .
+ This build comes from the GTK+ port of WebKit (API version 4.0).
+ .
+ This is the library for embedding in GTK+ applications.
+
+Package: libwebkit2gtk-4.0-dev
+Section: libdevel
+Priority: extra
+Architecture: any
+Multi-Arch: same
+Depends: libwebkit2gtk-4.0-37 (= ${binary:Version}),
+         gir1.2-webkit2-4.0 (= ${binary:Version}),
+         libgtk-3-dev,
+         libsoup2.4-dev (>= 2.40),
+         libjavascriptcoregtk-4.0-dev (= ${binary:Version}),
+         ${misc:Depends}
+Description: Web content engine library for GTK+ - development files
+ WebKit is a web content engine, derived from KHTML and KJS from KDE, and
+ used primarily in Apple's Safari browser.  It is made to be embedded in
+ other applications, such as mail readers, or web browsers.
+ .
+ It is able to display content such as HTML, SVG, XML, and others. It also
+ supports DOM, XMLHttpRequest, XSLT, CSS, JavaScript/ECMAScript and more.
+ .
+ WebKit2 is an API layer for WebKit designed from the ground up to
+ support a split process model, where the web content lives in a
+ separate process from the application UI.
+ .
+ This build comes from the GTK+ port of WebKit (API version 4.0).
+ .
+ This package contains the development files.
+
+Package: libwebkit2gtk-4.0-doc
+Section: doc
+Priority: extra
+Architecture: all
+Depends: ${misc:Depends}
+Suggests: devhelp
+Description: Web content engine library for GTK+ - documentation
+ WebKit is a web content engine, derived from KHTML and KJS from KDE, and
+ used primarily in Apple's Safari browser.  It is made to be embedded in
+ other applications, such as mail readers, or web browsers.
+ .
+ It is able to display content such as HTML, SVG, XML, and others. It also
+ supports DOM, XMLHttpRequest, XSLT, CSS, JavaScript/ECMAScript and more.
+ .
+ WebKit2 is an API layer for WebKit designed from the ground up to
+ support a split process model, where the web content lives in a
+ separate process from the application UI.
+ .
+ This build comes from the GTK+ port of WebKit (API version 4.0).
+ .
+ This package contains the documentation.
+
+Package: libwebkit2gtk-4.0-37-dbg
+Section: debug
+Priority: extra
+Architecture: any
+Multi-Arch: same
+Depends: libwebkit2gtk-4.0-37 (= ${binary:Version}),
+         libjavascriptcoregtk-4.0-18-dbg (= ${binary:Version}),
+         ${misc:Depends}
+Description: Web content engine library for GTK+ - debugging symbols
+ WebKit is a web content engine, derived from KHTML and KJS from KDE, and
+ used primarily in Apple's Safari browser.  It is made to be embedded in
+ other applications, such as mail readers, or web browsers.
+ .
+ It is able to display content such as HTML, SVG, XML, and others. It also
+ supports DOM, XMLHttpRequest, XSLT, CSS, JavaScript/ECMAScript and more.
+ .
+ WebKit2 is an API layer for WebKit designed from the ground up to
+ support a split process model, where the web content lives in a
+ separate process from the application UI.
+ .
+ This build comes from the GTK+ port of WebKit (API version 4.0).
+ .
+ This package provides the debugging symbols.
+
+Package: gir1.2-webkit2-4.0
+Section: introspection
+Architecture: any
+Multi-Arch: same
+Depends: gir1.2-javascriptcoregtk-4.0 (= ${binary:Version}),
+         ${gir:Depends},
+         ${misc:Depends}
+Description: Web content engine library for GTK+ - GObject introspection data
+ WebKit is a web content engine, derived from KHTML and KJS from KDE, and
+ used primarily in Apple's Safari browser.  It is made to be embedded in
+ other applications, such as mail readers, or web browsers.
+ .
+ It is able to display content such as HTML, SVG, XML, and others. It also
+ supports DOM, XMLHttpRequest, XSLT, CSS, JavaScript/ECMAScript and more.
+ .
+ WebKit2 is an API layer for WebKit designed from the ground up to
+ support a split process model, where the web content lives in a
+ separate process from the application UI.
+ .
+ This build comes from the GTK+ port of WebKit (API version 4.0).
+ .
+ This package contains introspection data, which can be used by
+ packages using the GIRepository format to generate dynamic bindings.
diff --git a/copyright b/copyright
new file mode 100644 (file)
index 0000000..b8e2e99
--- /dev/null
+++ b/copyright
@@ -0,0 +1,2115 @@
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Contact: https://lists.webkit.org/mailman/listinfo/webkit-gtk
+Source: http://webkitgtk.org/releases/
+Comment:
+ The source tarball comes without the following non-free files:
+ .
+ Source/WebInspectorUI/Tools/PrettyPrinting/populate/jquery.min.js
+ Tools/WebKitTestRunner/gtk/fonts/FontWithNoValidEncoding.fon
+
+Files: debian/*
+Copyright: © 2007-2009 Mike Hommey <glandium@debian.org>
+           © 2009 Gustavo Noronha Silva <kov@debian.org>
+           © 2014 Alberto Garcia <berto@igalia.com>
+License: LGPL-2+
+
+Files: debian/jquery-1.9.1.js
+Copyright: © 2005, 2012 jQuery Foundation, Inc. and other contributors
+License: Expat
+Comment:
+ Uncompressed version of jquery.min.js, downloaded from
+ http://code.jquery.com/jquery-1.9.1.js
+
+Files: *
+Copyright: © 2002-2014 Apple Inc. and others
+License: BSD-2-clause
+Comment:
+ The default license of WebKit is BSD 2-clause, available in
+ Source/WebKit/LICENSE. The exceptions are listed in the sections
+ that follow.
+
+Files: Source/ThirdParty/gtest/scripts/upload.py
+Copyright: © 2007 Google Inc.
+License: Apache-2.0
+
+Files: Source/JavaScriptCore/runtime/WeakRandom.h
+Copyright: © 2009 Apple Inc
+           © 2009 Ian C. Bullard.
+License: BSD-2-clause and Expat
+
+Files: Source/JavaScriptCore/API/JSRetainPtr.h
+       Source/JavaScriptCore/API/JSStringRefBSTR.cpp
+       Source/JavaScriptCore/API/JSStringRefBSTR.h
+       Source/JavaScriptCore/bindings/*
+       Source/JavaScriptCore/bytecode/CodeBlock.cpp
+       Source/JavaScriptCore/bytecode/CodeBlock.h
+       Source/JavaScriptCore/bytecode/EvalCodeCache.h
+       Source/JavaScriptCore/bytecode/Instruction.h
+       Source/JavaScriptCore/bytecode/JumpTable.cpp
+       Source/JavaScriptCore/bytecode/JumpTable.h
+       Source/JavaScriptCore/bytecode/Opcode.cpp
+       Source/JavaScriptCore/bytecode/Opcode.h
+       Source/JavaScriptCore/bytecode/SamplingTool.cpp
+       Source/JavaScriptCore/bytecode/SamplingTool.h
+       Source/JavaScriptCore/bytecode/SpeculatedType.cpp
+       Source/JavaScriptCore/bytecode/SpeculatedType.h
+       Source/JavaScriptCore/bytecode/ValueProfile.h
+       Source/JavaScriptCore/bytecompiler/*
+       Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp
+       Source/JavaScriptCore/debugger/DebuggerCallFrame.h
+       Source/JavaScriptCore/ftl/FTLUnwindInfo.cpp
+       Source/JavaScriptCore/heap/GCActivityCallback.cpp
+       Source/JavaScriptCore/heap/GCActivityCallback.h
+       Source/JavaScriptCore/inspector/ConsoleMessage.cpp
+       Source/JavaScriptCore/inspector/ConsoleMessage.h
+       Source/JavaScriptCore/inspector/InjectedScript.cpp
+       Source/JavaScriptCore/inspector/InjectedScript.h
+       Source/JavaScriptCore/inspector/InjectedScriptBase.cpp
+       Source/JavaScriptCore/inspector/InjectedScriptBase.h
+       Source/JavaScriptCore/inspector/InjectedScriptManager.cpp
+       Source/JavaScriptCore/inspector/InjectedScriptManager.h
+       Source/JavaScriptCore/inspector/InjectedScriptModule.cpp
+       Source/JavaScriptCore/inspector/InjectedScriptModule.h
+       Source/JavaScriptCore/inspector/InspectorValues.cpp
+       Source/JavaScriptCore/inspector/InspectorValues.h
+       Source/JavaScriptCore/inspector/ScriptArguments.cpp
+       Source/JavaScriptCore/inspector/ScriptArguments.h
+       Source/JavaScriptCore/inspector/ScriptBreakpoint.h
+       Source/JavaScriptCore/inspector/ScriptCallFrame.cpp
+       Source/JavaScriptCore/inspector/ScriptCallFrame.h
+       Source/JavaScriptCore/inspector/ScriptCallStack.cpp
+       Source/JavaScriptCore/inspector/ScriptCallStack.h
+       Source/JavaScriptCore/inspector/ScriptCallStackFactory.cpp
+       Source/JavaScriptCore/inspector/ScriptCallStackFactory.h
+       Source/JavaScriptCore/inspector/ScriptDebugListener.h
+       Source/JavaScriptCore/inspector/ScriptDebugServer.cpp
+       Source/JavaScriptCore/inspector/ScriptDebugServer.h
+       Source/JavaScriptCore/inspector/agents/InspectorAgent.cpp
+       Source/JavaScriptCore/inspector/agents/InspectorAgent.h
+       Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp
+       Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h
+       Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp
+       Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h
+       Source/JavaScriptCore/inspector/scripts/xxd.pl
+       Source/JavaScriptCore/interpreter/Interpreter.cpp
+       Source/JavaScriptCore/interpreter/Interpreter.h
+       Source/JavaScriptCore/interpreter/JSStack.cpp
+       Source/JavaScriptCore/interpreter/JSStack.h
+       Source/JavaScriptCore/interpreter/Register.h
+       Source/JavaScriptCore/jit/CompactJITCodeMap.h
+       Source/JavaScriptCore/jit/JITStubs.cpp
+       Source/JavaScriptCore/jit/JITStubs.h
+       Source/JavaScriptCore/jit/JITStubsARM.h
+       Source/JavaScriptCore/jit/JITStubsARMv7.h
+       Source/JavaScriptCore/jit/JITStubsX86.h
+       Source/JavaScriptCore/jit/JITStubsX86_64.h
+       Source/JavaScriptCore/parser/SourceCode.h
+       Source/JavaScriptCore/parser/SourceProvider.h
+       Source/JavaScriptCore/profiler/LegacyProfiler.cpp
+       Source/JavaScriptCore/profiler/LegacyProfiler.h
+       Source/JavaScriptCore/profiler/ProfileNode.cpp
+       Source/JavaScriptCore/profiler/ProfileNode.h
+       Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputsTemplates.py
+       Source/JavaScriptCore/runtime/CallData.h
+       Source/JavaScriptCore/runtime/ConstructData.h
+       Source/JavaScriptCore/runtime/ExceptionHelpers.cpp
+       Source/JavaScriptCore/runtime/ExceptionHelpers.h
+       Source/JavaScriptCore/runtime/InitializeThreading.cpp
+       Source/JavaScriptCore/runtime/InitializeThreading.h
+       Source/JavaScriptCore/runtime/JSEnvironmentRecord.cpp
+       Source/JavaScriptCore/runtime/JSEnvironmentRecord.h
+       Source/JavaScriptCore/runtime/JSGlobalObject.cpp
+       Source/JavaScriptCore/runtime/JSLexicalEnvironment.cpp
+       Source/JavaScriptCore/runtime/JSLexicalEnvironment.h
+       Source/JavaScriptCore/runtime/JSNotAnObject.cpp
+       Source/JavaScriptCore/runtime/JSNotAnObject.h
+       Source/JavaScriptCore/runtime/JSSegmentedVariableObject.cpp
+       Source/JavaScriptCore/runtime/JSSegmentedVariableObject.h
+       Source/JavaScriptCore/runtime/JSSymbolTableObject.cpp
+       Source/JavaScriptCore/runtime/JSSymbolTableObject.h
+       Source/JavaScriptCore/runtime/SamplingCounter.cpp
+       Source/JavaScriptCore/runtime/SamplingCounter.h
+       Source/JavaScriptCore/runtime/SymbolTable.cpp
+       Source/JavaScriptCore/runtime/SymbolTable.h
+       Source/JavaScriptCore/runtime/TypeProfilerLog.cpp
+       Source/JavaScriptCore/runtime/TypeProfilerLog.h
+       Source/JavaScriptCore/runtime/VM.cpp
+       Source/JavaScriptCore/runtime/VM.h
+       Source/ThirdParty/ANGLE/*
+       Source/ThirdParty/gtest/*
+       Source/ThirdParty/gtest/codegear/*
+       Source/ThirdParty/gtest/include/gtest/*
+       Source/ThirdParty/gtest/include/gtest/internal/*
+       Source/ThirdParty/gtest/samples/*
+       Source/ThirdParty/gtest/scripts/*
+       Source/ThirdParty/gtest/src/*
+       Source/ThirdParty/gtest/test/*
+       Source/ThirdParty/gtest/xcode/Samples/FrameworkSample/*
+       Source/ThirdParty/gtest/xcode/Scripts/*
+       Source/WTF/wtf/ASCIICType.h
+       Source/WTF/wtf/AVLTree.h
+       Source/WTF/wtf/AutodrainedPool.h
+       Source/WTF/wtf/BoundsCheckedPointer.h
+       Source/WTF/wtf/ByteOrder.h
+       Source/WTF/wtf/CurrentTime.cpp
+       Source/WTF/wtf/CurrentTime.h
+       Source/WTF/wtf/Deque.h
+       Source/WTF/wtf/DisallowCType.h
+       Source/WTF/wtf/FastMalloc.cpp
+       Source/WTF/wtf/Locker.h
+       Source/WTF/wtf/MD5.cpp
+       Source/WTF/wtf/MD5.h
+       Source/WTF/wtf/MainThread.cpp
+       Source/WTF/wtf/MainThread.h
+       Source/WTF/wtf/MediaTime.cpp
+       Source/WTF/wtf/MediaTime.h
+       Source/WTF/wtf/MessageQueue.h
+       Source/WTF/wtf/MetaAllocator.cpp
+       Source/WTF/wtf/MetaAllocator.h
+       Source/WTF/wtf/MetaAllocatorHandle.h
+       Source/WTF/wtf/RedBlackTree.h
+       Source/WTF/wtf/RunLoopTimer.h
+       Source/WTF/wtf/RunLoopTimerCF.cpp
+       Source/WTF/wtf/SHA1.cpp
+       Source/WTF/wtf/SHA1.h
+       Source/WTF/wtf/SaturatedArithmetic.h
+       Source/WTF/wtf/SchedulePair.h
+       Source/WTF/wtf/SchedulePairCF.cpp
+       Source/WTF/wtf/SegmentedVector.h
+       Source/WTF/wtf/SizeLimits.cpp
+       Source/WTF/wtf/StreamBuffer.h
+       Source/WTF/wtf/TCPackedCache.h
+       Source/WTF/wtf/TCPageMap.h
+       Source/WTF/wtf/TCSpinLock.h
+       Source/WTF/wtf/TCSystemAlloc.cpp
+       Source/WTF/wtf/TCSystemAlloc.h
+       Source/WTF/wtf/ThreadFunctionInvocation.h
+       Source/WTF/wtf/ThreadIdentifierDataPthreads.cpp
+       Source/WTF/wtf/ThreadIdentifierDataPthreads.h
+       Source/WTF/wtf/ThreadSpecific.h
+       Source/WTF/wtf/ThreadingPrimitives.h
+       Source/WTF/wtf/ThreadingPthreads.cpp
+       Source/WTF/wtf/ThreadingWin.cpp
+       Source/WTF/wtf/dtoa/*
+       Source/WTF/wtf/gtk/MainThreadGtk.cpp
+       Source/WTF/wtf/text/AtomicStringHash.h
+       Source/WTF/wtf/text/StringBuffer.h
+       Source/WTF/wtf/unicode/Collator.h
+       Source/WTF/wtf/unicode/CollatorDefault.cpp
+       Source/WTF/wtf/unicode/icu/*
+       Source/WebCore/Modules/indexeddb/IDBCallbacks.h
+       Source/WebCore/Modules/indexeddb/IDBDatabaseException.cpp
+       Source/WebCore/Modules/indexeddb/IDBDatabaseMetadata.h
+       Source/WebCore/Modules/indexeddb/IDBEventDispatcher.cpp
+       Source/WebCore/Modules/indexeddb/IDBEventDispatcher.h
+       Source/WebCore/Modules/indexeddb/IDBFactory.cpp
+       Source/WebCore/Modules/indexeddb/IDBFactory.h
+       Source/WebCore/Modules/indexeddb/IDBFactoryBackendInterface.cpp
+       Source/WebCore/Modules/indexeddb/IDBFactoryBackendInterface.h
+       Source/WebCore/Modules/indexeddb/IDBIndexMetadata.h
+       Source/WebCore/Modules/indexeddb/IDBObjectStoreMetadata.h
+       Source/WebCore/Modules/indexeddb/IDBRecordIdentifier.h
+       Source/WebCore/Modules/indexeddb/IDBRequest.cpp
+       Source/WebCore/Modules/indexeddb/IDBRequest.h
+       Source/WebCore/Modules/mediasource/*
+       Source/WebCore/Modules/mediastream/DOMURLMediaStream.cpp
+       Source/WebCore/Modules/mediastream/DOMURLMediaStream.h
+       Source/WebCore/Modules/mediastream/MediaConstraintsImpl.cpp
+       Source/WebCore/Modules/mediastream/MediaConstraintsImpl.h
+       Source/WebCore/Modules/mediastream/RTCConfiguration.h
+       Source/WebCore/Modules/mediastream/RTCIceCandidate.cpp
+       Source/WebCore/Modules/mediastream/RTCIceCandidate.h
+       Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp
+       Source/WebCore/Modules/mediastream/RTCPeerConnection.h
+       Source/WebCore/Modules/mediastream/RTCSessionDescription.cpp
+       Source/WebCore/Modules/mediastream/RTCSessionDescription.h
+       Source/WebCore/Modules/mediastream/RTCSessionDescriptionCallback.h
+       Source/WebCore/Modules/mediastream/RTCSessionDescriptionRequestImpl.cpp
+       Source/WebCore/Modules/mediastream/RTCSessionDescriptionRequestImpl.h
+       Source/WebCore/Modules/mediastream/RTCVoidRequestImpl.cpp
+       Source/WebCore/Modules/mediastream/RTCVoidRequestImpl.h
+       Source/WebCore/Modules/mediastream/UserMediaClient.h
+       Source/WebCore/Modules/mediastream/UserMediaRequest.cpp
+       Source/WebCore/Modules/mediastream/UserMediaRequest.h
+       Source/WebCore/Modules/notifications/Notification.cpp
+       Source/WebCore/Modules/notifications/Notification.h
+       Source/WebCore/Modules/notifications/NotificationCenter.cpp
+       Source/WebCore/Modules/notifications/NotificationCenter.h
+       Source/WebCore/Modules/notifications/NotificationClient.h
+       Source/WebCore/Modules/quota/*
+       Source/WebCore/Modules/speech/DOMWindowSpeechSynthesis.cpp
+       Source/WebCore/Modules/webaudio/AudioBuffer.cpp
+       Source/WebCore/Modules/webaudio/AudioBuffer.h
+       Source/WebCore/Modules/webaudio/AudioListener.cpp
+       Source/WebCore/Modules/webaudio/AudioListener.h
+       Source/WebCore/Modules/webaudio/AudioParam.h
+       Source/WebCore/Modules/webaudio/AudioParamTimeline.h
+       Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.h
+       Source/WebCore/Modules/webaudio/ChannelMergerNode.cpp
+       Source/WebCore/Modules/webaudio/ChannelMergerNode.h
+       Source/WebCore/Modules/webaudio/PeriodicWave.cpp
+       Source/WebCore/Modules/webaudio/PeriodicWave.h
+       Source/WebCore/Modules/webdatabase/*
+       Source/WebCore/Modules/websockets/*
+       Source/WebCore/accessibility/*
+       Source/WebCore/bindings/generic/*
+       Source/WebCore/bindings/js/JSAttrCustom.cpp
+       Source/WebCore/bindings/js/JSBlobCustom.cpp
+       Source/WebCore/bindings/js/JSCallbackData.cpp
+       Source/WebCore/bindings/js/JSCallbackData.h
+       Source/WebCore/bindings/js/JSCommandLineAPIHostCustom.cpp
+       Source/WebCore/bindings/js/JSCustomSQLStatementErrorCallback.cpp
+       Source/WebCore/bindings/js/JSDOMFormDataCustom.cpp
+       Source/WebCore/bindings/js/JSDOMWindowShell.cpp
+       Source/WebCore/bindings/js/JSDOMWindowShell.h
+       Source/WebCore/bindings/js/JSDataTransferCustom.cpp
+       Source/WebCore/bindings/js/JSDedicatedWorkerGlobalScopeCustom.cpp
+       Source/WebCore/bindings/js/JSElementCustom.cpp
+       Source/WebCore/bindings/js/JSErrorHandler.cpp
+       Source/WebCore/bindings/js/JSErrorHandler.h
+       Source/WebCore/bindings/js/JSEventCustom.cpp
+       Source/WebCore/bindings/js/JSFileReaderCustom.cpp
+       Source/WebCore/bindings/js/JSHTMLFrameElementCustom.cpp
+       Source/WebCore/bindings/js/JSHTMLSelectElementCustom.h
+       Source/WebCore/bindings/js/JSHTMLTemplateElementCustom.cpp
+       Source/WebCore/bindings/js/JSHistoryCustom.cpp
+       Source/WebCore/bindings/js/JSInspectorFrontendHostCustom.cpp
+       Source/WebCore/bindings/js/JSMessageEventCustom.cpp
+       Source/WebCore/bindings/js/JSMessagePortCustom.h
+       Source/WebCore/bindings/js/JSMutationObserverCustom.cpp
+       Source/WebCore/bindings/js/JSPerformanceEntryCustom.cpp
+       Source/WebCore/bindings/js/JSPopStateEventCustom.cpp
+       Source/WebCore/bindings/js/JSSQLResultSetRowListCustom.cpp
+       Source/WebCore/bindings/js/JSSQLTransactionCustom.cpp
+       Source/WebCore/bindings/js/JSSQLTransactionSyncCustom.cpp
+       Source/WebCore/bindings/js/JSSharedWorkerCustom.cpp
+       Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp
+       Source/WebCore/bindings/js/JSXSLTProcessorCustom.cpp
+       Source/WebCore/bindings/js/ScriptCachedFrameData.cpp
+       Source/WebCore/bindings/js/ScriptCachedFrameData.h
+       Source/WebCore/bindings/js/ScriptGlobalObject.cpp
+       Source/WebCore/bindings/js/ScriptGlobalObject.h
+       Source/WebCore/bindings/js/ScriptSourceCode.h
+       Source/WebCore/bindings/js/ScriptState.cpp
+       Source/WebCore/bindings/js/ScriptState.h
+       Source/WebCore/bindings/js/ScriptWrappable.h
+       Source/WebCore/bindings/js/ScriptWrappableInlines.h
+       Source/WebCore/bindings/js/WorkerScriptDebugServer.cpp
+       Source/WebCore/bindings/js/WorkerScriptDebugServer.h
+       Source/WebCore/css/CSSAspectRatioValue.cpp
+       Source/WebCore/css/CSSAspectRatioValue.h
+       Source/WebCore/css/CSSCalculationValue.cpp
+       Source/WebCore/css/CSSCalculationValue.h
+       Source/WebCore/css/CSSFontFaceLoadEvent.cpp
+       Source/WebCore/css/CSSFontFaceLoadEvent.h
+       Source/WebCore/css/CSSGridLineNamesValue.cpp
+       Source/WebCore/css/CSSGridLineNamesValue.h
+       Source/WebCore/css/CSSGridTemplateAreasValue.cpp
+       Source/WebCore/css/CSSGridTemplateAreasValue.h
+       Source/WebCore/css/CSSOMUtils.cpp
+       Source/WebCore/css/CSSOMUtils.h
+       Source/WebCore/css/CSSPropertySourceData.cpp
+       Source/WebCore/css/CSSPropertySourceData.h
+       Source/WebCore/css/CSSSupportsRule.cpp
+       Source/WebCore/css/CSSSupportsRule.h
+       Source/WebCore/css/CSSToLengthConversionData.cpp
+       Source/WebCore/css/CSSToLengthConversionData.h
+       Source/WebCore/css/DOMWindowCSS.cpp
+       Source/WebCore/css/DOMWindowCSS.h
+       Source/WebCore/dom/ChildListMutationScope.cpp
+       Source/WebCore/dom/ChildListMutationScope.h
+       Source/WebCore/dom/ClassNodeList.cpp
+       Source/WebCore/dom/ClassNodeList.h
+       Source/WebCore/dom/CrossThreadTask.h
+       Source/WebCore/dom/CurrentScriptIncrementer.h
+       Source/WebCore/dom/DOMCoreException.cpp
+       Source/WebCore/dom/DOMCoreException.h
+       Source/WebCore/dom/DOMTimeStamp.h
+       Source/WebCore/dom/DataTransferItem.cpp
+       Source/WebCore/dom/DataTransferItem.h
+       Source/WebCore/dom/DataTransferItemList.h
+       Source/WebCore/dom/DocumentMarker.cpp
+       Source/WebCore/dom/DocumentOrderedMap.cpp
+       Source/WebCore/dom/DocumentOrderedMap.h
+       Source/WebCore/dom/ElementRareData.cpp
+       Source/WebCore/dom/ErrorEvent.cpp
+       Source/WebCore/dom/ErrorEvent.h
+       Source/WebCore/dom/EventException.cpp
+       Source/WebCore/dom/EventException.h
+       Source/WebCore/dom/ExceptionBase.cpp
+       Source/WebCore/dom/ExceptionBase.h
+       Source/WebCore/dom/ExceptionCodePlaceholder.cpp
+       Source/WebCore/dom/ExceptionCodePlaceholder.h
+       Source/WebCore/dom/IconURL.cpp
+       Source/WebCore/dom/IconURL.h
+       Source/WebCore/dom/MessagePortChannel.cpp
+       Source/WebCore/dom/MessagePortChannel.h
+       Source/WebCore/dom/MutationCallback.h
+       Source/WebCore/dom/MutationObserver.cpp
+       Source/WebCore/dom/MutationObserver.h
+       Source/WebCore/dom/MutationObserverInterestGroup.cpp
+       Source/WebCore/dom/MutationObserverInterestGroup.h
+       Source/WebCore/dom/MutationObserverRegistration.cpp
+       Source/WebCore/dom/MutationObserverRegistration.h
+       Source/WebCore/dom/MutationRecord.cpp
+       Source/WebCore/dom/MutationRecord.h
+       Source/WebCore/dom/NodeRareData.cpp
+       Source/WebCore/dom/NodeRenderingTraversal.cpp
+       Source/WebCore/dom/NodeRenderingTraversal.h
+       Source/WebCore/dom/PseudoElement.cpp
+       Source/WebCore/dom/PseudoElement.h
+       Source/WebCore/dom/RangeException.cpp
+       Source/WebCore/dom/RenderedDocumentMarker.h
+       Source/WebCore/dom/RequestAnimationFrameCallback.h
+       Source/WebCore/dom/ScopedEventQueue.cpp
+       Source/WebCore/dom/ScopedEventQueue.h
+       Source/WebCore/dom/ShadowRoot.cpp
+       Source/WebCore/dom/ShadowRoot.h
+       Source/WebCore/dom/StaticNodeList.cpp
+       Source/WebCore/dom/StaticNodeList.h
+       Source/WebCore/dom/StringCallback.cpp
+       Source/WebCore/dom/StringCallback.h
+       Source/WebCore/dom/TemplateContentDocumentFragment.h
+       Source/WebCore/dom/TreeDepthLimit.h
+       Source/WebCore/dom/UserActionElementSet.cpp
+       Source/WebCore/dom/UserActionElementSet.h
+       Source/WebCore/dom/default/*
+       Source/WebCore/dom/make_dom_exceptions.pl
+       Source/WebCore/dom/make_event_factory.pl
+       Source/WebCore/dom/make_names.pl
+       Source/WebCore/editing/ApplyBlockElementCommand.h
+       Source/WebCore/editing/EditingStyle.h
+       Source/WebCore/editing/RenderedPosition.cpp
+       Source/WebCore/editing/RenderedPosition.h
+       Source/WebCore/editing/ReplaceNodeWithSpanCommand.cpp
+       Source/WebCore/editing/ReplaceNodeWithSpanCommand.h
+       Source/WebCore/editing/SmartReplace.cpp
+       Source/WebCore/editing/SmartReplace.h
+       Source/WebCore/editing/SmartReplaceCF.cpp
+       Source/WebCore/editing/SurroundingText.cpp
+       Source/WebCore/editing/SurroundingText.h
+       Source/WebCore/editing/UndoStep.h
+       Source/WebCore/extract-localizable-strings.pl
+       Source/WebCore/fileapi/*
+       Source/WebCore/history/CachedFramePlatformData.h
+       Source/WebCore/html/BaseButtonInputType.cpp
+       Source/WebCore/html/BaseButtonInputType.h
+       Source/WebCore/html/BaseCheckableInputType.cpp
+       Source/WebCore/html/BaseCheckableInputType.h
+       Source/WebCore/html/BaseClickableWithKeyInputType.cpp
+       Source/WebCore/html/BaseClickableWithKeyInputType.h
+       Source/WebCore/html/BaseDateAndTimeInputType.cpp
+       Source/WebCore/html/BaseDateAndTimeInputType.h
+       Source/WebCore/html/BaseTextInputType.h
+       Source/WebCore/html/ButtonInputType.cpp
+       Source/WebCore/html/ButtonInputType.h
+       Source/WebCore/html/CheckboxInputType.cpp
+       Source/WebCore/html/CheckboxInputType.h
+       Source/WebCore/html/ColorInputType.cpp
+       Source/WebCore/html/ColorInputType.h
+       Source/WebCore/html/DOMFormData.cpp
+       Source/WebCore/html/DOMFormData.h
+       Source/WebCore/html/DateInputType.cpp
+       Source/WebCore/html/DateInputType.h
+       Source/WebCore/html/DateTimeInputType.cpp
+       Source/WebCore/html/DateTimeInputType.h
+       Source/WebCore/html/DateTimeLocalInputType.cpp
+       Source/WebCore/html/DateTimeLocalInputType.h
+       Source/WebCore/html/EmailInputType.h
+       Source/WebCore/html/FileInputType.h
+       Source/WebCore/html/HTMLDataListElement.cpp
+       Source/WebCore/html/HTMLDataListElement.h
+       Source/WebCore/html/HTMLElementsAllInOne.cpp
+       Source/WebCore/html/HTMLOutputElement.cpp
+       Source/WebCore/html/HTMLOutputElement.h
+       Source/WebCore/html/HTMLTableRowsCollection.cpp
+       Source/WebCore/html/HTMLTableRowsCollection.h
+       Source/WebCore/html/HTMLTemplateElement.cpp
+       Source/WebCore/html/HTMLTemplateElement.h
+       Source/WebCore/html/HTMLUnknownElement.h
+       Source/WebCore/html/HiddenInputType.cpp
+       Source/WebCore/html/HiddenInputType.h
+       Source/WebCore/html/ImageData.cpp
+       Source/WebCore/html/ImageData.h
+       Source/WebCore/html/ImageInputType.h
+       Source/WebCore/html/InputType.h
+       Source/WebCore/html/LabelableElement.h
+       Source/WebCore/html/LinkRelAttribute.cpp
+       Source/WebCore/html/LinkRelAttribute.h
+       Source/WebCore/html/MonthInputType.cpp
+       Source/WebCore/html/MonthInputType.h
+       Source/WebCore/html/NumberInputType.cpp
+       Source/WebCore/html/NumberInputType.h
+       Source/WebCore/html/PasswordInputType.cpp
+       Source/WebCore/html/PasswordInputType.h
+       Source/WebCore/html/RadioInputType.h
+       Source/WebCore/html/RangeInputType.cpp
+       Source/WebCore/html/RangeInputType.h
+       Source/WebCore/html/ResetInputType.cpp
+       Source/WebCore/html/ResetInputType.h
+       Source/WebCore/html/SearchInputType.cpp
+       Source/WebCore/html/SearchInputType.h
+       Source/WebCore/html/SubmitInputType.cpp
+       Source/WebCore/html/SubmitInputType.h
+       Source/WebCore/html/TelephoneInputType.cpp
+       Source/WebCore/html/TelephoneInputType.h
+       Source/WebCore/html/TextFieldInputType.cpp
+       Source/WebCore/html/TextFieldInputType.h
+       Source/WebCore/html/TextInputType.cpp
+       Source/WebCore/html/TextInputType.h
+       Source/WebCore/html/TimeInputType.cpp
+       Source/WebCore/html/TimeInputType.h
+       Source/WebCore/html/URLInputType.cpp
+       Source/WebCore/html/URLInputType.h
+       Source/WebCore/html/URLRegistry.h
+       Source/WebCore/html/ValidationMessage.cpp
+       Source/WebCore/html/ValidationMessage.h
+       Source/WebCore/html/WeekInputType.cpp
+       Source/WebCore/html/WeekInputType.h
+       Source/WebCore/html/forms/*
+       Source/WebCore/html/parser/HTMLSrcsetParser.cpp
+       Source/WebCore/html/parser/HTMLSrcsetParser.h
+       Source/WebCore/html/parser/ParsingUtilities.h
+       Source/WebCore/html/shadow/*
+       Source/WebCore/html/track/AudioTrack.cpp
+       Source/WebCore/html/track/BufferedLineReader.cpp
+       Source/WebCore/html/track/BufferedLineReader.h
+       Source/WebCore/html/track/TextTrack.cpp
+       Source/WebCore/html/track/TextTrackCue.cpp
+       Source/WebCore/html/track/TextTrackCue.h
+       Source/WebCore/html/track/VTTCue.cpp
+       Source/WebCore/html/track/VTTCue.h
+       Source/WebCore/html/track/VTTRegion.cpp
+       Source/WebCore/html/track/VTTRegion.h
+       Source/WebCore/html/track/VTTScanner.cpp
+       Source/WebCore/html/track/VTTScanner.h
+       Source/WebCore/html/track/VideoTrack.cpp
+       Source/WebCore/html/track/WebVTTParser.cpp
+       Source/WebCore/html/track/WebVTTParser.h
+       Source/WebCore/html/track/WebVTTToken.h
+       Source/WebCore/html/track/WebVTTTokenizer.cpp
+       Source/WebCore/html/track/WebVTTTokenizer.h
+       Source/WebCore/inspector/*
+       Source/WebCore/loader/*
+       Source/WebCore/loader/appcache/ApplicationCacheHost.h
+       Source/WebCore/loader/archive/*
+       Source/WebCore/loader/archive/mhtml/*
+       Source/WebCore/loader/icon/*
+       Source/WebCore/make-file-arrays.py
+       Source/WebCore/page/BarProp.cpp
+       Source/WebCore/page/BarProp.h
+       Source/WebCore/page/ContextMenuProvider.h
+       Source/WebCore/page/Crypto.cpp
+       Source/WebCore/page/Crypto.h
+       Source/WebCore/page/DOMSelection.cpp
+       Source/WebCore/page/DOMSelection.h
+       Source/WebCore/page/EventSource.cpp
+       Source/WebCore/page/EventSource.h
+       Source/WebCore/page/GestureTapHighlighter.cpp
+       Source/WebCore/page/GestureTapHighlighter.h
+       Source/WebCore/page/Location.cpp
+       Source/WebCore/page/Location.h
+       Source/WebCore/page/OriginAccessEntry.cpp
+       Source/WebCore/page/OriginAccessEntry.h
+       Source/WebCore/page/PageConsoleClient.cpp
+       Source/WebCore/page/PageConsoleClient.h
+       Source/WebCore/page/PageSerializer.cpp
+       Source/WebCore/page/PageVisibilityState.cpp
+       Source/WebCore/page/PageVisibilityState.h
+       Source/WebCore/page/Performance.cpp
+       Source/WebCore/page/Performance.h
+       Source/WebCore/page/PerformanceEntry.cpp
+       Source/WebCore/page/PerformanceEntry.h
+       Source/WebCore/page/PerformanceEntryList.cpp
+       Source/WebCore/page/PerformanceEntryList.h
+       Source/WebCore/page/PerformanceNavigation.cpp
+       Source/WebCore/page/PerformanceNavigation.h
+       Source/WebCore/page/PerformanceResourceTiming.cpp
+       Source/WebCore/page/PerformanceResourceTiming.h
+       Source/WebCore/page/PerformanceTiming.cpp
+       Source/WebCore/page/PerformanceTiming.h
+       Source/WebCore/page/Screen.cpp
+       Source/WebCore/page/Screen.h
+       Source/WebCore/page/SecurityOrigin.cpp
+       Source/WebCore/page/SecurityOrigin.h
+       Source/WebCore/page/SecurityOriginHash.h
+       Source/WebCore/page/SecurityPolicy.cpp
+       Source/WebCore/page/SecurityPolicy.h
+       Source/WebCore/page/WindowFeatures.h
+       Source/WebCore/page/animation/*
+       Source/WebCore/platform/CalculationValue.cpp
+       Source/WebCore/platform/CalculationValue.h
+       Source/WebCore/platform/ColorChooser.h
+       Source/WebCore/platform/ColorChooserClient.h
+       Source/WebCore/platform/CrossThreadCopier.cpp
+       Source/WebCore/platform/CrossThreadCopier.h
+       Source/WebCore/platform/DateComponents.cpp
+       Source/WebCore/platform/DateComponents.h
+       Source/WebCore/platform/DateTimeChooser.h
+       Source/WebCore/platform/DateTimeChooserClient.h
+       Source/WebCore/platform/Decimal.cpp
+       Source/WebCore/platform/Decimal.h
+       Source/WebCore/platform/FileChooser.cpp
+       Source/WebCore/platform/FileChooser.h
+       Source/WebCore/platform/FileMetadata.h
+       Source/WebCore/platform/FileStream.cpp
+       Source/WebCore/platform/FileStream.h
+       Source/WebCore/platform/FileStreamClient.h
+       Source/WebCore/platform/FileSystem.h
+       Source/WebCore/platform/FloatConversion.h
+       Source/WebCore/platform/LayoutUnit.h
+       Source/WebCore/platform/LengthBox.cpp
+       Source/WebCore/platform/MainThreadTask.h
+       Source/WebCore/platform/ReferrerPolicy.h
+       Source/WebCore/platform/ScrollAnimator.cpp
+       Source/WebCore/platform/ScrollAnimator.h
+       Source/WebCore/platform/ScrollAnimatorNone.cpp
+       Source/WebCore/platform/ScrollAnimatorNone.h
+       Source/WebCore/platform/ScrollableArea.cpp
+       Source/WebCore/platform/SharedBufferChunkReader.cpp
+       Source/WebCore/platform/SharedBufferChunkReader.h
+       Source/WebCore/platform/UUID.cpp
+       Source/WebCore/platform/UUID.h
+       Source/WebCore/platform/audio/*
+       Source/WebCore/platform/graphics/FloatQuad.cpp
+       Source/WebCore/platform/graphics/FloatQuad.h
+       Source/WebCore/platform/graphics/FontCache.cpp
+       Source/WebCore/platform/graphics/FontCache.h
+       Source/WebCore/platform/graphics/FontDescription.cpp
+       Source/WebCore/platform/graphics/FontGlyphs.cpp
+       Source/WebCore/platform/graphics/GeneratedImage.cpp
+       Source/WebCore/platform/graphics/Glyph.h
+       Source/WebCore/platform/graphics/GlyphBuffer.h
+       Source/WebCore/platform/graphics/GlyphMetricsMap.h
+       Source/WebCore/platform/graphics/GlyphPage.h
+       Source/WebCore/platform/graphics/GlyphPageTreeNode.cpp
+       Source/WebCore/platform/graphics/GlyphPageTreeNode.h
+       Source/WebCore/platform/graphics/LayoutBoxExtent.cpp
+       Source/WebCore/platform/graphics/LayoutBoxExtent.h
+       Source/WebCore/platform/graphics/LayoutPoint.h
+       Source/WebCore/platform/graphics/LayoutRect.cpp
+       Source/WebCore/platform/graphics/LayoutRect.h
+       Source/WebCore/platform/graphics/LayoutSize.h
+       Source/WebCore/platform/graphics/MediaSourcePrivate.h
+       Source/WebCore/platform/graphics/SimpleFontData.cpp
+       Source/WebCore/platform/graphics/SourceBufferPrivate.h
+       Source/WebCore/platform/graphics/StringTruncator.cpp
+       Source/WebCore/platform/graphics/StringTruncator.h
+       Source/WebCore/platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp
+       Source/WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp
+       Source/WebCore/platform/graphics/gpu/*
+       Source/WebCore/platform/graphics/gstreamer/MediaSourceGStreamer.cpp
+       Source/WebCore/platform/graphics/gstreamer/MediaSourceGStreamer.h
+       Source/WebCore/platform/graphics/gstreamer/SourceBufferPrivateGStreamer.cpp
+       Source/WebCore/platform/graphics/gstreamer/SourceBufferPrivateGStreamer.h
+       Source/WebCore/platform/graphics/gtk/IconGtk.cpp
+       Source/WebCore/platform/graphics/harfbuzz/*
+       Source/WebCore/platform/image-decoders/bmp/*
+       Source/WebCore/platform/image-decoders/ico/*
+       Source/WebCore/platform/image-decoders/webp/*
+       Source/WebCore/platform/image-encoders/PNGImageEncoder.cpp
+       Source/WebCore/platform/mediastream/*
+       Source/WebCore/platform/mediastream/gstreamer/*
+       Source/WebCore/platform/mock/GeolocationClientMock.cpp
+       Source/WebCore/platform/mock/GeolocationClientMock.h
+       Source/WebCore/platform/network/BlobData.cpp
+       Source/WebCore/platform/network/BlobData.h
+       Source/WebCore/platform/network/BlobRegistry.h
+       Source/WebCore/platform/network/BlobRegistryImpl.cpp
+       Source/WebCore/platform/network/BlobRegistryImpl.h
+       Source/WebCore/platform/network/BlobResourceHandle.cpp
+       Source/WebCore/platform/network/BlobResourceHandle.h
+       Source/WebCore/platform/network/HTTPHeaderMap.cpp
+       Source/WebCore/platform/network/HTTPParsers.cpp
+       Source/WebCore/platform/network/HTTPParsers.h
+       Source/WebCore/platform/network/MIMEHeader.cpp
+       Source/WebCore/platform/network/MIMEHeader.h
+       Source/WebCore/platform/network/ParsedContentType.cpp
+       Source/WebCore/platform/network/ParsedContentType.h
+       Source/WebCore/platform/network/SocketStreamErrorBase.cpp
+       Source/WebCore/platform/network/SocketStreamErrorBase.h
+       Source/WebCore/platform/network/SocketStreamHandleBase.cpp
+       Source/WebCore/platform/network/SocketStreamHandleBase.h
+       Source/WebCore/platform/network/SocketStreamHandleClient.h
+       Source/WebCore/platform/network/soup/SocketStreamError.h
+       Source/WebCore/platform/network/soup/SocketStreamHandle.h
+       Source/WebCore/platform/network/soup/SocketStreamHandleSoup.cpp
+       Source/WebCore/platform/posix/FileSystemPOSIX.cpp
+       Source/WebCore/platform/sql/SQLValue.cpp
+       Source/WebCore/platform/sql/SQLValue.h
+       Source/WebCore/platform/sql/SQLiteAuthorizer.cpp
+       Source/WebCore/platform/sql/SQLiteFileSystem.cpp
+       Source/WebCore/platform/sql/SQLiteFileSystem.h
+       Source/WebCore/platform/text/DecodeEscapeSequences.h
+       Source/WebCore/platform/text/LineEnding.cpp
+       Source/WebCore/platform/text/LineEnding.h
+       Source/WebCore/platform/text/LocaleICU.cpp
+       Source/WebCore/platform/text/LocaleICU.h
+       Source/WebCore/platform/text/LocaleToScriptMapping.h
+       Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp
+       Source/WebCore/platform/text/LocaleToScriptMappingICU.cpp
+       Source/WebCore/platform/text/PlatformLocale.cpp
+       Source/WebCore/platform/text/QuotedPrintable.cpp
+       Source/WebCore/platform/text/QuotedPrintable.h
+       Source/WebCore/platform/text/StringWithDirection.h
+       Source/WebCore/platform/text/TextChecking.h
+       Source/WebCore/platform/text/TextEncodingDetector.h
+       Source/WebCore/platform/text/TextEncodingDetectorICU.cpp
+       Source/WebCore/platform/text/TextEncodingDetectorNone.cpp
+       Source/WebCore/platform/text/WritingMode.h
+       Source/WebCore/plugins/PluginQuirkSet.h
+       Source/WebCore/plugins/npruntime.h
+       Source/WebCore/rendering/OrderIterator.cpp
+       Source/WebCore/rendering/OrderIterator.h
+       Source/WebCore/rendering/RenderFlexibleBox.cpp
+       Source/WebCore/rendering/RenderFlexibleBox.h
+       Source/WebCore/rendering/RenderLineBoxList.cpp
+       Source/WebCore/rendering/RenderLineBoxList.h
+       Source/WebCore/rendering/RenderListBox.cpp
+       Source/WebCore/rendering/RenderListBox.h
+       Source/WebCore/rendering/RenderMultiColumnSpannerPlaceholder.cpp
+       Source/WebCore/rendering/RenderMultiColumnSpannerPlaceholder.h
+       Source/WebCore/rendering/RenderReplica.cpp
+       Source/WebCore/rendering/RenderReplica.h
+       Source/WebCore/rendering/RenderRuby.cpp
+       Source/WebCore/rendering/RenderRuby.h
+       Source/WebCore/rendering/RenderRubyBase.cpp
+       Source/WebCore/rendering/RenderRubyBase.h
+       Source/WebCore/rendering/RenderRubyRun.cpp
+       Source/WebCore/rendering/RenderRubyRun.h
+       Source/WebCore/rendering/RenderRubyText.cpp
+       Source/WebCore/rendering/RenderRubyText.h
+       Source/WebCore/rendering/style/GridCoordinate.h
+       Source/WebCore/rendering/style/GridLength.h
+       Source/WebCore/rendering/style/GridPosition.h
+       Source/WebCore/rendering/style/GridResolvedPosition.cpp
+       Source/WebCore/rendering/style/GridResolvedPosition.h
+       Source/WebCore/rendering/style/GridTrackSize.h
+       Source/WebCore/rendering/style/StyleGridItemData.cpp
+       Source/WebCore/rendering/style/StyleGridItemData.h
+       Source/WebCore/rendering/svg/RenderSVGModelObject.cpp
+       Source/WebCore/rendering/svg/RenderSVGModelObject.h
+       Source/WebCore/storage/StorageEventDispatcher.h
+       Source/WebCore/svg/SVGException.cpp
+       Source/WebCore/svg/graphics/SVGImageChromeClient.h
+       Source/WebCore/testing/MemoryInfo.h
+       Source/WebCore/workers/*
+       Source/WebCore/xml/XMLHttpRequestException.cpp
+       Source/WebCore/xml/XMLHttpRequestException.h
+       Source/WebCore/xml/XPathException.cpp
+       Source/WebCore/xml/XPathException.h
+       Source/WebCore/xml/XSLTUnicodeSort.cpp
+       Source/WebCore/xml/XSLTUnicodeSort.h
+       Source/WebKit/scripts/*
+       Source/WebKit2/Shared/APIObject.cpp
+       Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp
+       Source/WebKit2/UIProcess/API/gtk/WebKitSettings.h
+       Source/WebKit2/UIProcess/InspectorServer/HTTPRequest.h
+       Source/WebKit2/UIProcess/gtk/ExperimentalFeatures.cpp
+       Source/WebKit2/UIProcess/gtk/ExperimentalFeatures.h
+       Tools/DumpRenderTree/*
+       Tools/DumpRenderTree/cairo/*
+       Tools/ImageDiff/gtk/*
+       Tools/Scripts/*
+       Tools/TestWebKitAPI/Tests/WTF/MediaTime.cpp
+       Tools/TestWebKitAPI/Tests/WTF/MetaAllocator.cpp
+       Tools/TestWebKitAPI/Tests/WTF/RedBlackTree.cpp
+       Tools/TestWebKitAPI/Tests/WTF/SHA1.cpp
+       Tools/TestWebKitAPI/Tests/WTF/SaturatedArithmeticOperations.cpp
+       Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp
+       Tools/TestWebKitAPI/Tests/WebCore/LayoutUnit.cpp
+       Tools/TestWebKitAPI/Tests/WebCore/TimeRanges.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp
+       Tools/TestWebKitAPI/WTFStringUtilities.h
+       Tools/WebKitTestRunner/CyclicRedundancyCheck.cpp
+       Tools/WebKitTestRunner/CyclicRedundancyCheck.h
+       Tools/WebKitTestRunner/InjectedBundle/gtk/*
+       Tools/WebKitTestRunner/PixelDumpSupport.cpp
+       Tools/WebKitTestRunner/PixelDumpSupport.h
+       Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp
+Copyright: © 2002-2014 Apple Inc. and others
+License: BSD-3-clause
+
+Files: Source/WTF/wtf/Atomics.cpp
+       Source/WTF/wtf/Atomics.h
+       Source/WTF/wtf/ThreadSafeRefCounted.h
+       Source/WTF/wtf/Threading.h
+Copyright: © 2002-2014 Apple Inc. and others
+License: BSD-3-clause and BSL
+
+Files: Source/JavaScriptCore/inspector/scripts/jsmin.py
+       Source/ThirdParty/ANGLE/include/EGL/*
+       Source/ThirdParty/ANGLE/include/GLES3/gl3.h
+       Source/ThirdParty/ANGLE/include/KHR/*
+       Source/WebInspectorUI/Scripts/jsmin.py
+Copyright: © 2007-2009 The Khronos Group Inc.
+           © 2013 Dave St.Germain
+License: Expat
+
+Files: Source/ThirdParty/ANGLE/src/compiler/preprocessor/ExpressionParser.cpp
+       Source/ThirdParty/ANGLE/src/compiler/translator/glslang_tab.cpp
+       Source/ThirdParty/ANGLE/src/compiler/translator/glslang_tab.h
+Copyright: © 2002-2014 Apple Inc. and others
+License: GPL-3+
+
+Files: Source/WTF/wtf/CryptographicallyRandomNumber.cpp
+Copyright: © 1996 David Mazieres <dm@uun.org>
+           © 2008 Damien Miller <djm@openbsd.org>
+License: ISC
+
+Files: Source/WTF/wtf/text/Base64.cpp
+Copyright: © 2002-2014 Apple Inc. and others
+License: LGPL-2
+
+Files: Documentation/*
+       Source/JavaScriptCore/*
+       Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
+       Source/JavaScriptCore/debugger/Debugger.cpp
+       Source/JavaScriptCore/debugger/Debugger.h
+       Source/JavaScriptCore/heap/Heap.cpp
+       Source/JavaScriptCore/heap/Heap.h
+       Source/JavaScriptCore/heap/ListableHandler.h
+       Source/JavaScriptCore/heap/MachineStackMarker.cpp
+       Source/JavaScriptCore/heap/MachineStackMarker.h
+       Source/JavaScriptCore/heap/MarkedBlock.h
+       Source/JavaScriptCore/heap/MarkedSpace.cpp
+       Source/JavaScriptCore/heap/MarkedSpace.h
+       Source/JavaScriptCore/heap/WeakReferenceHarvester.h
+       Source/JavaScriptCore/interpreter/CallFrame.h
+       Source/JavaScriptCore/parser/Lexer.cpp
+       Source/JavaScriptCore/parser/Lexer.h
+       Source/JavaScriptCore/parser/NodeConstructors.h
+       Source/JavaScriptCore/parser/NodeInfo.h
+       Source/JavaScriptCore/parser/Nodes.cpp
+       Source/JavaScriptCore/parser/Nodes.h
+       Source/JavaScriptCore/parser/Parser.cpp
+       Source/JavaScriptCore/parser/Parser.h
+       Source/JavaScriptCore/runtime/ArgList.cpp
+       Source/JavaScriptCore/runtime/ArgList.h
+       Source/JavaScriptCore/runtime/Arguments.cpp
+       Source/JavaScriptCore/runtime/Arguments.h
+       Source/JavaScriptCore/runtime/ArrayConstructor.cpp
+       Source/JavaScriptCore/runtime/ArrayConstructor.h
+       Source/JavaScriptCore/runtime/ArrayConventions.h
+       Source/JavaScriptCore/runtime/ArrayPrototype.cpp
+       Source/JavaScriptCore/runtime/ArrayPrototype.h
+       Source/JavaScriptCore/runtime/BooleanConstructor.cpp
+       Source/JavaScriptCore/runtime/BooleanConstructor.h
+       Source/JavaScriptCore/runtime/BooleanObject.cpp
+       Source/JavaScriptCore/runtime/BooleanObject.h
+       Source/JavaScriptCore/runtime/BooleanPrototype.cpp
+       Source/JavaScriptCore/runtime/BooleanPrototype.h
+       Source/JavaScriptCore/runtime/ClassInfo.h
+       Source/JavaScriptCore/runtime/CommonIdentifiers.cpp
+       Source/JavaScriptCore/runtime/CommonIdentifiers.h
+       Source/JavaScriptCore/runtime/Completion.cpp
+       Source/JavaScriptCore/runtime/Completion.h
+       Source/JavaScriptCore/runtime/DateConstructor.cpp
+       Source/JavaScriptCore/runtime/DateConstructor.h
+       Source/JavaScriptCore/runtime/DateInstance.cpp
+       Source/JavaScriptCore/runtime/DateInstance.h
+       Source/JavaScriptCore/runtime/DatePrototype.cpp
+       Source/JavaScriptCore/runtime/DatePrototype.h
+       Source/JavaScriptCore/runtime/Error.cpp
+       Source/JavaScriptCore/runtime/Error.h
+       Source/JavaScriptCore/runtime/ErrorConstructor.cpp
+       Source/JavaScriptCore/runtime/ErrorConstructor.h
+       Source/JavaScriptCore/runtime/ErrorInstance.cpp
+       Source/JavaScriptCore/runtime/ErrorInstance.h
+       Source/JavaScriptCore/runtime/ErrorPrototype.cpp
+       Source/JavaScriptCore/runtime/ErrorPrototype.h
+       Source/JavaScriptCore/runtime/FunctionConstructor.cpp
+       Source/JavaScriptCore/runtime/FunctionConstructor.h
+       Source/JavaScriptCore/runtime/FunctionPrototype.cpp
+       Source/JavaScriptCore/runtime/FunctionPrototype.h
+       Source/JavaScriptCore/runtime/GetterSetter.cpp
+       Source/JavaScriptCore/runtime/GetterSetter.h
+       Source/JavaScriptCore/runtime/Identifier.cpp
+       Source/JavaScriptCore/runtime/Identifier.h
+       Source/JavaScriptCore/runtime/InternalFunction.cpp
+       Source/JavaScriptCore/runtime/InternalFunction.h
+       Source/JavaScriptCore/runtime/JSAPIValueWrapper.cpp
+       Source/JavaScriptCore/runtime/JSAPIValueWrapper.h
+       Source/JavaScriptCore/runtime/JSArray.cpp
+       Source/JavaScriptCore/runtime/JSArray.h
+       Source/JavaScriptCore/runtime/JSCJSValue.cpp
+       Source/JavaScriptCore/runtime/JSCJSValue.h
+       Source/JavaScriptCore/runtime/JSCell.cpp
+       Source/JavaScriptCore/runtime/JSCell.h
+       Source/JavaScriptCore/runtime/JSFunction.cpp
+       Source/JavaScriptCore/runtime/JSFunction.h
+       Source/JavaScriptCore/runtime/JSGlobalObject.h
+       Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
+       Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.h
+       Source/JavaScriptCore/runtime/JSLock.cpp
+       Source/JavaScriptCore/runtime/JSLock.h
+       Source/JavaScriptCore/runtime/JSObject.cpp
+       Source/JavaScriptCore/runtime/JSObject.h
+       Source/JavaScriptCore/runtime/JSString.cpp
+       Source/JavaScriptCore/runtime/JSString.h
+       Source/JavaScriptCore/runtime/JSType.h
+       Source/JavaScriptCore/runtime/JSWrapperObject.cpp
+       Source/JavaScriptCore/runtime/JSWrapperObject.h
+       Source/JavaScriptCore/runtime/Lookup.cpp
+       Source/JavaScriptCore/runtime/Lookup.h
+       Source/JavaScriptCore/runtime/MathObject.cpp
+       Source/JavaScriptCore/runtime/MathObject.h
+       Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp
+       Source/JavaScriptCore/runtime/NativeErrorConstructor.h
+       Source/JavaScriptCore/runtime/NativeErrorPrototype.cpp
+       Source/JavaScriptCore/runtime/NativeErrorPrototype.h
+       Source/JavaScriptCore/runtime/NumberConstructor.cpp
+       Source/JavaScriptCore/runtime/NumberConstructor.h
+       Source/JavaScriptCore/runtime/NumberObject.cpp
+       Source/JavaScriptCore/runtime/NumberObject.h
+       Source/JavaScriptCore/runtime/NumberPrototype.cpp
+       Source/JavaScriptCore/runtime/NumberPrototype.h
+       Source/JavaScriptCore/runtime/ObjectConstructor.cpp
+       Source/JavaScriptCore/runtime/ObjectConstructor.h
+       Source/JavaScriptCore/runtime/ObjectPrototype.cpp
+       Source/JavaScriptCore/runtime/ObjectPrototype.h
+       Source/JavaScriptCore/runtime/Operations.cpp
+       Source/JavaScriptCore/runtime/Operations.h
+       Source/JavaScriptCore/runtime/PropertyMapHashTable.h
+       Source/JavaScriptCore/runtime/PropertyNameArray.cpp
+       Source/JavaScriptCore/runtime/PropertyNameArray.h
+       Source/JavaScriptCore/runtime/PropertySlot.cpp
+       Source/JavaScriptCore/runtime/PropertySlot.h
+       Source/JavaScriptCore/runtime/Protect.h
+       Source/JavaScriptCore/runtime/RegExp.cpp
+       Source/JavaScriptCore/runtime/RegExp.h
+       Source/JavaScriptCore/runtime/RegExpConstructor.cpp
+       Source/JavaScriptCore/runtime/RegExpConstructor.h
+       Source/JavaScriptCore/runtime/RegExpMatchesArray.h
+       Source/JavaScriptCore/runtime/RegExpObject.cpp
+       Source/JavaScriptCore/runtime/RegExpObject.h
+       Source/JavaScriptCore/runtime/RegExpPrototype.cpp
+       Source/JavaScriptCore/runtime/RegExpPrototype.h
+       Source/JavaScriptCore/runtime/StringConstructor.cpp
+       Source/JavaScriptCore/runtime/StringConstructor.h
+       Source/JavaScriptCore/runtime/StringObject.cpp
+       Source/JavaScriptCore/runtime/StringObject.h
+       Source/JavaScriptCore/runtime/StringPrototype.cpp
+       Source/JavaScriptCore/runtime/StringPrototype.h
+       Source/JavaScriptCore/runtime/StringRecursionChecker.cpp
+       Source/JavaScriptCore/runtime/StringRecursionChecker.h
+       Source/WTF/*
+       Source/WTF/wtf/Bitmap.h
+       Source/WTF/wtf/FastMalloc.h
+       Source/WTF/wtf/Forward.h
+       Source/WTF/wtf/GetPtr.h
+       Source/WTF/wtf/HashCountedSet.h
+       Source/WTF/wtf/HashFunctions.h
+       Source/WTF/wtf/HashMap.h
+       Source/WTF/wtf/HashSet.h
+       Source/WTF/wtf/HashTable.cpp
+       Source/WTF/wtf/HashTable.h
+       Source/WTF/wtf/HashTraits.h
+       Source/WTF/wtf/HexNumber.h
+       Source/WTF/wtf/ListHashSet.h
+       Source/WTF/wtf/Noncopyable.h
+       Source/WTF/wtf/NumberOfCores.h
+       Source/WTF/wtf/OwnPtr.h
+       Source/WTF/wtf/PassRef.h
+       Source/WTF/wtf/PassRefPtr.h
+       Source/WTF/wtf/RefCounted.h
+       Source/WTF/wtf/RefCountedLeakCounter.cpp
+       Source/WTF/wtf/RefCountedLeakCounter.h
+       Source/WTF/wtf/RefPtr.h
+       Source/WTF/wtf/RefPtrHashMap.h
+       Source/WTF/wtf/RetainPtr.h
+       Source/WTF/wtf/StackBounds.cpp
+       Source/WTF/wtf/StaticConstructors.h
+       Source/WTF/wtf/StringHasher.h
+       Source/WTF/wtf/ThreadSpecificWin.cpp
+       Source/WTF/wtf/Vector.h
+       Source/WTF/wtf/VectorTraits.h
+       Source/WTF/wtf/dtoa.h
+       Source/WTF/wtf/gobject/*
+       Source/WTF/wtf/text/*
+       Source/WebCore/*
+       Source/WebCore/Modules/battery/*
+       Source/WebCore/Modules/geolocation/NavigatorGeolocation.cpp
+       Source/WebCore/Modules/geolocation/NavigatorGeolocation.h
+       Source/WebCore/Modules/mediastream/NavigatorUserMedia.cpp
+       Source/WebCore/Modules/mediastream/NavigatorUserMedia.h
+       Source/WebCore/Modules/proximity/DeviceProximityEvent.cpp
+       Source/WebCore/Modules/proximity/DeviceProximityEvent.h
+       Source/WebCore/Modules/vibration/*
+       Source/WebCore/Modules/websockets/WebSocketFrame.cpp
+       Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp
+       Source/WebCore/accessibility/AccessibilityProgressIndicator.h
+       Source/WebCore/accessibility/atk/*
+       Source/WebCore/bindings/gobject/*
+       Source/WebCore/bindings/js/DOMConstructorWithDocument.h
+       Source/WebCore/bindings/js/DOMWrapperWorld.cpp
+       Source/WebCore/bindings/js/DOMWrapperWorld.h
+       Source/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp
+       Source/WebCore/bindings/js/JSDOMBinding.cpp
+       Source/WebCore/bindings/js/JSDOMBinding.h
+       Source/WebCore/bindings/js/JSDOMMimeTypeArrayCustom.cpp
+       Source/WebCore/bindings/js/JSDOMPluginArrayCustom.cpp
+       Source/WebCore/bindings/js/JSDOMPluginCustom.cpp
+       Source/WebCore/bindings/js/JSDOMStringListCustom.cpp
+       Source/WebCore/bindings/js/JSDOMWindowBase.cpp
+       Source/WebCore/bindings/js/JSDOMWindowBase.h
+       Source/WebCore/bindings/js/JSDOMWindowCustom.cpp
+       Source/WebCore/bindings/js/JSDOMWindowCustom.h
+       Source/WebCore/bindings/js/JSDOMWrapper.h
+       Source/WebCore/bindings/js/JSDocumentCustom.cpp
+       Source/WebCore/bindings/js/JSEventListener.cpp
+       Source/WebCore/bindings/js/JSEventListener.h
+       Source/WebCore/bindings/js/JSHTMLCollectionCustom.cpp
+       Source/WebCore/bindings/js/JSHTMLFormControlsCollectionCustom.cpp
+       Source/WebCore/bindings/js/JSHTMLOptionsCollectionCustom.cpp
+       Source/WebCore/bindings/js/JSHTMLSelectElementCustom.cpp
+       Source/WebCore/bindings/js/JSImageConstructor.cpp
+       Source/WebCore/bindings/js/JSImageConstructor.h
+       Source/WebCore/bindings/js/JSLazyEventListener.cpp
+       Source/WebCore/bindings/js/JSLazyEventListener.h
+       Source/WebCore/bindings/js/JSLocationCustom.cpp
+       Source/WebCore/bindings/js/JSNodeFilterCondition.cpp
+       Source/WebCore/bindings/js/JSNodeFilterCondition.h
+       Source/WebCore/bindings/js/JSNodeIteratorCustom.cpp
+       Source/WebCore/bindings/js/JSPluginElementFunctions.cpp
+       Source/WebCore/bindings/js/JSPluginElementFunctions.h
+       Source/WebCore/bindings/js/JSSVGLengthCustom.cpp
+       Source/WebCore/bindings/js/JSSVGPathSegCustom.cpp
+       Source/WebCore/bindings/js/JSTreeWalkerCustom.cpp
+       Source/WebCore/bindings/js/ScheduledAction.cpp
+       Source/WebCore/bindings/js/ScheduledAction.h
+       Source/WebCore/bindings/js/ScriptController.cpp
+       Source/WebCore/bindings/js/ScriptController.h
+       Source/WebCore/bindings/js/WebCoreJSClientData.h
+       Source/WebCore/bindings/scripts/*
+       Source/WebCore/bridge/testbindings.cpp
+       Source/WebCore/css/*
+       Source/WebCore/dom/Attr.cpp
+       Source/WebCore/dom/Attr.h
+       Source/WebCore/dom/Attribute.h
+       Source/WebCore/dom/BeforeUnloadEvent.cpp
+       Source/WebCore/dom/BeforeUnloadEvent.h
+       Source/WebCore/dom/CDATASection.cpp
+       Source/WebCore/dom/CDATASection.h
+       Source/WebCore/dom/CharacterData.cpp
+       Source/WebCore/dom/CharacterData.h
+       Source/WebCore/dom/CheckedRadioButtons.cpp
+       Source/WebCore/dom/CheckedRadioButtons.h
+       Source/WebCore/dom/ChildNodeList.cpp
+       Source/WebCore/dom/ChildNodeList.h
+       Source/WebCore/dom/ClipboardEvent.cpp
+       Source/WebCore/dom/ClipboardEvent.h
+       Source/WebCore/dom/Comment.cpp
+       Source/WebCore/dom/Comment.h
+       Source/WebCore/dom/ContainerNode.cpp
+       Source/WebCore/dom/ContainerNode.h
+       Source/WebCore/dom/ContainerNodeAlgorithms.cpp
+       Source/WebCore/dom/ContainerNodeAlgorithms.h
+       Source/WebCore/dom/DOMImplementation.cpp
+       Source/WebCore/dom/DOMImplementation.h
+       Source/WebCore/dom/DataTransfer.h
+       Source/WebCore/dom/Document.cpp
+       Source/WebCore/dom/Document.h
+       Source/WebCore/dom/DocumentFragment.cpp
+       Source/WebCore/dom/DocumentFragment.h
+       Source/WebCore/dom/DocumentMarker.h
+       Source/WebCore/dom/DocumentMarkerController.cpp
+       Source/WebCore/dom/DocumentMarkerController.h
+       Source/WebCore/dom/DocumentParser.h
+       Source/WebCore/dom/DocumentStyleSheetCollection.cpp
+       Source/WebCore/dom/DocumentStyleSheetCollection.h
+       Source/WebCore/dom/DocumentType.cpp
+       Source/WebCore/dom/DocumentType.h
+       Source/WebCore/dom/Element.cpp
+       Source/WebCore/dom/Element.h
+       Source/WebCore/dom/ElementRareData.h
+       Source/WebCore/dom/ElementTraversal.h
+       Source/WebCore/dom/Entity.h
+       Source/WebCore/dom/EntityReference.cpp
+       Source/WebCore/dom/EntityReference.h
+       Source/WebCore/dom/Event.cpp
+       Source/WebCore/dom/Event.h
+       Source/WebCore/dom/EventDispatcher.cpp
+       Source/WebCore/dom/EventDispatcher.h
+       Source/WebCore/dom/EventListener.h
+       Source/WebCore/dom/EventNames.cpp
+       Source/WebCore/dom/EventNames.h
+       Source/WebCore/dom/ExceptionCode.h
+       Source/WebCore/dom/HashChangeEvent.h
+       Source/WebCore/dom/InlineStyleSheetOwner.cpp
+       Source/WebCore/dom/InlineStyleSheetOwner.h
+       Source/WebCore/dom/KeyboardEvent.cpp
+       Source/WebCore/dom/KeyboardEvent.h
+       Source/WebCore/dom/LiveNodeList.cpp
+       Source/WebCore/dom/LiveNodeList.h
+       Source/WebCore/dom/MouseEvent.cpp
+       Source/WebCore/dom/MouseEvent.h
+       Source/WebCore/dom/MouseRelatedEvent.cpp
+       Source/WebCore/dom/MouseRelatedEvent.h
+       Source/WebCore/dom/MutationEvent.cpp
+       Source/WebCore/dom/MutationEvent.h
+       Source/WebCore/dom/NameNodeList.cpp
+       Source/WebCore/dom/NameNodeList.h
+       Source/WebCore/dom/NamedNodeMap.cpp
+       Source/WebCore/dom/NamedNodeMap.h
+       Source/WebCore/dom/Node.cpp
+       Source/WebCore/dom/Node.h
+       Source/WebCore/dom/NodeFilter.cpp
+       Source/WebCore/dom/NodeFilter.h
+       Source/WebCore/dom/NodeFilterCondition.cpp
+       Source/WebCore/dom/NodeFilterCondition.h
+       Source/WebCore/dom/NodeIterator.cpp
+       Source/WebCore/dom/NodeIterator.h
+       Source/WebCore/dom/NodeList.h
+       Source/WebCore/dom/NodeRareData.h
+       Source/WebCore/dom/NodeRenderStyle.h
+       Source/WebCore/dom/NodeTraversal.cpp
+       Source/WebCore/dom/NodeTraversal.h
+       Source/WebCore/dom/Notation.cpp
+       Source/WebCore/dom/Notation.h
+       Source/WebCore/dom/ProcessingInstruction.cpp
+       Source/WebCore/dom/ProcessingInstruction.h
+       Source/WebCore/dom/QualifiedName.cpp
+       Source/WebCore/dom/QualifiedName.h
+       Source/WebCore/dom/Range.cpp
+       Source/WebCore/dom/Range.h
+       Source/WebCore/dom/RangeException.h
+       Source/WebCore/dom/RegisteredEventListener.cpp
+       Source/WebCore/dom/RegisteredEventListener.h
+       Source/WebCore/dom/ScriptElement.cpp
+       Source/WebCore/dom/ScriptElement.h
+       Source/WebCore/dom/SimulatedClickOptions.h
+       Source/WebCore/dom/SpaceSplitString.cpp
+       Source/WebCore/dom/SpaceSplitString.h
+       Source/WebCore/dom/StyledElement.cpp
+       Source/WebCore/dom/StyledElement.h
+       Source/WebCore/dom/TagNodeList.cpp
+       Source/WebCore/dom/TagNodeList.h
+       Source/WebCore/dom/Text.cpp
+       Source/WebCore/dom/Text.h
+       Source/WebCore/dom/TransformSource.h
+       Source/WebCore/dom/Traversal.cpp
+       Source/WebCore/dom/Traversal.h
+       Source/WebCore/dom/TreeScopeAdopter.cpp
+       Source/WebCore/dom/TreeScopeAdopter.h
+       Source/WebCore/dom/TreeWalker.cpp
+       Source/WebCore/dom/TreeWalker.h
+       Source/WebCore/dom/UIEvent.cpp
+       Source/WebCore/dom/UIEvent.h
+       Source/WebCore/dom/UIEventWithKeyState.cpp
+       Source/WebCore/dom/UIEventWithKeyState.h
+       Source/WebCore/dom/ViewportArguments.cpp
+       Source/WebCore/dom/ViewportArguments.h
+       Source/WebCore/dom/VisitedLinkState.cpp
+       Source/WebCore/dom/VisitedLinkState.h
+       Source/WebCore/dom/WheelEvent.cpp
+       Source/WebCore/dom/WheelEvent.h
+       Source/WebCore/editing/EditingBehavior.h
+       Source/WebCore/editing/EditingBehaviorTypes.h
+       Source/WebCore/editing/TextCheckingHelper.h
+       Source/WebCore/editing/atk/*
+       Source/WebCore/html/*
+       Source/WebCore/loader/FrameNetworkingContext.h
+       Source/WebCore/loader/ImageLoader.cpp
+       Source/WebCore/loader/ImageLoader.h
+       Source/WebCore/loader/ResourceLoadScheduler.cpp
+       Source/WebCore/loader/ResourceLoadScheduler.h
+       Source/WebCore/loader/TextResourceDecoder.cpp
+       Source/WebCore/loader/TextResourceDecoder.h
+       Source/WebCore/loader/cache/*
+       Source/WebCore/loader/soup/*
+       Source/WebCore/page/Chrome.cpp
+       Source/WebCore/page/Chrome.h
+       Source/WebCore/page/ChromeClient.h
+       Source/WebCore/page/Frame.cpp
+       Source/WebCore/page/Frame.h
+       Source/WebCore/page/FrameTree.cpp
+       Source/WebCore/page/FrameTree.h
+       Source/WebCore/page/FrameView.cpp
+       Source/WebCore/page/FrameView.h
+       Source/WebCore/page/MouseEventWithHitTestResults.cpp
+       Source/WebCore/page/MouseEventWithHitTestResults.h
+       Source/WebCore/page/Navigator.cpp
+       Source/WebCore/page/Navigator.h
+       Source/WebCore/page/Page.cpp
+       Source/WebCore/page/Page.h
+       Source/WebCore/page/PageGroupLoadDeferrer.cpp
+       Source/WebCore/page/PageGroupLoadDeferrer.h
+       Source/WebCore/page/PrintContext.cpp
+       Source/WebCore/page/PrintContext.h
+       Source/WebCore/page/SpatialNavigation.h
+       Source/WebCore/page/WindowFeatures.cpp
+       Source/WebCore/platform/HashTools.h
+       Source/WebCore/platform/Length.cpp
+       Source/WebCore/platform/Length.h
+       Source/WebCore/platform/LengthBox.h
+       Source/WebCore/platform/LengthSize.h
+       Source/WebCore/platform/LinkHash.cpp
+       Source/WebCore/platform/PlatformTouchEvent.h
+       Source/WebCore/platform/PlatformTouchPoint.h
+       Source/WebCore/platform/PopupMenu.h
+       Source/WebCore/platform/PopupMenuClient.h
+       Source/WebCore/platform/SearchPopupMenu.h
+       Source/WebCore/platform/TreeShared.h
+       Source/WebCore/platform/animation/*
+       Source/WebCore/platform/audio/gstreamer/*
+       Source/WebCore/platform/audio/gtk/*
+       Source/WebCore/platform/cairo/*
+       Source/WebCore/platform/geoclue/GeolocationProviderGeoclue.h
+       Source/WebCore/platform/geoclue/GeolocationProviderGeoclueClient.h
+       Source/WebCore/platform/glib/*
+       Source/WebCore/platform/graphics/FloatPoint3D.cpp
+       Source/WebCore/platform/graphics/FloatPoint3D.h
+       Source/WebCore/platform/graphics/Font.cpp
+       Source/WebCore/platform/graphics/Font.h
+       Source/WebCore/platform/graphics/FontDescription.h
+       Source/WebCore/platform/graphics/FontFastPath.cpp
+       Source/WebCore/platform/graphics/FontGlyphs.h
+       Source/WebCore/platform/graphics/FontMetrics.h
+       Source/WebCore/platform/graphics/FontPlatformData.cpp
+       Source/WebCore/platform/graphics/FontPlatformData.h
+       Source/WebCore/platform/graphics/GLContext.cpp
+       Source/WebCore/platform/graphics/GLContext.h
+       Source/WebCore/platform/graphics/GraphicsContext3DPrivate.cpp
+       Source/WebCore/platform/graphics/GraphicsContext3DPrivate.h
+       Source/WebCore/platform/graphics/GraphicsLayerAnimation.cpp
+       Source/WebCore/platform/graphics/GraphicsLayerAnimation.h
+       Source/WebCore/platform/graphics/GraphicsLayerTransform.cpp
+       Source/WebCore/platform/graphics/GraphicsLayerTransform.h
+       Source/WebCore/platform/graphics/Icon.h
+       Source/WebCore/platform/graphics/IntPointHash.h
+       Source/WebCore/platform/graphics/IntSizeHash.h
+       Source/WebCore/platform/graphics/Latin1TextIterator.h
+       Source/WebCore/platform/graphics/PathTraversalState.cpp
+       Source/WebCore/platform/graphics/SVGGlyph.cpp
+       Source/WebCore/platform/graphics/SVGGlyph.h
+       Source/WebCore/platform/graphics/SimpleFontData.h
+       Source/WebCore/platform/graphics/StrokeStyleApplier.h
+       Source/WebCore/platform/graphics/SurrogatePairAwareTextIterator.cpp
+       Source/WebCore/platform/graphics/SurrogatePairAwareTextIterator.h
+       Source/WebCore/platform/graphics/TextRun.h
+       Source/WebCore/platform/graphics/Tile.h
+       Source/WebCore/platform/graphics/TiledBackingStore.cpp
+       Source/WebCore/platform/graphics/TiledBackingStore.h
+       Source/WebCore/platform/graphics/TiledBackingStoreBackend.h
+       Source/WebCore/platform/graphics/TiledBackingStoreClient.h
+       Source/WebCore/platform/graphics/WidthIterator.cpp
+       Source/WebCore/platform/graphics/WidthIterator.h
+       Source/WebCore/platform/graphics/cairo/DrawErrorUnderline.h
+       Source/WebCore/platform/graphics/cairo/FontCustomPlatformData.h
+       Source/WebCore/platform/graphics/cairo/IntRectCairo.cpp
+       Source/WebCore/platform/graphics/cairo/OwnPtrCairo.cpp
+       Source/WebCore/platform/graphics/cairo/OwnPtrCairo.h
+       Source/WebCore/platform/graphics/cairo/PathCairo.cpp
+       Source/WebCore/platform/graphics/cairo/PlatformPathCairo.cpp
+       Source/WebCore/platform/graphics/cairo/PlatformPathCairo.h
+       Source/WebCore/platform/graphics/cairo/RefPtrCairo.cpp
+       Source/WebCore/platform/graphics/cairo/RefPtrCairo.h
+       Source/WebCore/platform/graphics/egl/*
+       Source/WebCore/platform/graphics/filters/*
+       Source/WebCore/platform/graphics/freetype/*
+       Source/WebCore/platform/graphics/glx/*
+       Source/WebCore/platform/graphics/gstreamer/*
+       Source/WebCore/platform/graphics/gtk/*
+       Source/WebCore/platform/graphics/surfaces/*
+       Source/WebCore/platform/graphics/texmap/*
+       Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp
+       Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h
+       Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedSurface.h
+       Source/WebCore/platform/graphics/texmap/coordinated/SurfaceUpdateInfo.h
+       Source/WebCore/platform/graphics/texmap/coordinated/UpdateAtlas.cpp
+       Source/WebCore/platform/graphics/texmap/coordinated/UpdateAtlas.h
+       Source/WebCore/platform/graphics/transforms/*
+       Source/WebCore/platform/gtk/*
+       Source/WebCore/platform/image-decoders/ImageDecoder.cpp
+       Source/WebCore/platform/image-encoders/*
+       Source/WebCore/platform/network/FormData.cpp
+       Source/WebCore/platform/network/FormData.h
+       Source/WebCore/platform/network/FormDataBuilder.cpp
+       Source/WebCore/platform/network/FormDataBuilder.h
+       Source/WebCore/platform/network/HTTPStatusCodes.h
+       Source/WebCore/platform/network/NetworkingContext.h
+       Source/WebCore/platform/network/soup/CookieJarSoup.cpp
+       Source/WebCore/platform/network/soup/CookieStorageSoup.cpp
+       Source/WebCore/platform/network/soup/GUniquePtrSoup.h
+       Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp
+       Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp
+       Source/WebCore/platform/network/soup/ResourceResponseSoup.cpp
+       Source/WebCore/platform/soup/SharedBufferSoup.cpp
+       Source/WebCore/platform/text/BidiContext.cpp
+       Source/WebCore/platform/text/BidiContext.h
+       Source/WebCore/platform/text/BidiResolver.h
+       Source/WebCore/platform/text/BidiRunList.h
+       Source/WebCore/platform/text/ParserUtilities.h
+       Source/WebCore/platform/text/SegmentedString.cpp
+       Source/WebCore/platform/text/SegmentedString.h
+       Source/WebCore/platform/text/TextBreakIterator.cpp
+       Source/WebCore/platform/text/TextBreakIterator.h
+       Source/WebCore/platform/text/TextBreakIteratorInternalICU.h
+       Source/WebCore/platform/text/enchant/*
+       Source/WebCore/platform/text/gtk/*
+       Source/WebCore/platform/text/wchar/*
+       Source/WebCore/plugins/DOMMimeType.cpp
+       Source/WebCore/plugins/DOMMimeType.h
+       Source/WebCore/plugins/DOMMimeTypeArray.cpp
+       Source/WebCore/plugins/DOMMimeTypeArray.h
+       Source/WebCore/plugins/DOMPlugin.cpp
+       Source/WebCore/plugins/DOMPlugin.h
+       Source/WebCore/plugins/DOMPluginArray.cpp
+       Source/WebCore/plugins/DOMPluginArray.h
+       Source/WebCore/plugins/PluginData.cpp
+       Source/WebCore/plugins/PluginData.h
+       Source/WebCore/rendering/*
+       Source/WebCore/rendering/line/*
+       Source/WebCore/rendering/style/*
+       Source/WebCore/rendering/svg/*
+       Source/WebCore/style/StyleFontSizeFunctions.cpp
+       Source/WebCore/style/StyleResolveForDocument.cpp
+       Source/WebCore/style/StyleResolveTree.cpp
+       Source/WebCore/svg/*
+       Source/WebCore/svg/graphics/SVGImageCache.cpp
+       Source/WebCore/svg/graphics/SVGImageCache.h
+       Source/WebCore/svg/graphics/SVGImageForContainer.cpp
+       Source/WebCore/svg/graphics/filters/*
+       Source/WebCore/svg/properties/*
+       Source/WebCore/xml/DOMParser.cpp
+       Source/WebCore/xml/DOMParser.h
+       Source/WebCore/xml/XMLHttpRequest.cpp
+       Source/WebCore/xml/XMLHttpRequest.h
+       Source/WebCore/xml/XMLSerializer.cpp
+       Source/WebCore/xml/XMLSerializer.h
+       Source/WebCore/xml/XSLImportRule.cpp
+       Source/WebCore/xml/XSLImportRule.h
+       Source/WebCore/xml/XSLStyleSheet.h
+       Source/WebCore/xml/XSLStyleSheetLibxslt.cpp
+       Source/WebCore/xml/XSLTProcessor.cpp
+       Source/WebCore/xml/XSLTProcessor.h
+       Source/WebCore/xml/XSLTProcessorLibxslt.cpp
+       Source/WebCore/xml/parser/XMLDocumentParser.cpp
+       Source/WebCore/xml/parser/XMLDocumentParser.h
+       Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp
+       Source/WebKit2/Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp
+       Source/WebKit2/Shared/CoordinatedGraphics/WebCoordinatedSurface.h
+       Source/WebKit2/Shared/Network/CustomProtocols/soup/*
+       Source/WebKit2/Shared/WebHitTestResult.cpp
+       Source/WebKit2/Shared/WebHitTestResult.h
+       Source/WebKit2/UIProcess/API/C/CoordinatedGraphics/*
+       Source/WebKit2/UIProcess/API/gtk/*
+       Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp
+       Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h
+       Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedGraphicsScene.cpp
+       Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedGraphicsScene.h
+       Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp
+       Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h
+       Source/WebKit2/UIProcess/CoordinatedGraphics/PageViewportController.cpp
+       Source/WebKit2/UIProcess/CoordinatedGraphics/PageViewportController.h
+       Source/WebKit2/UIProcess/DefaultUndoController.cpp
+       Source/WebKit2/UIProcess/DefaultUndoController.h
+       Source/WebKit2/UIProcess/Network/CustomProtocols/soup/*
+       Source/WebKit2/UIProcess/PageViewportControllerClient.h
+       Source/WebKit2/UIProcess/gtk/WebPopupMenuProxyGtk.h
+       Source/WebKit2/UIProcess/soup/*
+       Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitFramePrivate.h
+       Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitScriptWorldPrivate.h
+       Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebExtensionPrivate.h
+       Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPagePrivate.h
+       Source/WebKit2/WebProcess/WebCoreSupport/WebPopupMenu.cpp
+       Source/WebKit2/WebProcess/WebCoreSupport/WebPopupMenu.h
+       Source/WebKit2/WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp
+       Source/WebKit2/WebProcess/WebCoreSupport/WebSearchPopupMenu.h
+       Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp
+       Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h
+       Source/WebKit2/WebProcess/WebPage/TapHighlightController.cpp
+       Source/WebKit2/WebProcess/WebPage/TapHighlightController.h
+       Source/WebKit2/WebProcess/WebPage/WebContextMenu.cpp
+       Source/WebKit2/WebProcess/WebPage/WebContextMenu.h
+       Source/WebKit2/WebProcess/gtk/*
+       Source/WebKit2/WebProcess/soup/*
+       Tools/DumpRenderTree/config.h
+       Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/DOMDOMWindowTest.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeFilterTest.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/DOMXPathNSResolverTest.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/FrameTest.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestInspector.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitPolicyClient.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.h
+       Tools/TestWebKitAPI/gtk/WebKit2Gtk/*
+       Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp
+       Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.h
+       Tools/gtk/*
+Copyright: © 2002-2014 Apple Inc. and others
+License: LGPL-2+
+
+Files: Source/WebCore/loader/FTPDirectoryParser.cpp
+       Source/WebCore/loader/FTPDirectoryParser.h
+Copyright: © 2002-2014 Apple Inc. and others
+License: LGPL-2.1
+
+Files: Source/WebCore/bridge/npruntime_internal.h
+       Source/WebCore/platform/graphics/OpenGLShims.cpp
+       Source/WebCore/platform/graphics/OpenGLShims.h
+       Source/WebCore/platform/graphics/texmap/coordinated/AreaAllocator.cpp
+       Source/WebCore/platform/graphics/texmap/coordinated/AreaAllocator.h
+       Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp
+       Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.h
+       Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp
+       Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.h
+       Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp
+       Source/WebKit2/UIProcess/API/gtk/WebKitFindController.h
+       Source/WebKit2/UIProcess/API/gtk/WebKitSecurityManager.cpp
+       Source/WebKit2/UIProcess/API/gtk/WebKitSecurityManager.h
+       Source/WebKit2/UIProcess/API/gtk/WebKitWebInspector.cpp
+       Source/WebKit2/UIProcess/API/gtk/WebKitWebInspector.h
+       Source/WebKit2/WebProcess/Cookies/soup/*
+       Source/WebKit2/WebProcess/InjectedBundle/API/gtk/*
+       Tools/TestWebKitAPI/Tests/WebKit2Gtk/*
+Copyright: © 2002-2014 Apple Inc. and others
+License: LGPL-2.1+
+
+Files: Source/JavaScriptCore/icu/unicode/*
+       Source/WTF/icu/unicode/*
+       Source/WebCore/icu/unicode/*
+       Source/WebCore/xml/XSLTExtensions.cpp
+Copyright: © 1995-2006 International Business Machines Corporation and others
+License: MIT-X11
+
+Files: Source/JavaScriptCore/runtime/JSDateMath.cpp
+       Source/JavaScriptCore/runtime/JSDateMath.h
+       Source/WTF/wtf/DateMath.cpp
+       Source/WTF/wtf/DateMath.h
+       Source/WebCore/html/HTMLDocument.cpp
+       Source/WebCore/platform/gtk/CursorGtk.h
+       Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp
+       Source/WebCore/platform/image-decoders/gif/GIFImageReader.h
+       Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
+       Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp
+       Source/WebCore/plugins/npapi.h
+       Source/WebCore/plugins/nptypes.h
+       Source/WebCore/rendering/RenderLayer.cpp
+       Source/WebCore/rendering/RenderLayer.h
+       Source/WebCore/rendering/RenderMarquee.cpp
+       Source/WebCore/rendering/RenderMarquee.h
+       Source/WebCore/rendering/ScrollBehavior.cpp
+       Source/WebCore/rendering/ScrollBehavior.h
+Copyright: © 2002-2014 Apple Inc. and others
+License: MPL-1.1 or GPL-2+ or LGPL-2.1+
+
+Files: Tools/TestWebKitAPI/Tests/WTF/MD5.cpp
+Copyright: No copyright holders
+License: public-domain
+ This code was written by Colin Plumb in 1993, no copyright is
+ claimed.
+ This code is in the public domain; do with it what you wish.
+
+Files: Source/ThirdParty/qunit/*
+Copyright: © 2011 John Resig, Jörn Zaefferer
+License: Expat or GPL-2
+
+License: BSD-2-clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+ .
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+License: BSD-3-clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ .
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer
+    in the documentation and/or other materials provided with the
+    distribution.
+ 3. Neither the name of Ericsson nor the names of its contributors
+    may be used to endorse or promote products derived from this
+    software without specific prior written permission.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+License: Expat
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+ .
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+License: BSL
+ Permission is hereby granted, free of charge, to any person or
+ organization obtaining a copy of the software and accompanying
+ documentation covered by this license (the "Software") to use,
+ reproduce, display, distribute, execute, and transmit the Software,
+ and to prepare derivative works of the Software, and to permit
+ third-parties to whom the Software is furnished to do so, all subject
+ to the following:
+ .
+ The copyright notices in the Software and this entire statement,
+ including the above license grant, this restriction and the following
+ disclaimer, must be included in all copies of the Software, in whole
+ or in part, and all derivative works of the Software, unless such
+ copies or derivative works are solely in the form of
+ machine-executable object code generated by a source language
+ processor.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
+ NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE
+ DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER
+ LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+
+License: LGPL-2
+ This module is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 2
+ as published by the Free Software Foundation.
+ .
+ This module is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ .
+ On Debian systems, the complete text of the license can be found in
+ the file /usr/share/common-licenses/LGPL-2
+
+License: LGPL-2+
+ This module is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+ .
+ This module is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ .
+ On Debian systems, the complete text of the license can be found in
+ the file /usr/share/common-licenses/LGPL-2
+
+License: LGPL-2.1
+ This module is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version
+ 2.1 as published by the Free Software Foundation.
+ .
+ This module is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ .
+ On Debian systems, the complete text of the license can be found in
+ the file /usr/share/common-licenses/LGPL-2.1
+
+License: LGPL-2.1+
+ This module is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+ .
+ This module is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ .
+ On Debian systems, the complete text of the license can be found in
+ the file /usr/share/common-licenses/LGPL-2.1
+
+License: GPL-2
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2 as
+ published by the Free Software Foundation.
+ .
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ .
+ On Debian systems, the complete text of the license can be found in
+ the file /usr/share/common-licenses/GPL-2
+
+License: GPL-2+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at
+ your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ .
+ On Debian systems, the complete text of the license can be found in
+ the file /usr/share/common-licenses/GPL-2
+
+License: GPL-3+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or (at
+ your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+ .
+ On Debian systems, the complete text of the license can be found in
+ the file /usr/share/common-licenses/GPL-3
+
+License: MIT-X11
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, and/or sell copies of the Software, and to permit persons
+ to whom the Software is furnished to do so, provided that the above
+ copyright notice(s) and this permission notice appear in all copies
+ of the Software and that both the above copyright notice(s) and this
+ permission notice appear in supporting documentation.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+ OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
+ SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
+ RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ .
+ Except as contained in this notice, the name of a copyright holder
+ shall not be used in advertising or otherwise to promote the sale,
+ use or other dealings in this Software without prior written
+ authorization of the copyright holder.
+
+License: MPL-1.1
+                           MOZILLA PUBLIC LICENSE
+                                 Version 1.1
+ .
+                               ---------------
+ .
+ 1. Definitions.
+ .
+      1.0.1. "Commercial Use" means distribution or otherwise making the
+      Covered Code available to a third party.
+ .
+      1.1. "Contributor" means each entity that creates or contributes to
+      the creation of Modifications.
+ .
+      1.2. "Contributor Version" means the combination of the Original
+      Code, prior Modifications used by a Contributor, and the Modifications
+      made by that particular Contributor.
+ .
+      1.3. "Covered Code" means the Original Code or Modifications or the
+      combination of the Original Code and Modifications, in each case
+      including portions thereof.
+ .
+      1.4. "Electronic Distribution Mechanism" means a mechanism generally
+      accepted in the software development community for the electronic
+      transfer of data.
+ .
+      1.5. "Executable" means Covered Code in any form other than Source
+      Code.
+ .
+      1.6. "Initial Developer" means the individual or entity identified
+      as the Initial Developer in the Source Code notice required by Exhibit
+      A.
+ .
+      1.7. "Larger Work" means a work which combines Covered Code or
+      portions thereof with code not governed by the terms of this License.
+ .
+      1.8. "License" means this document.
+ .
+      1.8.1. "Licensable" means having the right to grant, to the maximum
+      extent possible, whether at the time of the initial grant or
+      subsequently acquired, any and all of the rights conveyed herein.
+ .
+      1.9. "Modifications" means any addition to or deletion from the
+      substance or structure of either the Original Code or any previous
+      Modifications. When Covered Code is released as a series of files, a
+      Modification is:
+           A. Any addition to or deletion from the contents of a file
+           containing Original Code or previous Modifications.
+ .
+           B. Any new file that contains any part of the Original Code or
+           previous Modifications.
+ .
+      1.10. "Original Code" means Source Code of computer software code
+      which is described in the Source Code notice required by Exhibit A as
+      Original Code, and which, at the time of its release under this
+      License is not already Covered Code governed by this License.
+ .
+      1.10.1. "Patent Claims" means any patent claim(s), now owned or
+      hereafter acquired, including without limitation,  method, process,
+      and apparatus claims, in any patent Licensable by grantor.
+ .
+      1.11. "Source Code" means the preferred form of the Covered Code for
+      making modifications to it, including all modules it contains, plus
+      any associated interface definition files, scripts used to control
+      compilation and installation of an Executable, or source code
+      differential comparisons against either the Original Code or another
+      well known, available Covered Code of the Contributor's choice. The
+      Source Code can be in a compressed or archival form, provided the
+      appropriate decompression or de-archiving software is widely available
+      for no charge.
+ .
+      1.12. "You" (or "Your")  means an individual or a legal entity
+      exercising rights under, and complying with all of the terms of, this
+      License or a future version of this License issued under Section 6.1.
+      For legal entities, "You" includes any entity which controls, is
+      controlled by, or is under common control with You. For purposes of
+      this definition, "control" means (a) the power, direct or indirect,
+      to cause the direction or management of such entity, whether by
+      contract or otherwise, or (b) ownership of more than fifty percent
+      (50%) of the outstanding shares or beneficial ownership of such
+      entity.
+ .
+ 2. Source Code License.
+ .
+      2.1. The Initial Developer Grant.
+      The Initial Developer hereby grants You a world-wide, royalty-free,
+      non-exclusive license, subject to third party intellectual property
+      claims:
+           (a)  under intellectual property rights (other than patent or
+           trademark) Licensable by Initial Developer to use, reproduce,
+           modify, display, perform, sublicense and distribute the Original
+           Code (or portions thereof) with or without Modifications, and/or
+           as part of a Larger Work; and
+ .
+           (b) under Patents Claims infringed by the making, using or
+           selling of Original Code, to make, have made, use, practice,
+           sell, and offer for sale, and/or otherwise dispose of the
+           Original Code (or portions thereof).
+ .
+           (c) the licenses granted in this Section 2.1(a) and (b) are
+           effective on the date Initial Developer first distributes
+           Original Code under the terms of this License.
+ .
+           (d) Notwithstanding Section 2.1(b) above, no patent license is
+           granted: 1) for code that You delete from the Original Code; 2)
+           separate from the Original Code;  or 3) for infringements caused
+           by: i) the modification of the Original Code or ii) the
+           combination of the Original Code with other software or devices.
+ .
+      2.2. Contributor Grant.
+      Subject to third party intellectual property claims, each Contributor
+      hereby grants You a world-wide, royalty-free, non-exclusive license
+ .
+           (a)  under intellectual property rights (other than patent or
+           trademark) Licensable by Contributor, to use, reproduce, modify,
+           display, perform, sublicense and distribute the Modifications
+           created by such Contributor (or portions thereof) either on an
+           unmodified basis, with other Modifications, as Covered Code
+           and/or as part of a Larger Work; and
+ .
+           (b) under Patent Claims infringed by the making, using, or
+           selling of  Modifications made by that Contributor either alone
+           and/or in combination with its Contributor Version (or portions
+           of such combination), to make, use, sell, offer for sale, have
+           made, and/or otherwise dispose of: 1) Modifications made by that
+           Contributor (or portions thereof); and 2) the combination of
+           Modifications made by that Contributor with its Contributor
+           Version (or portions of such combination).
+ .
+           (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+           effective on the date Contributor first makes Commercial Use of
+           the Covered Code.
+           (d)    Notwithstanding Section 2.2(b) above, no patent license is
+           granted: 1) for any code that Contributor has deleted from the
+           Contributor Version; 2)  separate from the Contributor Version;
+           3)  for infringements caused by: i) third party modifications of
+           Contributor Version or ii)  the combination of Modifications made
+           by that Contributor with other software  (except as part of the
+           Contributor Version) or other devices; or 4) under Patent Claims
+           infringed by Covered Code in the absence of Modifications made by
+           that Contributor.
+ .
+ 3. Distribution Obligations.
+ .
+      3.1. Application of License.
+      The Modifications which You create or to which You contribute are
+      governed by the terms of this License, including without limitation
+      Section 2.2. The Source Code version of Covered Code may be
+      distributed only under the terms of this License or a future version
+      of this License released under Section 6.1, and You must include a
+      copy of this License with every copy of the Source Code You
+      distribute. You may not offer or impose any terms on any Source Code
+      version that alters or restricts the applicable version of this
+      License or the recipients' rights hereunder. However, You may include
+      an additional document offering the additional rights described in
+      Section 3.5.
+ .
+      3.2. Availability of Source Code.
+      Any Modification which You create or to which You contribute must be
+      made available in Source Code form under the terms of this License
+      either on the same media as an Executable version or via an accepted
+      Electronic Distribution Mechanism to anyone to whom you made an
+      Executable version available; and if made available via Electronic
+      Distribution Mechanism, must remain available for at least twelve (12)
+      months after the date it initially became available, or at least six
+      (6) months after a subsequent version of that particular Modification
+      has been made available to such recipients. You are responsible for
+      ensuring that the Source Code version remains available even if the
+      Electronic Distribution Mechanism is maintained by a third party.
+ .
+      3.3. Description of Modifications.
+      You must cause all Covered Code to which You contribute to contain a
+      file documenting the changes You made to create that Covered Code and
+      the date of any change. You must include a prominent statement that
+      the Modification is derived, directly or indirectly, from Original
+      Code provided by the Initial Developer and including the name of the
+      Initial Developer in (a) the Source Code, and (b) in any notice in an
+      Executable version or related documentation in which You describe the
+      origin or ownership of the Covered Code.
+ .
+      3.4. Intellectual Property Matters
+           (a) Third Party Claims.
+           If Contributor has knowledge that a license under a third party's
+           intellectual property rights is required to exercise the rights
+           granted by such Contributor under Sections 2.1 or 2.2,
+           Contributor must include a text file with the Source Code
+           distribution titled "LEGAL" which describes the claim and the
+           party making the claim in sufficient detail that a recipient will
+           know whom to contact. If Contributor obtains such knowledge after
+           the Modification is made available as described in Section 3.2,
+           Contributor shall promptly modify the LEGAL file in all copies
+           Contributor makes available thereafter and shall take other steps
+           (such as notifying appropriate mailing lists or newsgroups)
+           reasonably calculated to inform those who received the Covered
+           Code that new knowledge has been obtained.
+ .
+           (b) Contributor APIs.
+           If Contributor's Modifications include an application programming
+           interface and Contributor has knowledge of patent licenses which
+           are reasonably necessary to implement that API, Contributor must
+           also include this information in the LEGAL file.
+ .
+                (c)    Representations.
+           Contributor represents that, except as disclosed pursuant to
+           Section 3.4(a) above, Contributor believes that Contributor's
+           Modifications are Contributor's original creation(s) and/or
+           Contributor has sufficient rights to grant the rights conveyed by
+           this License.
+ .
+      3.5. Required Notices.
+      You must duplicate the notice in Exhibit A in each file of the Source
+      Code.  If it is not possible to put such notice in a particular Source
+      Code file due to its structure, then You must include such notice in a
+      location (such as a relevant directory) where a user would be likely
+      to look for such a notice.  If You created one or more Modification(s)
+      You may add your name as a Contributor to the notice described in
+      Exhibit A.  You must also duplicate this License in any documentation
+      for the Source Code where You describe recipients' rights or ownership
+      rights relating to Covered Code.  You may choose to offer, and to
+      charge a fee for, warranty, support, indemnity or liability
+      obligations to one or more recipients of Covered Code. However, You
+      may do so only on Your own behalf, and not on behalf of the Initial
+      Developer or any Contributor. You must make it absolutely clear than
+      any such warranty, support, indemnity or liability obligation is
+      offered by You alone, and You hereby agree to indemnify the Initial
+      Developer and every Contributor for any liability incurred by the
+      Initial Developer or such Contributor as a result of warranty,
+      support, indemnity or liability terms You offer.
+ .
+      3.6. Distribution of Executable Versions.
+      You may distribute Covered Code in Executable form only if the
+      requirements of Section 3.1-3.5 have been met for that Covered Code,
+      and if You include a notice stating that the Source Code version of
+      the Covered Code is available under the terms of this License,
+      including a description of how and where You have fulfilled the
+      obligations of Section 3.2. The notice must be conspicuously included
+      in any notice in an Executable version, related documentation or
+      collateral in which You describe recipients' rights relating to the
+      Covered Code. You may distribute the Executable version of Covered
+      Code or ownership rights under a license of Your choice, which may
+      contain terms different from this License, provided that You are in
+      compliance with the terms of this License and that the license for the
+      Executable version does not attempt to limit or alter the recipient's
+      rights in the Source Code version from the rights set forth in this
+      License. If You distribute the Executable version under a different
+      license You must make it absolutely clear that any terms which differ
+      from this License are offered by You alone, not by the Initial
+      Developer or any Contributor. You hereby agree to indemnify the
+      Initial Developer and every Contributor for any liability incurred by
+      the Initial Developer or such Contributor as a result of any such
+      terms You offer.
+ .
+      3.7. Larger Works.
+      You may create a Larger Work by combining Covered Code with other code
+      not governed by the terms of this License and distribute the Larger
+      Work as a single product. In such a case, You must make sure the
+      requirements of this License are fulfilled for the Covered Code.
+ .
+ 4. Inability to Comply Due to Statute or Regulation.
+ .
+      If it is impossible for You to comply with any of the terms of this
+      License with respect to some or all of the Covered Code due to
+      statute, judicial order, or regulation then You must: (a) comply with
+      the terms of this License to the maximum extent possible; and (b)
+      describe the limitations and the code they affect. Such description
+      must be included in the LEGAL file described in Section 3.4 and must
+      be included with all distributions of the Source Code. Except to the
+      extent prohibited by statute or regulation, such description must be
+      sufficiently detailed for a recipient of ordinary skill to be able to
+      understand it.
+ .
+ 5. Application of this License.
+ .
+      This License applies to code to which the Initial Developer has
+      attached the notice in Exhibit A and to related Covered Code.
+ .
+ 6. Versions of the License.
+ .
+      6.1. New Versions.
+      Netscape Communications Corporation ("Netscape") may publish revised
+      and/or new versions of the License from time to time. Each version
+      will be given a distinguishing version number.
+ .
+      6.2. Effect of New Versions.
+      Once Covered Code has been published under a particular version of the
+      License, You may always continue to use it under the terms of that
+      version. You may also choose to use such Covered Code under the terms
+      of any subsequent version of the License published by Netscape. No one
+      other than Netscape has the right to modify the terms applicable to
+      Covered Code created under this License.
+ .
+      6.3. Derivative Works.
+      If You create or use a modified version of this License (which you may
+      only do in order to apply it to code which is not already Covered Code
+      governed by this License), You must (a) rename Your license so that
+      the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+      "MPL", "NPL" or any confusingly similar phrase do not appear in your
+      license (except to note that your license differs from this License)
+      and (b) otherwise make it clear that Your version of the license
+      contains terms which differ from the Mozilla Public License and
+      Netscape Public License. (Filling in the name of the Initial
+      Developer, Original Code or Contributor in the notice described in
+      Exhibit A shall not of themselves be deemed to be modifications of
+      this License.)
+ .
+ 7. DISCLAIMER OF WARRANTY.
+      COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+      WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+      DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+      THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+      IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+      YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+      COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+      OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+      ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+ .
+ 8. TERMINATION.
+ .
+      8.1.  This License and the rights granted hereunder will terminate
+      automatically if You fail to comply with terms herein and fail to cure
+      such breach within 30 days of becoming aware of the breach. All
+      sublicenses to the Covered Code which are properly granted shall
+      survive any termination of this License. Provisions which, by their
+      nature, must remain in effect beyond the termination of this License
+      shall survive.
+ .
+      8.2.  If You initiate litigation by asserting a patent infringement
+      claim (excluding declatory judgment actions) against Initial Developer
+      or a Contributor (the Initial Developer or Contributor against whom
+      You file such action is referred to as "Participant")  alleging that:
+ .
+      (a)  such Participant's Contributor Version directly or indirectly
+      infringes any patent, then any and all rights granted by such
+      Participant to You under Sections 2.1 and/or 2.2 of this License
+      shall, upon 60 days notice from Participant terminate prospectively,
+      unless if within 60 days after receipt of notice You either: (i)
+      agree in writing to pay Participant a mutually agreeable reasonable
+      royalty for Your past and future use of Modifications made by such
+      Participant, or (ii) withdraw Your litigation claim with respect to
+      the Contributor Version against such Participant.  If within 60 days
+      of notice, a reasonable royalty and payment arrangement are not
+      mutually agreed upon in writing by the parties or the litigation claim
+      is not withdrawn, the rights granted by Participant to You under
+      Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+      the 60 day notice period specified above.
+ .
+      (b)  any software, hardware, or device, other than such Participant's
+      Contributor Version, directly or indirectly infringes any patent, then
+      any rights granted to You by such Participant under Sections 2.1(b)
+      and 2.2(b) are revoked effective as of the date You first made, used,
+      sold, distributed, or had made, Modifications made by that
+      Participant.
+ .
+      8.3.  If You assert a patent infringement claim against Participant
+      alleging that such Participant's Contributor Version directly or
+      indirectly infringes any patent where such claim is resolved (such as
+      by license or settlement) prior to the initiation of patent
+      infringement litigation, then the reasonable value of the licenses
+      granted by such Participant under Sections 2.1 or 2.2 shall be taken
+      into account in determining the amount or value of any payment or
+      license.
+ .
+      8.4.  In the event of termination under Sections 8.1 or 8.2 above,
+      all end user license agreements (excluding distributors and resellers)
+      which have been validly granted by You or any distributor hereunder
+      prior to termination shall survive termination.
+ .
+ 9. LIMITATION OF LIABILITY.
+ .
+      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+      (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+      DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+      OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+      ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+      CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+      WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+      COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+      INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+      LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+      RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+      PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+      EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+      THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+ .
+ 10. U.S. GOVERNMENT END USERS.
+ .
+      The Covered Code is a "commercial item," as that term is defined in
+      48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+      software" and "commercial computer software documentation," as such
+      terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+      C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+      all U.S. Government End Users acquire Covered Code with only those
+      rights set forth herein.
+ .
+ 11. MISCELLANEOUS.
+ .
+      This License represents the complete agreement concerning subject
+      matter hereof. If any provision of this License is held to be
+      unenforceable, such provision shall be reformed only to the extent
+      necessary to make it enforceable. This License shall be governed by
+      California law provisions (except to the extent applicable law, if
+      any, provides otherwise), excluding its conflict-of-law provisions.
+      With respect to disputes in which at least one party is a citizen of,
+      or an entity chartered or registered to do business in the United
+      States of America, any litigation relating to this License shall be
+      subject to the jurisdiction of the Federal Courts of the Northern
+      District of California, with venue lying in Santa Clara County,
+      California, with the losing party responsible for costs, including
+      without limitation, court costs and reasonable attorneys' fees and
+      expenses. The application of the United Nations Convention on
+      Contracts for the International Sale of Goods is expressly excluded.
+      Any law or regulation which provides that the language of a contract
+      shall be construed against the drafter shall not apply to this
+      License.
+ .
+ 12. RESPONSIBILITY FOR CLAIMS.
+ .
+      As between Initial Developer and the Contributors, each party is
+      responsible for claims and damages arising, directly or indirectly,
+      out of its utilization of rights under this License and You agree to
+      work with Initial Developer and Contributors to distribute such
+      responsibility on an equitable basis. Nothing herein is intended or
+      shall be deemed to constitute any admission of liability.
+ .
+ 13. MULTIPLE-LICENSED CODE.
+ .
+      Initial Developer may designate portions of the Covered Code as
+      "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
+      Developer permits you to utilize portions of the Covered Code under
+      Your choice of the NPL or the alternative licenses, if any, specified
+      by the Initial Developer in the file described in Exhibit A.
+ .
+ EXHIBIT A -Mozilla Public License.
+ .
+      ``The contents of this file are subject to the Mozilla Public License
+      Version 1.1 (the "License"); you may not use this file except in
+     compliance with the License. You may obtain a copy of the License at
+      http://www.mozilla.org/MPL/
+ .
+      Software distributed under the License is distributed on an "AS IS"
+      basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+      License for the specific language governing rights and limitations
+      under the License.
+ .
+      The Original Code is ______________________________________.
+ .
+      The Initial Developer of the Original Code is ________________________.
+      Portions created by ______________________ are Copyright (C) ______
+      _______________________. All Rights Reserved.
+ .
+      Contributor(s): ______________________________________.
+ .
+      Alternatively, the contents of this file may be used under the terms
+      of the _____ license (the  "[___] License"), in which case the
+      provisions of [______] License are applicable instead of those
+      above.  If you wish to allow use of your version of this file only
+      under the terms of the [____] License and not to allow others to use
+      your version of this file under the MPL, indicate your decision by
+      deleting  the provisions above and replace  them with the notice and
+      other provisions required by the [___] License.  If you do not delete
+      the provisions above, a recipient may use your version of this file
+      under either the MPL or the [___] License."
+ .
+      [NOTE: The text of this Exhibit A may differ slightly from the text of
+      the notices in the Source Code files of the Original Code. You should
+      use the text of this Exhibit A rather than the text found in the
+      Original Code Source Code for Your Modifications.]
+
+License: Apache-2.0
+ On Debian systems, the full text of the Apache license version 2 can
+ be found in the file `/usr/share/common-licenses/Apache-2.0'.
+
+License: ISC
+ Permission to use, copy, modify, and distribute this software for any
+ purpose with or without fee is hereby granted, provided that the
+ above copyright notice and this permission notice appear in all
+ copies.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
diff --git a/gbp.conf b/gbp.conf
new file mode 100644 (file)
index 0000000..de72780
--- /dev/null
+++ b/gbp.conf
@@ -0,0 +1,5 @@
+[DEFAULT]
+debian-branch = experimental
+upstream-branch = webkitgtk-2.6
+pristine-tar = False
+compression = xz
diff --git a/gir1.2-javascriptcoregtk-4.0.install b/gir1.2-javascriptcoregtk-4.0.install
new file mode 100644 (file)
index 0000000..aa30b14
--- /dev/null
@@ -0,0 +1 @@
+usr/lib/*/girepository-1.0/JavaScriptCore-4.0.typelib
diff --git a/gir1.2-webkit2-4.0.install b/gir1.2-webkit2-4.0.install
new file mode 100644 (file)
index 0000000..723337e
--- /dev/null
@@ -0,0 +1,2 @@
+usr/lib/*/girepository-1.0/WebKit2-4.0.typelib
+usr/lib/*/girepository-1.0/WebKit2WebExtension-4.0.typelib
diff --git a/jquery-1.9.1.js b/jquery-1.9.1.js
new file mode 100644 (file)
index 0000000..e2c203f
--- /dev/null
@@ -0,0 +1,9597 @@
+/*!
+ * jQuery JavaScript Library v1.9.1
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2013-2-4
+ */
+(function( window, undefined ) {
+
+// Can't do this because several apps including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+// Support: Firefox 18+
+//"use strict";
+var
+       // The deferred used on DOM ready
+       readyList,
+
+       // A central reference to the root jQuery(document)
+       rootjQuery,
+
+       // Support: IE<9
+       // For `typeof node.method` instead of `node.method !== undefined`
+       core_strundefined = typeof undefined,
+
+       // Use the correct document accordingly with window argument (sandbox)
+       document = window.document,
+       location = window.location,
+
+       // Map over jQuery in case of overwrite
+       _jQuery = window.jQuery,
+
+       // Map over the $ in case of overwrite
+       _$ = window.$,
+
+       // [[Class]] -> type pairs
+       class2type = {},
+
+       // List of deleted data cache ids, so we can reuse them
+       core_deletedIds = [],
+
+       core_version = "1.9.1",
+
+       // Save a reference to some core methods
+       core_concat = core_deletedIds.concat,
+       core_push = core_deletedIds.push,
+       core_slice = core_deletedIds.slice,
+       core_indexOf = core_deletedIds.indexOf,
+       core_toString = class2type.toString,
+       core_hasOwn = class2type.hasOwnProperty,
+       core_trim = core_version.trim,
+
+       // Define a local copy of jQuery
+       jQuery = function( selector, context ) {
+               // The jQuery object is actually just the init constructor 'enhanced'
+               return new jQuery.fn.init( selector, context, rootjQuery );
+       },
+
+       // Used for matching numbers
+       core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
+
+       // Used for splitting on whitespace
+       core_rnotwhite = /\S+/g,
+
+       // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+       rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+       // A simple way to check for HTML strings
+       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+       // Strict HTML recognition (#11290: must start with <)
+       rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+       // Match a standalone tag
+       rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+
+       // JSON RegExp
+       rvalidchars = /^[\],:{}\s]*$/,
+       rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+       rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+       rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
+
+       // Matches dashed string for camelizing
+       rmsPrefix = /^-ms-/,
+       rdashAlpha = /-([\da-z])/gi,
+
+       // Used by jQuery.camelCase as callback to replace()
+       fcamelCase = function( all, letter ) {
+               return letter.toUpperCase();
+       },
+
+       // The ready event handler
+       completed = function( event ) {
+
+               // readyState === "complete" is good enough for us to call the dom ready in oldIE
+               if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
+                       detach();
+                       jQuery.ready();
+               }
+       },
+       // Clean-up method for dom ready events
+       detach = function() {
+               if ( document.addEventListener ) {
+                       document.removeEventListener( "DOMContentLoaded", completed, false );
+                       window.removeEventListener( "load", completed, false );
+
+               } else {
+                       document.detachEvent( "onreadystatechange", completed );
+                       window.detachEvent( "onload", completed );
+               }
+       };
+
+jQuery.fn = jQuery.prototype = {
+       // The current version of jQuery being used
+       jquery: core_version,
+
+       constructor: jQuery,
+       init: function( selector, context, rootjQuery ) {
+               var match, elem;
+
+               // HANDLE: $(""), $(null), $(undefined), $(false)
+               if ( !selector ) {
+                       return this;
+               }
+
+               // Handle HTML strings
+               if ( typeof selector === "string" ) {
+                       if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+                               // Assume that strings that start and end with <> are HTML and skip the regex check
+                               match = [ null, selector, null ];
+
+                       } else {
+                               match = rquickExpr.exec( selector );
+                       }
+
+                       // Match html or make sure no context is specified for #id
+                       if ( match && (match[1] || !context) ) {
+
+                               // HANDLE: $(html) -> $(array)
+                               if ( match[1] ) {
+                                       context = context instanceof jQuery ? context[0] : context;
+
+                                       // scripts is true for back-compat
+                                       jQuery.merge( this, jQuery.parseHTML(
+                                               match[1],
+                                               context && context.nodeType ? context.ownerDocument || context : document,
+                                               true
+                                       ) );
+
+                                       // HANDLE: $(html, props)
+                                       if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+                                               for ( match in context ) {
+                                                       // Properties of context are called as methods if possible
+                                                       if ( jQuery.isFunction( this[ match ] ) ) {
+                                                               this[ match ]( context[ match ] );
+
+                                                       // ...and otherwise set as attributes
+                                                       } else {
+                                                               this.attr( match, context[ match ] );
+                                                       }
+                                               }
+                                       }
+
+                                       return this;
+
+                               // HANDLE: $(#id)
+                               } else {
+                                       elem = document.getElementById( match[2] );
+
+                                       // Check parentNode to catch when Blackberry 4.6 returns
+                                       // nodes that are no longer in the document #6963
+                                       if ( elem && elem.parentNode ) {
+                                               // Handle the case where IE and Opera return items
+                                               // by name instead of ID
+                                               if ( elem.id !== match[2] ) {
+                                                       return rootjQuery.find( selector );
+                                               }
+
+                                               // Otherwise, we inject the element directly into the jQuery object
+                                               this.length = 1;
+                                               this[0] = elem;
+                                       }
+
+                                       this.context = document;
+                                       this.selector = selector;
+                                       return this;
+                               }
+
+                       // HANDLE: $(expr, $(...))
+                       } else if ( !context || context.jquery ) {
+                               return ( context || rootjQuery ).find( selector );
+
+                       // HANDLE: $(expr, context)
+                       // (which is just equivalent to: $(context).find(expr)
+                       } else {
+                               return this.constructor( context ).find( selector );
+                       }
+
+               // HANDLE: $(DOMElement)
+               } else if ( selector.nodeType ) {
+                       this.context = this[0] = selector;
+                       this.length = 1;
+                       return this;
+
+               // HANDLE: $(function)
+               // Shortcut for document ready
+               } else if ( jQuery.isFunction( selector ) ) {
+                       return rootjQuery.ready( selector );
+               }
+
+               if ( selector.selector !== undefined ) {
+                       this.selector = selector.selector;
+                       this.context = selector.context;
+               }
+
+               return jQuery.makeArray( selector, this );
+       },
+
+       // Start with an empty selector
+       selector: "",
+
+       // The default length of a jQuery object is 0
+       length: 0,
+
+       // The number of elements contained in the matched element set
+       size: function() {
+               return this.length;
+       },
+
+       toArray: function() {
+               return core_slice.call( this );
+       },
+
+       // Get the Nth element in the matched element set OR
+       // Get the whole matched element set as a clean array
+       get: function( num ) {
+               return num == null ?
+
+                       // Return a 'clean' array
+                       this.toArray() :
+
+                       // Return just the object
+                       ( num < 0 ? this[ this.length + num ] : this[ num ] );
+       },
+
+       // Take an array of elements and push it onto the stack
+       // (returning the new matched element set)
+       pushStack: function( elems ) {
+
+               // Build a new jQuery matched element set
+               var ret = jQuery.merge( this.constructor(), elems );
+
+               // Add the old object onto the stack (as a reference)
+               ret.prevObject = this;
+               ret.context = this.context;
+
+               // Return the newly-formed element set
+               return ret;
+       },
+
+       // Execute a callback for every element in the matched set.
+       // (You can seed the arguments with an array of args, but this is
+       // only used internally.)
+       each: function( callback, args ) {
+               return jQuery.each( this, callback, args );
+       },
+
+       ready: function( fn ) {
+               // Add the callback
+               jQuery.ready.promise().done( fn );
+
+               return this;
+       },
+
+       slice: function() {
+               return this.pushStack( core_slice.apply( this, arguments ) );
+       },
+
+       first: function() {
+               return this.eq( 0 );
+       },
+
+       last: function() {
+               return this.eq( -1 );
+       },
+
+       eq: function( i ) {
+               var len = this.length,
+                       j = +i + ( i < 0 ? len : 0 );
+               return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+       },
+
+       map: function( callback ) {
+               return this.pushStack( jQuery.map(this, function( elem, i ) {
+                       return callback.call( elem, i, elem );
+               }));
+       },
+
+       end: function() {
+               return this.prevObject || this.constructor(null);
+       },
+
+       // For internal use only.
+       // Behaves like an Array's method, not like a jQuery method.
+       push: core_push,
+       sort: [].sort,
+       splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+       var src, copyIsArray, copy, name, options, clone,
+               target = arguments[0] || {},
+               i = 1,
+               length = arguments.length,
+               deep = false;
+
+       // Handle a deep copy situation
+       if ( typeof target === "boolean" ) {
+               deep = target;
+               target = arguments[1] || {};
+               // skip the boolean and the target
+               i = 2;
+       }
+
+       // Handle case when target is a string or something (possible in deep copy)
+       if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+               target = {};
+       }
+
+       // extend jQuery itself if only one argument is passed
+       if ( length === i ) {
+               target = this;
+               --i;
+       }
+
+       for ( ; i < length; i++ ) {
+               // Only deal with non-null/undefined values
+               if ( (options = arguments[ i ]) != null ) {
+                       // Extend the base object
+                       for ( name in options ) {
+                               src = target[ name ];
+                               copy = options[ name ];
+
+                               // Prevent never-ending loop
+                               if ( target === copy ) {
+                                       continue;
+                               }
+
+                               // Recurse if we're merging plain objects or arrays
+                               if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+                                       if ( copyIsArray ) {
+                                               copyIsArray = false;
+                                               clone = src && jQuery.isArray(src) ? src : [];
+
+                                       } else {
+                                               clone = src && jQuery.isPlainObject(src) ? src : {};
+                                       }
+
+                                       // Never move original objects, clone them
+                                       target[ name ] = jQuery.extend( deep, clone, copy );
+
+                               // Don't bring in undefined values
+                               } else if ( copy !== undefined ) {
+                                       target[ name ] = copy;
+                               }
+                       }
+               }
+       }
+
+       // Return the modified object
+       return target;
+};
+
+jQuery.extend({
+       noConflict: function( deep ) {
+               if ( window.$ === jQuery ) {
+                       window.$ = _$;
+               }
+
+               if ( deep && window.jQuery === jQuery ) {
+                       window.jQuery = _jQuery;
+               }
+
+               return jQuery;
+       },
+
+       // Is the DOM ready to be used? Set to true once it occurs.
+       isReady: false,
+
+       // A counter to track how many items to wait for before
+       // the ready event fires. See #6781
+       readyWait: 1,
+
+       // Hold (or release) the ready event
+       holdReady: function( hold ) {
+               if ( hold ) {
+                       jQuery.readyWait++;
+               } else {
+                       jQuery.ready( true );
+               }
+       },
+
+       // Handle when the DOM is ready
+       ready: function( wait ) {
+
+               // Abort if there are pending holds or we're already ready
+               if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+                       return;
+               }
+
+               // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+               if ( !document.body ) {
+                       return setTimeout( jQuery.ready );
+               }
+
+               // Remember that the DOM is ready
+               jQuery.isReady = true;
+
+               // If a normal DOM Ready event fired, decrement, and wait if need be
+               if ( wait !== true && --jQuery.readyWait > 0 ) {
+                       return;
+               }
+
+               // If there are functions bound, to execute
+               readyList.resolveWith( document, [ jQuery ] );
+
+               // Trigger any bound ready events
+               if ( jQuery.fn.trigger ) {
+                       jQuery( document ).trigger("ready").off("ready");
+               }
+       },
+
+       // See test/unit/core.js for details concerning isFunction.
+       // Since version 1.3, DOM methods and functions like alert
+       // aren't supported. They return false on IE (#2968).
+       isFunction: function( obj ) {
+               return jQuery.type(obj) === "function";
+       },
+
+       isArray: Array.isArray || function( obj ) {
+               return jQuery.type(obj) === "array";
+       },
+
+       isWindow: function( obj ) {
+               return obj != null && obj == obj.window;
+       },
+
+       isNumeric: function( obj ) {
+               return !isNaN( parseFloat(obj) ) && isFinite( obj );
+       },
+
+       type: function( obj ) {
+               if ( obj == null ) {
+                       return String( obj );
+               }
+               return typeof obj === "object" || typeof obj === "function" ?
+                       class2type[ core_toString.call(obj) ] || "object" :
+                       typeof obj;
+       },
+
+       isPlainObject: function( obj ) {
+               // Must be an Object.
+               // Because of IE, we also have to check the presence of the constructor property.
+               // Make sure that DOM nodes and window objects don't pass through, as well
+               if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+                       return false;
+               }
+
+               try {
+                       // Not own constructor property must be Object
+                       if ( obj.constructor &&
+                               !core_hasOwn.call(obj, "constructor") &&
+                               !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+                               return false;
+                       }
+               } catch ( e ) {
+                       // IE8,9 Will throw exceptions on certain host objects #9897
+                       return false;
+               }
+
+               // Own properties are enumerated firstly, so to speed up,
+               // if last one is own, then all properties are own.
+
+               var key;
+               for ( key in obj ) {}
+
+               return key === undefined || core_hasOwn.call( obj, key );
+       },
+
+       isEmptyObject: function( obj ) {
+               var name;
+               for ( name in obj ) {
+                       return false;
+               }
+               return true;
+       },
+
+       error: function( msg ) {
+               throw new Error( msg );
+       },
+
+       // data: string of html
+       // context (optional): If specified, the fragment will be created in this context, defaults to document
+       // keepScripts (optional): If true, will include scripts passed in the html string
+       parseHTML: function( data, context, keepScripts ) {
+               if ( !data || typeof data !== "string" ) {
+                       return null;
+               }
+               if ( typeof context === "boolean" ) {
+                       keepScripts = context;
+                       context = false;
+               }
+               context = context || document;
+
+               var parsed = rsingleTag.exec( data ),
+                       scripts = !keepScripts && [];
+
+               // Single tag
+               if ( parsed ) {
+                       return [ context.createElement( parsed[1] ) ];
+               }
+
+               parsed = jQuery.buildFragment( [ data ], context, scripts );
+               if ( scripts ) {
+                       jQuery( scripts ).remove();
+               }
+               return jQuery.merge( [], parsed.childNodes );
+       },
+
+       parseJSON: function( data ) {
+               // Attempt to parse using the native JSON parser first
+               if ( window.JSON && window.JSON.parse ) {
+                       return window.JSON.parse( data );
+               }
+
+               if ( data === null ) {
+                       return data;
+               }
+
+               if ( typeof data === "string" ) {
+
+                       // Make sure leading/trailing whitespace is removed (IE can't handle it)
+                       data = jQuery.trim( data );
+
+                       if ( data ) {
+                               // Make sure the incoming data is actual JSON
+                               // Logic borrowed from http://json.org/json2.js
+                               if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+                                       .replace( rvalidtokens, "]" )
+                                       .replace( rvalidbraces, "")) ) {
+
+                                       return ( new Function( "return " + data ) )();
+                               }
+                       }
+               }
+
+               jQuery.error( "Invalid JSON: " + data );
+       },
+
+       // Cross-browser xml parsing
+       parseXML: function( data ) {
+               var xml, tmp;
+               if ( !data || typeof data !== "string" ) {
+                       return null;
+               }
+               try {
+                       if ( window.DOMParser ) { // Standard
+                               tmp = new DOMParser();
+                               xml = tmp.parseFromString( data , "text/xml" );
+                       } else { // IE
+                               xml = new ActiveXObject( "Microsoft.XMLDOM" );
+                               xml.async = "false";
+                               xml.loadXML( data );
+                       }
+               } catch( e ) {
+                       xml = undefined;
+               }
+               if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+                       jQuery.error( "Invalid XML: " + data );
+               }
+               return xml;
+       },
+
+       noop: function() {},
+
+       // Evaluates a script in a global context
+       // Workarounds based on findings by Jim Driscoll
+       // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+       globalEval: function( data ) {
+               if ( data && jQuery.trim( data ) ) {
+                       // We use execScript on Internet Explorer
+                       // We use an anonymous function so that context is window
+                       // rather than jQuery in Firefox
+                       ( window.execScript || function( data ) {
+                               window[ "eval" ].call( window, data );
+                       } )( data );
+               }
+       },
+
+       // Convert dashed to camelCase; used by the css and data modules
+       // Microsoft forgot to hump their vendor prefix (#9572)
+       camelCase: function( string ) {
+               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+       },
+
+       nodeName: function( elem, name ) {
+               return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+       },
+
+       // args is for internal usage only
+       each: function( obj, callback, args ) {
+               var value,
+                       i = 0,
+                       length = obj.length,
+                       isArray = isArraylike( obj );
+
+               if ( args ) {
+                       if ( isArray ) {
+                               for ( ; i < length; i++ ) {
+                                       value = callback.apply( obj[ i ], args );
+
+                                       if ( value === false ) {
+                                               break;
+                                       }
+                               }
+                       } else {
+                               for ( i in obj ) {
+                                       value = callback.apply( obj[ i ], args );
+
+                                       if ( value === false ) {
+                                               break;
+                                       }
+                               }
+                       }
+
+               // A special, fast, case for the most common use of each
+               } else {
+                       if ( isArray ) {
+                               for ( ; i < length; i++ ) {
+                                       value = callback.call( obj[ i ], i, obj[ i ] );
+
+                                       if ( value === false ) {
+                                               break;
+                                       }
+                               }
+                       } else {
+                               for ( i in obj ) {
+                                       value = callback.call( obj[ i ], i, obj[ i ] );
+
+                                       if ( value === false ) {
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               return obj;
+       },
+
+       // Use native String.trim function wherever possible
+       trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
+               function( text ) {
+                       return text == null ?
+                               "" :
+                               core_trim.call( text );
+               } :
+
+               // Otherwise use our own trimming functionality
+               function( text ) {
+                       return text == null ?
+                               "" :
+                               ( text + "" ).replace( rtrim, "" );
+               },
+
+       // results is for internal usage only
+       makeArray: function( arr, results ) {
+               var ret = results || [];
+
+               if ( arr != null ) {
+                       if ( isArraylike( Object(arr) ) ) {
+                               jQuery.merge( ret,
+                                       typeof arr === "string" ?
+                                       [ arr ] : arr
+                               );
+                       } else {
+                               core_push.call( ret, arr );
+                       }
+               }
+
+               return ret;
+       },
+
+       inArray: function( elem, arr, i ) {
+               var len;
+
+               if ( arr ) {
+                       if ( core_indexOf ) {
+                               return core_indexOf.call( arr, elem, i );
+                       }
+
+                       len = arr.length;
+                       i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+                       for ( ; i < len; i++ ) {
+                               // Skip accessing in sparse arrays
+                               if ( i in arr && arr[ i ] === elem ) {
+                                       return i;
+                               }
+                       }
+               }
+
+               return -1;
+       },
+
+       merge: function( first, second ) {
+               var l = second.length,
+                       i = first.length,
+                       j = 0;
+
+               if ( typeof l === "number" ) {
+                       for ( ; j < l; j++ ) {
+                               first[ i++ ] = second[ j ];
+                       }
+               } else {
+                       while ( second[j] !== undefined ) {
+                               first[ i++ ] = second[ j++ ];
+                       }
+               }
+
+               first.length = i;
+
+               return first;
+       },
+
+       grep: function( elems, callback, inv ) {
+               var retVal,
+                       ret = [],
+                       i = 0,
+                       length = elems.length;
+               inv = !!inv;
+
+               // Go through the array, only saving the items
+               // that pass the validator function
+               for ( ; i < length; i++ ) {
+                       retVal = !!callback( elems[ i ], i );
+                       if ( inv !== retVal ) {
+                               ret.push( elems[ i ] );
+                       }
+               }
+
+               return ret;
+       },
+
+       // arg is for internal usage only
+       map: function( elems, callback, arg ) {
+               var value,
+                       i = 0,
+                       length = elems.length,
+                       isArray = isArraylike( elems ),
+                       ret = [];
+
+               // Go through the array, translating each of the items to their
+               if ( isArray ) {
+                       for ( ; i < length; i++ ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret[ ret.length ] = value;
+                               }
+                       }
+
+               // Go through every key on the object,
+               } else {
+                       for ( i in elems ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret[ ret.length ] = value;
+                               }
+                       }
+               }
+
+               // Flatten any nested arrays
+               return core_concat.apply( [], ret );
+       },
+
+       // A global GUID counter for objects
+       guid: 1,
+
+       // Bind a function to a context, optionally partially applying any
+       // arguments.
+       proxy: function( fn, context ) {
+               var args, proxy, tmp;
+
+               if ( typeof context === "string" ) {
+                       tmp = fn[ context ];
+                       context = fn;
+                       fn = tmp;
+               }
+
+               // Quick check to determine if target is callable, in the spec
+               // this throws a TypeError, but we will just return undefined.
+               if ( !jQuery.isFunction( fn ) ) {
+                       return undefined;
+               }
+
+               // Simulated bind
+               args = core_slice.call( arguments, 2 );
+               proxy = function() {
+                       return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
+               };
+
+               // Set the guid of unique handler to the same of original handler, so it can be removed
+               proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+               return proxy;
+       },
+
+       // Multifunctional method to get and set values of a collection
+       // The value/s can optionally be executed if it's a function
+       access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
+               var i = 0,
+                       length = elems.length,
+                       bulk = key == null;
+
+               // Sets many values
+               if ( jQuery.type( key ) === "object" ) {
+                       chainable = true;
+                       for ( i in key ) {
+                               jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+                       }
+
+               // Sets one value
+               } else if ( value !== undefined ) {
+                       chainable = true;
+
+                       if ( !jQuery.isFunction( value ) ) {
+                               raw = true;
+                       }
+
+                       if ( bulk ) {
+                               // Bulk operations run against the entire set
+                               if ( raw ) {
+                                       fn.call( elems, value );
+                                       fn = null;
+
+                               // ...except when executing function values
+                               } else {
+                                       bulk = fn;
+                                       fn = function( elem, key, value ) {
+                                               return bulk.call( jQuery( elem ), value );
+                                       };
+                               }
+                       }
+
+                       if ( fn ) {
+                               for ( ; i < length; i++ ) {
+                                       fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+                               }
+                       }
+               }
+
+               return chainable ?
+                       elems :
+
+                       // Gets
+                       bulk ?
+                               fn.call( elems ) :
+                               length ? fn( elems[0], key ) : emptyGet;
+       },
+
+       now: function() {
+               return ( new Date() ).getTime();
+       }
+});
+
+jQuery.ready.promise = function( obj ) {
+       if ( !readyList ) {
+
+               readyList = jQuery.Deferred();
+
+               // Catch cases where $(document).ready() is called after the browser event has already occurred.
+               // we once tried to use readyState "interactive" here, but it caused issues like the one
+               // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+               if ( document.readyState === "complete" ) {
+                       // Handle it asynchronously to allow scripts the opportunity to delay ready
+                       setTimeout( jQuery.ready );
+
+               // Standards-based browsers support DOMContentLoaded
+               } else if ( document.addEventListener ) {
+                       // Use the handy event callback
+                       document.addEventListener( "DOMContentLoaded", completed, false );
+
+                       // A fallback to window.onload, that will always work
+                       window.addEventListener( "load", completed, false );
+
+               // If IE event model is used
+               } else {
+                       // Ensure firing before onload, maybe late but safe also for iframes
+                       document.attachEvent( "onreadystatechange", completed );
+
+                       // A fallback to window.onload, that will always work
+                       window.attachEvent( "onload", completed );
+
+                       // If IE and not a frame
+                       // continually check to see if the document is ready
+                       var top = false;
+
+                       try {
+                               top = window.frameElement == null && document.documentElement;
+                       } catch(e) {}
+
+                       if ( top && top.doScroll ) {
+                               (function doScrollCheck() {
+                                       if ( !jQuery.isReady ) {
+
+                                               try {
+                                                       // Use the trick by Diego Perini
+                                                       // http://javascript.nwbox.com/IEContentLoaded/
+                                                       top.doScroll("left");
+                                               } catch(e) {
+                                                       return setTimeout( doScrollCheck, 50 );
+                                               }
+
+                                               // detach all dom ready events
+                                               detach();
+
+                                               // and execute any waiting functions
+                                               jQuery.ready();
+                                       }
+                               })();
+                       }
+               }
+       }
+       return readyList.promise( obj );
+};
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+       class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+function isArraylike( obj ) {
+       var length = obj.length,
+               type = jQuery.type( obj );
+
+       if ( jQuery.isWindow( obj ) ) {
+               return false;
+       }
+
+       if ( obj.nodeType === 1 && length ) {
+               return true;
+       }
+
+       return type === "array" || type !== "function" &&
+               ( length === 0 ||
+               typeof length === "number" && length > 0 && ( length - 1 ) in obj );
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+       var object = optionsCache[ options ] = {};
+       jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
+               object[ flag ] = true;
+       });
+       return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *     options: an optional list of space-separated options that will change how
+ *                     the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *     once:                   will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *     memory:                 will keep track of previous values and will call any callback added
+ *                                     after the list has been fired right away with the latest "memorized"
+ *                                     values (like a Deferred)
+ *
+ *     unique:                 will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *     stopOnFalse:    interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+       // Convert options from String-formatted to Object-formatted if needed
+       // (we check in cache first)
+       options = typeof options === "string" ?
+               ( optionsCache[ options ] || createOptions( options ) ) :
+               jQuery.extend( {}, options );
+
+       var // Flag to know if list is currently firing
+               firing,
+               // Last fire value (for non-forgettable lists)
+               memory,
+               // Flag to know if list was already fired
+               fired,
+               // End of the loop when firing
+               firingLength,
+               // Index of currently firing callback (modified by remove if needed)
+               firingIndex,
+               // First callback to fire (used internally by add and fireWith)
+               firingStart,
+               // Actual callback list
+               list = [],
+               // Stack of fire calls for repeatable lists
+               stack = !options.once && [],
+               // Fire callbacks
+               fire = function( data ) {
+                       memory = options.memory && data;
+                       fired = true;
+                       firingIndex = firingStart || 0;
+                       firingStart = 0;
+                       firingLength = list.length;
+                       firing = true;
+                       for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+                               if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+                                       memory = false; // To prevent further calls using add
+                                       break;
+                               }
+                       }
+                       firing = false;
+                       if ( list ) {
+                               if ( stack ) {
+                                       if ( stack.length ) {
+                                               fire( stack.shift() );
+                                       }
+                               } else if ( memory ) {
+                                       list = [];
+                               } else {
+                                       self.disable();
+                               }
+                       }
+               },
+               // Actual Callbacks object
+               self = {
+                       // Add a callback or a collection of callbacks to the list
+                       add: function() {
+                               if ( list ) {
+                                       // First, we save the current length
+                                       var start = list.length;
+                                       (function add( args ) {
+                                               jQuery.each( args, function( _, arg ) {
+                                                       var type = jQuery.type( arg );
+                                                       if ( type === "function" ) {
+                                                               if ( !options.unique || !self.has( arg ) ) {
+                                                                       list.push( arg );
+                                                               }
+                                                       } else if ( arg && arg.length && type !== "string" ) {
+                                                               // Inspect recursively
+                                                               add( arg );
+                                                       }
+                                               });
+                                       })( arguments );
+                                       // Do we need to add the callbacks to the
+                                       // current firing batch?
+                                       if ( firing ) {
+                                               firingLength = list.length;
+                                       // With memory, if we're not firing then
+                                       // we should call right away
+                                       } else if ( memory ) {
+                                               firingStart = start;
+                                               fire( memory );
+                                       }
+                               }
+                               return this;
+                       },
+                       // Remove a callback from the list
+                       remove: function() {
+                               if ( list ) {
+                                       jQuery.each( arguments, function( _, arg ) {
+                                               var index;
+                                               while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+                                                       list.splice( index, 1 );
+                                                       // Handle firing indexes
+                                                       if ( firing ) {
+                                                               if ( index <= firingLength ) {
+                                                                       firingLength--;
+                                                               }
+                                                               if ( index <= firingIndex ) {
+                                                                       firingIndex--;
+                                                               }
+                                                       }
+                                               }
+                                       });
+                               }
+                               return this;
+                       },
+                       // Check if a given callback is in the list.
+                       // If no argument is given, return whether or not list has callbacks attached.
+                       has: function( fn ) {
+                               return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+                       },
+                       // Remove all callbacks from the list
+                       empty: function() {
+                               list = [];
+                               return this;
+                       },
+                       // Have the list do nothing anymore
+                       disable: function() {
+                               list = stack = memory = undefined;
+                               return this;
+                       },
+                       // Is it disabled?
+                       disabled: function() {
+                               return !list;
+                       },
+                       // Lock the list in its current state
+                       lock: function() {
+                               stack = undefined;
+                               if ( !memory ) {
+                                       self.disable();
+                               }
+                               return this;
+                       },
+                       // Is it locked?
+                       locked: function() {
+                               return !stack;
+                       },
+                       // Call all callbacks with the given context and arguments
+                       fireWith: function( context, args ) {
+                               args = args || [];
+                               args = [ context, args.slice ? args.slice() : args ];
+                               if ( list && ( !fired || stack ) ) {
+                                       if ( firing ) {
+                                               stack.push( args );
+                                       } else {
+                                               fire( args );
+                                       }
+                               }
+                               return this;
+                       },
+                       // Call all the callbacks with the given arguments
+                       fire: function() {
+                               self.fireWith( this, arguments );
+                               return this;
+                       },
+                       // To know if the callbacks have already been called at least once
+                       fired: function() {
+                               return !!fired;
+                       }
+               };
+
+       return self;
+};
+jQuery.extend({
+
+       Deferred: function( func ) {
+               var tuples = [
+                               // action, add listener, listener list, final state
+                               [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+                               [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+                               [ "notify", "progress", jQuery.Callbacks("memory") ]
+                       ],
+                       state = "pending",
+                       promise = {
+                               state: function() {
+                                       return state;
+                               },
+                               always: function() {
+                                       deferred.done( arguments ).fail( arguments );
+                                       return this;
+                               },
+                               then: function( /* fnDone, fnFail, fnProgress */ ) {
+                                       var fns = arguments;
+                                       return jQuery.Deferred(function( newDefer ) {
+                                               jQuery.each( tuples, function( i, tuple ) {
+                                                       var action = tuple[ 0 ],
+                                                               fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+                                                       // deferred[ done | fail | progress ] for forwarding actions to newDefer
+                                                       deferred[ tuple[1] ](function() {
+                                                               var returned = fn && fn.apply( this, arguments );
+                                                               if ( returned && jQuery.isFunction( returned.promise ) ) {
+                                                                       returned.promise()
+                                                                               .done( newDefer.resolve )
+                                                                               .fail( newDefer.reject )
+                                                                               .progress( newDefer.notify );
+                                                               } else {
+                                                                       newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+                                                               }
+                                                       });
+                                               });
+                                               fns = null;
+                                       }).promise();
+                               },
+                               // Get a promise for this deferred
+                               // If obj is provided, the promise aspect is added to the object
+                               promise: function( obj ) {
+                                       return obj != null ? jQuery.extend( obj, promise ) : promise;
+                               }
+                       },
+                       deferred = {};
+
+               // Keep pipe for back-compat
+               promise.pipe = promise.then;
+
+               // Add list-specific methods
+               jQuery.each( tuples, function( i, tuple ) {
+                       var list = tuple[ 2 ],
+                               stateString = tuple[ 3 ];
+
+                       // promise[ done | fail | progress ] = list.add
+                       promise[ tuple[1] ] = list.add;
+
+                       // Handle state
+                       if ( stateString ) {
+                               list.add(function() {
+                                       // state = [ resolved | rejected ]
+                                       state = stateString;
+
+                               // [ reject_list | resolve_list ].disable; progress_list.lock
+                               }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+                       }
+
+                       // deferred[ resolve | reject | notify ]
+                       deferred[ tuple[0] ] = function() {
+                               deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+                               return this;
+                       };
+                       deferred[ tuple[0] + "With" ] = list.fireWith;
+               });
+
+               // Make the deferred a promise
+               promise.promise( deferred );
+
+               // Call given func if any
+               if ( func ) {
+                       func.call( deferred, deferred );
+               }
+
+               // All done!
+               return deferred;
+       },
+
+       // Deferred helper
+       when: function( subordinate /* , ..., subordinateN */ ) {
+               var i = 0,
+                       resolveValues = core_slice.call( arguments ),
+                       length = resolveValues.length,
+
+                       // the count of uncompleted subordinates
+                       remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+                       // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+                       deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+                       // Update function for both resolve and progress values
+                       updateFunc = function( i, contexts, values ) {
+                               return function( value ) {
+                                       contexts[ i ] = this;
+                                       values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+                                       if( values === progressValues ) {
+                                               deferred.notifyWith( contexts, values );
+                                       } else if ( !( --remaining ) ) {
+                                               deferred.resolveWith( contexts, values );
+                                       }
+                               };
+                       },
+
+                       progressValues, progressContexts, resolveContexts;
+
+               // add listeners to Deferred subordinates; treat others as resolved
+               if ( length > 1 ) {
+                       progressValues = new Array( length );
+                       progressContexts = new Array( length );
+                       resolveContexts = new Array( length );
+                       for ( ; i < length; i++ ) {
+                               if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+                                       resolveValues[ i ].promise()
+                                               .done( updateFunc( i, resolveContexts, resolveValues ) )
+                                               .fail( deferred.reject )
+                                               .progress( updateFunc( i, progressContexts, progressValues ) );
+                               } else {
+                                       --remaining;
+                               }
+                       }
+               }
+
+               // if we're not waiting on anything, resolve the master
+               if ( !remaining ) {
+                       deferred.resolveWith( resolveContexts, resolveValues );
+               }
+
+               return deferred.promise();
+       }
+});
+jQuery.support = (function() {
+
+       var support, all, a,
+               input, select, fragment,
+               opt, eventName, isSupported, i,
+               div = document.createElement("div");
+
+       // Setup
+       div.setAttribute( "className", "t" );
+       div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+
+       // Support tests won't run in some limited or non-browser environments
+       all = div.getElementsByTagName("*");
+       a = div.getElementsByTagName("a")[ 0 ];
+       if ( !all || !a || !all.length ) {
+               return {};
+       }
+
+       // First batch of tests
+       select = document.createElement("select");
+       opt = select.appendChild( document.createElement("option") );
+       input = div.getElementsByTagName("input")[ 0 ];
+
+       a.style.cssText = "top:1px;float:left;opacity:.5";
+       support = {
+               // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+               getSetAttribute: div.className !== "t",
+
+               // IE strips leading whitespace when .innerHTML is used
+               leadingWhitespace: div.firstChild.nodeType === 3,
+
+               // Make sure that tbody elements aren't automatically inserted
+               // IE will insert them into empty tables
+               tbody: !div.getElementsByTagName("tbody").length,
+
+               // Make sure that link elements get serialized correctly by innerHTML
+               // This requires a wrapper element in IE
+               htmlSerialize: !!div.getElementsByTagName("link").length,
+
+               // Get the style information from getAttribute
+               // (IE uses .cssText instead)
+               style: /top/.test( a.getAttribute("style") ),
+
+               // Make sure that URLs aren't manipulated
+               // (IE normalizes it by default)
+               hrefNormalized: a.getAttribute("href") === "/a",
+
+               // Make sure that element opacity exists
+               // (IE uses filter instead)
+               // Use a regex to work around a WebKit issue. See #5145
+               opacity: /^0.5/.test( a.style.opacity ),
+
+               // Verify style float existence
+               // (IE uses styleFloat instead of cssFloat)
+               cssFloat: !!a.style.cssFloat,
+
+               // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
+               checkOn: !!input.value,
+
+               // Make sure that a selected-by-default option has a working selected property.
+               // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+               optSelected: opt.selected,
+
+               // Tests for enctype support on a form (#6743)
+               enctype: !!document.createElement("form").enctype,
+
+               // Makes sure cloning an html5 element does not cause problems
+               // Where outerHTML is undefined, this still works
+               html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+
+               // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
+               boxModel: document.compatMode === "CSS1Compat",
+
+               // Will be defined later
+               deleteExpando: true,
+               noCloneEvent: true,
+               inlineBlockNeedsLayout: false,
+               shrinkWrapBlocks: false,
+               reliableMarginRight: true,
+               boxSizingReliable: true,
+               pixelPosition: false
+       };
+
+       // Make sure checked status is properly cloned
+       input.checked = true;
+       support.noCloneChecked = input.cloneNode( true ).checked;
+
+       // Make sure that the options inside disabled selects aren't marked as disabled
+       // (WebKit marks them as disabled)
+       select.disabled = true;
+       support.optDisabled = !opt.disabled;
+
+       // Support: IE<9
+       try {
+               delete div.test;
+       } catch( e ) {
+               support.deleteExpando = false;
+       }
+
+       // Check if we can trust getAttribute("value")
+       input = document.createElement("input");
+       input.setAttribute( "value", "" );
+       support.input = input.getAttribute( "value" ) === "";
+
+       // Check if an input maintains its value after becoming a radio
+       input.value = "t";
+       input.setAttribute( "type", "radio" );
+       support.radioValue = input.value === "t";
+
+       // #11217 - WebKit loses check when the name is after the checked attribute
+       input.setAttribute( "checked", "t" );
+       input.setAttribute( "name", "t" );
+
+       fragment = document.createDocumentFragment();
+       fragment.appendChild( input );
+
+       // Check if a disconnected checkbox will retain its checked
+       // value of true after appended to the DOM (IE6/7)
+       support.appendChecked = input.checked;
+
+       // WebKit doesn't clone checked state correctly in fragments
+       support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+       // Support: IE<9
+       // Opera does not clone events (and typeof div.attachEvent === undefined).
+       // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
+       if ( div.attachEvent ) {
+               div.attachEvent( "onclick", function() {
+                       support.noCloneEvent = false;
+               });
+
+               div.cloneNode( true ).click();
+       }
+
+       // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
+       // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php
+       for ( i in { submit: true, change: true, focusin: true }) {
+               div.setAttribute( eventName = "on" + i, "t" );
+
+               support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
+       }
+
+       div.style.backgroundClip = "content-box";
+       div.cloneNode( true ).style.backgroundClip = "";
+       support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+       // Run tests that need a body at doc ready
+       jQuery(function() {
+               var container, marginDiv, tds,
+                       divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
+                       body = document.getElementsByTagName("body")[0];
+
+               if ( !body ) {
+                       // Return for frameset docs that don't have a body
+                       return;
+               }
+
+               container = document.createElement("div");
+               container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
+
+               body.appendChild( container ).appendChild( div );
+
+               // Support: IE8
+               // Check if table cells still have offsetWidth/Height when they are set
+               // to display:none and there are still other visible table cells in a
+               // table row; if so, offsetWidth/Height are not reliable for use when
+               // determining if an element has been hidden directly using
+               // display:none (it is still safe to use offsets if a parent element is
+               // hidden; don safety goggles and see bug #4512 for more information).
+               div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+               tds = div.getElementsByTagName("td");
+               tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
+               isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+               tds[ 0 ].style.display = "";
+               tds[ 1 ].style.display = "none";
+
+               // Support: IE8
+               // Check if empty table cells still have offsetWidth/Height
+               support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+               // Check box-sizing and margin behavior
+               div.innerHTML = "";
+               div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
+               support.boxSizing = ( div.offsetWidth === 4 );
+               support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
+
+               // Use window.getComputedStyle because jsdom on node.js will break without it.
+               if ( window.getComputedStyle ) {
+                       support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+                       support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+
+                       // Check if div with explicit width and no margin-right incorrectly
+                       // gets computed margin-right based on width of container. (#3333)
+                       // Fails in WebKit before Feb 2011 nightlies
+                       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+                       marginDiv = div.appendChild( document.createElement("div") );
+                       marginDiv.style.cssText = div.style.cssText = divReset;
+                       marginDiv.style.marginRight = marginDiv.style.width = "0";
+                       div.style.width = "1px";
+
+                       support.reliableMarginRight =
+                               !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
+               }
+
+               if ( typeof div.style.zoom !== core_strundefined ) {
+                       // Support: IE<8
+                       // Check if natively block-level elements act like inline-block
+                       // elements when setting their display to 'inline' and giving
+                       // them layout
+                       div.innerHTML = "";
+                       div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
+                       support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+                       // Support: IE6
+                       // Check if elements with layout shrink-wrap their children
+                       div.style.display = "block";
+                       div.innerHTML = "<div></div>";
+                       div.firstChild.style.width = "5px";
+                       support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+
+                       if ( support.inlineBlockNeedsLayout ) {
+                               // Prevent IE 6 from affecting layout for positioned elements #11048
+                               // Prevent IE from shrinking the body in IE 7 mode #12869
+                               // Support: IE<8
+                               body.style.zoom = 1;
+                       }
+               }
+
+               body.removeChild( container );
+
+               // Null elements to avoid leaks in IE
+               container = div = tds = marginDiv = null;
+       });
+
+       // Null elements to avoid leaks in IE
+       all = select = fragment = opt = a = input = null;
+
+       return support;
+})();
+
+var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+       rmultiDash = /([A-Z])/g;
+
+function internalData( elem, name, data, pvt /* Internal Use Only */ ){
+       if ( !jQuery.acceptData( elem ) ) {
+               return;
+       }
+
+       var thisCache, ret,
+               internalKey = jQuery.expando,
+               getByName = typeof name === "string",
+
+               // We have to handle DOM nodes and JS objects differently because IE6-7
+               // can't GC object references properly across the DOM-JS boundary
+               isNode = elem.nodeType,
+
+               // Only DOM nodes need the global jQuery cache; JS object data is
+               // attached directly to the object so GC can occur automatically
+               cache = isNode ? jQuery.cache : elem,
+
+               // Only defining an ID for JS objects if its cache already exists allows
+               // the code to shortcut on the same path as a DOM node with no cache
+               id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+
+       // Avoid doing any more work than we need to when trying to get data on an
+       // object that has no data at all
+       if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
+               return;
+       }
+
+       if ( !id ) {
+               // Only DOM nodes need a new unique ID for each element since their data
+               // ends up in the global cache
+               if ( isNode ) {
+                       elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;
+               } else {
+                       id = internalKey;
+               }
+       }
+
+       if ( !cache[ id ] ) {
+               cache[ id ] = {};
+
+               // Avoids exposing jQuery metadata on plain JS objects when the object
+               // is serialized using JSON.stringify
+               if ( !isNode ) {
+                       cache[ id ].toJSON = jQuery.noop;
+               }
+       }
+
+       // An object can be passed to jQuery.data instead of a key/value pair; this gets
+       // shallow copied over onto the existing cache
+       if ( typeof name === "object" || typeof name === "function" ) {
+               if ( pvt ) {
+                       cache[ id ] = jQuery.extend( cache[ id ], name );
+               } else {
+                       cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+               }
+       }
+
+       thisCache = cache[ id ];
+
+       // jQuery data() is stored in a separate object inside the object's internal data
+       // cache in order to avoid key collisions between internal data and user-defined
+       // data.
+       if ( !pvt ) {
+               if ( !thisCache.data ) {
+                       thisCache.data = {};
+               }
+
+               thisCache = thisCache.data;
+       }
+
+       if ( data !== undefined ) {
+               thisCache[ jQuery.camelCase( name ) ] = data;
+       }
+
+       // Check for both converted-to-camel and non-converted data property names
+       // If a data property was specified
+       if ( getByName ) {
+
+               // First Try to find as-is property data
+               ret = thisCache[ name ];
+
+               // Test for null|undefined property data
+               if ( ret == null ) {
+
+                       // Try to find the camelCased property
+                       ret = thisCache[ jQuery.camelCase( name ) ];
+               }
+       } else {
+               ret = thisCache;
+       }
+
+       return ret;
+}
+
+function internalRemoveData( elem, name, pvt ) {
+       if ( !jQuery.acceptData( elem ) ) {
+               return;
+       }
+
+       var i, l, thisCache,
+               isNode = elem.nodeType,
+
+               // See jQuery.data for more information
+               cache = isNode ? jQuery.cache : elem,
+               id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+       // If there is already no cache entry for this object, there is no
+       // purpose in continuing
+       if ( !cache[ id ] ) {
+               return;
+       }
+
+       if ( name ) {
+
+               thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+               if ( thisCache ) {
+
+                       // Support array or space separated string names for data keys
+                       if ( !jQuery.isArray( name ) ) {
+
+                               // try the string as a key before any manipulation
+                               if ( name in thisCache ) {
+                                       name = [ name ];
+                               } else {
+
+                                       // split the camel cased version by spaces unless a key with the spaces exists
+                                       name = jQuery.camelCase( name );
+                                       if ( name in thisCache ) {
+                                               name = [ name ];
+                                       } else {
+                                               name = name.split(" ");
+                                       }
+                               }
+                       } else {
+                               // If "name" is an array of keys...
+                               // When data is initially created, via ("key", "val") signature,
+                               // keys will be converted to camelCase.
+                               // Since there is no way to tell _how_ a key was added, remove
+                               // both plain key and camelCase key. #12786
+                               // This will only penalize the array argument path.
+                               name = name.concat( jQuery.map( name, jQuery.camelCase ) );
+                       }
+
+                       for ( i = 0, l = name.length; i < l; i++ ) {
+                               delete thisCache[ name[i] ];
+                       }
+
+                       // If there is no data left in the cache, we want to continue
+                       // and let the cache object itself get destroyed
+                       if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+                               return;
+                       }
+               }
+       }
+
+       // See jQuery.data for more information
+       if ( !pvt ) {
+               delete cache[ id ].data;
+
+               // Don't destroy the parent cache unless the internal data object
+               // had been the only thing left in it
+               if ( !isEmptyDataObject( cache[ id ] ) ) {
+                       return;
+               }
+       }
+
+       // Destroy the cache
+       if ( isNode ) {
+               jQuery.cleanData( [ elem ], true );
+
+       // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+       } else if ( jQuery.support.deleteExpando || cache != cache.window ) {
+               delete cache[ id ];
+
+       // When all else fails, null
+       } else {
+               cache[ id ] = null;
+       }
+}
+
+jQuery.extend({
+       cache: {},
+
+       // Unique for each copy of jQuery on the page
+       // Non-digits removed to match rinlinejQuery
+       expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
+
+       // The following elements throw uncatchable exceptions if you
+       // attempt to add expando properties to them.
+       noData: {
+               "embed": true,
+               // Ban all objects except for Flash (which handle expandos)
+               "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+               "applet": true
+       },
+
+       hasData: function( elem ) {
+               elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+               return !!elem && !isEmptyDataObject( elem );
+       },
+
+       data: function( elem, name, data ) {
+               return internalData( elem, name, data );
+       },
+
+       removeData: function( elem, name ) {
+               return internalRemoveData( elem, name );
+       },
+
+       // For internal use only.
+       _data: function( elem, name, data ) {
+               return internalData( elem, name, data, true );
+       },
+
+       _removeData: function( elem, name ) {
+               return internalRemoveData( elem, name, true );
+       },
+
+       // A method for determining if a DOM node can handle the data expando
+       acceptData: function( elem ) {
+               // Do not set data on non-element because it will not be cleared (#8335).
+               if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
+                       return false;
+               }
+
+               var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+               // nodes accept data unless otherwise specified; rejection can be conditional
+               return !noData || noData !== true && elem.getAttribute("classid") === noData;
+       }
+});
+
+jQuery.fn.extend({
+       data: function( key, value ) {
+               var attrs, name,
+                       elem = this[0],
+                       i = 0,
+                       data = null;
+
+               // Gets all values
+               if ( key === undefined ) {
+                       if ( this.length ) {
+                               data = jQuery.data( elem );
+
+                               if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+                                       attrs = elem.attributes;
+                                       for ( ; i < attrs.length; i++ ) {
+                                               name = attrs[i].name;
+
+                                               if ( !name.indexOf( "data-" ) ) {
+                                                       name = jQuery.camelCase( name.slice(5) );
+
+                                                       dataAttr( elem, name, data[ name ] );
+                                               }
+                                       }
+                                       jQuery._data( elem, "parsedAttrs", true );
+                               }
+                       }
+
+                       return data;
+               }
+
+               // Sets multiple values
+               if ( typeof key === "object" ) {
+                       return this.each(function() {
+                               jQuery.data( this, key );
+                       });
+               }
+
+               return jQuery.access( this, function( value ) {
+
+                       if ( value === undefined ) {
+                               // Try to fetch any internally stored data first
+                               return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
+                       }
+
+                       this.each(function() {
+                               jQuery.data( this, key, value );
+                       });
+               }, null, value, arguments.length > 1, null, true );
+       },
+
+       removeData: function( key ) {
+               return this.each(function() {
+                       jQuery.removeData( this, key );
+               });
+       }
+});
+
+function dataAttr( elem, key, data ) {
+       // If nothing was found internally, try to fetch any
+       // data from the HTML5 data-* attribute
+       if ( data === undefined && elem.nodeType === 1 ) {
+
+               var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+               data = elem.getAttribute( name );
+
+               if ( typeof data === "string" ) {
+                       try {
+                               data = data === "true" ? true :
+                                       data === "false" ? false :
+                                       data === "null" ? null :
+                                       // Only convert to a number if it doesn't change the string
+                                       +data + "" === data ? +data :
+                                       rbrace.test( data ) ? jQuery.parseJSON( data ) :
+                                               data;
+                       } catch( e ) {}
+
+                       // Make sure we set the data so it isn't changed later
+                       jQuery.data( elem, key, data );
+
+               } else {
+                       data = undefined;
+               }
+       }
+
+       return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+       var name;
+       for ( name in obj ) {
+
+               // if the public data object is empty, the private is still empty
+               if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+                       continue;
+               }
+               if ( name !== "toJSON" ) {
+                       return false;
+               }
+       }
+
+       return true;
+}
+jQuery.extend({
+       queue: function( elem, type, data ) {
+               var queue;
+
+               if ( elem ) {
+                       type = ( type || "fx" ) + "queue";
+                       queue = jQuery._data( elem, type );
+
+                       // Speed up dequeue by getting out quickly if this is just a lookup
+                       if ( data ) {
+                               if ( !queue || jQuery.isArray(data) ) {
+                                       queue = jQuery._data( elem, type, jQuery.makeArray(data) );
+                               } else {
+                                       queue.push( data );
+                               }
+                       }
+                       return queue || [];
+               }
+       },
+
+       dequeue: function( elem, type ) {
+               type = type || "fx";
+
+               var queue = jQuery.queue( elem, type ),
+                       startLength = queue.length,
+                       fn = queue.shift(),
+                       hooks = jQuery._queueHooks( elem, type ),
+                       next = function() {
+                               jQuery.dequeue( elem, type );
+                       };
+
+               // If the fx queue is dequeued, always remove the progress sentinel
+               if ( fn === "inprogress" ) {
+                       fn = queue.shift();
+                       startLength--;
+               }
+
+               hooks.cur = fn;
+               if ( fn ) {
+
+                       // Add a progress sentinel to prevent the fx queue from being
+                       // automatically dequeued
+                       if ( type === "fx" ) {
+                               queue.unshift( "inprogress" );
+                       }
+
+                       // clear up the last queue stop function
+                       delete hooks.stop;
+                       fn.call( elem, next, hooks );
+               }
+
+               if ( !startLength && hooks ) {
+                       hooks.empty.fire();
+               }
+       },
+
+       // not intended for public consumption - generates a queueHooks object, or returns the current one
+       _queueHooks: function( elem, type ) {
+               var key = type + "queueHooks";
+               return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+                       empty: jQuery.Callbacks("once memory").add(function() {
+                               jQuery._removeData( elem, type + "queue" );
+                               jQuery._removeData( elem, key );
+                       })
+               });
+       }
+});
+
+jQuery.fn.extend({
+       queue: function( type, data ) {
+               var setter = 2;
+
+               if ( typeof type !== "string" ) {
+                       data = type;
+                       type = "fx";
+                       setter--;
+               }
+
+               if ( arguments.length < setter ) {
+                       return jQuery.queue( this[0], type );
+               }
+
+               return data === undefined ?
+                       this :
+                       this.each(function() {
+                               var queue = jQuery.queue( this, type, data );
+
+                               // ensure a hooks for this queue
+                               jQuery._queueHooks( this, type );
+
+                               if ( type === "fx" && queue[0] !== "inprogress" ) {
+                                       jQuery.dequeue( this, type );
+                               }
+                       });
+       },
+       dequeue: function( type ) {
+               return this.each(function() {
+                       jQuery.dequeue( this, type );
+               });
+       },
+       // Based off of the plugin by Clint Helfers, with permission.
+       // http://blindsignals.com/index.php/2009/07/jquery-delay/
+       delay: function( time, type ) {
+               time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+               type = type || "fx";
+
+               return this.queue( type, function( next, hooks ) {
+                       var timeout = setTimeout( next, time );
+                       hooks.stop = function() {
+                               clearTimeout( timeout );
+                       };
+               });
+       },
+       clearQueue: function( type ) {
+               return this.queue( type || "fx", [] );
+       },
+       // Get a promise resolved when queues of a certain type
+       // are emptied (fx is the type by default)
+       promise: function( type, obj ) {
+               var tmp,
+                       count = 1,
+                       defer = jQuery.Deferred(),
+                       elements = this,
+                       i = this.length,
+                       resolve = function() {
+                               if ( !( --count ) ) {
+                                       defer.resolveWith( elements, [ elements ] );
+                               }
+                       };
+
+               if ( typeof type !== "string" ) {
+                       obj = type;
+                       type = undefined;
+               }
+               type = type || "fx";
+
+               while( i-- ) {
+                       tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+                       if ( tmp && tmp.empty ) {
+                               count++;
+                               tmp.empty.add( resolve );
+                       }
+               }
+               resolve();
+               return defer.promise( obj );
+       }
+});
+var nodeHook, boolHook,
+       rclass = /[\t\r\n]/g,
+       rreturn = /\r/g,
+       rfocusable = /^(?:input|select|textarea|button|object)$/i,
+       rclickable = /^(?:a|area)$/i,
+       rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
+       ruseDefault = /^(?:checked|selected)$/i,
+       getSetAttribute = jQuery.support.getSetAttribute,
+       getSetInput = jQuery.support.input;
+
+jQuery.fn.extend({
+       attr: function( name, value ) {
+               return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+       },
+
+       removeAttr: function( name ) {
+               return this.each(function() {
+                       jQuery.removeAttr( this, name );
+               });
+       },
+
+       prop: function( name, value ) {
+               return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+       },
+
+       removeProp: function( name ) {
+               name = jQuery.propFix[ name ] || name;
+               return this.each(function() {
+                       // try/catch handles cases where IE balks (such as removing a property on window)
+                       try {
+                               this[ name ] = undefined;
+                               delete this[ name ];
+                       } catch( e ) {}
+               });
+       },
+
+       addClass: function( value ) {
+               var classes, elem, cur, clazz, j,
+                       i = 0,
+                       len = this.length,
+                       proceed = typeof value === "string" && value;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each(function( j ) {
+                               jQuery( this ).addClass( value.call( this, j, this.className ) );
+                       });
+               }
+
+               if ( proceed ) {
+                       // The disjunction here is for better compressibility (see removeClass)
+                       classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+                       for ( ; i < len; i++ ) {
+                               elem = this[ i ];
+                               cur = elem.nodeType === 1 && ( elem.className ?
+                                       ( " " + elem.className + " " ).replace( rclass, " " ) :
+                                       " "
+                               );
+
+                               if ( cur ) {
+                                       j = 0;
+                                       while ( (clazz = classes[j++]) ) {
+                                               if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+                                                       cur += clazz + " ";
+                                               }
+                                       }
+                                       elem.className = jQuery.trim( cur );
+
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       removeClass: function( value ) {
+               var classes, elem, cur, clazz, j,
+                       i = 0,
+                       len = this.length,
+                       proceed = arguments.length === 0 || typeof value === "string" && value;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each(function( j ) {
+                               jQuery( this ).removeClass( value.call( this, j, this.className ) );
+                       });
+               }
+               if ( proceed ) {
+                       classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+                       for ( ; i < len; i++ ) {
+                               elem = this[ i ];
+                               // This expression is here for better compressibility (see addClass)
+                               cur = elem.nodeType === 1 && ( elem.className ?
+                                       ( " " + elem.className + " " ).replace( rclass, " " ) :
+                                       ""
+                               );
+
+                               if ( cur ) {
+                                       j = 0;
+                                       while ( (clazz = classes[j++]) ) {
+                                               // Remove *all* instances
+                                               while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+                                                       cur = cur.replace( " " + clazz + " ", " " );
+                                               }
+                                       }
+                                       elem.className = value ? jQuery.trim( cur ) : "";
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       toggleClass: function( value, stateVal ) {
+               var type = typeof value,
+                       isBool = typeof stateVal === "boolean";
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each(function( i ) {
+                               jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+                       });
+               }
+
+               return this.each(function() {
+                       if ( type === "string" ) {
+                               // toggle individual class names
+                               var className,
+                                       i = 0,
+                                       self = jQuery( this ),
+                                       state = stateVal,
+                                       classNames = value.match( core_rnotwhite ) || [];
+
+                               while ( (className = classNames[ i++ ]) ) {
+                                       // check each className given, space separated list
+                                       state = isBool ? state : !self.hasClass( className );
+                                       self[ state ? "addClass" : "removeClass" ]( className );
+                               }
+
+                       // Toggle whole class name
+                       } else if ( type === core_strundefined || type === "boolean" ) {
+                               if ( this.className ) {
+                                       // store className if set
+                                       jQuery._data( this, "__className__", this.className );
+                               }
+
+                               // If the element has a class name or if we're passed "false",
+                               // then remove the whole classname (if there was one, the above saved it).
+                               // Otherwise bring back whatever was previously saved (if anything),
+                               // falling back to the empty string if nothing was stored.
+                               this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+                       }
+               });
+       },
+
+       hasClass: function( selector ) {
+               var className = " " + selector + " ",
+                       i = 0,
+                       l = this.length;
+               for ( ; i < l; i++ ) {
+                       if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+                               return true;
+                       }
+               }
+
+               return false;
+       },
+
+       val: function( value ) {
+               var ret, hooks, isFunction,
+                       elem = this[0];
+
+               if ( !arguments.length ) {
+                       if ( elem ) {
+                               hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+                               if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+                                       return ret;
+                               }
+
+                               ret = elem.value;
+
+                               return typeof ret === "string" ?
+                                       // handle most common string cases
+                                       ret.replace(rreturn, "") :
+                                       // handle cases where value is null/undef or number
+                                       ret == null ? "" : ret;
+                       }
+
+                       return;
+               }
+
+               isFunction = jQuery.isFunction( value );
+
+               return this.each(function( i ) {
+                       var val,
+                               self = jQuery(this);
+
+                       if ( this.nodeType !== 1 ) {
+                               return;
+                       }
+
+                       if ( isFunction ) {
+                               val = value.call( this, i, self.val() );
+                       } else {
+                               val = value;
+                       }
+
+                       // Treat null/undefined as ""; convert numbers to string
+                       if ( val == null ) {
+                               val = "";
+                       } else if ( typeof val === "number" ) {
+                               val += "";
+                       } else if ( jQuery.isArray( val ) ) {
+                               val = jQuery.map(val, function ( value ) {
+                                       return value == null ? "" : value + "";
+                               });
+                       }
+
+                       hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+                       // If set returns undefined, fall back to normal setting
+                       if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+                               this.value = val;
+                       }
+               });
+       }
+});
+
+jQuery.extend({
+       valHooks: {
+               option: {
+                       get: function( elem ) {
+                               // attributes.value is undefined in Blackberry 4.7 but
+                               // uses .value. See #6932
+                               var val = elem.attributes.value;
+                               return !val || val.specified ? elem.value : elem.text;
+                       }
+               },
+               select: {
+                       get: function( elem ) {
+                               var value, option,
+                                       options = elem.options,
+                                       index = elem.selectedIndex,
+                                       one = elem.type === "select-one" || index < 0,
+                                       values = one ? null : [],
+                                       max = one ? index + 1 : options.length,
+                                       i = index < 0 ?
+                                               max :
+                                               one ? index : 0;
+
+                               // Loop through all the selected options
+                               for ( ; i < max; i++ ) {
+                                       option = options[ i ];
+
+                                       // oldIE doesn't update selected after form reset (#2551)
+                                       if ( ( option.selected || i === index ) &&
+                                                       // Don't return options that are disabled or in a disabled optgroup
+                                                       ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+                                                       ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+                                               // Get the specific value for the option
+                                               value = jQuery( option ).val();
+
+                                               // We don't need an array for one selects
+                                               if ( one ) {
+                                                       return value;
+                                               }
+
+                                               // Multi-Selects return an array
+                                               values.push( value );
+                                       }
+                               }
+
+                               return values;
+                       },
+
+                       set: function( elem, value ) {
+                               var values = jQuery.makeArray( value );
+
+                               jQuery(elem).find("option").each(function() {
+                                       this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+                               });
+
+                               if ( !values.length ) {
+                                       elem.selectedIndex = -1;
+                               }
+                               return values;
+                       }
+               }
+       },
+
+       attr: function( elem, name, value ) {
+               var hooks, notxml, ret,
+                       nType = elem.nodeType;
+
+               // don't get/set attributes on text, comment and attribute nodes
+               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
+
+               // Fallback to prop when attributes are not supported
+               if ( typeof elem.getAttribute === core_strundefined ) {
+                       return jQuery.prop( elem, name, value );
+               }
+
+               notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+               // All attributes are lowercase
+               // Grab necessary hook if one is defined
+               if ( notxml ) {
+                       name = name.toLowerCase();
+                       hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+               }
+
+               if ( value !== undefined ) {
+
+                       if ( value === null ) {
+                               jQuery.removeAttr( elem, name );
+
+                       } else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+                               return ret;
+
+                       } else {
+                               elem.setAttribute( name, value + "" );
+                               return value;
+                       }
+
+               } else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+                       return ret;
+
+               } else {
+
+                       // In IE9+, Flash objects don't have .getAttribute (#12945)
+                       // Support: IE9+
+                       if ( typeof elem.getAttribute !== core_strundefined ) {
+                               ret =  elem.getAttribute( name );
+                       }
+
+                       // Non-existent attributes return null, we normalize to undefined
+                       return ret == null ?
+                               undefined :
+                               ret;
+               }
+       },
+
+       removeAttr: function( elem, value ) {
+               var name, propName,
+                       i = 0,
+                       attrNames = value && value.match( core_rnotwhite );
+
+               if ( attrNames && elem.nodeType === 1 ) {
+                       while ( (name = attrNames[i++]) ) {
+                               propName = jQuery.propFix[ name ] || name;
+
+                               // Boolean attributes get special treatment (#10870)
+                               if ( rboolean.test( name ) ) {
+                                       // Set corresponding property to false for boolean attributes
+                                       // Also clear defaultChecked/defaultSelected (if appropriate) for IE<8
+                                       if ( !getSetAttribute && ruseDefault.test( name ) ) {
+                                               elem[ jQuery.camelCase( "default-" + name ) ] =
+                                                       elem[ propName ] = false;
+                                       } else {
+                                               elem[ propName ] = false;
+                                       }
+
+                               // See #9699 for explanation of this approach (setting first, then removal)
+                               } else {
+                                       jQuery.attr( elem, name, "" );
+                               }
+
+                               elem.removeAttribute( getSetAttribute ? name : propName );
+                       }
+               }
+       },
+
+       attrHooks: {
+               type: {
+                       set: function( elem, value ) {
+                               if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+                                       // Setting the type on a radio button after the value resets the value in IE6-9
+                                       // Reset value to default in case type is set after value during creation
+                                       var val = elem.value;
+                                       elem.setAttribute( "type", value );
+                                       if ( val ) {
+                                               elem.value = val;
+                                       }
+                                       return value;
+                               }
+                       }
+               }
+       },
+
+       propFix: {
+               tabindex: "tabIndex",
+               readonly: "readOnly",
+               "for": "htmlFor",
+               "class": "className",
+               maxlength: "maxLength",
+               cellspacing: "cellSpacing",
+               cellpadding: "cellPadding",
+               rowspan: "rowSpan",
+               colspan: "colSpan",
+               usemap: "useMap",
+               frameborder: "frameBorder",
+               contenteditable: "contentEditable"
+       },
+
+       prop: function( elem, name, value ) {
+               var ret, hooks, notxml,
+                       nType = elem.nodeType;
+
+               // don't get/set properties on text, comment and attribute nodes
+               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
+
+               notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+               if ( notxml ) {
+                       // Fix name and attach hooks
+                       name = jQuery.propFix[ name ] || name;
+                       hooks = jQuery.propHooks[ name ];
+               }
+
+               if ( value !== undefined ) {
+                       if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+                               return ret;
+
+                       } else {
+                               return ( elem[ name ] = value );
+                       }
+
+               } else {
+                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+                               return ret;
+
+                       } else {
+                               return elem[ name ];
+                       }
+               }
+       },
+
+       propHooks: {
+               tabIndex: {
+                       get: function( elem ) {
+                               // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+                               // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+                               var attributeNode = elem.getAttributeNode("tabindex");
+
+                               return attributeNode && attributeNode.specified ?
+                                       parseInt( attributeNode.value, 10 ) :
+                                       rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+                                               0 :
+                                               undefined;
+                       }
+               }
+       }
+});
+
+// Hook for boolean attributes
+boolHook = {
+       get: function( elem, name ) {
+               var
+                       // Use .prop to determine if this attribute is understood as boolean
+                       prop = jQuery.prop( elem, name ),
+
+                       // Fetch it accordingly
+                       attr = typeof prop === "boolean" && elem.getAttribute( name ),
+                       detail = typeof prop === "boolean" ?
+
+                               getSetInput && getSetAttribute ?
+                                       attr != null :
+                                       // oldIE fabricates an empty string for missing boolean attributes
+                                       // and conflates checked/selected into attroperties
+                                       ruseDefault.test( name ) ?
+                                               elem[ jQuery.camelCase( "default-" + name ) ] :
+                                               !!attr :
+
+                               // fetch an attribute node for properties not recognized as boolean
+                               elem.getAttributeNode( name );
+
+               return detail && detail.value !== false ?
+                       name.toLowerCase() :
+                       undefined;
+       },
+       set: function( elem, value, name ) {
+               if ( value === false ) {
+                       // Remove boolean attributes when set to false
+                       jQuery.removeAttr( elem, name );
+               } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+                       // IE<8 needs the *property* name
+                       elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
+
+               // Use defaultChecked and defaultSelected for oldIE
+               } else {
+                       elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
+               }
+
+               return name;
+       }
+};
+
+// fix oldIE value attroperty
+if ( !getSetInput || !getSetAttribute ) {
+       jQuery.attrHooks.value = {
+               get: function( elem, name ) {
+                       var ret = elem.getAttributeNode( name );
+                       return jQuery.nodeName( elem, "input" ) ?
+
+                               // Ignore the value *property* by using defaultValue
+                               elem.defaultValue :
+
+                               ret && ret.specified ? ret.value : undefined;
+               },
+               set: function( elem, value, name ) {
+                       if ( jQuery.nodeName( elem, "input" ) ) {
+                               // Does not return so that setAttribute is also used
+                               elem.defaultValue = value;
+                       } else {
+                               // Use nodeHook if defined (#1954); otherwise setAttribute is fine
+                               return nodeHook && nodeHook.set( elem, value, name );
+                       }
+               }
+       };
+}
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+       // Use this for any attribute in IE6/7
+       // This fixes almost every IE6/7 issue
+       nodeHook = jQuery.valHooks.button = {
+               get: function( elem, name ) {
+                       var ret = elem.getAttributeNode( name );
+                       return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
+                               ret.value :
+                               undefined;
+               },
+               set: function( elem, value, name ) {
+                       // Set the existing or create a new attribute node
+                       var ret = elem.getAttributeNode( name );
+                       if ( !ret ) {
+                               elem.setAttributeNode(
+                                       (ret = elem.ownerDocument.createAttribute( name ))
+                               );
+                       }
+
+                       ret.value = value += "";
+
+                       // Break association with cloned elements by also using setAttribute (#9646)
+                       return name === "value" || value === elem.getAttribute( name ) ?
+                               value :
+                               undefined;
+               }
+       };
+
+       // Set contenteditable to false on removals(#10429)
+       // Setting to empty string throws an error as an invalid value
+       jQuery.attrHooks.contenteditable = {
+               get: nodeHook.get,
+               set: function( elem, value, name ) {
+                       nodeHook.set( elem, value === "" ? false : value, name );
+               }
+       };
+
+       // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+       // This is for removals
+       jQuery.each([ "width", "height" ], function( i, name ) {
+               jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+                       set: function( elem, value ) {
+                               if ( value === "" ) {
+                                       elem.setAttribute( name, "auto" );
+                                       return value;
+                               }
+                       }
+               });
+       });
+}
+
+
+// Some attributes require a special call on IE
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !jQuery.support.hrefNormalized ) {
+       jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+               jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+                       get: function( elem ) {
+                               var ret = elem.getAttribute( name, 2 );
+                               return ret == null ? undefined : ret;
+                       }
+               });
+       });
+
+       // href/src property should get the full normalized URL (#10299/#12915)
+       jQuery.each([ "href", "src" ], function( i, name ) {
+               jQuery.propHooks[ name ] = {
+                       get: function( elem ) {
+                               return elem.getAttribute( name, 4 );
+                       }
+               };
+       });
+}
+
+if ( !jQuery.support.style ) {
+       jQuery.attrHooks.style = {
+               get: function( elem ) {
+                       // Return undefined in the case of empty string
+                       // Note: IE uppercases css property names, but if we were to .toLowerCase()
+                       // .cssText, that would destroy case senstitivity in URL's, like in "background"
+                       return elem.style.cssText || undefined;
+               },
+               set: function( elem, value ) {
+                       return ( elem.style.cssText = value + "" );
+               }
+       };
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+       jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+               get: function( elem ) {
+                       var parent = elem.parentNode;
+
+                       if ( parent ) {
+                               parent.selectedIndex;
+
+                               // Make sure that it also works with optgroups, see #5701
+                               if ( parent.parentNode ) {
+                                       parent.parentNode.selectedIndex;
+                               }
+                       }
+                       return null;
+               }
+       });
+}
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+       jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+       jQuery.each([ "radio", "checkbox" ], function() {
+               jQuery.valHooks[ this ] = {
+                       get: function( elem ) {
+                               // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+                               return elem.getAttribute("value") === null ? "on" : elem.value;
+                       }
+               };
+       });
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+       jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+               set: function( elem, value ) {
+                       if ( jQuery.isArray( value ) ) {
+                               return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+                       }
+               }
+       });
+});
+var rformElems = /^(?:input|select|textarea)$/i,
+       rkeyEvent = /^key/,
+       rmouseEvent = /^(?:mouse|contextmenu)|click/,
+       rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+       rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+function returnTrue() {
+       return true;
+}
+
+function returnFalse() {
+       return false;
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+       global: {},
+
+       add: function( elem, types, handler, data, selector ) {
+               var tmp, events, t, handleObjIn,
+                       special, eventHandle, handleObj,
+                       handlers, type, namespaces, origType,
+                       elemData = jQuery._data( elem );
+
+               // Don't attach events to noData or text/comment nodes (but allow plain objects)
+               if ( !elemData ) {
+                       return;
+               }
+
+               // Caller can pass in an object of custom data in lieu of the handler
+               if ( handler.handler ) {
+                       handleObjIn = handler;
+                       handler = handleObjIn.handler;
+                       selector = handleObjIn.selector;
+               }
+
+               // Make sure that the handler has a unique ID, used to find/remove it later
+               if ( !handler.guid ) {
+                       handler.guid = jQuery.guid++;
+               }
+
+               // Init the element's event structure and main handler, if this is the first
+               if ( !(events = elemData.events) ) {
+                       events = elemData.events = {};
+               }
+               if ( !(eventHandle = elemData.handle) ) {
+                       eventHandle = elemData.handle = function( e ) {
+                               // Discard the second event of a jQuery.event.trigger() and
+                               // when an event is called after a page has unloaded
+                               return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
+                                       jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+                                       undefined;
+                       };
+                       // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+                       eventHandle.elem = elem;
+               }
+
+               // Handle multiple events separated by a space
+               // jQuery(...).bind("mouseover mouseout", fn);
+               types = ( types || "" ).match( core_rnotwhite ) || [""];
+               t = types.length;
+               while ( t-- ) {
+                       tmp = rtypenamespace.exec( types[t] ) || [];
+                       type = origType = tmp[1];
+                       namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+                       // If event changes its type, use the special event handlers for the changed type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // If selector defined, determine special event api type, otherwise given type
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+
+                       // Update special based on newly reset type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // handleObj is passed to all event handlers
+                       handleObj = jQuery.extend({
+                               type: type,
+                               origType: origType,
+                               data: data,
+                               handler: handler,
+                               guid: handler.guid,
+                               selector: selector,
+                               needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+                               namespace: namespaces.join(".")
+                       }, handleObjIn );
+
+                       // Init the event handler queue if we're the first
+                       if ( !(handlers = events[ type ]) ) {
+                               handlers = events[ type ] = [];
+                               handlers.delegateCount = 0;
+
+                               // Only use addEventListener/attachEvent if the special events handler returns false
+                               if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+                                       // Bind the global event handler to the element
+                                       if ( elem.addEventListener ) {
+                                               elem.addEventListener( type, eventHandle, false );
+
+                                       } else if ( elem.attachEvent ) {
+                                               elem.attachEvent( "on" + type, eventHandle );
+                                       }
+                               }
+                       }
+
+                       if ( special.add ) {
+                               special.add.call( elem, handleObj );
+
+                               if ( !handleObj.handler.guid ) {
+                                       handleObj.handler.guid = handler.guid;
+                               }
+                       }
+
+                       // Add to the element's handler list, delegates in front
+                       if ( selector ) {
+                               handlers.splice( handlers.delegateCount++, 0, handleObj );
+                       } else {
+                               handlers.push( handleObj );
+                       }
+
+                       // Keep track of which events have ever been used, for event optimization
+                       jQuery.event.global[ type ] = true;
+               }
+
+               // Nullify elem to prevent memory leaks in IE
+               elem = null;
+       },
+
+       // Detach an event or set of events from an element
+       remove: function( elem, types, handler, selector, mappedTypes ) {
+               var j, handleObj, tmp,
+                       origCount, t, events,
+                       special, handlers, type,
+                       namespaces, origType,
+                       elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+
+               if ( !elemData || !(events = elemData.events) ) {
+                       return;
+               }
+
+               // Once for each type.namespace in types; type may be omitted
+               types = ( types || "" ).match( core_rnotwhite ) || [""];
+               t = types.length;
+               while ( t-- ) {
+                       tmp = rtypenamespace.exec( types[t] ) || [];
+                       type = origType = tmp[1];
+                       namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+                       // Unbind all events (on this namespace, if provided) for the element
+                       if ( !type ) {
+                               for ( type in events ) {
+                                       jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+                               }
+                               continue;
+                       }
+
+                       special = jQuery.event.special[ type ] || {};
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+                       handlers = events[ type ] || [];
+                       tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+
+                       // Remove matching events
+                       origCount = j = handlers.length;
+                       while ( j-- ) {
+                               handleObj = handlers[ j ];
+
+                               if ( ( mappedTypes || origType === handleObj.origType ) &&
+                                       ( !handler || handler.guid === handleObj.guid ) &&
+                                       ( !tmp || tmp.test( handleObj.namespace ) ) &&
+                                       ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+                                       handlers.splice( j, 1 );
+
+                                       if ( handleObj.selector ) {
+                                               handlers.delegateCount--;
+                                       }
+                                       if ( special.remove ) {
+                                               special.remove.call( elem, handleObj );
+                                       }
+                               }
+                       }
+
+                       // Remove generic event handler if we removed something and no more handlers exist
+                       // (avoids potential for endless recursion during removal of special event handlers)
+                       if ( origCount && !handlers.length ) {
+                               if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+                                       jQuery.removeEvent( elem, type, elemData.handle );
+                               }
+
+                               delete events[ type ];
+                       }
+               }
+
+               // Remove the expando if it's no longer used
+               if ( jQuery.isEmptyObject( events ) ) {
+                       delete elemData.handle;
+
+                       // removeData also checks for emptiness and clears the expando if empty
+                       // so use it instead of delete
+                       jQuery._removeData( elem, "events" );
+               }
+       },
+
+       trigger: function( event, data, elem, onlyHandlers ) {
+               var handle, ontype, cur,
+                       bubbleType, special, tmp, i,
+                       eventPath = [ elem || document ],
+                       type = core_hasOwn.call( event, "type" ) ? event.type : event,
+                       namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
+
+               cur = tmp = elem = elem || document;
+
+               // Don't do events on text and comment nodes
+               if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+                       return;
+               }
+
+               // focus/blur morphs to focusin/out; ensure we're not firing them right now
+               if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+                       return;
+               }
+
+               if ( type.indexOf(".") >= 0 ) {
+                       // Namespaced trigger; create a regexp to match event type in handle()
+                       namespaces = type.split(".");
+                       type = namespaces.shift();
+                       namespaces.sort();
+               }
+               ontype = type.indexOf(":") < 0 && "on" + type;
+
+               // Caller can pass in a jQuery.Event object, Object, or just an event type string
+               event = event[ jQuery.expando ] ?
+                       event :
+                       new jQuery.Event( type, typeof event === "object" && event );
+
+               event.isTrigger = true;
+               event.namespace = namespaces.join(".");
+               event.namespace_re = event.namespace ?
+                       new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+                       null;
+
+               // Clean up the event in case it is being reused
+               event.result = undefined;
+               if ( !event.target ) {
+                       event.target = elem;
+               }
+
+               // Clone any incoming data and prepend the event, creating the handler arg list
+               data = data == null ?
+                       [ event ] :
+                       jQuery.makeArray( data, [ event ] );
+
+               // Allow special events to draw outside the lines
+               special = jQuery.event.special[ type ] || {};
+               if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+                       return;
+               }
+
+               // Determine event propagation path in advance, per W3C events spec (#9951)
+               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+                       bubbleType = special.delegateType || type;
+                       if ( !rfocusMorph.test( bubbleType + type ) ) {
+                               cur = cur.parentNode;
+                       }
+                       for ( ; cur; cur = cur.parentNode ) {
+                               eventPath.push( cur );
+                               tmp = cur;
+                       }
+
+                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
+                       if ( tmp === (elem.ownerDocument || document) ) {
+                               eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+                       }
+               }
+
+               // Fire handlers on the event path
+               i = 0;
+               while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+
+                       event.type = i > 1 ?
+                               bubbleType :
+                               special.bindType || type;
+
+                       // jQuery handler
+                       handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+                       if ( handle ) {
+                               handle.apply( cur, data );
+                       }
+
+                       // Native handler
+                       handle = ontype && cur[ ontype ];
+                       if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
+                               event.preventDefault();
+                       }
+               }
+               event.type = type;
+
+               // If nobody prevented the default action, do it now
+               if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+                       if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+                               !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+                               // Call a native DOM method on the target with the same name name as the event.
+                               // Can't use an .isFunction() check here because IE6/7 fails that test.
+                               // Don't do default actions on window, that's where global variables be (#6170)
+                               if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
+
+                                       // Don't re-trigger an onFOO event when we call its FOO() method
+                                       tmp = elem[ ontype ];
+
+                                       if ( tmp ) {
+                                               elem[ ontype ] = null;
+                                       }
+
+                                       // Prevent re-triggering of the same event, since we already bubbled it above
+                                       jQuery.event.triggered = type;
+                                       try {
+                                               elem[ type ]();
+                                       } catch ( e ) {
+                                               // IE<9 dies on focus/blur to hidden element (#1486,#12518)
+                                               // only reproducible on winXP IE8 native, not IE9 in IE8 mode
+                                       }
+                                       jQuery.event.triggered = undefined;
+
+                                       if ( tmp ) {
+                                               elem[ ontype ] = tmp;
+                                       }
+                               }
+                       }
+               }
+
+               return event.result;
+       },
+
+       dispatch: function( event ) {
+
+               // Make a writable jQuery.Event from the native event object
+               event = jQuery.event.fix( event );
+
+               var i, ret, handleObj, matched, j,
+                       handlerQueue = [],
+                       args = core_slice.call( arguments ),
+                       handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
+                       special = jQuery.event.special[ event.type ] || {};
+
+               // Use the fix-ed jQuery.Event rather than the (read-only) native event
+               args[0] = event;
+               event.delegateTarget = this;
+
+               // Call the preDispatch hook for the mapped type, and let it bail if desired
+               if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+                       return;
+               }
+
+               // Determine handlers
+               handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+               // Run delegates first; they may want to stop propagation beneath us
+               i = 0;
+               while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+                       event.currentTarget = matched.elem;
+
+                       j = 0;
+                       while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+
+                               // Triggered event must either 1) have no namespace, or
+                               // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+                               if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
+
+                                       event.handleObj = handleObj;
+                                       event.data = handleObj.data;
+
+                                       ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+                                                       .apply( matched.elem, args );
+
+                                       if ( ret !== undefined ) {
+                                               if ( (event.result = ret) === false ) {
+                                                       event.preventDefault();
+                                                       event.stopPropagation();
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               // Call the postDispatch hook for the mapped type
+               if ( special.postDispatch ) {
+                       special.postDispatch.call( this, event );
+               }
+
+               return event.result;
+       },
+
+       handlers: function( event, handlers ) {
+               var sel, handleObj, matches, i,
+                       handlerQueue = [],
+                       delegateCount = handlers.delegateCount,
+                       cur = event.target;
+
+               // Find delegate handlers
+               // Black-hole SVG <use> instance trees (#13180)
+               // Avoid non-left-click bubbling in Firefox (#3861)
+               if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+
+                       for ( ; cur != this; cur = cur.parentNode || this ) {
+
+                               // Don't check non-elements (#13208)
+                               // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+                               if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
+                                       matches = [];
+                                       for ( i = 0; i < delegateCount; i++ ) {
+                                               handleObj = handlers[ i ];
+
+                                               // Don't conflict with Object.prototype properties (#13203)
+                                               sel = handleObj.selector + " ";
+
+                                               if ( matches[ sel ] === undefined ) {
+                                                       matches[ sel ] = handleObj.needsContext ?
+                                                               jQuery( sel, this ).index( cur ) >= 0 :
+                                                               jQuery.find( sel, this, null, [ cur ] ).length;
+                                               }
+                                               if ( matches[ sel ] ) {
+                                                       matches.push( handleObj );
+                                               }
+                                       }
+                                       if ( matches.length ) {
+                                               handlerQueue.push({ elem: cur, handlers: matches });
+                                       }
+                               }
+                       }
+               }
+
+               // Add the remaining (directly-bound) handlers
+               if ( delegateCount < handlers.length ) {
+                       handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+               }
+
+               return handlerQueue;
+       },
+
+       fix: function( event ) {
+               if ( event[ jQuery.expando ] ) {
+                       return event;
+               }
+
+               // Create a writable copy of the event object and normalize some properties
+               var i, prop, copy,
+                       type = event.type,
+                       originalEvent = event,
+                       fixHook = this.fixHooks[ type ];
+
+               if ( !fixHook ) {
+                       this.fixHooks[ type ] = fixHook =
+                               rmouseEvent.test( type ) ? this.mouseHooks :
+                               rkeyEvent.test( type ) ? this.keyHooks :
+                               {};
+               }
+               copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+               event = new jQuery.Event( originalEvent );
+
+               i = copy.length;
+               while ( i-- ) {
+                       prop = copy[ i ];
+                       event[ prop ] = originalEvent[ prop ];
+               }
+
+               // Support: IE<9
+               // Fix target property (#1925)
+               if ( !event.target ) {
+                       event.target = originalEvent.srcElement || document;
+               }
+
+               // Support: Chrome 23+, Safari?
+               // Target should not be a text node (#504, #13143)
+               if ( event.target.nodeType === 3 ) {
+                       event.target = event.target.parentNode;
+               }
+
+               // Support: IE<9
+               // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+               event.metaKey = !!event.metaKey;
+
+               return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+       },
+
+       // Includes some event props shared by KeyEvent and MouseEvent
+       props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+       fixHooks: {},
+
+       keyHooks: {
+               props: "char charCode key keyCode".split(" "),
+               filter: function( event, original ) {
+
+                       // Add which for key events
+                       if ( event.which == null ) {
+                               event.which = original.charCode != null ? original.charCode : original.keyCode;
+                       }
+
+                       return event;
+               }
+       },
+
+       mouseHooks: {
+               props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+               filter: function( event, original ) {
+                       var body, eventDoc, doc,
+                               button = original.button,
+                               fromElement = original.fromElement;
+
+                       // Calculate pageX/Y if missing and clientX/Y available
+                       if ( event.pageX == null && original.clientX != null ) {
+                               eventDoc = event.target.ownerDocument || document;
+                               doc = eventDoc.documentElement;
+                               body = eventDoc.body;
+
+                               event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+                               event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+                       }
+
+                       // Add relatedTarget, if necessary
+                       if ( !event.relatedTarget && fromElement ) {
+                               event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+                       }
+
+                       // Add which for click: 1 === left; 2 === middle; 3 === right
+                       // Note: button is not normalized, so don't use it
+                       if ( !event.which && button !== undefined ) {
+                               event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+                       }
+
+                       return event;
+               }
+       },
+
+       special: {
+               load: {
+                       // Prevent triggered image.load events from bubbling to window.load
+                       noBubble: true
+               },
+               click: {
+                       // For checkbox, fire native event so checked state will be right
+                       trigger: function() {
+                               if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
+                                       this.click();
+                                       return false;
+                               }
+                       }
+               },
+               focus: {
+                       // Fire native event if possible so blur/focus sequence is correct
+                       trigger: function() {
+                               if ( this !== document.activeElement && this.focus ) {
+                                       try {
+                                               this.focus();
+                                               return false;
+                                       } catch ( e ) {
+                                               // Support: IE<9
+                                               // If we error on focus to hidden element (#1486, #12518),
+                                               // let .trigger() run the handlers
+                                       }
+                               }
+                       },
+                       delegateType: "focusin"
+               },
+               blur: {
+                       trigger: function() {
+                               if ( this === document.activeElement && this.blur ) {
+                                       this.blur();
+                                       return false;
+                               }
+                       },
+                       delegateType: "focusout"
+               },
+
+               beforeunload: {
+                       postDispatch: function( event ) {
+
+                               // Even when returnValue equals to undefined Firefox will still show alert
+                               if ( event.result !== undefined ) {
+                                       event.originalEvent.returnValue = event.result;
+                               }
+                       }
+               }
+       },
+
+       simulate: function( type, elem, event, bubble ) {
+               // Piggyback on a donor event to simulate a different one.
+               // Fake originalEvent to avoid donor's stopPropagation, but if the
+               // simulated event prevents default then we do the same on the donor.
+               var e = jQuery.extend(
+                       new jQuery.Event(),
+                       event,
+                       { type: type,
+                               isSimulated: true,
+                               originalEvent: {}
+                       }
+               );
+               if ( bubble ) {
+                       jQuery.event.trigger( e, null, elem );
+               } else {
+                       jQuery.event.dispatch.call( elem, e );
+               }
+               if ( e.isDefaultPrevented() ) {
+                       event.preventDefault();
+               }
+       }
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+       function( elem, type, handle ) {
+               if ( elem.removeEventListener ) {
+                       elem.removeEventListener( type, handle, false );
+               }
+       } :
+       function( elem, type, handle ) {
+               var name = "on" + type;
+
+               if ( elem.detachEvent ) {
+
+                       // #8545, #7054, preventing memory leaks for custom events in IE6-8
+                       // detachEvent needed property on element, by name of that event, to properly expose it to GC
+                       if ( typeof elem[ name ] === core_strundefined ) {
+                               elem[ name ] = null;
+                       }
+
+                       elem.detachEvent( name, handle );
+               }
+       };
+
+jQuery.Event = function( src, props ) {
+       // Allow instantiation without the 'new' keyword
+       if ( !(this instanceof jQuery.Event) ) {
+               return new jQuery.Event( src, props );
+       }
+
+       // Event object
+       if ( src && src.type ) {
+               this.originalEvent = src;
+               this.type = src.type;
+
+               // Events bubbling up the document may have been marked as prevented
+               // by a handler lower down the tree; reflect the correct value.
+               this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+                       src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+       // Event type
+       } else {
+               this.type = src;
+       }
+
+       // Put explicitly provided properties onto the event object
+       if ( props ) {
+               jQuery.extend( this, props );
+       }
+
+       // Create a timestamp if incoming event doesn't have one
+       this.timeStamp = src && src.timeStamp || jQuery.now();
+
+       // Mark it as fixed
+       this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+       isDefaultPrevented: returnFalse,
+       isPropagationStopped: returnFalse,
+       isImmediatePropagationStopped: returnFalse,
+
+       preventDefault: function() {
+               var e = this.originalEvent;
+
+               this.isDefaultPrevented = returnTrue;
+               if ( !e ) {
+                       return;
+               }
+
+               // If preventDefault exists, run it on the original event
+               if ( e.preventDefault ) {
+                       e.preventDefault();
+
+               // Support: IE
+               // Otherwise set the returnValue property of the original event to false
+               } else {
+                       e.returnValue = false;
+               }
+       },
+       stopPropagation: function() {
+               var e = this.originalEvent;
+
+               this.isPropagationStopped = returnTrue;
+               if ( !e ) {
+                       return;
+               }
+               // If stopPropagation exists, run it on the original event
+               if ( e.stopPropagation ) {
+                       e.stopPropagation();
+               }
+
+               // Support: IE
+               // Set the cancelBubble property of the original event to true
+               e.cancelBubble = true;
+       },
+       stopImmediatePropagation: function() {
+               this.isImmediatePropagationStopped = returnTrue;
+               this.stopPropagation();
+       }
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+       mouseenter: "mouseover",
+       mouseleave: "mouseout"
+}, function( orig, fix ) {
+       jQuery.event.special[ orig ] = {
+               delegateType: fix,
+               bindType: fix,
+
+               handle: function( event ) {
+                       var ret,
+                               target = this,
+                               related = event.relatedTarget,
+                               handleObj = event.handleObj;
+
+                       // For mousenter/leave call the handler if related is outside the target.
+                       // NB: No relatedTarget if the mouse left/entered the browser window
+                       if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+                               event.type = handleObj.origType;
+                               ret = handleObj.handler.apply( this, arguments );
+                               event.type = fix;
+                       }
+                       return ret;
+               }
+       };
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+       jQuery.event.special.submit = {
+               setup: function() {
+                       // Only need this for delegated form submit events
+                       if ( jQuery.nodeName( this, "form" ) ) {
+                               return false;
+                       }
+
+                       // Lazy-add a submit handler when a descendant form may potentially be submitted
+                       jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+                               // Node name check avoids a VML-related crash in IE (#9807)
+                               var elem = e.target,
+                                       form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+                               if ( form && !jQuery._data( form, "submitBubbles" ) ) {
+                                       jQuery.event.add( form, "submit._submit", function( event ) {
+                                               event._submit_bubble = true;
+                                       });
+                                       jQuery._data( form, "submitBubbles", true );
+                               }
+                       });
+                       // return undefined since we don't need an event listener
+               },
+
+               postDispatch: function( event ) {
+                       // If form was submitted by the user, bubble the event up the tree
+                       if ( event._submit_bubble ) {
+                               delete event._submit_bubble;
+                               if ( this.parentNode && !event.isTrigger ) {
+                                       jQuery.event.simulate( "submit", this.parentNode, event, true );
+                               }
+                       }
+               },
+
+               teardown: function() {
+                       // Only need this for delegated form submit events
+                       if ( jQuery.nodeName( this, "form" ) ) {
+                               return false;
+                       }
+
+                       // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+                       jQuery.event.remove( this, "._submit" );
+               }
+       };
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+       jQuery.event.special.change = {
+
+               setup: function() {
+
+                       if ( rformElems.test( this.nodeName ) ) {
+                               // IE doesn't fire change on a check/radio until blur; trigger it on click
+                               // after a propertychange. Eat the blur-change in special.change.handle.
+                               // This still fires onchange a second time for check/radio after blur.
+                               if ( this.type === "checkbox" || this.type === "radio" ) {
+                                       jQuery.event.add( this, "propertychange._change", function( event ) {
+                                               if ( event.originalEvent.propertyName === "checked" ) {
+                                                       this._just_changed = true;
+                                               }
+                                       });
+                                       jQuery.event.add( this, "click._change", function( event ) {
+                                               if ( this._just_changed && !event.isTrigger ) {
+                                                       this._just_changed = false;
+                                               }
+                                               // Allow triggered, simulated change events (#11500)
+                                               jQuery.event.simulate( "change", this, event, true );
+                                       });
+                               }
+                               return false;
+                       }
+                       // Delegated event; lazy-add a change handler on descendant inputs
+                       jQuery.event.add( this, "beforeactivate._change", function( e ) {
+                               var elem = e.target;
+
+                               if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
+                                       jQuery.event.add( elem, "change._change", function( event ) {
+                                               if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+                                                       jQuery.event.simulate( "change", this.parentNode, event, true );
+                                               }
+                                       });
+                                       jQuery._data( elem, "changeBubbles", true );
+                               }
+                       });
+               },
+
+               handle: function( event ) {
+                       var elem = event.target;
+
+                       // Swallow native change events from checkbox/radio, we already triggered them above
+                       if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+                               return event.handleObj.handler.apply( this, arguments );
+                       }
+               },
+
+               teardown: function() {
+                       jQuery.event.remove( this, "._change" );
+
+                       return !rformElems.test( this.nodeName );
+               }
+       };
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+       jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+               // Attach a single capturing handler while someone wants focusin/focusout
+               var attaches = 0,
+                       handler = function( event ) {
+                               jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+                       };
+
+               jQuery.event.special[ fix ] = {
+                       setup: function() {
+                               if ( attaches++ === 0 ) {
+                                       document.addEventListener( orig, handler, true );
+                               }
+                       },
+                       teardown: function() {
+                               if ( --attaches === 0 ) {
+                                       document.removeEventListener( orig, handler, true );
+                               }
+                       }
+               };
+       });
+}
+
+jQuery.fn.extend({
+
+       on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+               var type, origFn;
+
+               // Types can be a map of types/handlers
+               if ( typeof types === "object" ) {
+                       // ( types-Object, selector, data )
+                       if ( typeof selector !== "string" ) {
+                               // ( types-Object, data )
+                               data = data || selector;
+                               selector = undefined;
+                       }
+                       for ( type in types ) {
+                               this.on( type, selector, data, types[ type ], one );
+                       }
+                       return this;
+               }
+
+               if ( data == null && fn == null ) {
+                       // ( types, fn )
+                       fn = selector;
+                       data = selector = undefined;
+               } else if ( fn == null ) {
+                       if ( typeof selector === "string" ) {
+                               // ( types, selector, fn )
+                               fn = data;
+                               data = undefined;
+                       } else {
+                               // ( types, data, fn )
+                               fn = data;
+                               data = selector;
+                               selector = undefined;
+                       }
+               }
+               if ( fn === false ) {
+                       fn = returnFalse;
+               } else if ( !fn ) {
+                       return this;
+               }
+
+               if ( one === 1 ) {
+                       origFn = fn;
+                       fn = function( event ) {
+                               // Can use an empty set, since event contains the info
+                               jQuery().off( event );
+                               return origFn.apply( this, arguments );
+                       };
+                       // Use same guid so caller can remove using origFn
+                       fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+               }
+               return this.each( function() {
+                       jQuery.event.add( this, types, fn, data, selector );
+               });
+       },
+       one: function( types, selector, data, fn ) {
+               return this.on( types, selector, data, fn, 1 );
+       },
+       off: function( types, selector, fn ) {
+               var handleObj, type;
+               if ( types && types.preventDefault && types.handleObj ) {
+                       // ( event )  dispatched jQuery.Event
+                       handleObj = types.handleObj;
+                       jQuery( types.delegateTarget ).off(
+                               handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+                               handleObj.selector,
+                               handleObj.handler
+                       );
+                       return this;
+               }
+               if ( typeof types === "object" ) {
+                       // ( types-object [, selector] )
+                       for ( type in types ) {
+                               this.off( type, selector, types[ type ] );
+                       }
+                       return this;
+               }
+               if ( selector === false || typeof selector === "function" ) {
+                       // ( types [, fn] )
+                       fn = selector;
+                       selector = undefined;
+               }
+               if ( fn === false ) {
+                       fn = returnFalse;
+               }
+               return this.each(function() {
+                       jQuery.event.remove( this, types, fn, selector );
+               });
+       },
+
+       bind: function( types, data, fn ) {
+               return this.on( types, null, data, fn );
+       },
+       unbind: function( types, fn ) {
+               return this.off( types, null, fn );
+       },
+
+       delegate: function( selector, types, data, fn ) {
+               return this.on( types, selector, data, fn );
+       },
+       undelegate: function( selector, types, fn ) {
+               // ( namespace ) or ( selector, types [, fn] )
+               return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+       },
+
+       trigger: function( type, data ) {
+               return this.each(function() {
+                       jQuery.event.trigger( type, data, this );
+               });
+       },
+       triggerHandler: function( type, data ) {
+               var elem = this[0];
+               if ( elem ) {
+                       return jQuery.event.trigger( type, data, elem, true );
+               }
+       }
+});
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://sizzlejs.com/
+ */
+(function( window, undefined ) {
+
+var i,
+       cachedruns,
+       Expr,
+       getText,
+       isXML,
+       compile,
+       hasDuplicate,
+       outermostContext,
+
+       // Local document vars
+       setDocument,
+       document,
+       docElem,
+       documentIsXML,
+       rbuggyQSA,
+       rbuggyMatches,
+       matches,
+       contains,
+       sortOrder,
+
+       // Instance-specific data
+       expando = "sizzle" + -(new Date()),
+       preferredDoc = window.document,
+       support = {},
+       dirruns = 0,
+       done = 0,
+       classCache = createCache(),
+       tokenCache = createCache(),
+       compilerCache = createCache(),
+
+       // General-purpose constants
+       strundefined = typeof undefined,
+       MAX_NEGATIVE = 1 << 31,
+
+       // Array methods
+       arr = [],
+       pop = arr.pop,
+       push = arr.push,
+       slice = arr.slice,
+       // Use a stripped-down indexOf if we can't use a native one
+       indexOf = arr.indexOf || function( elem ) {
+               var i = 0,
+                       len = this.length;
+               for ( ; i < len; i++ ) {
+                       if ( this[i] === elem ) {
+                               return i;
+                       }
+               }
+               return -1;
+       },
+
+
+       // Regular expressions
+
+       // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+       whitespace = "[\\x20\\t\\r\\n\\f]",
+       // http://www.w3.org/TR/css3-syntax/#characters
+       characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+       // Loosely modeled on CSS identifier characters
+       // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+       // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+       identifier = characterEncoding.replace( "w", "w#" ),
+
+       // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
+       operators = "([*^$|!~]?=)",
+       attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
+               "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
+
+       // Prefer arguments quoted,
+       //   then not containing pseudos/brackets,
+       //   then attribute selectors/non-parenthetical expressions,
+       //   then anything else
+       // These preferences are here to reduce the number of selectors
+       //   needing tokenize in the PSEUDO preFilter
+       pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
+
+       // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+       rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+       rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+       rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
+       rpseudo = new RegExp( pseudos ),
+       ridentifier = new RegExp( "^" + identifier + "$" ),
+
+       matchExpr = {
+               "ID": new RegExp( "^#(" + characterEncoding + ")" ),
+               "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+               "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
+               "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+               "ATTR": new RegExp( "^" + attributes ),
+               "PSEUDO": new RegExp( "^" + pseudos ),
+               "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+                       "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+                       "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+               // For use in libraries implementing .is()
+               // We use this for POS matching in `select`
+               "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+                       whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+       },
+
+       rsibling = /[\x20\t\r\n\f]*[+~]/,
+
+       rnative = /^[^{]+\{\s*\[native code/,
+
+       // Easily-parseable/retrievable ID or TAG or CLASS selectors
+       rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+       rinputs = /^(?:input|select|textarea|button)$/i,
+       rheader = /^h\d$/i,
+
+       rescape = /'|\\/g,
+       rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
+
+       // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+       runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
+       funescape = function( _, escaped ) {
+               var high = "0x" + escaped - 0x10000;
+               // NaN means non-codepoint
+               return high !== high ?
+                       escaped :
+                       // BMP codepoint
+                       high < 0 ?
+                               String.fromCharCode( high + 0x10000 ) :
+                               // Supplemental Plane codepoint (surrogate pair)
+                               String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+       };
+
+// Use a stripped-down slice if we can't use a native one
+try {
+       slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType;
+} catch ( e ) {
+       slice = function( i ) {
+               var elem,
+                       results = [];
+               while ( (elem = this[i++]) ) {
+                       results.push( elem );
+               }
+               return results;
+       };
+}
+
+/**
+ * For feature detection
+ * @param {Function} fn The function to test for native support
+ */
+function isNative( fn ) {
+       return rnative.test( fn + "" );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ *     property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *     deleting the oldest entry
+ */
+function createCache() {
+       var cache,
+               keys = [];
+
+       return (cache = function( key, value ) {
+               // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+               if ( keys.push( key += " " ) > Expr.cacheLength ) {
+                       // Only keep the most recent entries
+                       delete cache[ keys.shift() ];
+               }
+               return (cache[ key ] = value);
+       });
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+       fn[ expando ] = true;
+       return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+       var div = document.createElement("div");
+
+       try {
+               return fn( div );
+       } catch (e) {
+               return false;
+       } finally {
+               // release memory in IE
+               div = null;
+       }
+}
+
+function Sizzle( selector, context, results, seed ) {
+       var match, elem, m, nodeType,
+               // QSA vars
+               i, groups, old, nid, newContext, newSelector;
+
+       if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+               setDocument( context );
+       }
+
+       context = context || document;
+       results = results || [];
+
+       if ( !selector || typeof selector !== "string" ) {
+               return results;
+       }
+
+       if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+               return [];
+       }
+
+       if ( !documentIsXML && !seed ) {
+
+               // Shortcuts
+               if ( (match = rquickExpr.exec( selector )) ) {
+                       // Speed-up: Sizzle("#ID")
+                       if ( (m = match[1]) ) {
+                               if ( nodeType === 9 ) {
+                                       elem = context.getElementById( m );
+                                       // Check parentNode to catch when Blackberry 4.6 returns
+                                       // nodes that are no longer in the document #6963
+                                       if ( elem && elem.parentNode ) {
+                                               // Handle the case where IE, Opera, and Webkit return items
+                                               // by name instead of ID
+                                               if ( elem.id === m ) {
+                                                       results.push( elem );
+                                                       return results;
+                                               }
+                                       } else {
+                                               return results;
+                                       }
+                               } else {
+                                       // Context is not a document
+                                       if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+                                               contains( context, elem ) && elem.id === m ) {
+                                               results.push( elem );
+                                               return results;
+                                       }
+                               }
+
+                       // Speed-up: Sizzle("TAG")
+                       } else if ( match[2] ) {
+                               push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
+                               return results;
+
+                       // Speed-up: Sizzle(".CLASS")
+                       } else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) {
+                               push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
+                               return results;
+                       }
+               }
+
+               // QSA path
+               if ( support.qsa && !rbuggyQSA.test(selector) ) {
+                       old = true;
+                       nid = expando;
+                       newContext = context;
+                       newSelector = nodeType === 9 && selector;
+
+                       // qSA works strangely on Element-rooted queries
+                       // We can work around this by specifying an extra ID on the root
+                       // and working up from there (Thanks to Andrew Dupont for the technique)
+                       // IE 8 doesn't work on object elements
+                       if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+                               groups = tokenize( selector );
+
+                               if ( (old = context.getAttribute("id")) ) {
+                                       nid = old.replace( rescape, "\\$&" );
+                               } else {
+                                       context.setAttribute( "id", nid );
+                               }
+                               nid = "[id='" + nid + "'] ";
+
+                               i = groups.length;
+                               while ( i-- ) {
+                                       groups[i] = nid + toSelector( groups[i] );
+                               }
+                               newContext = rsibling.test( selector ) && context.parentNode || context;
+                               newSelector = groups.join(",");
+                       }
+
+                       if ( newSelector ) {
+                               try {
+                                       push.apply( results, slice.call( newContext.querySelectorAll(
+                                               newSelector
+                                       ), 0 ) );
+                                       return results;
+                               } catch(qsaError) {
+                               } finally {
+                                       if ( !old ) {
+                                               context.removeAttribute("id");
+                                       }
+                               }
+                       }
+               }
+       }
+
+       // All others
+       return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Detect xml
+ * @param {Element|Object} elem An element or a document
+ */
+isXML = Sizzle.isXML = function( elem ) {
+       // documentElement is verified for cases where it doesn't yet exist
+       // (such as loading iframes in IE - #4833)
+       var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+       return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+       var doc = node ? node.ownerDocument || node : preferredDoc;
+
+       // If no document and documentElement is available, return
+       if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+               return document;
+       }
+
+       // Set our document
+       document = doc;
+       docElem = doc.documentElement;
+
+       // Support tests
+       documentIsXML = isXML( doc );
+
+       // Check if getElementsByTagName("*") returns only elements
+       support.tagNameNoComments = assert(function( div ) {
+               div.appendChild( doc.createComment("") );
+               return !div.getElementsByTagName("*").length;
+       });
+
+       // Check if attributes should be retrieved by attribute nodes
+       support.attributes = assert(function( div ) {
+               div.innerHTML = "<select></select>";
+               var type = typeof div.lastChild.getAttribute("multiple");
+               // IE8 returns a string for some attributes even when not present
+               return type !== "boolean" && type !== "string";
+       });
+
+       // Check if getElementsByClassName can be trusted
+       support.getByClassName = assert(function( div ) {
+               // Opera can't find a second classname (in 9.6)
+               div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
+               if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
+                       return false;
+               }
+
+               // Safari 3.2 caches class attributes and doesn't catch changes
+               div.lastChild.className = "e";
+               return div.getElementsByClassName("e").length === 2;
+       });
+
+       // Check if getElementById returns elements by name
+       // Check if getElementsByName privileges form controls or returns elements by ID
+       support.getByName = assert(function( div ) {
+               // Inject content
+               div.id = expando + 0;
+               div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
+               docElem.insertBefore( div, docElem.firstChild );
+
+               // Test
+               var pass = doc.getElementsByName &&
+                       // buggy browsers will return fewer than the correct 2
+                       doc.getElementsByName( expando ).length === 2 +
+                       // buggy browsers will return more than the correct 0
+                       doc.getElementsByName( expando + 0 ).length;
+               support.getIdNotName = !doc.getElementById( expando );
+
+               // Cleanup
+               docElem.removeChild( div );
+
+               return pass;
+       });
+
+       // IE6/7 return modified attributes
+       Expr.attrHandle = assert(function( div ) {
+               div.innerHTML = "<a href='#'></a>";
+               return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
+                       div.firstChild.getAttribute("href") === "#";
+       }) ?
+               {} :
+               {
+                       "href": function( elem ) {
+                               return elem.getAttribute( "href", 2 );
+                       },
+                       "type": function( elem ) {
+                               return elem.getAttribute("type");
+                       }
+               };
+
+       // ID find and filter
+       if ( support.getIdNotName ) {
+               Expr.find["ID"] = function( id, context ) {
+                       if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+                               var m = context.getElementById( id );
+                               // Check parentNode to catch when Blackberry 4.6 returns
+                               // nodes that are no longer in the document #6963
+                               return m && m.parentNode ? [m] : [];
+                       }
+               };
+               Expr.filter["ID"] = function( id ) {
+                       var attrId = id.replace( runescape, funescape );
+                       return function( elem ) {
+                               return elem.getAttribute("id") === attrId;
+                       };
+               };
+       } else {
+               Expr.find["ID"] = function( id, context ) {
+                       if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+                               var m = context.getElementById( id );
+
+                               return m ?
+                                       m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
+                                               [m] :
+                                               undefined :
+                                       [];
+                       }
+               };
+               Expr.filter["ID"] =  function( id ) {
+                       var attrId = id.replace( runescape, funescape );
+                       return function( elem ) {
+                               var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+                               return node && node.value === attrId;
+                       };
+               };
+       }
+
+       // Tag
+       Expr.find["TAG"] = support.tagNameNoComments ?
+               function( tag, context ) {
+                       if ( typeof context.getElementsByTagName !== strundefined ) {
+                               return context.getElementsByTagName( tag );
+                       }
+               } :
+               function( tag, context ) {
+                       var elem,
+                               tmp = [],
+                               i = 0,
+                               results = context.getElementsByTagName( tag );
+
+                       // Filter out possible comments
+                       if ( tag === "*" ) {
+                               while ( (elem = results[i++]) ) {
+                                       if ( elem.nodeType === 1 ) {
+                                               tmp.push( elem );
+                                       }
+                               }
+
+                               return tmp;
+                       }
+                       return results;
+               };
+
+       // Name
+       Expr.find["NAME"] = support.getByName && function( tag, context ) {
+               if ( typeof context.getElementsByName !== strundefined ) {
+                       return context.getElementsByName( name );
+               }
+       };
+
+       // Class
+       Expr.find["CLASS"] = support.getByClassName && function( className, context ) {
+               if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) {
+                       return context.getElementsByClassName( className );
+               }
+       };
+
+       // QSA and matchesSelector support
+
+       // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+       rbuggyMatches = [];
+
+       // qSa(:focus) reports false when true (Chrome 21),
+       // no need to also add to buggyMatches since matches checks buggyQSA
+       // A support test would require too much code (would include document ready)
+       rbuggyQSA = [ ":focus" ];
+
+       if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
+               // Build QSA regex
+               // Regex strategy adopted from Diego Perini
+               assert(function( div ) {
+                       // Select is set to empty string on purpose
+                       // This is to test IE's treatment of not explictly
+                       // setting a boolean content attribute,
+                       // since its presence should be enough
+                       // http://bugs.jquery.com/ticket/12359
+                       div.innerHTML = "<select><option selected=''></option></select>";
+
+                       // IE8 - Some boolean attributes are not treated correctly
+                       if ( !div.querySelectorAll("[selected]").length ) {
+                               rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
+                       }
+
+                       // Webkit/Opera - :checked should return selected option elements
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+                       // IE8 throws error here and will not see later tests
+                       if ( !div.querySelectorAll(":checked").length ) {
+                               rbuggyQSA.push(":checked");
+                       }
+               });
+
+               assert(function( div ) {
+
+                       // Opera 10-12/IE8 - ^= $= *= and empty values
+                       // Should not select anything
+                       div.innerHTML = "<input type='hidden' i=''/>";
+                       if ( div.querySelectorAll("[i^='']").length ) {
+                               rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
+                       }
+
+                       // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+                       // IE8 throws error here and will not see later tests
+                       if ( !div.querySelectorAll(":enabled").length ) {
+                               rbuggyQSA.push( ":enabled", ":disabled" );
+                       }
+
+                       // Opera 10-11 does not throw on post-comma invalid pseudos
+                       div.querySelectorAll("*,:x");
+                       rbuggyQSA.push(",.*:");
+               });
+       }
+
+       if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||
+               docElem.mozMatchesSelector ||
+               docElem.webkitMatchesSelector ||
+               docElem.oMatchesSelector ||
+               docElem.msMatchesSelector) )) ) {
+
+               assert(function( div ) {
+                       // Check to see if it's possible to do matchesSelector
+                       // on a disconnected node (IE 9)
+                       support.disconnectedMatch = matches.call( div, "div" );
+
+                       // This should fail with an exception
+                       // Gecko does not error, returns false instead
+                       matches.call( div, "[s!='']:x" );
+                       rbuggyMatches.push( "!=", pseudos );
+               });
+       }
+
+       rbuggyQSA = new RegExp( rbuggyQSA.join("|") );
+       rbuggyMatches = new RegExp( rbuggyMatches.join("|") );
+
+       // Element contains another
+       // Purposefully does not implement inclusive descendent
+       // As in, an element does not contain itself
+       contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
+               function( a, b ) {
+                       var adown = a.nodeType === 9 ? a.documentElement : a,
+                               bup = b && b.parentNode;
+                       return a === bup || !!( bup && bup.nodeType === 1 && (
+                               adown.contains ?
+                                       adown.contains( bup ) :
+                                       a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+                       ));
+               } :
+               function( a, b ) {
+                       if ( b ) {
+                               while ( (b = b.parentNode) ) {
+                                       if ( b === a ) {
+                                               return true;
+                                       }
+                               }
+                       }
+                       return false;
+               };
+
+       // Document order sorting
+       sortOrder = docElem.compareDocumentPosition ?
+       function( a, b ) {
+               var compare;
+
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+               }
+
+               if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) {
+                       if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) {
+                               if ( a === doc || contains( preferredDoc, a ) ) {
+                                       return -1;
+                               }
+                               if ( b === doc || contains( preferredDoc, b ) ) {
+                                       return 1;
+                               }
+                               return 0;
+                       }
+                       return compare & 4 ? -1 : 1;
+               }
+
+               return a.compareDocumentPosition ? -1 : 1;
+       } :
+       function( a, b ) {
+               var cur,
+                       i = 0,
+                       aup = a.parentNode,
+                       bup = b.parentNode,
+                       ap = [ a ],
+                       bp = [ b ];
+
+               // Exit early if the nodes are identical
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+
+               // Parentless nodes are either documents or disconnected
+               } else if ( !aup || !bup ) {
+                       return a === doc ? -1 :
+                               b === doc ? 1 :
+                               aup ? -1 :
+                               bup ? 1 :
+                               0;
+
+               // If the nodes are siblings, we can do a quick check
+               } else if ( aup === bup ) {
+                       return siblingCheck( a, b );
+               }
+
+               // Otherwise we need full lists of their ancestors for comparison
+               cur = a;
+               while ( (cur = cur.parentNode) ) {
+                       ap.unshift( cur );
+               }
+               cur = b;
+               while ( (cur = cur.parentNode) ) {
+                       bp.unshift( cur );
+               }
+
+               // Walk down the tree looking for a discrepancy
+               while ( ap[i] === bp[i] ) {
+                       i++;
+               }
+
+               return i ?
+                       // Do a sibling check if the nodes have a common ancestor
+                       siblingCheck( ap[i], bp[i] ) :
+
+                       // Otherwise nodes in our document sort first
+                       ap[i] === preferredDoc ? -1 :
+                       bp[i] === preferredDoc ? 1 :
+                       0;
+       };
+
+       // Always assume the presence of duplicates if sort doesn't
+       // pass them to our comparison function (as in Google Chrome).
+       hasDuplicate = false;
+       [0, 0].sort( sortOrder );
+       support.detectDuplicates = hasDuplicate;
+
+       return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+       return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+       // Set document vars if needed
+       if ( ( elem.ownerDocument || elem ) !== document ) {
+               setDocument( elem );
+       }
+
+       // Make sure that attribute selectors are quoted
+       expr = expr.replace( rattributeQuotes, "='$1']" );
+
+       // rbuggyQSA always contains :focus, so no need for an existence check
+       if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {
+               try {
+                       var ret = matches.call( elem, expr );
+
+                       // IE 9's matchesSelector returns false on disconnected nodes
+                       if ( ret || support.disconnectedMatch ||
+                                       // As well, disconnected nodes are said to be in a document
+                                       // fragment in IE 9
+                                       elem.document && elem.document.nodeType !== 11 ) {
+                               return ret;
+                       }
+               } catch(e) {}
+       }
+
+       return Sizzle( expr, document, null, [elem] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+       // Set document vars if needed
+       if ( ( context.ownerDocument || context ) !== document ) {
+               setDocument( context );
+       }
+       return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+       var val;
+
+       // Set document vars if needed
+       if ( ( elem.ownerDocument || elem ) !== document ) {
+               setDocument( elem );
+       }
+
+       if ( !documentIsXML ) {
+               name = name.toLowerCase();
+       }
+       if ( (val = Expr.attrHandle[ name ]) ) {
+               return val( elem );
+       }
+       if ( documentIsXML || support.attributes ) {
+               return elem.getAttribute( name );
+       }
+       return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?
+               name :
+               val && val.specified ? val.value : null;
+};
+
+Sizzle.error = function( msg ) {
+       throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+// Document sorting and removing duplicates
+Sizzle.uniqueSort = function( results ) {
+       var elem,
+               duplicates = [],
+               i = 1,
+               j = 0;
+
+       // Unless we *know* we can detect duplicates, assume their presence
+       hasDuplicate = !support.detectDuplicates;
+       results.sort( sortOrder );
+
+       if ( hasDuplicate ) {
+               for ( ; (elem = results[i]); i++ ) {
+                       if ( elem === results[ i - 1 ] ) {
+                               j = duplicates.push( i );
+                       }
+               }
+               while ( j-- ) {
+                       results.splice( duplicates[ j ], 1 );
+               }
+       }
+
+       return results;
+};
+
+function siblingCheck( a, b ) {
+       var cur = b && a,
+               diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE );
+
+       // Use IE sourceIndex if available on both nodes
+       if ( diff ) {
+               return diff;
+       }
+
+       // Check if b follows a
+       if ( cur ) {
+               while ( (cur = cur.nextSibling) ) {
+                       if ( cur === b ) {
+                               return -1;
+                       }
+               }
+       }
+
+       return a ? 1 : -1;
+}
+
+// Returns a function to use in pseudos for input types
+function createInputPseudo( type ) {
+       return function( elem ) {
+               var name = elem.nodeName.toLowerCase();
+               return name === "input" && elem.type === type;
+       };
+}
+
+// Returns a function to use in pseudos for buttons
+function createButtonPseudo( type ) {
+       return function( elem ) {
+               var name = elem.nodeName.toLowerCase();
+               return (name === "input" || name === "button") && elem.type === type;
+       };
+}
+
+// Returns a function to use in pseudos for positionals
+function createPositionalPseudo( fn ) {
+       return markFunction(function( argument ) {
+               argument = +argument;
+               return markFunction(function( seed, matches ) {
+                       var j,
+                               matchIndexes = fn( [], seed.length, argument ),
+                               i = matchIndexes.length;
+
+                       // Match elements found at the specified indexes
+                       while ( i-- ) {
+                               if ( seed[ (j = matchIndexes[i]) ] ) {
+                                       seed[j] = !(matches[j] = seed[j]);
+                               }
+                       }
+               });
+       });
+}
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+       var node,
+               ret = "",
+               i = 0,
+               nodeType = elem.nodeType;
+
+       if ( !nodeType ) {
+               // If no nodeType, this is expected to be an array
+               for ( ; (node = elem[i]); i++ ) {
+                       // Do not traverse comment nodes
+                       ret += getText( node );
+               }
+       } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+               // Use textContent for elements
+               // innerText usage removed for consistency of new lines (see #11153)
+               if ( typeof elem.textContent === "string" ) {
+                       return elem.textContent;
+               } else {
+                       // Traverse its children
+                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+                               ret += getText( elem );
+                       }
+               }
+       } else if ( nodeType === 3 || nodeType === 4 ) {
+               return elem.nodeValue;
+       }
+       // Do not include comment or processing instruction nodes
+
+       return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+       // Can be adjusted by the user
+       cacheLength: 50,
+
+       createPseudo: markFunction,
+
+       match: matchExpr,
+
+       find: {},
+
+       relative: {
+               ">": { dir: "parentNode", first: true },
+               " ": { dir: "parentNode" },
+               "+": { dir: "previousSibling", first: true },
+               "~": { dir: "previousSibling" }
+       },
+
+       preFilter: {
+               "ATTR": function( match ) {
+                       match[1] = match[1].replace( runescape, funescape );
+
+                       // Move the given value to match[3] whether quoted or unquoted
+                       match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
+
+                       if ( match[2] === "~=" ) {
+                               match[3] = " " + match[3] + " ";
+                       }
+
+                       return match.slice( 0, 4 );
+               },
+
+               "CHILD": function( match ) {
+                       /* matches from matchExpr["CHILD"]
+                               1 type (only|nth|...)
+                               2 what (child|of-type)
+                               3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+                               4 xn-component of xn+y argument ([+-]?\d*n|)
+                               5 sign of xn-component
+                               6 x of xn-component
+                               7 sign of y-component
+                               8 y of y-component
+                       */
+                       match[1] = match[1].toLowerCase();
+
+                       if ( match[1].slice( 0, 3 ) === "nth" ) {
+                               // nth-* requires argument
+                               if ( !match[3] ) {
+                                       Sizzle.error( match[0] );
+                               }
+
+                               // numeric x and y parameters for Expr.filter.CHILD
+                               // remember that false/true cast respectively to 0/1
+                               match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+                               match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+                       // other types prohibit arguments
+                       } else if ( match[3] ) {
+                               Sizzle.error( match[0] );
+                       }
+
+                       return match;
+               },
+
+               "PSEUDO": function( match ) {
+                       var excess,
+                               unquoted = !match[5] && match[2];
+
+                       if ( matchExpr["CHILD"].test( match[0] ) ) {
+                               return null;
+                       }
+
+                       // Accept quoted arguments as-is
+                       if ( match[4] ) {
+                               match[2] = match[4];
+
+                       // Strip excess characters from unquoted arguments
+                       } else if ( unquoted && rpseudo.test( unquoted ) &&
+                               // Get excess from tokenize (recursively)
+                               (excess = tokenize( unquoted, true )) &&
+                               // advance to the next closing parenthesis
+                               (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+                               // excess is a negative index
+                               match[0] = match[0].slice( 0, excess );
+                               match[2] = unquoted.slice( 0, excess );
+                       }
+
+                       // Return only captures needed by the pseudo filter method (type and argument)
+                       return match.slice( 0, 3 );
+               }
+       },
+
+       filter: {
+
+               "TAG": function( nodeName ) {
+                       if ( nodeName === "*" ) {
+                               return function() { return true; };
+                       }
+
+                       nodeName = nodeName.replace( runescape, funescape ).toLowerCase();
+                       return function( elem ) {
+                               return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+                       };
+               },
+
+               "CLASS": function( className ) {
+                       var pattern = classCache[ className + " " ];
+
+                       return pattern ||
+                               (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+                               classCache( className, function( elem ) {
+                                       return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
+                               });
+               },
+
+               "ATTR": function( name, operator, check ) {
+                       return function( elem ) {
+                               var result = Sizzle.attr( elem, name );
+
+                               if ( result == null ) {
+                                       return operator === "!=";
+                               }
+                               if ( !operator ) {
+                                       return true;
+                               }
+
+                               result += "";
+
+                               return operator === "=" ? result === check :
+                                       operator === "!=" ? result !== check :
+                                       operator === "^=" ? check && result.indexOf( check ) === 0 :
+                                       operator === "*=" ? check && result.indexOf( check ) > -1 :
+                                       operator === "$=" ? check && result.slice( -check.length ) === check :
+                                       operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+                                       operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+                                       false;
+                       };
+               },
+
+               "CHILD": function( type, what, argument, first, last ) {
+                       var simple = type.slice( 0, 3 ) !== "nth",
+                               forward = type.slice( -4 ) !== "last",
+                               ofType = what === "of-type";
+
+                       return first === 1 && last === 0 ?
+
+                               // Shortcut for :nth-*(n)
+                               function( elem ) {
+                                       return !!elem.parentNode;
+                               } :
+
+                               function( elem, context, xml ) {
+                                       var cache, outerCache, node, diff, nodeIndex, start,
+                                               dir = simple !== forward ? "nextSibling" : "previousSibling",
+                                               parent = elem.parentNode,
+                                               name = ofType && elem.nodeName.toLowerCase(),
+                                               useCache = !xml && !ofType;
+
+                                       if ( parent ) {
+
+                                               // :(first|last|only)-(child|of-type)
+                                               if ( simple ) {
+                                                       while ( dir ) {
+                                                               node = elem;
+                                                               while ( (node = node[ dir ]) ) {
+                                                                       if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+                                                                               return false;
+                                                                       }
+                                                               }
+                                                               // Reverse direction for :only-* (if we haven't yet done so)
+                                                               start = dir = type === "only" && !start && "nextSibling";
+                                                       }
+                                                       return true;
+                                               }
+
+                                               start = [ forward ? parent.firstChild : parent.lastChild ];
+
+                                               // non-xml :nth-child(...) stores cache data on `parent`
+                                               if ( forward && useCache ) {
+                                                       // Seek `elem` from a previously-cached index
+                                                       outerCache = parent[ expando ] || (parent[ expando ] = {});
+                                                       cache = outerCache[ type ] || [];
+                                                       nodeIndex = cache[0] === dirruns && cache[1];
+                                                       diff = cache[0] === dirruns && cache[2];
+                                                       node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+                                                       while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+                                                               // Fallback to seeking `elem` from the start
+                                                               (diff = nodeIndex = 0) || start.pop()) ) {
+
+                                                               // When found, cache indexes on `parent` and break
+                                                               if ( node.nodeType === 1 && ++diff && node === elem ) {
+                                                                       outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+                                                                       break;
+                                                               }
+                                                       }
+
+                                               // Use previously-cached element index if available
+                                               } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+                                                       diff = cache[1];
+
+                                               // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+                                               } else {
+                                                       // Use the same loop as above to seek `elem` from the start
+                                                       while ( (node = ++nodeIndex && node && node[ dir ] ||
+                                                               (diff = nodeIndex = 0) || start.pop()) ) {
+
+                                                               if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+                                                                       // Cache the index of each encountered element
+                                                                       if ( useCache ) {
+                                                                               (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+                                                                       }
+
+                                                                       if ( node === elem ) {
+                                                                               break;
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+
+                                               // Incorporate the offset, then check against cycle size
+                                               diff -= last;
+                                               return diff === first || ( diff % first === 0 && diff / first >= 0 );
+                                       }
+                               };
+               },
+
+               "PSEUDO": function( pseudo, argument ) {
+                       // pseudo-class names are case-insensitive
+                       // http://www.w3.org/TR/selectors/#pseudo-classes
+                       // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+                       // Remember that setFilters inherits from pseudos
+                       var args,
+                               fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+                                       Sizzle.error( "unsupported pseudo: " + pseudo );
+
+                       // The user may use createPseudo to indicate that
+                       // arguments are needed to create the filter function
+                       // just as Sizzle does
+                       if ( fn[ expando ] ) {
+                               return fn( argument );
+                       }
+
+                       // But maintain support for old signatures
+                       if ( fn.length > 1 ) {
+                               args = [ pseudo, pseudo, "", argument ];
+                               return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+                                       markFunction(function( seed, matches ) {
+                                               var idx,
+                                                       matched = fn( seed, argument ),
+                                                       i = matched.length;
+                                               while ( i-- ) {
+                                                       idx = indexOf.call( seed, matched[i] );
+                                                       seed[ idx ] = !( matches[ idx ] = matched[i] );
+                                               }
+                                       }) :
+                                       function( elem ) {
+                                               return fn( elem, 0, args );
+                                       };
+                       }
+
+                       return fn;
+               }
+       },
+
+       pseudos: {
+               // Potentially complex pseudos
+               "not": markFunction(function( selector ) {
+                       // Trim the selector passed to compile
+                       // to avoid treating leading and trailing
+                       // spaces as combinators
+                       var input = [],
+                               results = [],
+                               matcher = compile( selector.replace( rtrim, "$1" ) );
+
+                       return matcher[ expando ] ?
+                               markFunction(function( seed, matches, context, xml ) {
+                                       var elem,
+                                               unmatched = matcher( seed, null, xml, [] ),
+                                               i = seed.length;
+
+                                       // Match elements unmatched by `matcher`
+                                       while ( i-- ) {
+                                               if ( (elem = unmatched[i]) ) {
+                                                       seed[i] = !(matches[i] = elem);
+                                               }
+                                       }
+                               }) :
+                               function( elem, context, xml ) {
+                                       input[0] = elem;
+                                       matcher( input, null, xml, results );
+                                       return !results.pop();
+                               };
+               }),
+
+               "has": markFunction(function( selector ) {
+                       return function( elem ) {
+                               return Sizzle( selector, elem ).length > 0;
+                       };
+               }),
+
+               "contains": markFunction(function( text ) {
+                       return function( elem ) {
+                               return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+                       };
+               }),
+
+               // "Whether an element is represented by a :lang() selector
+               // is based solely on the element's language value
+               // being equal to the identifier C,
+               // or beginning with the identifier C immediately followed by "-".
+               // The matching of C against the element's language value is performed case-insensitively.
+               // The identifier C does not have to be a valid language name."
+               // http://www.w3.org/TR/selectors/#lang-pseudo
+               "lang": markFunction( function( lang ) {
+                       // lang value must be a valid identifider
+                       if ( !ridentifier.test(lang || "") ) {
+                               Sizzle.error( "unsupported lang: " + lang );
+                       }
+                       lang = lang.replace( runescape, funescape ).toLowerCase();
+                       return function( elem ) {
+                               var elemLang;
+                               do {
+                                       if ( (elemLang = documentIsXML ?
+                                               elem.getAttribute("xml:lang") || elem.getAttribute("lang") :
+                                               elem.lang) ) {
+
+                                               elemLang = elemLang.toLowerCase();
+                                               return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+                                       }
+                               } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+                               return false;
+                       };
+               }),
+
+               // Miscellaneous
+               "target": function( elem ) {
+                       var hash = window.location && window.location.hash;
+                       return hash && hash.slice( 1 ) === elem.id;
+               },
+
+               "root": function( elem ) {
+                       return elem === docElem;
+               },
+
+               "focus": function( elem ) {
+                       return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+               },
+
+               // Boolean properties
+               "enabled": function( elem ) {
+                       return elem.disabled === false;
+               },
+
+               "disabled": function( elem ) {
+                       return elem.disabled === true;
+               },
+
+               "checked": function( elem ) {
+                       // In CSS3, :checked should return both checked and selected elements
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+                       var nodeName = elem.nodeName.toLowerCase();
+                       return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+               },
+
+               "selected": function( elem ) {
+                       // Accessing this property makes selected-by-default
+                       // options in Safari work properly
+                       if ( elem.parentNode ) {
+                               elem.parentNode.selectedIndex;
+                       }
+
+                       return elem.selected === true;
+               },
+
+               // Contents
+               "empty": function( elem ) {
+                       // http://www.w3.org/TR/selectors/#empty-pseudo
+                       // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
+                       //   not comment, processing instructions, or others
+                       // Thanks to Diego Perini for the nodeName shortcut
+                       //   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
+                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+                               if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               },
+
+               "parent": function( elem ) {
+                       return !Expr.pseudos["empty"]( elem );
+               },
+
+               // Element/input types
+               "header": function( elem ) {
+                       return rheader.test( elem.nodeName );
+               },
+
+               "input": function( elem ) {
+                       return rinputs.test( elem.nodeName );
+               },
+
+               "button": function( elem ) {
+                       var name = elem.nodeName.toLowerCase();
+                       return name === "input" && elem.type === "button" || name === "button";
+               },
+
+               "text": function( elem ) {
+                       var attr;
+                       // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+                       // use getAttribute instead to test this case
+                       return elem.nodeName.toLowerCase() === "input" &&
+                               elem.type === "text" &&
+                               ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
+               },
+
+               // Position-in-collection
+               "first": createPositionalPseudo(function() {
+                       return [ 0 ];
+               }),
+
+               "last": createPositionalPseudo(function( matchIndexes, length ) {
+                       return [ length - 1 ];
+               }),
+
+               "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       return [ argument < 0 ? argument + length : argument ];
+               }),
+
+               "even": createPositionalPseudo(function( matchIndexes, length ) {
+                       var i = 0;
+                       for ( ; i < length; i += 2 ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "odd": createPositionalPseudo(function( matchIndexes, length ) {
+                       var i = 1;
+                       for ( ; i < length; i += 2 ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       var i = argument < 0 ? argument + length : argument;
+                       for ( ; --i >= 0; ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       var i = argument < 0 ? argument + length : argument;
+                       for ( ; ++i < length; ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               })
+       }
+};
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+       Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+       Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+function tokenize( selector, parseOnly ) {
+       var matched, match, tokens, type,
+               soFar, groups, preFilters,
+               cached = tokenCache[ selector + " " ];
+
+       if ( cached ) {
+               return parseOnly ? 0 : cached.slice( 0 );
+       }
+
+       soFar = selector;
+       groups = [];
+       preFilters = Expr.preFilter;
+
+       while ( soFar ) {
+
+               // Comma and first run
+               if ( !matched || (match = rcomma.exec( soFar )) ) {
+                       if ( match ) {
+                               // Don't consume trailing commas as valid
+                               soFar = soFar.slice( match[0].length ) || soFar;
+                       }
+                       groups.push( tokens = [] );
+               }
+
+               matched = false;
+
+               // Combinators
+               if ( (match = rcombinators.exec( soFar )) ) {
+                       matched = match.shift();
+                       tokens.push( {
+                               value: matched,
+                               // Cast descendant combinators to space
+                               type: match[0].replace( rtrim, " " )
+                       } );
+                       soFar = soFar.slice( matched.length );
+               }
+
+               // Filters
+               for ( type in Expr.filter ) {
+                       if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+                               (match = preFilters[ type ]( match ))) ) {
+                               matched = match.shift();
+                               tokens.push( {
+                                       value: matched,
+                                       type: type,
+                                       matches: match
+                               } );
+                               soFar = soFar.slice( matched.length );
+                       }
+               }
+
+               if ( !matched ) {
+                       break;
+               }
+       }
+
+       // Return the length of the invalid excess
+       // if we're just parsing
+       // Otherwise, throw an error or return tokens
+       return parseOnly ?
+               soFar.length :
+               soFar ?
+                       Sizzle.error( selector ) :
+                       // Cache the tokens
+                       tokenCache( selector, groups ).slice( 0 );
+}
+
+function toSelector( tokens ) {
+       var i = 0,
+               len = tokens.length,
+               selector = "";
+       for ( ; i < len; i++ ) {
+               selector += tokens[i].value;
+       }
+       return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+       var dir = combinator.dir,
+               checkNonElements = base && dir === "parentNode",
+               doneName = done++;
+
+       return combinator.first ?
+               // Check against closest ancestor/preceding element
+               function( elem, context, xml ) {
+                       while ( (elem = elem[ dir ]) ) {
+                               if ( elem.nodeType === 1 || checkNonElements ) {
+                                       return matcher( elem, context, xml );
+                               }
+                       }
+               } :
+
+               // Check against all ancestor/preceding elements
+               function( elem, context, xml ) {
+                       var data, cache, outerCache,
+                               dirkey = dirruns + " " + doneName;
+
+                       // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+                       if ( xml ) {
+                               while ( (elem = elem[ dir ]) ) {
+                                       if ( elem.nodeType === 1 || checkNonElements ) {
+                                               if ( matcher( elem, context, xml ) ) {
+                                                       return true;
+                                               }
+                                       }
+                               }
+                       } else {
+                               while ( (elem = elem[ dir ]) ) {
+                                       if ( elem.nodeType === 1 || checkNonElements ) {
+                                               outerCache = elem[ expando ] || (elem[ expando ] = {});
+                                               if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
+                                                       if ( (data = cache[1]) === true || data === cachedruns ) {
+                                                               return data === true;
+                                                       }
+                                               } else {
+                                                       cache = outerCache[ dir ] = [ dirkey ];
+                                                       cache[1] = matcher( elem, context, xml ) || cachedruns;
+                                                       if ( cache[1] === true ) {
+                                                               return true;
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               };
+}
+
+function elementMatcher( matchers ) {
+       return matchers.length > 1 ?
+               function( elem, context, xml ) {
+                       var i = matchers.length;
+                       while ( i-- ) {
+                               if ( !matchers[i]( elem, context, xml ) ) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               } :
+               matchers[0];
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+       var elem,
+               newUnmatched = [],
+               i = 0,
+               len = unmatched.length,
+               mapped = map != null;
+
+       for ( ; i < len; i++ ) {
+               if ( (elem = unmatched[i]) ) {
+                       if ( !filter || filter( elem, context, xml ) ) {
+                               newUnmatched.push( elem );
+                               if ( mapped ) {
+                                       map.push( i );
+                               }
+                       }
+               }
+       }
+
+       return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+       if ( postFilter && !postFilter[ expando ] ) {
+               postFilter = setMatcher( postFilter );
+       }
+       if ( postFinder && !postFinder[ expando ] ) {
+               postFinder = setMatcher( postFinder, postSelector );
+       }
+       return markFunction(function( seed, results, context, xml ) {
+               var temp, i, elem,
+                       preMap = [],
+                       postMap = [],
+                       preexisting = results.length,
+
+                       // Get initial elements from seed or context
+                       elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+                       // Prefilter to get matcher input, preserving a map for seed-results synchronization
+                       matcherIn = preFilter && ( seed || !selector ) ?
+                               condense( elems, preMap, preFilter, context, xml ) :
+                               elems,
+
+                       matcherOut = matcher ?
+                               // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+                               postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+                                       // ...intermediate processing is necessary
+                                       [] :
+
+                                       // ...otherwise use results directly
+                                       results :
+                               matcherIn;
+
+               // Find primary matches
+               if ( matcher ) {
+                       matcher( matcherIn, matcherOut, context, xml );
+               }
+
+               // Apply postFilter
+               if ( postFilter ) {
+                       temp = condense( matcherOut, postMap );
+                       postFilter( temp, [], context, xml );
+
+                       // Un-match failing elements by moving them back to matcherIn
+                       i = temp.length;
+                       while ( i-- ) {
+                               if ( (elem = temp[i]) ) {
+                                       matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+                               }
+                       }
+               }
+
+               if ( seed ) {
+                       if ( postFinder || preFilter ) {
+                               if ( postFinder ) {
+                                       // Get the final matcherOut by condensing this intermediate into postFinder contexts
+                                       temp = [];
+                                       i = matcherOut.length;
+                                       while ( i-- ) {
+                                               if ( (elem = matcherOut[i]) ) {
+                                                       // Restore matcherIn since elem is not yet a final match
+                                                       temp.push( (matcherIn[i] = elem) );
+                                               }
+                                       }
+                                       postFinder( null, (matcherOut = []), temp, xml );
+                               }
+
+                               // Move matched elements from seed to results to keep them synchronized
+                               i = matcherOut.length;
+                               while ( i-- ) {
+                                       if ( (elem = matcherOut[i]) &&
+                                               (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+
+                                               seed[temp] = !(results[temp] = elem);
+                                       }
+                               }
+                       }
+
+               // Add elements to results, through postFinder if defined
+               } else {
+                       matcherOut = condense(
+                               matcherOut === results ?
+                                       matcherOut.splice( preexisting, matcherOut.length ) :
+                                       matcherOut
+                       );
+                       if ( postFinder ) {
+                               postFinder( null, results, matcherOut, xml );
+                       } else {
+                               push.apply( results, matcherOut );
+                       }
+               }
+       });
+}
+
+function matcherFromTokens( tokens ) {
+       var checkContext, matcher, j,
+               len = tokens.length,
+               leadingRelative = Expr.relative[ tokens[0].type ],
+               implicitRelative = leadingRelative || Expr.relative[" "],
+               i = leadingRelative ? 1 : 0,
+
+               // The foundational matcher ensures that elements are reachable from top-level context(s)
+               matchContext = addCombinator( function( elem ) {
+                       return elem === checkContext;
+               }, implicitRelative, true ),
+               matchAnyContext = addCombinator( function( elem ) {
+                       return indexOf.call( checkContext, elem ) > -1;
+               }, implicitRelative, true ),
+               matchers = [ function( elem, context, xml ) {
+                       return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+                               (checkContext = context).nodeType ?
+                                       matchContext( elem, context, xml ) :
+                                       matchAnyContext( elem, context, xml ) );
+               } ];
+
+       for ( ; i < len; i++ ) {
+               if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+                       matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+               } else {
+                       matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+                       // Return special upon seeing a positional matcher
+                       if ( matcher[ expando ] ) {
+                               // Find the next relative operator (if any) for proper handling
+                               j = ++i;
+                               for ( ; j < len; j++ ) {
+                                       if ( Expr.relative[ tokens[j].type ] ) {
+                                               break;
+                                       }
+                               }
+                               return setMatcher(
+                                       i > 1 && elementMatcher( matchers ),
+                                       i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ),
+                                       matcher,
+                                       i < j && matcherFromTokens( tokens.slice( i, j ) ),
+                                       j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+                                       j < len && toSelector( tokens )
+                               );
+                       }
+                       matchers.push( matcher );
+               }
+       }
+
+       return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+       // A counter to specify which element is currently being matched
+       var matcherCachedRuns = 0,
+               bySet = setMatchers.length > 0,
+               byElement = elementMatchers.length > 0,
+               superMatcher = function( seed, context, xml, results, expandContext ) {
+                       var elem, j, matcher,
+                               setMatched = [],
+                               matchedCount = 0,
+                               i = "0",
+                               unmatched = seed && [],
+                               outermost = expandContext != null,
+                               contextBackup = outermostContext,
+                               // We must always have either seed elements or context
+                               elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
+                               // Use integer dirruns iff this is the outermost matcher
+                               dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
+
+                       if ( outermost ) {
+                               outermostContext = context !== document && context;
+                               cachedruns = matcherCachedRuns;
+                       }
+
+                       // Add elements passing elementMatchers directly to results
+                       // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+                       for ( ; (elem = elems[i]) != null; i++ ) {
+                               if ( byElement && elem ) {
+                                       j = 0;
+                                       while ( (matcher = elementMatchers[j++]) ) {
+                                               if ( matcher( elem, context, xml ) ) {
+                                                       results.push( elem );
+                                                       break;
+                                               }
+                                       }
+                                       if ( outermost ) {
+                                               dirruns = dirrunsUnique;
+                                               cachedruns = ++matcherCachedRuns;
+                                       }
+                               }
+
+                               // Track unmatched elements for set filters
+                               if ( bySet ) {
+                                       // They will have gone through all possible matchers
+                                       if ( (elem = !matcher && elem) ) {
+                                               matchedCount--;
+                                       }
+
+                                       // Lengthen the array for every element, matched or not
+                                       if ( seed ) {
+                                               unmatched.push( elem );
+                                       }
+                               }
+                       }
+
+                       // Apply set filters to unmatched elements
+                       matchedCount += i;
+                       if ( bySet && i !== matchedCount ) {
+                               j = 0;
+                               while ( (matcher = setMatchers[j++]) ) {
+                                       matcher( unmatched, setMatched, context, xml );
+                               }
+
+                               if ( seed ) {
+                                       // Reintegrate element matches to eliminate the need for sorting
+                                       if ( matchedCount > 0 ) {
+                                               while ( i-- ) {
+                                                       if ( !(unmatched[i] || setMatched[i]) ) {
+                                                               setMatched[i] = pop.call( results );
+                                                       }
+                                               }
+                                       }
+
+                                       // Discard index placeholder values to get only actual matches
+                                       setMatched = condense( setMatched );
+                               }
+
+                               // Add matches to results
+                               push.apply( results, setMatched );
+
+                               // Seedless set matches succeeding multiple successful matchers stipulate sorting
+                               if ( outermost && !seed && setMatched.length > 0 &&
+                                       ( matchedCount + setMatchers.length ) > 1 ) {
+
+                                       Sizzle.uniqueSort( results );
+                               }
+                       }
+
+                       // Override manipulation of globals by nested matchers
+                       if ( outermost ) {
+                               dirruns = dirrunsUnique;
+                               outermostContext = contextBackup;
+                       }
+
+                       return unmatched;
+               };
+
+       return bySet ?
+               markFunction( superMatcher ) :
+               superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
+       var i,
+               setMatchers = [],
+               elementMatchers = [],
+               cached = compilerCache[ selector + " " ];
+
+       if ( !cached ) {
+               // Generate a function of recursive functions that can be used to check each element
+               if ( !group ) {
+                       group = tokenize( selector );
+               }
+               i = group.length;
+               while ( i-- ) {
+                       cached = matcherFromTokens( group[i] );
+                       if ( cached[ expando ] ) {
+                               setMatchers.push( cached );
+                       } else {
+                               elementMatchers.push( cached );
+                       }
+               }
+
+               // Cache the compiled function
+               cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+       }
+       return cached;
+};
+
+function multipleContexts( selector, contexts, results ) {
+       var i = 0,
+               len = contexts.length;
+       for ( ; i < len; i++ ) {
+               Sizzle( selector, contexts[i], results );
+       }
+       return results;
+}
+
+function select( selector, context, results, seed ) {
+       var i, tokens, token, type, find,
+               match = tokenize( selector );
+
+       if ( !seed ) {
+               // Try to minimize operations if there is only one group
+               if ( match.length === 1 ) {
+
+                       // Take a shortcut and set the context if the root selector is an ID
+                       tokens = match[0] = match[0].slice( 0 );
+                       if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+                                       context.nodeType === 9 && !documentIsXML &&
+                                       Expr.relative[ tokens[1].type ] ) {
+
+                               context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0];
+                               if ( !context ) {
+                                       return results;
+                               }
+
+                               selector = selector.slice( tokens.shift().value.length );
+                       }
+
+                       // Fetch a seed set for right-to-left matching
+                       i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+                       while ( i-- ) {
+                               token = tokens[i];
+
+                               // Abort if we hit a combinator
+                               if ( Expr.relative[ (type = token.type) ] ) {
+                                       break;
+                               }
+                               if ( (find = Expr.find[ type ]) ) {
+                                       // Search, expanding context for leading sibling combinators
+                                       if ( (seed = find(
+                                               token.matches[0].replace( runescape, funescape ),
+                                               rsibling.test( tokens[0].type ) && context.parentNode || context
+                                       )) ) {
+
+                                               // If seed is empty or no tokens remain, we can return early
+                                               tokens.splice( i, 1 );
+                                               selector = seed.length && toSelector( tokens );
+                                               if ( !selector ) {
+                                                       push.apply( results, slice.call( seed, 0 ) );
+                                                       return results;
+                                               }
+
+                                               break;
+                                       }
+                               }
+                       }
+               }
+       }
+
+       // Compile and execute a filtering function
+       // Provide `match` to avoid retokenization if we modified the selector above
+       compile( selector, match )(
+               seed,
+               context,
+               documentIsXML,
+               results,
+               rsibling.test( selector )
+       );
+       return results;
+}
+
+// Deprecated
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Easy API for creating new setFilters
+function setFilters() {}
+Expr.filters = setFilters.prototype = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+// Initialize with the default document
+setDocument();
+
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})( window );
+var runtil = /Until$/,
+       rparentsprev = /^(?:parents|prev(?:Until|All))/,
+       isSimple = /^.[^:#\[\.,]*$/,
+       rneedsContext = jQuery.expr.match.needsContext,
+       // methods guaranteed to produce a unique set when starting from a unique set
+       guaranteedUnique = {
+               children: true,
+               contents: true,
+               next: true,
+               prev: true
+       };
+
+jQuery.fn.extend({
+       find: function( selector ) {
+               var i, ret, self,
+                       len = this.length;
+
+               if ( typeof selector !== "string" ) {
+                       self = this;
+                       return this.pushStack( jQuery( selector ).filter(function() {
+                               for ( i = 0; i < len; i++ ) {
+                                       if ( jQuery.contains( self[ i ], this ) ) {
+                                               return true;
+                                       }
+                               }
+                       }) );
+               }
+
+               ret = [];
+               for ( i = 0; i < len; i++ ) {
+                       jQuery.find( selector, this[ i ], ret );
+               }
+
+               // Needed because $( selector, context ) becomes $( context ).find( selector )
+               ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+               ret.selector = ( this.selector ? this.selector + " " : "" ) + selector;
+               return ret;
+       },
+
+       has: function( target ) {
+               var i,
+                       targets = jQuery( target, this ),
+                       len = targets.length;
+
+               return this.filter(function() {
+                       for ( i = 0; i < len; i++ ) {
+                               if ( jQuery.contains( this, targets[i] ) ) {
+                                       return true;
+                               }
+                       }
+               });
+       },
+
+       not: function( selector ) {
+               return this.pushStack( winnow(this, selector, false) );
+       },
+
+       filter: function( selector ) {
+               return this.pushStack( winnow(this, selector, true) );
+       },
+
+       is: function( selector ) {
+               return !!selector && (
+                       typeof selector === "string" ?
+                               // If this is a positional/relative selector, check membership in the returned set
+                               // so $("p:first").is("p:last") won't return true for a doc with two "p".
+                               rneedsContext.test( selector ) ?
+                                       jQuery( selector, this.context ).index( this[0] ) >= 0 :
+                                       jQuery.filter( selector, this ).length > 0 :
+                               this.filter( selector ).length > 0 );
+       },
+
+       closest: function( selectors, context ) {
+               var cur,
+                       i = 0,
+                       l = this.length,
+                       ret = [],
+                       pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+                               jQuery( selectors, context || this.context ) :
+                               0;
+
+               for ( ; i < l; i++ ) {
+                       cur = this[i];
+
+                       while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
+                               if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+                                       ret.push( cur );
+                                       break;
+                               }
+                               cur = cur.parentNode;
+                       }
+               }
+
+               return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
+       },
+
+       // Determine the position of an element within
+       // the matched set of elements
+       index: function( elem ) {
+
+               // No argument, return index in parent
+               if ( !elem ) {
+                       return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
+               }
+
+               // index in selector
+               if ( typeof elem === "string" ) {
+                       return jQuery.inArray( this[0], jQuery( elem ) );
+               }
+
+               // Locate the position of the desired element
+               return jQuery.inArray(
+                       // If it receives a jQuery object, the first element is used
+                       elem.jquery ? elem[0] : elem, this );
+       },
+
+       add: function( selector, context ) {
+               var set = typeof selector === "string" ?
+                               jQuery( selector, context ) :
+                               jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+                       all = jQuery.merge( this.get(), set );
+
+               return this.pushStack( jQuery.unique(all) );
+       },
+
+       addBack: function( selector ) {
+               return this.add( selector == null ?
+                       this.prevObject : this.prevObject.filter(selector)
+               );
+       }
+});
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+function sibling( cur, dir ) {
+       do {
+               cur = cur[ dir ];
+       } while ( cur && cur.nodeType !== 1 );
+
+       return cur;
+}
+
+jQuery.each({
+       parent: function( elem ) {
+               var parent = elem.parentNode;
+               return parent && parent.nodeType !== 11 ? parent : null;
+       },
+       parents: function( elem ) {
+               return jQuery.dir( elem, "parentNode" );
+       },
+       parentsUntil: function( elem, i, until ) {
+               return jQuery.dir( elem, "parentNode", until );
+       },
+       next: function( elem ) {
+               return sibling( elem, "nextSibling" );
+       },
+       prev: function( elem ) {
+               return sibling( elem, "previousSibling" );
+       },
+       nextAll: function( elem ) {
+               return jQuery.dir( elem, "nextSibling" );
+       },
+       prevAll: function( elem ) {
+               return jQuery.dir( elem, "previousSibling" );
+       },
+       nextUntil: function( elem, i, until ) {
+               return jQuery.dir( elem, "nextSibling", until );
+       },
+       prevUntil: function( elem, i, until ) {
+               return jQuery.dir( elem, "previousSibling", until );
+       },
+       siblings: function( elem ) {
+               return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+       },
+       children: function( elem ) {
+               return jQuery.sibling( elem.firstChild );
+       },
+       contents: function( elem ) {
+               return jQuery.nodeName( elem, "iframe" ) ?
+                       elem.contentDocument || elem.contentWindow.document :
+                       jQuery.merge( [], elem.childNodes );
+       }
+}, function( name, fn ) {
+       jQuery.fn[ name ] = function( until, selector ) {
+               var ret = jQuery.map( this, fn, until );
+
+               if ( !runtil.test( name ) ) {
+                       selector = until;
+               }
+
+               if ( selector && typeof selector === "string" ) {
+                       ret = jQuery.filter( selector, ret );
+               }
+
+               ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+               if ( this.length > 1 && rparentsprev.test( name ) ) {
+                       ret = ret.reverse();
+               }
+
+               return this.pushStack( ret );
+       };
+});
+
+jQuery.extend({
+       filter: function( expr, elems, not ) {
+               if ( not ) {
+                       expr = ":not(" + expr + ")";
+               }
+
+               return elems.length === 1 ?
+                       jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+                       jQuery.find.matches(expr, elems);
+       },
+
+       dir: function( elem, dir, until ) {
+               var matched = [],
+                       cur = elem[ dir ];
+
+               while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+                       if ( cur.nodeType === 1 ) {
+                               matched.push( cur );
+                       }
+                       cur = cur[dir];
+               }
+               return matched;
+       },
+
+       sibling: function( n, elem ) {
+               var r = [];
+
+               for ( ; n; n = n.nextSibling ) {
+                       if ( n.nodeType === 1 && n !== elem ) {
+                               r.push( n );
+                       }
+               }
+
+               return r;
+       }
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+       // Can't pass null or undefined to indexOf in Firefox 4
+       // Set to 0 to skip string check
+       qualifier = qualifier || 0;
+
+       if ( jQuery.isFunction( qualifier ) ) {
+               return jQuery.grep(elements, function( elem, i ) {
+                       var retVal = !!qualifier.call( elem, i, elem );
+                       return retVal === keep;
+               });
+
+       } else if ( qualifier.nodeType ) {
+               return jQuery.grep(elements, function( elem ) {
+                       return ( elem === qualifier ) === keep;
+               });
+
+       } else if ( typeof qualifier === "string" ) {
+               var filtered = jQuery.grep(elements, function( elem ) {
+                       return elem.nodeType === 1;
+               });
+
+               if ( isSimple.test( qualifier ) ) {
+                       return jQuery.filter(qualifier, filtered, !keep);
+               } else {
+                       qualifier = jQuery.filter( qualifier, filtered );
+               }
+       }
+
+       return jQuery.grep(elements, function( elem ) {
+               return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+       });
+}
+function createSafeFragment( document ) {
+       var list = nodeNames.split( "|" ),
+               safeFrag = document.createDocumentFragment();
+
+       if ( safeFrag.createElement ) {
+               while ( list.length ) {
+                       safeFrag.createElement(
+                               list.pop()
+                       );
+               }
+       }
+       return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+               "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+       rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+       rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+       rleadingWhitespace = /^\s+/,
+       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+       rtagName = /<([\w:]+)/,
+       rtbody = /<tbody/i,
+       rhtml = /<|&#?\w+;/,
+       rnoInnerhtml = /<(?:script|style|link)/i,
+       manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
+       // checked="checked" or checked
+       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+       rscriptType = /^$|\/(?:java|ecma)script/i,
+       rscriptTypeMasked = /^true\/(.*)/,
+       rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+
+       // We have to close these tags to support XHTML (#13200)
+       wrapMap = {
+               option: [ 1, "<select multiple='multiple'>", "</select>" ],
+               legend: [ 1, "<fieldset>", "</fieldset>" ],
+               area: [ 1, "<map>", "</map>" ],
+               param: [ 1, "<object>", "</object>" ],
+               thead: [ 1, "<table>", "</table>" ],
+               tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+               col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+               td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+               // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+               // unless wrapped in a div with non-breaking characters in front of it.
+               _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
+       },
+       safeFragment = createSafeFragment( document ),
+       fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+jQuery.fn.extend({
+       text: function( value ) {
+               return jQuery.access( this, function( value ) {
+                       return value === undefined ?
+                               jQuery.text( this ) :
+                               this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+               }, null, value, arguments.length );
+       },
+
+       wrapAll: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each(function(i) {
+                               jQuery(this).wrapAll( html.call(this, i) );
+                       });
+               }
+
+               if ( this[0] ) {
+                       // The elements to wrap the target around
+                       var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+                       if ( this[0].parentNode ) {
+                               wrap.insertBefore( this[0] );
+                       }
+
+                       wrap.map(function() {
+                               var elem = this;
+
+                               while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+                                       elem = elem.firstChild;
+                               }
+
+                               return elem;
+                       }).append( this );
+               }
+
+               return this;
+       },
+
+       wrapInner: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each(function(i) {
+                               jQuery(this).wrapInner( html.call(this, i) );
+                       });
+               }
+
+               return this.each(function() {
+                       var self = jQuery( this ),
+                               contents = self.contents();
+
+                       if ( contents.length ) {
+                               contents.wrapAll( html );
+
+                       } else {
+                               self.append( html );
+                       }
+               });
+       },
+
+       wrap: function( html ) {
+               var isFunction = jQuery.isFunction( html );
+
+               return this.each(function(i) {
+                       jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+               });
+       },
+
+       unwrap: function() {
+               return this.parent().each(function() {
+                       if ( !jQuery.nodeName( this, "body" ) ) {
+                               jQuery( this ).replaceWith( this.childNodes );
+                       }
+               }).end();
+       },
+
+       append: function() {
+               return this.domManip(arguments, true, function( elem ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                               this.appendChild( elem );
+                       }
+               });
+       },
+
+       prepend: function() {
+               return this.domManip(arguments, true, function( elem ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                               this.insertBefore( elem, this.firstChild );
+                       }
+               });
+       },
+
+       before: function() {
+               return this.domManip( arguments, false, function( elem ) {
+                       if ( this.parentNode ) {
+                               this.parentNode.insertBefore( elem, this );
+                       }
+               });
+       },
+
+       after: function() {
+               return this.domManip( arguments, false, function( elem ) {
+                       if ( this.parentNode ) {
+                               this.parentNode.insertBefore( elem, this.nextSibling );
+                       }
+               });
+       },
+
+       // keepData is for internal use only--do not document
+       remove: function( selector, keepData ) {
+               var elem,
+                       i = 0;
+
+               for ( ; (elem = this[i]) != null; i++ ) {
+                       if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
+                               if ( !keepData && elem.nodeType === 1 ) {
+                                       jQuery.cleanData( getAll( elem ) );
+                               }
+
+                               if ( elem.parentNode ) {
+                                       if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+                                               setGlobalEval( getAll( elem, "script" ) );
+                                       }
+                                       elem.parentNode.removeChild( elem );
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       empty: function() {
+               var elem,
+                       i = 0;
+
+               for ( ; (elem = this[i]) != null; i++ ) {
+                       // Remove element nodes and prevent memory leaks
+                       if ( elem.nodeType === 1 ) {
+                               jQuery.cleanData( getAll( elem, false ) );
+                       }
+
+                       // Remove any remaining nodes
+                       while ( elem.firstChild ) {
+                               elem.removeChild( elem.firstChild );
+                       }
+
+                       // If this is a select, ensure that it displays empty (#12336)
+                       // Support: IE<9
+                       if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
+                               elem.options.length = 0;
+                       }
+               }
+
+               return this;
+       },
+
+       clone: function( dataAndEvents, deepDataAndEvents ) {
+               dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+               deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+               return this.map( function () {
+                       return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+               });
+       },
+
+       html: function( value ) {
+               return jQuery.access( this, function( value ) {
+                       var elem = this[0] || {},
+                               i = 0,
+                               l = this.length;
+
+                       if ( value === undefined ) {
+                               return elem.nodeType === 1 ?
+                                       elem.innerHTML.replace( rinlinejQuery, "" ) :
+                                       undefined;
+                       }
+
+                       // See if we can take a shortcut and just use innerHTML
+                       if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+                               ( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
+                               ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+                               !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+
+                               value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+                               try {
+                                       for (; i < l; i++ ) {
+                                               // Remove element nodes and prevent memory leaks
+                                               elem = this[i] || {};
+                                               if ( elem.nodeType === 1 ) {
+                                                       jQuery.cleanData( getAll( elem, false ) );
+                                                       elem.innerHTML = value;
+                                               }
+                                       }
+
+                                       elem = 0;
+
+                               // If using innerHTML throws an exception, use the fallback method
+                               } catch(e) {}
+                       }
+
+                       if ( elem ) {
+                               this.empty().append( value );
+                       }
+               }, null, value, arguments.length );
+       },
+
+       replaceWith: function( value ) {
+               var isFunc = jQuery.isFunction( value );
+
+               // Make sure that the elements are removed from the DOM before they are inserted
+               // this can help fix replacing a parent with child elements
+               if ( !isFunc && typeof value !== "string" ) {
+                       value = jQuery( value ).not( this ).detach();
+               }
+
+               return this.domManip( [ value ], true, function( elem ) {
+                       var next = this.nextSibling,
+                               parent = this.parentNode;
+
+                       if ( parent ) {
+                               jQuery( this ).remove();
+                               parent.insertBefore( elem, next );
+                       }
+               });
+       },
+
+       detach: function( selector ) {
+               return this.remove( selector, true );
+       },
+
+       domManip: function( args, table, callback ) {
+
+               // Flatten any nested arrays
+               args = core_concat.apply( [], args );
+
+               var first, node, hasScripts,
+                       scripts, doc, fragment,
+                       i = 0,
+                       l = this.length,
+                       set = this,
+                       iNoClone = l - 1,
+                       value = args[0],
+                       isFunction = jQuery.isFunction( value );
+
+               // We can't cloneNode fragments that contain checked, in WebKit
+               if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
+                       return this.each(function( index ) {
+                               var self = set.eq( index );
+                               if ( isFunction ) {
+                                       args[0] = value.call( this, index, table ? self.html() : undefined );
+                               }
+                               self.domManip( args, table, callback );
+                       });
+               }
+
+               if ( l ) {
+                       fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
+                       first = fragment.firstChild;
+
+                       if ( fragment.childNodes.length === 1 ) {
+                               fragment = first;
+                       }
+
+                       if ( first ) {
+                               table = table && jQuery.nodeName( first, "tr" );
+                               scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+                               hasScripts = scripts.length;
+
+                               // Use the original fragment for the last item instead of the first because it can end up
+                               // being emptied incorrectly in certain situations (#8070).
+                               for ( ; i < l; i++ ) {
+                                       node = fragment;
+
+                                       if ( i !== iNoClone ) {
+                                               node = jQuery.clone( node, true, true );
+
+                                               // Keep references to cloned scripts for later restoration
+                                               if ( hasScripts ) {
+                                                       jQuery.merge( scripts, getAll( node, "script" ) );
+                                               }
+                                       }
+
+                                       callback.call(
+                                               table && jQuery.nodeName( this[i], "table" ) ?
+                                                       findOrAppend( this[i], "tbody" ) :
+                                                       this[i],
+                                               node,
+                                               i
+                                       );
+                               }
+
+                               if ( hasScripts ) {
+                                       doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+                                       // Reenable scripts
+                                       jQuery.map( scripts, restoreScript );
+
+                                       // Evaluate executable scripts on first document insertion
+                                       for ( i = 0; i < hasScripts; i++ ) {
+                                               node = scripts[ i ];
+                                               if ( rscriptType.test( node.type || "" ) &&
+                                                       !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+
+                                                       if ( node.src ) {
+                                                               // Hope ajax is available...
+                                                               jQuery.ajax({
+                                                                       url: node.src,
+                                                                       type: "GET",
+                                                                       dataType: "script",
+                                                                       async: false,
+                                                                       global: false,
+                                                                       "throws": true
+                                                               });
+                                                       } else {
+                                                               jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               // Fix #11809: Avoid leaking memory
+                               fragment = first = null;
+                       }
+               }
+
+               return this;
+       }
+});
+
+function findOrAppend( elem, tag ) {
+       return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+       var attr = elem.getAttributeNode("type");
+       elem.type = ( attr && attr.specified ) + "/" + elem.type;
+       return elem;
+}
+function restoreScript( elem ) {
+       var match = rscriptTypeMasked.exec( elem.type );
+       if ( match ) {
+               elem.type = match[1];
+       } else {
+               elem.removeAttribute("type");
+       }
+       return elem;
+}
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+       var elem,
+               i = 0;
+       for ( ; (elem = elems[i]) != null; i++ ) {
+               jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
+       }
+}
+
+function cloneCopyEvent( src, dest ) {
+
+       if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+               return;
+       }
+
+       var type, i, l,
+               oldData = jQuery._data( src ),
+               curData = jQuery._data( dest, oldData ),
+               events = oldData.events;
+
+       if ( events ) {
+               delete curData.handle;
+               curData.events = {};
+
+               for ( type in events ) {
+                       for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+                               jQuery.event.add( dest, type, events[ type ][ i ] );
+                       }
+               }
+       }
+
+       // make the cloned public data object a copy from the original
+       if ( curData.data ) {
+               curData.data = jQuery.extend( {}, curData.data );
+       }
+}
+
+function fixCloneNodeIssues( src, dest ) {
+       var nodeName, e, data;
+
+       // We do not need to do anything for non-Elements
+       if ( dest.nodeType !== 1 ) {
+               return;
+       }
+
+       nodeName = dest.nodeName.toLowerCase();
+
+       // IE6-8 copies events bound via attachEvent when using cloneNode.
+       if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
+               data = jQuery._data( dest );
+
+               for ( e in data.events ) {
+                       jQuery.removeEvent( dest, e, data.handle );
+               }
+
+               // Event data gets referenced instead of copied if the expando gets copied too
+               dest.removeAttribute( jQuery.expando );
+       }
+
+       // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
+       if ( nodeName === "script" && dest.text !== src.text ) {
+               disableScript( dest ).text = src.text;
+               restoreScript( dest );
+
+       // IE6-10 improperly clones children of object elements using classid.
+       // IE10 throws NoModificationAllowedError if parent is null, #12132.
+       } else if ( nodeName === "object" ) {
+               if ( dest.parentNode ) {
+                       dest.outerHTML = src.outerHTML;
+               }
+
+               // This path appears unavoidable for IE9. When cloning an object
+               // element in IE9, the outerHTML strategy above is not sufficient.
+               // If the src has innerHTML and the destination does not,
+               // copy the src.innerHTML into the dest.innerHTML. #10324
+               if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
+                       dest.innerHTML = src.innerHTML;
+               }
+
+       } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
+               // IE6-8 fails to persist the checked state of a cloned checkbox
+               // or radio button. Worse, IE6-7 fail to give the cloned element
+               // a checked appearance if the defaultChecked value isn't also set
+
+               dest.defaultChecked = dest.checked = src.checked;
+
+               // IE6-7 get confused and end up setting the value of a cloned
+               // checkbox/radio button to an empty string instead of "on"
+               if ( dest.value !== src.value ) {
+                       dest.value = src.value;
+               }
+
+       // IE6-8 fails to return the selected option to the default selected
+       // state when cloning options
+       } else if ( nodeName === "option" ) {
+               dest.defaultSelected = dest.selected = src.defaultSelected;
+
+       // IE6-8 fails to set the defaultValue to the correct value when
+       // cloning other types of input fields
+       } else if ( nodeName === "input" || nodeName === "textarea" ) {
+               dest.defaultValue = src.defaultValue;
+       }
+}
+
+jQuery.each({
+       appendTo: "append",
+       prependTo: "prepend",
+       insertBefore: "before",
+       insertAfter: "after",
+       replaceAll: "replaceWith"
+}, function( name, original ) {
+       jQuery.fn[ name ] = function( selector ) {
+               var elems,
+                       i = 0,
+                       ret = [],
+                       insert = jQuery( selector ),
+                       last = insert.length - 1;
+
+               for ( ; i <= last; i++ ) {
+                       elems = i === last ? this : this.clone(true);
+                       jQuery( insert[i] )[ original ]( elems );
+
+                       // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+                       core_push.apply( ret, elems.get() );
+               }
+
+               return this.pushStack( ret );
+       };
+});
+
+function getAll( context, tag ) {
+       var elems, elem,
+               i = 0,
+               found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
+                       typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
+                       undefined;
+
+       if ( !found ) {
+               for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
+                       if ( !tag || jQuery.nodeName( elem, tag ) ) {
+                               found.push( elem );
+                       } else {
+                               jQuery.merge( found, getAll( elem, tag ) );
+                       }
+               }
+       }
+
+       return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+               jQuery.merge( [ context ], found ) :
+               found;
+}
+
+// Used in buildFragment, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+       if ( manipulation_rcheckableType.test( elem.type ) ) {
+               elem.defaultChecked = elem.checked;
+       }
+}
+
+jQuery.extend({
+       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+               var destElements, node, clone, i, srcElements,
+                       inPage = jQuery.contains( elem.ownerDocument, elem );
+
+               if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+                       clone = elem.cloneNode( true );
+
+               // IE<=8 does not properly clone detached, unknown element nodes
+               } else {
+                       fragmentDiv.innerHTML = elem.outerHTML;
+                       fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+               }
+
+               if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+                               (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+
+                       // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+                       destElements = getAll( clone );
+                       srcElements = getAll( elem );
+
+                       // Fix all IE cloning issues
+                       for ( i = 0; (node = srcElements[i]) != null; ++i ) {
+                               // Ensure that the destination node is not null; Fixes #9587
+                               if ( destElements[i] ) {
+                                       fixCloneNodeIssues( node, destElements[i] );
+                               }
+                       }
+               }
+
+               // Copy the events from the original to the clone
+               if ( dataAndEvents ) {
+                       if ( deepDataAndEvents ) {
+                               srcElements = srcElements || getAll( elem );
+                               destElements = destElements || getAll( clone );
+
+                               for ( i = 0; (node = srcElements[i]) != null; i++ ) {
+                                       cloneCopyEvent( node, destElements[i] );
+                               }
+                       } else {
+                               cloneCopyEvent( elem, clone );
+                       }
+               }
+
+               // Preserve script evaluation history
+               destElements = getAll( clone, "script" );
+               if ( destElements.length > 0 ) {
+                       setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+               }
+
+               destElements = srcElements = node = null;
+
+               // Return the cloned set
+               return clone;
+       },
+
+       buildFragment: function( elems, context, scripts, selection ) {
+               var j, elem, contains,
+                       tmp, tag, tbody, wrap,
+                       l = elems.length,
+
+                       // Ensure a safe fragment
+                       safe = createSafeFragment( context ),
+
+                       nodes = [],
+                       i = 0;
+
+               for ( ; i < l; i++ ) {
+                       elem = elems[ i ];
+
+                       if ( elem || elem === 0 ) {
+
+                               // Add nodes directly
+                               if ( jQuery.type( elem ) === "object" ) {
+                                       jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+                               // Convert non-html into a text node
+                               } else if ( !rhtml.test( elem ) ) {
+                                       nodes.push( context.createTextNode( elem ) );
+
+                               // Convert html into DOM nodes
+                               } else {
+                                       tmp = tmp || safe.appendChild( context.createElement("div") );
+
+                                       // Deserialize a standard representation
+                                       tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
+                                       wrap = wrapMap[ tag ] || wrapMap._default;
+
+                                       tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
+
+                                       // Descend through wrappers to the right content
+                                       j = wrap[0];
+                                       while ( j-- ) {
+                                               tmp = tmp.lastChild;
+                                       }
+
+                                       // Manually add leading whitespace removed by IE
+                                       if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+                                               nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
+                                       }
+
+                                       // Remove IE's autoinserted <tbody> from table fragments
+                                       if ( !jQuery.support.tbody ) {
+
+                                               // String was a <table>, *may* have spurious <tbody>
+                                               elem = tag === "table" && !rtbody.test( elem ) ?
+                                                       tmp.firstChild :
+
+                                                       // String was a bare <thead> or <tfoot>
+                                                       wrap[1] === "<table>" && !rtbody.test( elem ) ?
+                                                               tmp :
+                                                               0;
+
+                                               j = elem && elem.childNodes.length;
+                                               while ( j-- ) {
+                                                       if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
+                                                               elem.removeChild( tbody );
+                                                       }
+                                               }
+                                       }
+
+                                       jQuery.merge( nodes, tmp.childNodes );
+
+                                       // Fix #12392 for WebKit and IE > 9
+                                       tmp.textContent = "";
+
+                                       // Fix #12392 for oldIE
+                                       while ( tmp.firstChild ) {
+                                               tmp.removeChild( tmp.firstChild );
+                                       }
+
+                                       // Remember the top-level container for proper cleanup
+                                       tmp = safe.lastChild;
+                               }
+                       }
+               }
+
+               // Fix #11356: Clear elements from fragment
+               if ( tmp ) {
+                       safe.removeChild( tmp );
+               }
+
+               // Reset defaultChecked for any radios and checkboxes
+               // about to be appended to the DOM in IE 6/7 (#8060)
+               if ( !jQuery.support.appendChecked ) {
+                       jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
+               }
+
+               i = 0;
+               while ( (elem = nodes[ i++ ]) ) {
+
+                       // #4087 - If origin and destination elements are the same, and this is
+                       // that element, do not do anything
+                       if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
+                               continue;
+                       }
+
+                       contains = jQuery.contains( elem.ownerDocument, elem );
+
+                       // Append to fragment
+                       tmp = getAll( safe.appendChild( elem ), "script" );
+
+                       // Preserve script evaluation history
+                       if ( contains ) {
+                               setGlobalEval( tmp );
+                       }
+
+                       // Capture executables
+                       if ( scripts ) {
+                               j = 0;
+                               while ( (elem = tmp[ j++ ]) ) {
+                                       if ( rscriptType.test( elem.type || "" ) ) {
+                                               scripts.push( elem );
+                                       }
+                               }
+                       }
+               }
+
+               tmp = null;
+
+               return safe;
+       },
+
+       cleanData: function( elems, /* internal */ acceptData ) {
+               var elem, type, id, data,
+                       i = 0,
+                       internalKey = jQuery.expando,
+                       cache = jQuery.cache,
+                       deleteExpando = jQuery.support.deleteExpando,
+                       special = jQuery.event.special;
+
+               for ( ; (elem = elems[i]) != null; i++ ) {
+
+                       if ( acceptData || jQuery.acceptData( elem ) ) {
+
+                               id = elem[ internalKey ];
+                               data = id && cache[ id ];
+
+                               if ( data ) {
+                                       if ( data.events ) {
+                                               for ( type in data.events ) {
+                                                       if ( special[ type ] ) {
+                                                               jQuery.event.remove( elem, type );
+
+                                                       // This is a shortcut to avoid jQuery.event.remove's overhead
+                                                       } else {
+                                                               jQuery.removeEvent( elem, type, data.handle );
+                                                       }
+                                               }
+                                       }
+
+                                       // Remove cache only if it was not already removed by jQuery.event.remove
+                                       if ( cache[ id ] ) {
+
+                                               delete cache[ id ];
+
+                                               // IE does not allow us to delete expando properties from nodes,
+                                               // nor does it have a removeAttribute function on Document nodes;
+                                               // we must handle all of these cases
+                                               if ( deleteExpando ) {
+                                                       delete elem[ internalKey ];
+
+                                               } else if ( typeof elem.removeAttribute !== core_strundefined ) {
+                                                       elem.removeAttribute( internalKey );
+
+                                               } else {
+                                                       elem[ internalKey ] = null;
+                                               }
+
+                                               core_deletedIds.push( id );
+                                       }
+                               }
+                       }
+               }
+       }
+});
+var iframe, getStyles, curCSS,
+       ralpha = /alpha\([^)]*\)/i,
+       ropacity = /opacity\s*=\s*([^)]*)/,
+       rposition = /^(top|right|bottom|left)$/,
+       // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+       // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+       rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+       rmargin = /^margin/,
+       rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+       rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+       rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
+       elemdisplay = { BODY: "block" },
+
+       cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+       cssNormalTransform = {
+               letterSpacing: 0,
+               fontWeight: 400
+       },
+
+       cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+       cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+       // shortcut for names that are not vendor prefixed
+       if ( name in style ) {
+               return name;
+       }
+
+       // check for vendor prefixed names
+       var capName = name.charAt(0).toUpperCase() + name.slice(1),
+               origName = name,
+               i = cssPrefixes.length;
+
+       while ( i-- ) {
+               name = cssPrefixes[ i ] + capName;
+               if ( name in style ) {
+                       return name;
+               }
+       }
+
+       return origName;
+}
+
+function isHidden( elem, el ) {
+       // isHidden might be called from jQuery#filter function;
+       // in that case, element will be second argument
+       elem = el || elem;
+       return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+}
+
+function showHide( elements, show ) {
+       var display, elem, hidden,
+               values = [],
+               index = 0,
+               length = elements.length;
+
+       for ( ; index < length; index++ ) {
+               elem = elements[ index ];
+               if ( !elem.style ) {
+                       continue;
+               }
+
+               values[ index ] = jQuery._data( elem, "olddisplay" );
+               display = elem.style.display;
+               if ( show ) {
+                       // Reset the inline display of this element to learn if it is
+                       // being hidden by cascaded rules or not
+                       if ( !values[ index ] && display === "none" ) {
+                               elem.style.display = "";
+                       }
+
+                       // Set elements which have been overridden with display: none
+                       // in a stylesheet to whatever the default browser style is
+                       // for such an element
+                       if ( elem.style.display === "" && isHidden( elem ) ) {
+                               values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+                       }
+               } else {
+
+                       if ( !values[ index ] ) {
+                               hidden = isHidden( elem );
+
+                               if ( display && display !== "none" || !hidden ) {
+                                       jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
+                               }
+                       }
+               }
+       }
+
+       // Set the display of most of the elements in a second loop
+       // to avoid the constant reflow
+       for ( index = 0; index < length; index++ ) {
+               elem = elements[ index ];
+               if ( !elem.style ) {
+                       continue;
+               }
+               if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+                       elem.style.display = show ? values[ index ] || "" : "none";
+               }
+       }
+
+       return elements;
+}
+
+jQuery.fn.extend({
+       css: function( name, value ) {
+               return jQuery.access( this, function( elem, name, value ) {
+                       var len, styles,
+                               map = {},
+                               i = 0;
+
+                       if ( jQuery.isArray( name ) ) {
+                               styles = getStyles( elem );
+                               len = name.length;
+
+                               for ( ; i < len; i++ ) {
+                                       map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+                               }
+
+                               return map;
+                       }
+
+                       return value !== undefined ?
+                               jQuery.style( elem, name, value ) :
+                               jQuery.css( elem, name );
+               }, name, value, arguments.length > 1 );
+       },
+       show: function() {
+               return showHide( this, true );
+       },
+       hide: function() {
+               return showHide( this );
+       },
+       toggle: function( state ) {
+               var bool = typeof state === "boolean";
+
+               return this.each(function() {
+                       if ( bool ? state : isHidden( this ) ) {
+                               jQuery( this ).show();
+                       } else {
+                               jQuery( this ).hide();
+                       }
+               });
+       }
+});
+
+jQuery.extend({
+       // Add in style property hooks for overriding the default
+       // behavior of getting and setting a style property
+       cssHooks: {
+               opacity: {
+                       get: function( elem, computed ) {
+                               if ( computed ) {
+                                       // We should always get a number back from opacity
+                                       var ret = curCSS( elem, "opacity" );
+                                       return ret === "" ? "1" : ret;
+                               }
+                       }
+               }
+       },
+
+       // Exclude the following css properties to add px
+       cssNumber: {
+               "columnCount": true,
+               "fillOpacity": true,
+               "fontWeight": true,
+               "lineHeight": true,
+               "opacity": true,
+               "orphans": true,
+               "widows": true,
+               "zIndex": true,
+               "zoom": true
+       },
+
+       // Add in properties whose names you wish to fix before
+       // setting or getting the value
+       cssProps: {
+               // normalize float css property
+               "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+       },
+
+       // Get and set the style property on a DOM Node
+       style: function( elem, name, value, extra ) {
+               // Don't set styles on text and comment nodes
+               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+                       return;
+               }
+
+               // Make sure that we're working with the right name
+               var ret, type, hooks,
+                       origName = jQuery.camelCase( name ),
+                       style = elem.style;
+
+               name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+
+               // gets hook for the prefixed version
+               // followed by the unprefixed version
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+               // Check if we're setting a value
+               if ( value !== undefined ) {
+                       type = typeof value;
+
+                       // convert relative number strings (+= or -=) to relative numbers. #7345
+                       if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+                               value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+                               // Fixes bug #9237
+                               type = "number";
+                       }
+
+                       // Make sure that NaN and null values aren't set. See: #7116
+                       if ( value == null || type === "number" && isNaN( value ) ) {
+                               return;
+                       }
+
+                       // If a number was passed in, add 'px' to the (except for certain CSS properties)
+                       if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+                               value += "px";
+                       }
+
+                       // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
+                       // but it would mean to define eight (for every problematic property) identical functions
+                       if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
+                               style[ name ] = "inherit";
+                       }
+
+                       // If a hook was provided, use that value, otherwise just set the specified value
+                       if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+
+                               // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+                               // Fixes bug #5509
+                               try {
+                                       style[ name ] = value;
+                               } catch(e) {}
+                       }
+
+               } else {
+                       // If a hook was provided get the non-computed value from there
+                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+                               return ret;
+                       }
+
+                       // Otherwise just get the value from the style object
+                       return style[ name ];
+               }
+       },
+
+       css: function( elem, name, extra, styles ) {
+               var num, val, hooks,
+                       origName = jQuery.camelCase( name );
+
+               // Make sure that we're working with the right name
+               name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+
+               // gets hook for the prefixed version
+               // followed by the unprefixed version
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+               // If a hook was provided get the computed value from there
+               if ( hooks && "get" in hooks ) {
+                       val = hooks.get( elem, true, extra );
+               }
+
+               // Otherwise, if a way to get the computed value exists, use that
+               if ( val === undefined ) {
+                       val = curCSS( elem, name, styles );
+               }
+
+               //convert "normal" to computed value
+               if ( val === "normal" && name in cssNormalTransform ) {
+                       val = cssNormalTransform[ name ];
+               }
+
+               // Return, converting to number if forced or a qualifier was provided and val looks numeric
+               if ( extra === "" || extra ) {
+                       num = parseFloat( val );
+                       return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+               }
+               return val;
+       },
+
+       // A method for quickly swapping in/out CSS properties to get correct calculations
+       swap: function( elem, options, callback, args ) {
+               var ret, name,
+                       old = {};
+
+               // Remember the old values, and insert the new ones
+               for ( name in options ) {
+                       old[ name ] = elem.style[ name ];
+                       elem.style[ name ] = options[ name ];
+               }
+
+               ret = callback.apply( elem, args || [] );
+
+               // Revert the old values
+               for ( name in options ) {
+                       elem.style[ name ] = old[ name ];
+               }
+
+               return ret;
+       }
+});
+
+// NOTE: we've included the "window" in window.getComputedStyle
+// because jsdom on node.js will break without it.
+if ( window.getComputedStyle ) {
+       getStyles = function( elem ) {
+               return window.getComputedStyle( elem, null );
+       };
+
+       curCSS = function( elem, name, _computed ) {
+               var width, minWidth, maxWidth,
+                       computed = _computed || getStyles( elem ),
+
+                       // getPropertyValue is only needed for .css('filter') in IE9, see #12537
+                       ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
+                       style = elem.style;
+
+               if ( computed ) {
+
+                       if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+                               ret = jQuery.style( elem, name );
+                       }
+
+                       // A tribute to the "awesome hack by Dean Edwards"
+                       // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+                       // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+                       // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+                       if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+                               // Remember the original values
+                               width = style.width;
+                               minWidth = style.minWidth;
+                               maxWidth = style.maxWidth;
+
+                               // Put in the new values to get a computed value out
+                               style.minWidth = style.maxWidth = style.width = ret;
+                               ret = computed.width;
+
+                               // Revert the changed values
+                               style.width = width;
+                               style.minWidth = minWidth;
+                               style.maxWidth = maxWidth;
+                       }
+               }
+
+               return ret;
+       };
+} else if ( document.documentElement.currentStyle ) {
+       getStyles = function( elem ) {
+               return elem.currentStyle;
+       };
+
+       curCSS = function( elem, name, _computed ) {
+               var left, rs, rsLeft,
+                       computed = _computed || getStyles( elem ),
+                       ret = computed ? computed[ name ] : undefined,
+                       style = elem.style;
+
+               // Avoid setting ret to empty string here
+               // so we don't default to auto
+               if ( ret == null && style && style[ name ] ) {
+                       ret = style[ name ];
+               }
+
+               // From the awesome hack by Dean Edwards
+               // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+               // If we're not dealing with a regular pixel number
+               // but a number that has a weird ending, we need to convert it to pixels
+               // but not position css attributes, as those are proportional to the parent element instead
+               // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+               if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+
+                       // Remember the original values
+                       left = style.left;
+                       rs = elem.runtimeStyle;
+                       rsLeft = rs && rs.left;
+
+                       // Put in the new values to get a computed value out
+                       if ( rsLeft ) {
+                               rs.left = elem.currentStyle.left;
+                       }
+                       style.left = name === "fontSize" ? "1em" : ret;
+                       ret = style.pixelLeft + "px";
+
+                       // Revert the changed values
+                       style.left = left;
+                       if ( rsLeft ) {
+                               rs.left = rsLeft;
+                       }
+               }
+
+               return ret === "" ? "auto" : ret;
+       };
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+       var matches = rnumsplit.exec( value );
+       return matches ?
+               // Guard against undefined "subtract", e.g., when used as in cssHooks
+               Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+               value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+       var i = extra === ( isBorderBox ? "border" : "content" ) ?
+               // If we already have the right measurement, avoid augmentation
+               4 :
+               // Otherwise initialize for horizontal or vertical properties
+               name === "width" ? 1 : 0,
+
+               val = 0;
+
+       for ( ; i < 4; i += 2 ) {
+               // both box models exclude margin, so add it if we want it
+               if ( extra === "margin" ) {
+                       val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+               }
+
+               if ( isBorderBox ) {
+                       // border-box includes padding, so remove it if we want content
+                       if ( extra === "content" ) {
+                               val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+                       }
+
+                       // at this point, extra isn't border nor margin, so remove border
+                       if ( extra !== "margin" ) {
+                               val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+                       }
+               } else {
+                       // at this point, extra isn't content, so add padding
+                       val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+                       // at this point, extra isn't content nor padding, so add border
+                       if ( extra !== "padding" ) {
+                               val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+                       }
+               }
+       }
+
+       return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+       // Start with offset property, which is equivalent to the border-box value
+       var valueIsBorderBox = true,
+               val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+               styles = getStyles( elem ),
+               isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+       // some non-html elements return undefined for offsetWidth, so check for null/undefined
+       // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+       // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+       if ( val <= 0 || val == null ) {
+               // Fall back to computed then uncomputed css if necessary
+               val = curCSS( elem, name, styles );
+               if ( val < 0 || val == null ) {
+                       val = elem.style[ name ];
+               }
+
+               // Computed unit is not pixels. Stop here and return.
+               if ( rnumnonpx.test(val) ) {
+                       return val;
+               }
+
+               // we need the check for style in case a browser which returns unreliable values
+               // for getComputedStyle silently falls back to the reliable elem.style
+               valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
+
+               // Normalize "", auto, and prepare for extra
+               val = parseFloat( val ) || 0;
+       }
+
+       // use the active box-sizing model to add/subtract irrelevant styles
+       return ( val +
+               augmentWidthOrHeight(
+                       elem,
+                       name,
+                       extra || ( isBorderBox ? "border" : "content" ),
+                       valueIsBorderBox,
+                       styles
+               )
+       ) + "px";
+}
+
+// Try to determine the default display value of an element
+function css_defaultDisplay( nodeName ) {
+       var doc = document,
+               display = elemdisplay[ nodeName ];
+
+       if ( !display ) {
+               display = actualDisplay( nodeName, doc );
+
+               // If the simple way fails, read from inside an iframe
+               if ( display === "none" || !display ) {
+                       // Use the already-created iframe if possible
+                       iframe = ( iframe ||
+                               jQuery("<iframe frameborder='0' width='0' height='0'/>")
+                               .css( "cssText", "display:block !important" )
+                       ).appendTo( doc.documentElement );
+
+                       // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+                       doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
+                       doc.write("<!doctype html><html><body>");
+                       doc.close();
+
+                       display = actualDisplay( nodeName, doc );
+                       iframe.detach();
+               }
+
+               // Store the correct default display
+               elemdisplay[ nodeName ] = display;
+       }
+
+       return display;
+}
+
+// Called ONLY from within css_defaultDisplay
+function actualDisplay( name, doc ) {
+       var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+               display = jQuery.css( elem[0], "display" );
+       elem.remove();
+       return display;
+}
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+       jQuery.cssHooks[ name ] = {
+               get: function( elem, computed, extra ) {
+                       if ( computed ) {
+                               // certain elements can have dimension info if we invisibly show them
+                               // however, it must have a current display style that would benefit from this
+                               return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
+                                       jQuery.swap( elem, cssShow, function() {
+                                               return getWidthOrHeight( elem, name, extra );
+                                       }) :
+                                       getWidthOrHeight( elem, name, extra );
+                       }
+               },
+
+               set: function( elem, value, extra ) {
+                       var styles = extra && getStyles( elem );
+                       return setPositiveNumber( elem, value, extra ?
+                               augmentWidthOrHeight(
+                                       elem,
+                                       name,
+                                       extra,
+                                       jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+                                       styles
+                               ) : 0
+                       );
+               }
+       };
+});
+
+if ( !jQuery.support.opacity ) {
+       jQuery.cssHooks.opacity = {
+               get: function( elem, computed ) {
+                       // IE uses filters for opacity
+                       return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+                               ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+                               computed ? "1" : "";
+               },
+
+               set: function( elem, value ) {
+                       var style = elem.style,
+                               currentStyle = elem.currentStyle,
+                               opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+                               filter = currentStyle && currentStyle.filter || style.filter || "";
+
+                       // IE has trouble with opacity if it does not have layout
+                       // Force it by setting the zoom level
+                       style.zoom = 1;
+
+                       // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+                       // if value === "", then remove inline opacity #12685
+                       if ( ( value >= 1 || value === "" ) &&
+                                       jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+                                       style.removeAttribute ) {
+
+                               // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+                               // if "filter:" is present at all, clearType is disabled, we want to avoid this
+                               // style.removeAttribute is IE Only, but so apparently is this code path...
+                               style.removeAttribute( "filter" );
+
+                               // if there is no filter style applied in a css rule or unset inline opacity, we are done
+                               if ( value === "" || currentStyle && !currentStyle.filter ) {
+                                       return;
+                               }
+                       }
+
+                       // otherwise, set new filter values
+                       style.filter = ralpha.test( filter ) ?
+                               filter.replace( ralpha, opacity ) :
+                               filter + " " + opacity;
+               }
+       };
+}
+
+// These hooks cannot be added until DOM ready because the support test
+// for it is not run until after DOM ready
+jQuery(function() {
+       if ( !jQuery.support.reliableMarginRight ) {
+               jQuery.cssHooks.marginRight = {
+                       get: function( elem, computed ) {
+                               if ( computed ) {
+                                       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+                                       // Work around by temporarily setting element display to inline-block
+                                       return jQuery.swap( elem, { "display": "inline-block" },
+                                               curCSS, [ elem, "marginRight" ] );
+                               }
+                       }
+               };
+       }
+
+       // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+       // getComputedStyle returns percent when specified for top/left/bottom/right
+       // rather than make the css module depend on the offset module, we just check for it here
+       if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+               jQuery.each( [ "top", "left" ], function( i, prop ) {
+                       jQuery.cssHooks[ prop ] = {
+                               get: function( elem, computed ) {
+                                       if ( computed ) {
+                                               computed = curCSS( elem, prop );
+                                               // if curCSS returns percentage, fallback to offset
+                                               return rnumnonpx.test( computed ) ?
+                                                       jQuery( elem ).position()[ prop ] + "px" :
+                                                       computed;
+                                       }
+                               }
+                       };
+               });
+       }
+
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+       jQuery.expr.filters.hidden = function( elem ) {
+               // Support: Opera <= 12.12
+               // Opera reports offsetWidths and offsetHeights less than zero on some elements
+               return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
+                       (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+       };
+
+       jQuery.expr.filters.visible = function( elem ) {
+               return !jQuery.expr.filters.hidden( elem );
+       };
+}
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+       margin: "",
+       padding: "",
+       border: "Width"
+}, function( prefix, suffix ) {
+       jQuery.cssHooks[ prefix + suffix ] = {
+               expand: function( value ) {
+                       var i = 0,
+                               expanded = {},
+
+                               // assumes a single number if not a string
+                               parts = typeof value === "string" ? value.split(" ") : [ value ];
+
+                       for ( ; i < 4; i++ ) {
+                               expanded[ prefix + cssExpand[ i ] + suffix ] =
+                                       parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+                       }
+
+                       return expanded;
+               }
+       };
+
+       if ( !rmargin.test( prefix ) ) {
+               jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+       }
+});
+var r20 = /%20/g,
+       rbracket = /\[\]$/,
+       rCRLF = /\r?\n/g,
+       rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+       rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+jQuery.fn.extend({
+       serialize: function() {
+               return jQuery.param( this.serializeArray() );
+       },
+       serializeArray: function() {
+               return this.map(function(){
+                       // Can add propHook for "elements" to filter or add form elements
+                       var elements = jQuery.prop( this, "elements" );
+                       return elements ? jQuery.makeArray( elements ) : this;
+               })
+               .filter(function(){
+                       var type = this.type;
+                       // Use .is(":disabled") so that fieldset[disabled] works
+                       return this.name && !jQuery( this ).is( ":disabled" ) &&
+                               rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+                               ( this.checked || !manipulation_rcheckableType.test( type ) );
+               })
+               .map(function( i, elem ){
+                       var val = jQuery( this ).val();
+
+                       return val == null ?
+                               null :
+                               jQuery.isArray( val ) ?
+                                       jQuery.map( val, function( val ){
+                                               return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+                                       }) :
+                                       { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+               }).get();
+       }
+});
+
+//Serialize an array of form elements or a set of
+//key/values into a query string
+jQuery.param = function( a, traditional ) {
+       var prefix,
+               s = [],
+               add = function( key, value ) {
+                       // If value is a function, invoke it and return its value
+                       value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+                       s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+               };
+
+       // Set traditional to true for jQuery <= 1.3.2 behavior.
+       if ( traditional === undefined ) {
+               traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+       }
+
+       // If an array was passed in, assume that it is an array of form elements.
+       if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+               // Serialize the form elements
+               jQuery.each( a, function() {
+                       add( this.name, this.value );
+               });
+
+       } else {
+               // If traditional, encode the "old" way (the way 1.3.2 or older
+               // did it), otherwise encode params recursively.
+               for ( prefix in a ) {
+                       buildParams( prefix, a[ prefix ], traditional, add );
+               }
+       }
+
+       // Return the resulting serialization
+       return s.join( "&" ).replace( r20, "+" );
+};
+
+function buildParams( prefix, obj, traditional, add ) {
+       var name;
+
+       if ( jQuery.isArray( obj ) ) {
+               // Serialize array item.
+               jQuery.each( obj, function( i, v ) {
+                       if ( traditional || rbracket.test( prefix ) ) {
+                               // Treat each array item as a scalar.
+                               add( prefix, v );
+
+                       } else {
+                               // Item is non-scalar (array or object), encode its numeric index.
+                               buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+                       }
+               });
+
+       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
+               // Serialize object item.
+               for ( name in obj ) {
+                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+               }
+
+       } else {
+               // Serialize scalar item.
+               add( prefix, obj );
+       }
+}
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+       "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+       "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+       // Handle event binding
+       jQuery.fn[ name ] = function( data, fn ) {
+               return arguments.length > 0 ?
+                       this.on( name, null, data, fn ) :
+                       this.trigger( name );
+       };
+});
+
+jQuery.fn.hover = function( fnOver, fnOut ) {
+       return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+};
+var
+       // Document location
+       ajaxLocParts,
+       ajaxLocation,
+       ajax_nonce = jQuery.now(),
+
+       ajax_rquery = /\?/,
+       rhash = /#.*$/,
+       rts = /([?&])_=[^&]*/,
+       rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+       // #7653, #8125, #8152: local protocol detection
+       rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+       rnoContent = /^(?:GET|HEAD)$/,
+       rprotocol = /^\/\//,
+       rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
+
+       // Keep a copy of the old load method
+       _load = jQuery.fn.load,
+
+       /* Prefilters
+        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+        * 2) These are called:
+        *    - BEFORE asking for a transport
+        *    - AFTER param serialization (s.data is a string if s.processData is true)
+        * 3) key is the dataType
+        * 4) the catchall symbol "*" can be used
+        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+        */
+       prefilters = {},
+
+       /* Transports bindings
+        * 1) key is the dataType
+        * 2) the catchall symbol "*" can be used
+        * 3) selection will start with transport dataType and THEN go to "*" if needed
+        */
+       transports = {},
+
+       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+       allTypes = "*/".concat("*");
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+       ajaxLocation = location.href;
+} catch( e ) {
+       // Use the href attribute of an A element
+       // since IE will modify it given document.location
+       ajaxLocation = document.createElement( "a" );
+       ajaxLocation.href = "";
+       ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+       // dataTypeExpression is optional and defaults to "*"
+       return function( dataTypeExpression, func ) {
+
+               if ( typeof dataTypeExpression !== "string" ) {
+                       func = dataTypeExpression;
+                       dataTypeExpression = "*";
+               }
+
+               var dataType,
+                       i = 0,
+                       dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
+
+               if ( jQuery.isFunction( func ) ) {
+                       // For each dataType in the dataTypeExpression
+                       while ( (dataType = dataTypes[i++]) ) {
+                               // Prepend if requested
+                               if ( dataType[0] === "+" ) {
+                                       dataType = dataType.slice( 1 ) || "*";
+                                       (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+
+                               // Otherwise append
+                               } else {
+                                       (structure[ dataType ] = structure[ dataType ] || []).push( func );
+                               }
+                       }
+               }
+       };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+       var inspected = {},
+               seekingTransport = ( structure === transports );
+
+       function inspect( dataType ) {
+               var selected;
+               inspected[ dataType ] = true;
+               jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+                       var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+                       if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+                               options.dataTypes.unshift( dataTypeOrTransport );
+                               inspect( dataTypeOrTransport );
+                               return false;
+                       } else if ( seekingTransport ) {
+                               return !( selected = dataTypeOrTransport );
+                       }
+               });
+               return selected;
+       }
+
+       return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+       var deep, key,
+               flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+       for ( key in src ) {
+               if ( src[ key ] !== undefined ) {
+                       ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+               }
+       }
+       if ( deep ) {
+               jQuery.extend( true, target, deep );
+       }
+
+       return target;
+}
+
+jQuery.fn.load = function( url, params, callback ) {
+       if ( typeof url !== "string" && _load ) {
+               return _load.apply( this, arguments );
+       }
+
+       var selector, response, type,
+               self = this,
+               off = url.indexOf(" ");
+
+       if ( off >= 0 ) {
+               selector = url.slice( off, url.length );
+               url = url.slice( 0, off );
+       }
+
+       // If it's a function
+       if ( jQuery.isFunction( params ) ) {
+
+               // We assume that it's the callback
+               callback = params;
+               params = undefined;
+
+       // Otherwise, build a param string
+       } else if ( params && typeof params === "object" ) {
+               type = "POST";
+       }
+
+       // If we have elements to modify, make the request
+       if ( self.length > 0 ) {
+               jQuery.ajax({
+                       url: url,
+
+                       // if "type" variable is undefined, then "GET" method will be used
+                       type: type,
+                       dataType: "html",
+                       data: params
+               }).done(function( responseText ) {
+
+                       // Save response for use in complete callback
+                       response = arguments;
+
+                       self.html( selector ?
+
+                               // If a selector was specified, locate the right elements in a dummy div
+                               // Exclude scripts to avoid IE 'Permission Denied' errors
+                               jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+                               // Otherwise use the full result
+                               responseText );
+
+               }).complete( callback && function( jqXHR, status ) {
+                       self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+               });
+       }
+
+       return this;
+};
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
+       jQuery.fn[ type ] = function( fn ){
+               return this.on( type, fn );
+       };
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+       jQuery[ method ] = function( url, data, callback, type ) {
+               // shift arguments if data argument was omitted
+               if ( jQuery.isFunction( data ) ) {
+                       type = type || callback;
+                       callback = data;
+                       data = undefined;
+               }
+
+               return jQuery.ajax({
+                       url: url,
+                       type: method,
+                       dataType: type,
+                       data: data,
+                       success: callback
+               });
+       };
+});
+
+jQuery.extend({
+
+       // Counter for holding the number of active queries
+       active: 0,
+
+       // Last-Modified header cache for next request
+       lastModified: {},
+       etag: {},
+
+       ajaxSettings: {
+               url: ajaxLocation,
+               type: "GET",
+               isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+               global: true,
+               processData: true,
+               async: true,
+               contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+               /*
+               timeout: 0,
+               data: null,
+               dataType: null,
+               username: null,
+               password: null,
+               cache: null,
+               throws: false,
+               traditional: false,
+               headers: {},
+               */
+
+               accepts: {
+                       "*": allTypes,
+                       text: "text/plain",
+                       html: "text/html",
+                       xml: "application/xml, text/xml",
+                       json: "application/json, text/javascript"
+               },
+
+               contents: {
+                       xml: /xml/,
+                       html: /html/,
+                       json: /json/
+               },
+
+               responseFields: {
+                       xml: "responseXML",
+                       text: "responseText"
+               },
+
+               // Data converters
+               // Keys separate source (or catchall "*") and destination types with a single space
+               converters: {
+
+                       // Convert anything to text
+                       "* text": window.String,
+
+                       // Text to html (true = no transformation)
+                       "text html": true,
+
+                       // Evaluate text as a json expression
+                       "text json": jQuery.parseJSON,
+
+                       // Parse text as xml
+                       "text xml": jQuery.parseXML
+               },
+
+               // For options that shouldn't be deep extended:
+               // you can add your own custom options here if
+               // and when you create one that shouldn't be
+               // deep extended (see ajaxExtend)
+               flatOptions: {
+                       url: true,
+                       context: true
+               }
+       },
+
+       // Creates a full fledged settings object into target
+       // with both ajaxSettings and settings fields.
+       // If target is omitted, writes into ajaxSettings.
+       ajaxSetup: function( target, settings ) {
+               return settings ?
+
+                       // Building a settings object
+                       ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+                       // Extending ajaxSettings
+                       ajaxExtend( jQuery.ajaxSettings, target );
+       },
+
+       ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+       ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+       // Main method
+       ajax: function( url, options ) {
+
+               // If url is an object, simulate pre-1.5 signature
+               if ( typeof url === "object" ) {
+                       options = url;
+                       url = undefined;
+               }
+
+               // Force options to be an object
+               options = options || {};
+
+               var // Cross-domain detection vars
+                       parts,
+                       // Loop variable
+                       i,
+                       // URL without anti-cache param
+                       cacheURL,
+                       // Response headers as string
+                       responseHeadersString,
+                       // timeout handle
+                       timeoutTimer,
+
+                       // To know if global events are to be dispatched
+                       fireGlobals,
+
+                       transport,
+                       // Response headers
+                       responseHeaders,
+                       // Create the final options object
+                       s = jQuery.ajaxSetup( {}, options ),
+                       // Callbacks context
+                       callbackContext = s.context || s,
+                       // Context for global events is callbackContext if it is a DOM node or jQuery collection
+                       globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+                               jQuery( callbackContext ) :
+                               jQuery.event,
+                       // Deferreds
+                       deferred = jQuery.Deferred(),
+                       completeDeferred = jQuery.Callbacks("once memory"),
+                       // Status-dependent callbacks
+                       statusCode = s.statusCode || {},
+                       // Headers (they are sent all at once)
+                       requestHeaders = {},
+                       requestHeadersNames = {},
+                       // The jqXHR state
+                       state = 0,
+                       // Default abort message
+                       strAbort = "canceled",
+                       // Fake xhr
+                       jqXHR = {
+                               readyState: 0,
+
+                               // Builds headers hashtable if needed
+                               getResponseHeader: function( key ) {
+                                       var match;
+                                       if ( state === 2 ) {
+                                               if ( !responseHeaders ) {
+                                                       responseHeaders = {};
+                                                       while ( (match = rheaders.exec( responseHeadersString )) ) {
+                                                               responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+                                                       }
+                                               }
+                                               match = responseHeaders[ key.toLowerCase() ];
+                                       }
+                                       return match == null ? null : match;
+                               },
+
+                               // Raw string
+                               getAllResponseHeaders: function() {
+                                       return state === 2 ? responseHeadersString : null;
+                               },
+
+                               // Caches the header
+                               setRequestHeader: function( name, value ) {
+                                       var lname = name.toLowerCase();
+                                       if ( !state ) {
+                                               name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+                                               requestHeaders[ name ] = value;
+                                       }
+                                       return this;
+                               },
+
+                               // Overrides response content-type header
+                               overrideMimeType: function( type ) {
+                                       if ( !state ) {
+                                               s.mimeType = type;
+                                       }
+                                       return this;
+                               },
+
+                               // Status-dependent callbacks
+                               statusCode: function( map ) {
+                                       var code;
+                                       if ( map ) {
+                                               if ( state < 2 ) {
+                                                       for ( code in map ) {
+                                                               // Lazy-add the new callback in a way that preserves old ones
+                                                               statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+                                                       }
+                                               } else {
+                                                       // Execute the appropriate callbacks
+                                                       jqXHR.always( map[ jqXHR.status ] );
+                                               }
+                                       }
+                                       return this;
+                               },
+
+                               // Cancel the request
+                               abort: function( statusText ) {
+                                       var finalText = statusText || strAbort;
+                                       if ( transport ) {
+                                               transport.abort( finalText );
+                                       }
+                                       done( 0, finalText );
+                                       return this;
+                               }
+                       };
+
+               // Attach deferreds
+               deferred.promise( jqXHR ).complete = completeDeferred.add;
+               jqXHR.success = jqXHR.done;
+               jqXHR.error = jqXHR.fail;
+
+               // Remove hash character (#7531: and string promotion)
+               // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+               // Handle falsy url in the settings object (#10093: consistency with old signature)
+               // We also use the url parameter if available
+               s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+               // Alias method option to type as per ticket #12004
+               s.type = options.method || options.type || s.method || s.type;
+
+               // Extract dataTypes list
+               s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
+
+               // A cross-domain request is in order when we have a protocol:host:port mismatch
+               if ( s.crossDomain == null ) {
+                       parts = rurl.exec( s.url.toLowerCase() );
+                       s.crossDomain = !!( parts &&
+                               ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+                                       ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+                                               ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+                       );
+               }
+
+               // Convert data if not already a string
+               if ( s.data && s.processData && typeof s.data !== "string" ) {
+                       s.data = jQuery.param( s.data, s.traditional );
+               }
+
+               // Apply prefilters
+               inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+               // If request was aborted inside a prefilter, stop there
+               if ( state === 2 ) {
+                       return jqXHR;
+               }
+
+               // We can fire global events as of now if asked to
+               fireGlobals = s.global;
+
+               // Watch for a new set of requests
+               if ( fireGlobals && jQuery.active++ === 0 ) {
+                       jQuery.event.trigger("ajaxStart");
+               }
+
+               // Uppercase the type
+               s.type = s.type.toUpperCase();
+
+               // Determine if request has content
+               s.hasContent = !rnoContent.test( s.type );
+
+               // Save the URL in case we're toying with the If-Modified-Since
+               // and/or If-None-Match header later on
+               cacheURL = s.url;
+
+               // More options handling for requests with no content
+               if ( !s.hasContent ) {
+
+                       // If data is available, append data to url
+                       if ( s.data ) {
+                               cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+                               // #9682: remove data so that it's not used in an eventual retry
+                               delete s.data;
+                       }
+
+                       // Add anti-cache in url if needed
+                       if ( s.cache === false ) {
+                               s.url = rts.test( cacheURL ) ?
+
+                                       // If there is already a '_' parameter, set its value
+                                       cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
+
+                                       // Otherwise add one to the end
+                                       cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
+                       }
+               }
+
+               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+               if ( s.ifModified ) {
+                       if ( jQuery.lastModified[ cacheURL ] ) {
+                               jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+                       }
+                       if ( jQuery.etag[ cacheURL ] ) {
+                               jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+                       }
+               }
+
+               // Set the correct header, if data is being sent
+               if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+                       jqXHR.setRequestHeader( "Content-Type", s.contentType );
+               }
+
+               // Set the Accepts header for the server, depending on the dataType
+               jqXHR.setRequestHeader(
+                       "Accept",
+                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+                               s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+                               s.accepts[ "*" ]
+               );
+
+               // Check for headers option
+               for ( i in s.headers ) {
+                       jqXHR.setRequestHeader( i, s.headers[ i ] );
+               }
+
+               // Allow custom headers/mimetypes and early abort
+               if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+                       // Abort if not done already and return
+                       return jqXHR.abort();
+               }
+
+               // aborting is no longer a cancellation
+               strAbort = "abort";
+
+               // Install callbacks on deferreds
+               for ( i in { success: 1, error: 1, complete: 1 } ) {
+                       jqXHR[ i ]( s[ i ] );
+               }
+
+               // Get transport
+               transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+               // If no transport, we auto-abort
+               if ( !transport ) {
+                       done( -1, "No Transport" );
+               } else {
+                       jqXHR.readyState = 1;
+
+                       // Send global event
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+                       }
+                       // Timeout
+                       if ( s.async && s.timeout > 0 ) {
+                               timeoutTimer = setTimeout(function() {
+                                       jqXHR.abort("timeout");
+                               }, s.timeout );
+                       }
+
+                       try {
+                               state = 1;
+                               transport.send( requestHeaders, done );
+                       } catch ( e ) {
+                               // Propagate exception as error if not done
+                               if ( state < 2 ) {
+                                       done( -1, e );
+                               // Simply rethrow otherwise
+                               } else {
+                                       throw e;
+                               }
+                       }
+               }
+
+               // Callback for when everything is done
+               function done( status, nativeStatusText, responses, headers ) {
+                       var isSuccess, success, error, response, modified,
+                               statusText = nativeStatusText;
+
+                       // Called once
+                       if ( state === 2 ) {
+                               return;
+                       }
+
+                       // State is "done" now
+                       state = 2;
+
+                       // Clear timeout if it exists
+                       if ( timeoutTimer ) {
+                               clearTimeout( timeoutTimer );
+                       }
+
+                       // Dereference transport for early garbage collection
+                       // (no matter how long the jqXHR object will be used)
+                       transport = undefined;
+
+                       // Cache response headers
+                       responseHeadersString = headers || "";
+
+                       // Set readyState
+                       jqXHR.readyState = status > 0 ? 4 : 0;
+
+                       // Get response data
+                       if ( responses ) {
+                               response = ajaxHandleResponses( s, jqXHR, responses );
+                       }
+
+                       // If successful, handle type chaining
+                       if ( status >= 200 && status < 300 || status === 304 ) {
+
+                               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+                               if ( s.ifModified ) {
+                                       modified = jqXHR.getResponseHeader("Last-Modified");
+                                       if ( modified ) {
+                                               jQuery.lastModified[ cacheURL ] = modified;
+                                       }
+                                       modified = jqXHR.getResponseHeader("etag");
+                                       if ( modified ) {
+                                               jQuery.etag[ cacheURL ] = modified;
+                                       }
+                               }
+
+                               // if no content
+                               if ( status === 204 ) {
+                                       isSuccess = true;
+                                       statusText = "nocontent";
+
+                               // if not modified
+                               } else if ( status === 304 ) {
+                                       isSuccess = true;
+                                       statusText = "notmodified";
+
+                               // If we have data, let's convert it
+                               } else {
+                                       isSuccess = ajaxConvert( s, response );
+                                       statusText = isSuccess.state;
+                                       success = isSuccess.data;
+                                       error = isSuccess.error;
+                                       isSuccess = !error;
+                               }
+                       } else {
+                               // We extract error from statusText
+                               // then normalize statusText and status for non-aborts
+                               error = statusText;
+                               if ( status || !statusText ) {
+                                       statusText = "error";
+                                       if ( status < 0 ) {
+                                               status = 0;
+                                       }
+                               }
+                       }
+
+                       // Set data for the fake xhr object
+                       jqXHR.status = status;
+                       jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+                       // Success/Error
+                       if ( isSuccess ) {
+                               deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+                       } else {
+                               deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+                       }
+
+                       // Status-dependent callbacks
+                       jqXHR.statusCode( statusCode );
+                       statusCode = undefined;
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+                                       [ jqXHR, s, isSuccess ? success : error ] );
+                       }
+
+                       // Complete
+                       completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+                               // Handle the global AJAX counter
+                               if ( !( --jQuery.active ) ) {
+                                       jQuery.event.trigger("ajaxStop");
+                               }
+                       }
+               }
+
+               return jqXHR;
+       },
+
+       getScript: function( url, callback ) {
+               return jQuery.get( url, undefined, callback, "script" );
+       },
+
+       getJSON: function( url, data, callback ) {
+               return jQuery.get( url, data, callback, "json" );
+       }
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+       var firstDataType, ct, finalDataType, type,
+               contents = s.contents,
+               dataTypes = s.dataTypes,
+               responseFields = s.responseFields;
+
+       // Fill responseXXX fields
+       for ( type in responseFields ) {
+               if ( type in responses ) {
+                       jqXHR[ responseFields[type] ] = responses[ type ];
+               }
+       }
+
+       // Remove auto dataType and get content-type in the process
+       while( dataTypes[ 0 ] === "*" ) {
+               dataTypes.shift();
+               if ( ct === undefined ) {
+                       ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+               }
+       }
+
+       // Check if we're dealing with a known content-type
+       if ( ct ) {
+               for ( type in contents ) {
+                       if ( contents[ type ] && contents[ type ].test( ct ) ) {
+                               dataTypes.unshift( type );
+                               break;
+                       }
+               }
+       }
+
+       // Check to see if we have a response for the expected dataType
+       if ( dataTypes[ 0 ] in responses ) {
+               finalDataType = dataTypes[ 0 ];
+       } else {
+               // Try convertible dataTypes
+               for ( type in responses ) {
+                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+                               finalDataType = type;
+                               break;
+                       }
+                       if ( !firstDataType ) {
+                               firstDataType = type;
+                       }
+               }
+               // Or just use first one
+               finalDataType = finalDataType || firstDataType;
+       }
+
+       // If we found a dataType
+       // We add the dataType to the list if needed
+       // and return the corresponding response
+       if ( finalDataType ) {
+               if ( finalDataType !== dataTypes[ 0 ] ) {
+                       dataTypes.unshift( finalDataType );
+               }
+               return responses[ finalDataType ];
+       }
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+       var conv2, current, conv, tmp,
+               converters = {},
+               i = 0,
+               // Work with a copy of dataTypes in case we need to modify it for conversion
+               dataTypes = s.dataTypes.slice(),
+               prev = dataTypes[ 0 ];
+
+       // Apply the dataFilter if provided
+       if ( s.dataFilter ) {
+               response = s.dataFilter( response, s.dataType );
+       }
+
+       // Create converters map with lowercased keys
+       if ( dataTypes[ 1 ] ) {
+               for ( conv in s.converters ) {
+                       converters[ conv.toLowerCase() ] = s.converters[ conv ];
+               }
+       }
+
+       // Convert to each sequential dataType, tolerating list modification
+       for ( ; (current = dataTypes[++i]); ) {
+
+               // There's only work to do if current dataType is non-auto
+               if ( current !== "*" ) {
+
+                       // Convert response if prev dataType is non-auto and differs from current
+                       if ( prev !== "*" && prev !== current ) {
+
+                               // Seek a direct converter
+                               conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+                               // If none found, seek a pair
+                               if ( !conv ) {
+                                       for ( conv2 in converters ) {
+
+                                               // If conv2 outputs current
+                                               tmp = conv2.split(" ");
+                                               if ( tmp[ 1 ] === current ) {
+
+                                                       // If prev can be converted to accepted input
+                                                       conv = converters[ prev + " " + tmp[ 0 ] ] ||
+                                                               converters[ "* " + tmp[ 0 ] ];
+                                                       if ( conv ) {
+                                                               // Condense equivalence converters
+                                                               if ( conv === true ) {
+                                                                       conv = converters[ conv2 ];
+
+                                                               // Otherwise, insert the intermediate dataType
+                                                               } else if ( converters[ conv2 ] !== true ) {
+                                                                       current = tmp[ 0 ];
+                                                                       dataTypes.splice( i--, 0, current );
+                                                               }
+
+                                                               break;
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               // Apply converter (if not an equivalence)
+                               if ( conv !== true ) {
+
+                                       // Unless errors are allowed to bubble, catch and return them
+                                       if ( conv && s["throws"] ) {
+                                               response = conv( response );
+                                       } else {
+                                               try {
+                                                       response = conv( response );
+                                               } catch ( e ) {
+                                                       return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+                                               }
+                                       }
+                               }
+                       }
+
+                       // Update prev for next iteration
+                       prev = current;
+               }
+       }
+
+       return { state: "success", data: response };
+}
+// Install script dataType
+jQuery.ajaxSetup({
+       accepts: {
+               script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+       },
+       contents: {
+               script: /(?:java|ecma)script/
+       },
+       converters: {
+               "text script": function( text ) {
+                       jQuery.globalEval( text );
+                       return text;
+               }
+       }
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+       if ( s.cache === undefined ) {
+               s.cache = false;
+       }
+       if ( s.crossDomain ) {
+               s.type = "GET";
+               s.global = false;
+       }
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+       // This transport only deals with cross domain requests
+       if ( s.crossDomain ) {
+
+               var script,
+                       head = document.head || jQuery("head")[0] || document.documentElement;
+
+               return {
+
+                       send: function( _, callback ) {
+
+                               script = document.createElement("script");
+
+                               script.async = true;
+
+                               if ( s.scriptCharset ) {
+                                       script.charset = s.scriptCharset;
+                               }
+
+                               script.src = s.url;
+
+                               // Attach handlers for all browsers
+                               script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+                                       if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+                                               // Handle memory leak in IE
+                                               script.onload = script.onreadystatechange = null;
+
+                                               // Remove the script
+                                               if ( script.parentNode ) {
+                                                       script.parentNode.removeChild( script );
+                                               }
+
+                                               // Dereference the script
+                                               script = null;
+
+                                               // Callback if not abort
+                                               if ( !isAbort ) {
+                                                       callback( 200, "success" );
+                                               }
+                                       }
+                               };
+
+                               // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
+                               // Use native DOM manipulation to avoid our domManip AJAX trickery
+                               head.insertBefore( script, head.firstChild );
+                       },
+
+                       abort: function() {
+                               if ( script ) {
+                                       script.onload( undefined, true );
+                               }
+                       }
+               };
+       }
+});
+var oldCallbacks = [],
+       rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+       jsonp: "callback",
+       jsonpCallback: function() {
+               var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
+               this[ callback ] = true;
+               return callback;
+       }
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+       var callbackName, overwritten, responseContainer,
+               jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+                       "url" :
+                       typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+               );
+
+       // Handle iff the expected data type is "jsonp" or we have a parameter to set
+       if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+               // Get callback name, remembering preexisting value associated with it
+               callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+                       s.jsonpCallback() :
+                       s.jsonpCallback;
+
+               // Insert callback into url or form data
+               if ( jsonProp ) {
+                       s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+               } else if ( s.jsonp !== false ) {
+                       s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+               }
+
+               // Use data converter to retrieve json after script execution
+               s.converters["script json"] = function() {
+                       if ( !responseContainer ) {
+                               jQuery.error( callbackName + " was not called" );
+                       }
+                       return responseContainer[ 0 ];
+               };
+
+               // force json dataType
+               s.dataTypes[ 0 ] = "json";
+
+               // Install callback
+               overwritten = window[ callbackName ];
+               window[ callbackName ] = function() {
+                       responseContainer = arguments;
+               };
+
+               // Clean-up function (fires after converters)
+               jqXHR.always(function() {
+                       // Restore preexisting value
+                       window[ callbackName ] = overwritten;
+
+                       // Save back as free
+                       if ( s[ callbackName ] ) {
+                               // make sure that re-using the options doesn't screw things around
+                               s.jsonpCallback = originalSettings.jsonpCallback;
+
+                               // save the callback name for future use
+                               oldCallbacks.push( callbackName );
+                       }
+
+                       // Call if it was a function and we have a response
+                       if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+                               overwritten( responseContainer[ 0 ] );
+                       }
+
+                       responseContainer = overwritten = undefined;
+               });
+
+               // Delegate to script
+               return "script";
+       }
+});
+var xhrCallbacks, xhrSupported,
+       xhrId = 0,
+       // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+       xhrOnUnloadAbort = window.ActiveXObject && function() {
+               // Abort all pending requests
+               var key;
+               for ( key in xhrCallbacks ) {
+                       xhrCallbacks[ key ]( undefined, true );
+               }
+       };
+
+// Functions to create xhrs
+function createStandardXHR() {
+       try {
+               return new window.XMLHttpRequest();
+       } catch( e ) {}
+}
+
+function createActiveXHR() {
+       try {
+               return new window.ActiveXObject("Microsoft.XMLHTTP");
+       } catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+       /* Microsoft failed to properly
+        * implement the XMLHttpRequest in IE7 (can't request local files),
+        * so we use the ActiveXObject when it is available
+        * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+        * we need a fallback.
+        */
+       function() {
+               return !this.isLocal && createStandardXHR() || createActiveXHR();
+       } :
+       // For all other browsers, use the standard XMLHttpRequest object
+       createStandardXHR;
+
+// Determine support properties
+xhrSupported = jQuery.ajaxSettings.xhr();
+jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+xhrSupported = jQuery.support.ajax = !!xhrSupported;
+
+// Create transport if the browser can provide an xhr
+if ( xhrSupported ) {
+
+       jQuery.ajaxTransport(function( s ) {
+               // Cross domain only allowed if supported through XMLHttpRequest
+               if ( !s.crossDomain || jQuery.support.cors ) {
+
+                       var callback;
+
+                       return {
+                               send: function( headers, complete ) {
+
+                                       // Get a new xhr
+                                       var handle, i,
+                                               xhr = s.xhr();
+
+                                       // Open the socket
+                                       // Passing null username, generates a login popup on Opera (#2865)
+                                       if ( s.username ) {
+                                               xhr.open( s.type, s.url, s.async, s.username, s.password );
+                                       } else {
+                                               xhr.open( s.type, s.url, s.async );
+                                       }
+
+                                       // Apply custom fields if provided
+                                       if ( s.xhrFields ) {
+                                               for ( i in s.xhrFields ) {
+                                                       xhr[ i ] = s.xhrFields[ i ];
+                                               }
+                                       }
+
+                                       // Override mime type if needed
+                                       if ( s.mimeType && xhr.overrideMimeType ) {
+                                               xhr.overrideMimeType( s.mimeType );
+                                       }
+
+                                       // X-Requested-With header
+                                       // For cross-domain requests, seeing as conditions for a preflight are
+                                       // akin to a jigsaw puzzle, we simply never set it to be sure.
+                                       // (it can always be set on a per-request basis or even using ajaxSetup)
+                                       // For same-domain requests, won't change header if already provided.
+                                       if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+                                               headers["X-Requested-With"] = "XMLHttpRequest";
+                                       }
+
+                                       // Need an extra try/catch for cross domain requests in Firefox 3
+                                       try {
+                                               for ( i in headers ) {
+                                                       xhr.setRequestHeader( i, headers[ i ] );
+                                               }
+                                       } catch( err ) {}
+
+                                       // Do send the request
+                                       // This may raise an exception which is actually
+                                       // handled in jQuery.ajax (so no try/catch here)
+                                       xhr.send( ( s.hasContent && s.data ) || null );
+
+                                       // Listener
+                                       callback = function( _, isAbort ) {
+                                               var status, responseHeaders, statusText, responses;
+
+                                               // Firefox throws exceptions when accessing properties
+                                               // of an xhr when a network error occurred
+                                               // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+                                               try {
+
+                                                       // Was never called and is aborted or complete
+                                                       if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+                                                               // Only called once
+                                                               callback = undefined;
+
+                                                               // Do not keep as active anymore
+                                                               if ( handle ) {
+                                                                       xhr.onreadystatechange = jQuery.noop;
+                                                                       if ( xhrOnUnloadAbort ) {
+                                                                               delete xhrCallbacks[ handle ];
+                                                                       }
+                                                               }
+
+                                                               // If it's an abort
+                                                               if ( isAbort ) {
+                                                                       // Abort it manually if needed
+                                                                       if ( xhr.readyState !== 4 ) {
+                                                                               xhr.abort();
+                                                                       }
+                                                               } else {
+                                                                       responses = {};
+                                                                       status = xhr.status;
+                                                                       responseHeaders = xhr.getAllResponseHeaders();
+
+                                                                       // When requesting binary data, IE6-9 will throw an exception
+                                                                       // on any attempt to access responseText (#11426)
+                                                                       if ( typeof xhr.responseText === "string" ) {
+                                                                               responses.text = xhr.responseText;
+                                                                       }
+
+                                                                       // Firefox throws an exception when accessing
+                                                                       // statusText for faulty cross-domain requests
+                                                                       try {
+                                                                               statusText = xhr.statusText;
+                                                                       } catch( e ) {
+                                                                               // We normalize with Webkit giving an empty statusText
+                                                                               statusText = "";
+                                                                       }
+
+                                                                       // Filter status for non standard behaviors
+
+                                                                       // If the request is local and we have data: assume a success
+                                                                       // (success with no data won't get notified, that's the best we
+                                                                       // can do given current implementations)
+                                                                       if ( !status && s.isLocal && !s.crossDomain ) {
+                                                                               status = responses.text ? 200 : 404;
+                                                                       // IE - #1450: sometimes returns 1223 when it should be 204
+                                                                       } else if ( status === 1223 ) {
+                                                                               status = 204;
+                                                                       }
+                                                               }
+                                                       }
+                                               } catch( firefoxAccessException ) {
+                                                       if ( !isAbort ) {
+                                                               complete( -1, firefoxAccessException );
+                                                       }
+                                               }
+
+                                               // Call complete if needed
+                                               if ( responses ) {
+                                                       complete( status, statusText, responses, responseHeaders );
+                                               }
+                                       };
+
+                                       if ( !s.async ) {
+                                               // if we're in sync mode we fire the callback
+                                               callback();
+                                       } else if ( xhr.readyState === 4 ) {
+                                               // (IE6 & IE7) if it's in cache and has been
+                                               // retrieved directly we need to fire the callback
+                                               setTimeout( callback );
+                                       } else {
+                                               handle = ++xhrId;
+                                               if ( xhrOnUnloadAbort ) {
+                                                       // Create the active xhrs callbacks list if needed
+                                                       // and attach the unload handler
+                                                       if ( !xhrCallbacks ) {
+                                                               xhrCallbacks = {};
+                                                               jQuery( window ).unload( xhrOnUnloadAbort );
+                                                       }
+                                                       // Add to list of active xhrs callbacks
+                                                       xhrCallbacks[ handle ] = callback;
+                                               }
+                                               xhr.onreadystatechange = callback;
+                                       }
+                               },
+
+                               abort: function() {
+                                       if ( callback ) {
+                                               callback( undefined, true );
+                                       }
+                               }
+                       };
+               }
+       });
+}
+var fxNow, timerId,
+       rfxtypes = /^(?:toggle|show|hide)$/,
+       rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
+       rrun = /queueHooks$/,
+       animationPrefilters = [ defaultPrefilter ],
+       tweeners = {
+               "*": [function( prop, value ) {
+                       var end, unit,
+                               tween = this.createTween( prop, value ),
+                               parts = rfxnum.exec( value ),
+                               target = tween.cur(),
+                               start = +target || 0,
+                               scale = 1,
+                               maxIterations = 20;
+
+                       if ( parts ) {
+                               end = +parts[2];
+                               unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+
+                               // We need to compute starting value
+                               if ( unit !== "px" && start ) {
+                                       // Iteratively approximate from a nonzero starting point
+                                       // Prefer the current property, because this process will be trivial if it uses the same units
+                                       // Fallback to end or a simple constant
+                                       start = jQuery.css( tween.elem, prop, true ) || end || 1;
+
+                                       do {
+                                               // If previous iteration zeroed out, double until we get *something*
+                                               // Use a string for doubling factor so we don't accidentally see scale as unchanged below
+                                               scale = scale || ".5";
+
+                                               // Adjust and apply
+                                               start = start / scale;
+                                               jQuery.style( tween.elem, prop, start + unit );
+
+                                       // Update scale, tolerating zero or NaN from tween.cur()
+                                       // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+                                       } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+                               }
+
+                               tween.unit = unit;
+                               tween.start = start;
+                               // If a +=/-= token was provided, we're doing a relative animation
+                               tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
+                       }
+                       return tween;
+               }]
+       };
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+       setTimeout(function() {
+               fxNow = undefined;
+       });
+       return ( fxNow = jQuery.now() );
+}
+
+function createTweens( animation, props ) {
+       jQuery.each( props, function( prop, value ) {
+               var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+                       index = 0,
+                       length = collection.length;
+               for ( ; index < length; index++ ) {
+                       if ( collection[ index ].call( animation, prop, value ) ) {
+
+                               // we're done with this property
+                               return;
+                       }
+               }
+       });
+}
+
+function Animation( elem, properties, options ) {
+       var result,
+               stopped,
+               index = 0,
+               length = animationPrefilters.length,
+               deferred = jQuery.Deferred().always( function() {
+                       // don't match elem in the :animated selector
+                       delete tick.elem;
+               }),
+               tick = function() {
+                       if ( stopped ) {
+                               return false;
+                       }
+                       var currentTime = fxNow || createFxNow(),
+                               remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+                               // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+                               temp = remaining / animation.duration || 0,
+                               percent = 1 - temp,
+                               index = 0,
+                               length = animation.tweens.length;
+
+                       for ( ; index < length ; index++ ) {
+                               animation.tweens[ index ].run( percent );
+                       }
+
+                       deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+                       if ( percent < 1 && length ) {
+                               return remaining;
+                       } else {
+                               deferred.resolveWith( elem, [ animation ] );
+                               return false;
+                       }
+               },
+               animation = deferred.promise({
+                       elem: elem,
+                       props: jQuery.extend( {}, properties ),
+                       opts: jQuery.extend( true, { specialEasing: {} }, options ),
+                       originalProperties: properties,
+                       originalOptions: options,
+                       startTime: fxNow || createFxNow(),
+                       duration: options.duration,
+                       tweens: [],
+                       createTween: function( prop, end ) {
+                               var tween = jQuery.Tween( elem, animation.opts, prop, end,
+                                               animation.opts.specialEasing[ prop ] || animation.opts.easing );
+                               animation.tweens.push( tween );
+                               return tween;
+                       },
+                       stop: function( gotoEnd ) {
+                               var index = 0,
+                                       // if we are going to the end, we want to run all the tweens
+                                       // otherwise we skip this part
+                                       length = gotoEnd ? animation.tweens.length : 0;
+                               if ( stopped ) {
+                                       return this;
+                               }
+                               stopped = true;
+                               for ( ; index < length ; index++ ) {
+                                       animation.tweens[ index ].run( 1 );
+                               }
+
+                               // resolve when we played the last frame
+                               // otherwise, reject
+                               if ( gotoEnd ) {
+                                       deferred.resolveWith( elem, [ animation, gotoEnd ] );
+                               } else {
+                                       deferred.rejectWith( elem, [ animation, gotoEnd ] );
+                               }
+                               return this;
+                       }
+               }),
+               props = animation.props;
+
+       propFilter( props, animation.opts.specialEasing );
+
+       for ( ; index < length ; index++ ) {
+               result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+               if ( result ) {
+                       return result;
+               }
+       }
+
+       createTweens( animation, props );
+
+       if ( jQuery.isFunction( animation.opts.start ) ) {
+               animation.opts.start.call( elem, animation );
+       }
+
+       jQuery.fx.timer(
+               jQuery.extend( tick, {
+                       elem: elem,
+                       anim: animation,
+                       queue: animation.opts.queue
+               })
+       );
+
+       // attach callbacks from options
+       return animation.progress( animation.opts.progress )
+               .done( animation.opts.done, animation.opts.complete )
+               .fail( animation.opts.fail )
+               .always( animation.opts.always );
+}
+
+function propFilter( props, specialEasing ) {
+       var value, name, index, easing, hooks;
+
+       // camelCase, specialEasing and expand cssHook pass
+       for ( index in props ) {
+               name = jQuery.camelCase( index );
+               easing = specialEasing[ name ];
+               value = props[ index ];
+               if ( jQuery.isArray( value ) ) {
+                       easing = value[ 1 ];
+                       value = props[ index ] = value[ 0 ];
+               }
+
+               if ( index !== name ) {
+                       props[ name ] = value;
+                       delete props[ index ];
+               }
+
+               hooks = jQuery.cssHooks[ name ];
+               if ( hooks && "expand" in hooks ) {
+                       value = hooks.expand( value );
+                       delete props[ name ];
+
+                       // not quite $.extend, this wont overwrite keys already present.
+                       // also - reusing 'index' from above because we have the correct "name"
+                       for ( index in value ) {
+                               if ( !( index in props ) ) {
+                                       props[ index ] = value[ index ];
+                                       specialEasing[ index ] = easing;
+                               }
+                       }
+               } else {
+                       specialEasing[ name ] = easing;
+               }
+       }
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+       tweener: function( props, callback ) {
+               if ( jQuery.isFunction( props ) ) {
+                       callback = props;
+                       props = [ "*" ];
+               } else {
+                       props = props.split(" ");
+               }
+
+               var prop,
+                       index = 0,
+                       length = props.length;
+
+               for ( ; index < length ; index++ ) {
+                       prop = props[ index ];
+                       tweeners[ prop ] = tweeners[ prop ] || [];
+                       tweeners[ prop ].unshift( callback );
+               }
+       },
+
+       prefilter: function( callback, prepend ) {
+               if ( prepend ) {
+                       animationPrefilters.unshift( callback );
+               } else {
+                       animationPrefilters.push( callback );
+               }
+       }
+});
+
+function defaultPrefilter( elem, props, opts ) {
+       /*jshint validthis:true */
+       var prop, index, length,
+               value, dataShow, toggle,
+               tween, hooks, oldfire,
+               anim = this,
+               style = elem.style,
+               orig = {},
+               handled = [],
+               hidden = elem.nodeType && isHidden( elem );
+
+       // handle queue: false promises
+       if ( !opts.queue ) {
+               hooks = jQuery._queueHooks( elem, "fx" );
+               if ( hooks.unqueued == null ) {
+                       hooks.unqueued = 0;
+                       oldfire = hooks.empty.fire;
+                       hooks.empty.fire = function() {
+                               if ( !hooks.unqueued ) {
+                                       oldfire();
+                               }
+                       };
+               }
+               hooks.unqueued++;
+
+               anim.always(function() {
+                       // doing this makes sure that the complete handler will be called
+                       // before this completes
+                       anim.always(function() {
+                               hooks.unqueued--;
+                               if ( !jQuery.queue( elem, "fx" ).length ) {
+                                       hooks.empty.fire();
+                               }
+                       });
+               });
+       }
+
+       // height/width overflow pass
+       if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+               // Make sure that nothing sneaks out
+               // Record all 3 overflow attributes because IE does not
+               // change the overflow attribute when overflowX and
+               // overflowY are set to the same value
+               opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+               // Set display property to inline-block for height/width
+               // animations on inline elements that are having width/height animated
+               if ( jQuery.css( elem, "display" ) === "inline" &&
+                               jQuery.css( elem, "float" ) === "none" ) {
+
+                       // inline-level elements accept inline-block;
+                       // block-level elements need to be inline with layout
+                       if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
+                               style.display = "inline-block";
+
+                       } else {
+                               style.zoom = 1;
+                       }
+               }
+       }
+
+       if ( opts.overflow ) {
+               style.overflow = "hidden";
+               if ( !jQuery.support.shrinkWrapBlocks ) {
+                       anim.always(function() {
+                               style.overflow = opts.overflow[ 0 ];
+                               style.overflowX = opts.overflow[ 1 ];
+                               style.overflowY = opts.overflow[ 2 ];
+                       });
+               }
+       }
+
+
+       // show/hide pass
+       for ( index in props ) {
+               value = props[ index ];
+               if ( rfxtypes.exec( value ) ) {
+                       delete props[ index ];
+                       toggle = toggle || value === "toggle";
+                       if ( value === ( hidden ? "hide" : "show" ) ) {
+                               continue;
+                       }
+                       handled.push( index );
+               }
+       }
+
+       length = handled.length;
+       if ( length ) {
+               dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
+               if ( "hidden" in dataShow ) {
+                       hidden = dataShow.hidden;
+               }
+
+               // store state if its toggle - enables .stop().toggle() to "reverse"
+               if ( toggle ) {
+                       dataShow.hidden = !hidden;
+               }
+               if ( hidden ) {
+                       jQuery( elem ).show();
+               } else {
+                       anim.done(function() {
+                               jQuery( elem ).hide();
+                       });
+               }
+               anim.done(function() {
+                       var prop;
+                       jQuery._removeData( elem, "fxshow" );
+                       for ( prop in orig ) {
+                               jQuery.style( elem, prop, orig[ prop ] );
+                       }
+               });
+               for ( index = 0 ; index < length ; index++ ) {
+                       prop = handled[ index ];
+                       tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
+                       orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
+
+                       if ( !( prop in dataShow ) ) {
+                               dataShow[ prop ] = tween.start;
+                               if ( hidden ) {
+                                       tween.end = tween.start;
+                                       tween.start = prop === "width" || prop === "height" ? 1 : 0;
+                               }
+                       }
+               }
+       }
+}
+
+function Tween( elem, options, prop, end, easing ) {
+       return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+       constructor: Tween,
+       init: function( elem, options, prop, end, easing, unit ) {
+               this.elem = elem;
+               this.prop = prop;
+               this.easing = easing || "swing";
+               this.options = options;
+               this.start = this.now = this.cur();
+               this.end = end;
+               this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+       },
+       cur: function() {
+               var hooks = Tween.propHooks[ this.prop ];
+
+               return hooks && hooks.get ?
+                       hooks.get( this ) :
+                       Tween.propHooks._default.get( this );
+       },
+       run: function( percent ) {
+               var eased,
+                       hooks = Tween.propHooks[ this.prop ];
+
+               if ( this.options.duration ) {
+                       this.pos = eased = jQuery.easing[ this.easing ](
+                               percent, this.options.duration * percent, 0, 1, this.options.duration
+                       );
+               } else {
+                       this.pos = eased = percent;
+               }
+               this.now = ( this.end - this.start ) * eased + this.start;
+
+               if ( this.options.step ) {
+                       this.options.step.call( this.elem, this.now, this );
+               }
+
+               if ( hooks && hooks.set ) {
+                       hooks.set( this );
+               } else {
+                       Tween.propHooks._default.set( this );
+               }
+               return this;
+       }
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+       _default: {
+               get: function( tween ) {
+                       var result;
+
+                       if ( tween.elem[ tween.prop ] != null &&
+                               (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+                               return tween.elem[ tween.prop ];
+                       }
+
+                       // passing an empty string as a 3rd parameter to .css will automatically
+                       // attempt a parseFloat and fallback to a string if the parse fails
+                       // so, simple values such as "10px" are parsed to Float.
+                       // complex values such as "rotate(1rad)" are returned as is.
+                       result = jQuery.css( tween.elem, tween.prop, "" );
+                       // Empty strings, null, undefined and "auto" are converted to 0.
+                       return !result || result === "auto" ? 0 : result;
+               },
+               set: function( tween ) {
+                       // use step hook for back compat - use cssHook if its there - use .style if its
+                       // available and use plain properties where available
+                       if ( jQuery.fx.step[ tween.prop ] ) {
+                               jQuery.fx.step[ tween.prop ]( tween );
+                       } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+                               jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+                       } else {
+                               tween.elem[ tween.prop ] = tween.now;
+                       }
+               }
+       }
+};
+
+// Remove in 2.0 - this supports IE8's panic based approach
+// to setting things on disconnected nodes
+
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+       set: function( tween ) {
+               if ( tween.elem.nodeType && tween.elem.parentNode ) {
+                       tween.elem[ tween.prop ] = tween.now;
+               }
+       }
+};
+
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+       var cssFn = jQuery.fn[ name ];
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return speed == null || typeof speed === "boolean" ?
+                       cssFn.apply( this, arguments ) :
+                       this.animate( genFx( name, true ), speed, easing, callback );
+       };
+});
+
+jQuery.fn.extend({
+       fadeTo: function( speed, to, easing, callback ) {
+
+               // show any hidden elements after setting opacity to 0
+               return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+                       // animate to the value specified
+                       .end().animate({ opacity: to }, speed, easing, callback );
+       },
+       animate: function( prop, speed, easing, callback ) {
+               var empty = jQuery.isEmptyObject( prop ),
+                       optall = jQuery.speed( speed, easing, callback ),
+                       doAnimation = function() {
+                               // Operate on a copy of prop so per-property easing won't be lost
+                               var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+                               doAnimation.finish = function() {
+                                       anim.stop( true );
+                               };
+                               // Empty animations, or finishing resolves immediately
+                               if ( empty || jQuery._data( this, "finish" ) ) {
+                                       anim.stop( true );
+                               }
+                       };
+                       doAnimation.finish = doAnimation;
+
+               return empty || optall.queue === false ?
+                       this.each( doAnimation ) :
+                       this.queue( optall.queue, doAnimation );
+       },
+       stop: function( type, clearQueue, gotoEnd ) {
+               var stopQueue = function( hooks ) {
+                       var stop = hooks.stop;
+                       delete hooks.stop;
+                       stop( gotoEnd );
+               };
+
+               if ( typeof type !== "string" ) {
+                       gotoEnd = clearQueue;
+                       clearQueue = type;
+                       type = undefined;
+               }
+               if ( clearQueue && type !== false ) {
+                       this.queue( type || "fx", [] );
+               }
+
+               return this.each(function() {
+                       var dequeue = true,
+                               index = type != null && type + "queueHooks",
+                               timers = jQuery.timers,
+                               data = jQuery._data( this );
+
+                       if ( index ) {
+                               if ( data[ index ] && data[ index ].stop ) {
+                                       stopQueue( data[ index ] );
+                               }
+                       } else {
+                               for ( index in data ) {
+                                       if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+                                               stopQueue( data[ index ] );
+                                       }
+                               }
+                       }
+
+                       for ( index = timers.length; index--; ) {
+                               if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+                                       timers[ index ].anim.stop( gotoEnd );
+                                       dequeue = false;
+                                       timers.splice( index, 1 );
+                               }
+                       }
+
+                       // start the next in the queue if the last step wasn't forced
+                       // timers currently will call their complete callbacks, which will dequeue
+                       // but only if they were gotoEnd
+                       if ( dequeue || !gotoEnd ) {
+                               jQuery.dequeue( this, type );
+                       }
+               });
+       },
+       finish: function( type ) {
+               if ( type !== false ) {
+                       type = type || "fx";
+               }
+               return this.each(function() {
+                       var index,
+                               data = jQuery._data( this ),
+                               queue = data[ type + "queue" ],
+                               hooks = data[ type + "queueHooks" ],
+                               timers = jQuery.timers,
+                               length = queue ? queue.length : 0;
+
+                       // enable finishing flag on private data
+                       data.finish = true;
+
+                       // empty the queue first
+                       jQuery.queue( this, type, [] );
+
+                       if ( hooks && hooks.cur && hooks.cur.finish ) {
+                               hooks.cur.finish.call( this );
+                       }
+
+                       // look for any active animations, and finish them
+                       for ( index = timers.length; index--; ) {
+                               if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+                                       timers[ index ].anim.stop( true );
+                                       timers.splice( index, 1 );
+                               }
+                       }
+
+                       // look for any animations in the old queue and finish them
+                       for ( index = 0; index < length; index++ ) {
+                               if ( queue[ index ] && queue[ index ].finish ) {
+                                       queue[ index ].finish.call( this );
+                               }
+                       }
+
+                       // turn off finishing flag
+                       delete data.finish;
+               });
+       }
+});
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+       var which,
+               attrs = { height: type },
+               i = 0;
+
+       // if we include width, step value is 1 to do all cssExpand values,
+       // if we don't include width, step value is 2 to skip over Left and Right
+       includeWidth = includeWidth? 1 : 0;
+       for( ; i < 4 ; i += 2 - includeWidth ) {
+               which = cssExpand[ i ];
+               attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+       }
+
+       if ( includeWidth ) {
+               attrs.opacity = attrs.width = type;
+       }
+
+       return attrs;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+       slideDown: genFx("show"),
+       slideUp: genFx("hide"),
+       slideToggle: genFx("toggle"),
+       fadeIn: { opacity: "show" },
+       fadeOut: { opacity: "hide" },
+       fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return this.animate( props, speed, easing, callback );
+       };
+});
+
+jQuery.speed = function( speed, easing, fn ) {
+       var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+               complete: fn || !fn && easing ||
+                       jQuery.isFunction( speed ) && speed,
+               duration: speed,
+               easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+       };
+
+       opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+               opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+       // normalize opt.queue - true/undefined/null -> "fx"
+       if ( opt.queue == null || opt.queue === true ) {
+               opt.queue = "fx";
+       }
+
+       // Queueing
+       opt.old = opt.complete;
+
+       opt.complete = function() {
+               if ( jQuery.isFunction( opt.old ) ) {
+                       opt.old.call( this );
+               }
+
+               if ( opt.queue ) {
+                       jQuery.dequeue( this, opt.queue );
+               }
+       };
+
+       return opt;
+};
+
+jQuery.easing = {
+       linear: function( p ) {
+               return p;
+       },
+       swing: function( p ) {
+               return 0.5 - Math.cos( p*Math.PI ) / 2;
+       }
+};
+
+jQuery.timers = [];
+jQuery.fx = Tween.prototype.init;
+jQuery.fx.tick = function() {
+       var timer,
+               timers = jQuery.timers,
+               i = 0;
+
+       fxNow = jQuery.now();
+
+       for ( ; i < timers.length; i++ ) {
+               timer = timers[ i ];
+               // Checks the timer has not already been removed
+               if ( !timer() && timers[ i ] === timer ) {
+                       timers.splice( i--, 1 );
+               }
+       }
+
+       if ( !timers.length ) {
+               jQuery.fx.stop();
+       }
+       fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+       if ( timer() && jQuery.timers.push( timer ) ) {
+               jQuery.fx.start();
+       }
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.start = function() {
+       if ( !timerId ) {
+               timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+       }
+};
+
+jQuery.fx.stop = function() {
+       clearInterval( timerId );
+       timerId = null;
+};
+
+jQuery.fx.speeds = {
+       slow: 600,
+       fast: 200,
+       // Default speed
+       _default: 400
+};
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+       jQuery.expr.filters.animated = function( elem ) {
+               return jQuery.grep(jQuery.timers, function( fn ) {
+                       return elem === fn.elem;
+               }).length;
+       };
+}
+jQuery.fn.offset = function( options ) {
+       if ( arguments.length ) {
+               return options === undefined ?
+                       this :
+                       this.each(function( i ) {
+                               jQuery.offset.setOffset( this, options, i );
+                       });
+       }
+
+       var docElem, win,
+               box = { top: 0, left: 0 },
+               elem = this[ 0 ],
+               doc = elem && elem.ownerDocument;
+
+       if ( !doc ) {
+               return;
+       }
+
+       docElem = doc.documentElement;
+
+       // Make sure it's not a disconnected DOM node
+       if ( !jQuery.contains( docElem, elem ) ) {
+               return box;
+       }
+
+       // If we don't have gBCR, just use 0,0 rather than error
+       // BlackBerry 5, iOS 3 (original iPhone)
+       if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
+               box = elem.getBoundingClientRect();
+       }
+       win = getWindow( doc );
+       return {
+               top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
+               left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+       };
+};
+
+jQuery.offset = {
+
+       setOffset: function( elem, options, i ) {
+               var position = jQuery.css( elem, "position" );
+
+               // set position first, in-case top/left are set even on static elem
+               if ( position === "static" ) {
+                       elem.style.position = "relative";
+               }
+
+               var curElem = jQuery( elem ),
+                       curOffset = curElem.offset(),
+                       curCSSTop = jQuery.css( elem, "top" ),
+                       curCSSLeft = jQuery.css( elem, "left" ),
+                       calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+                       props = {}, curPosition = {}, curTop, curLeft;
+
+               // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+               if ( calculatePosition ) {
+                       curPosition = curElem.position();
+                       curTop = curPosition.top;
+                       curLeft = curPosition.left;
+               } else {
+                       curTop = parseFloat( curCSSTop ) || 0;
+                       curLeft = parseFloat( curCSSLeft ) || 0;
+               }
+
+               if ( jQuery.isFunction( options ) ) {
+                       options = options.call( elem, i, curOffset );
+               }
+
+               if ( options.top != null ) {
+                       props.top = ( options.top - curOffset.top ) + curTop;
+               }
+               if ( options.left != null ) {
+                       props.left = ( options.left - curOffset.left ) + curLeft;
+               }
+
+               if ( "using" in options ) {
+                       options.using.call( elem, props );
+               } else {
+                       curElem.css( props );
+               }
+       }
+};
+
+
+jQuery.fn.extend({
+
+       position: function() {
+               if ( !this[ 0 ] ) {
+                       return;
+               }
+
+               var offsetParent, offset,
+                       parentOffset = { top: 0, left: 0 },
+                       elem = this[ 0 ];
+
+               // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
+               if ( jQuery.css( elem, "position" ) === "fixed" ) {
+                       // we assume that getBoundingClientRect is available when computed position is fixed
+                       offset = elem.getBoundingClientRect();
+               } else {
+                       // Get *real* offsetParent
+                       offsetParent = this.offsetParent();
+
+                       // Get correct offsets
+                       offset = this.offset();
+                       if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+                               parentOffset = offsetParent.offset();
+                       }
+
+                       // Add offsetParent borders
+                       parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+                       parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+               }
+
+               // Subtract parent offsets and element margins
+               // note: when an element has margin: auto the offsetLeft and marginLeft
+               // are the same in Safari causing offset.left to incorrectly be 0
+               return {
+                       top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+                       left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
+               };
+       },
+
+       offsetParent: function() {
+               return this.map(function() {
+                       var offsetParent = this.offsetParent || document.documentElement;
+                       while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
+                               offsetParent = offsetParent.offsetParent;
+                       }
+                       return offsetParent || document.documentElement;
+               });
+       }
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+       var top = /Y/.test( prop );
+
+       jQuery.fn[ method ] = function( val ) {
+               return jQuery.access( this, function( elem, method, val ) {
+                       var win = getWindow( elem );
+
+                       if ( val === undefined ) {
+                               return win ? (prop in win) ? win[ prop ] :
+                                       win.document.documentElement[ method ] :
+                                       elem[ method ];
+                       }
+
+                       if ( win ) {
+                               win.scrollTo(
+                                       !top ? val : jQuery( win ).scrollLeft(),
+                                       top ? val : jQuery( win ).scrollTop()
+                               );
+
+                       } else {
+                               elem[ method ] = val;
+                       }
+               }, method, val, arguments.length, null );
+       };
+});
+
+function getWindow( elem ) {
+       return jQuery.isWindow( elem ) ?
+               elem :
+               elem.nodeType === 9 ?
+                       elem.defaultView || elem.parentWindow :
+                       false;
+}
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+       jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+               // margin is only for outerHeight, outerWidth
+               jQuery.fn[ funcName ] = function( margin, value ) {
+                       var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+                               extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+                       return jQuery.access( this, function( elem, type, value ) {
+                               var doc;
+
+                               if ( jQuery.isWindow( elem ) ) {
+                                       // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+                                       // isn't a whole lot we can do. See pull request at this URL for discussion:
+                                       // https://github.com/jquery/jquery/pull/764
+                                       return elem.document.documentElement[ "client" + name ];
+                               }
+
+                               // Get document width or height
+                               if ( elem.nodeType === 9 ) {
+                                       doc = elem.documentElement;
+
+                                       // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+                                       // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+                                       return Math.max(
+                                               elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+                                               elem.body[ "offset" + name ], doc[ "offset" + name ],
+                                               doc[ "client" + name ]
+                                       );
+                               }
+
+                               return value === undefined ?
+                                       // Get width or height on the element, requesting but not forcing parseFloat
+                                       jQuery.css( elem, type, extra ) :
+
+                                       // Set width or height on the element
+                                       jQuery.style( elem, type, value, extra );
+                       }, type, chainable ? margin : undefined, chainable, null );
+               };
+       });
+});
+// Limit scope pollution from any deprecated API
+// (function() {
+
+// })();
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
+// Expose jQuery as an AMD module, but only for AMD loaders that
+// understand the issues with loading multiple versions of jQuery
+// in a page that all might call define(). The loader will indicate
+// they have special allowances for multiple jQuery versions by
+// specifying define.amd.jQuery = true. Register as a named module,
+// since jQuery can be concatenated with other files that may use define,
+// but not use a proper concatenation script that understands anonymous
+// AMD modules. A named AMD is safest and most robust way to register.
+// Lowercase jquery is used because AMD module names are derived from
+// file names, and jQuery is normally delivered in a lowercase file name.
+// Do this after creating the global so that if an AMD module wants to call
+// noConflict to hide this version of jQuery, it will work.
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+       define( "jquery", [], function () { return jQuery; } );
+}
+
+})( window );
diff --git a/jsc.1 b/jsc.1
new file mode 100644 (file)
index 0000000..f8fbe5d
--- /dev/null
+++ b/jsc.1
@@ -0,0 +1,71 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH jsc 1 "Jan 21, 2014"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+jsc \- command-line JavaScript interpreter.
+.SH SYNOPSIS
+.B jsc
+.RI [ options ]
+.RI [ files ]
+.RI [ \-\-\ arguments ]
+.SH DESCRIPTION
+This manual page documents briefly the
+.B jsc
+command.
+.PP
+\fBjsc\fP is a command-line utility that allows you to run JavaScript
+programs outside of the context of a web browser. It is primarily used
+as part of the test harness for validating the JavaScript portions of
+WebKit, but can also be used as a scripting tool.
+.PP
+\fBjsc\fP can be run in an interactive mode to test out JavaScript
+expressions, or it can be passed one or more files to run similar to
+invoking a Perl or Python script.
+.SH OPTIONS
+.TP
+.B \-e
+Evaluate argument as script code.
+.TP
+.B \-f
+Specifies a source file (deprecated).
+.TP
+.B \-h,\ \-\-help
+Shows summary of command-line options.
+.TP
+.B \-i
+Enables interactive mode (default if no files are specified).
+.TP
+.BI \-p " file"
+Outputs profiling data to a file.
+.TP
+.B \-s
+Installs signal handlers that exit on a crash.
+.TP
+.B \-x
+Output exit code before terminating.
+.TP
+.B \--options
+Dumps all JSC VM options and exits.
+.TP
+.B \-\-dumpOptions
+Dumps all JSC VM options before continuing.
+.TP
+.B \-\-<jsc VM option>=<value>
+Sets the specified JSC VM option.
+.SH AUTHOR
+This manual page was written by Alberto Garcia <berto@igalia.com>,
+based on the contents of \fIhttp://trac.webkit.org/wiki/JSC\fP.
diff --git a/libjavascriptcoregtk-4.0-18.install b/libjavascriptcoregtk-4.0-18.install
new file mode 100644 (file)
index 0000000..a4bec66
--- /dev/null
@@ -0,0 +1 @@
+usr/lib/*/libjavascriptcoregtk-4.0.so.*
diff --git a/libjavascriptcoregtk-4.0-bin.install b/libjavascriptcoregtk-4.0-bin.install
new file mode 100644 (file)
index 0000000..95b258b
--- /dev/null
@@ -0,0 +1 @@
+usr/bin/jsc
diff --git a/libjavascriptcoregtk-4.0-bin.manpages b/libjavascriptcoregtk-4.0-bin.manpages
new file mode 100644 (file)
index 0000000..edab642
--- /dev/null
@@ -0,0 +1 @@
+debian/jsc.1
diff --git a/libjavascriptcoregtk-4.0-dev.install b/libjavascriptcoregtk-4.0-dev.install
new file mode 100644 (file)
index 0000000..9a0e4a1
--- /dev/null
@@ -0,0 +1,4 @@
+usr/include/webkitgtk-4.0/JavaScriptCore/
+usr/lib/*/libjavascriptcoregtk-4.0.so
+usr/lib/*/pkgconfig/javascriptcoregtk-4.0.pc
+usr/share/gir-1.0/JavaScriptCore-4.0.gir usr/share/gir-1.0/
diff --git a/libwebkit2gtk-4.0-37.install b/libwebkit2gtk-4.0-37.install
new file mode 100644 (file)
index 0000000..a7c1b21
--- /dev/null
@@ -0,0 +1,3 @@
+usr/lib/*/libwebkit2gtk-4.0.so.*
+usr/lib/*/webkit2gtk-4.0
+usr/share/locale/*
diff --git a/libwebkit2gtk-4.0-37.lintian-overrides b/libwebkit2gtk-4.0-37.lintian-overrides
new file mode 100644 (file)
index 0000000..3f99757
--- /dev/null
@@ -0,0 +1 @@
+libwebkit2gtk-4.0-37: shared-lib-without-dependency-information usr/lib/*/webkit2gtk-4.0/injected-bundle/libwebkit2gtkinjectedbundle.so
diff --git a/libwebkit2gtk-4.0-37.symbols b/libwebkit2gtk-4.0-37.symbols
new file mode 100644 (file)
index 0000000..964e484
--- /dev/null
@@ -0,0 +1,2408 @@
+libwebkit2gtk-4.0.so.37 libwebkit2gtk-4.0-37 #MINVER#
+ NetworkProcessMainUnix@Base 2.5.3
+ PluginProcessMainUnix@Base 2.5.3
+ WebProcessMainUnix@Base 2.5.3
+ (c++)"WebKit::WebGtkExtensionManager::initialize(OpaqueWKBundle const*, void const*)@Base" 2.5.3
+ (c++)"WebKit::WebGtkExtensionManager::shared()@Base" 2.5.3
+ webkit_authentication_dialog_get_type@Base 2.5.3
+ webkit_authentication_request_authenticate@Base 2.5.3
+ webkit_authentication_request_can_save_credentials@Base 2.5.3
+ webkit_authentication_request_cancel@Base 2.5.3
+ webkit_authentication_request_get_host@Base 2.5.3
+ webkit_authentication_request_get_port@Base 2.5.3
+ webkit_authentication_request_get_proposed_credential@Base 2.5.3
+ webkit_authentication_request_get_realm@Base 2.5.3
+ webkit_authentication_request_get_scheme@Base 2.5.3
+ webkit_authentication_request_get_type@Base 2.5.3
+ webkit_authentication_request_is_for_proxy@Base 2.5.3
+ webkit_authentication_request_is_retry@Base 2.5.3
+ webkit_authentication_scheme_get_type@Base 2.5.3
+ webkit_back_forward_list_get_back_item@Base 2.5.3
+ webkit_back_forward_list_get_back_list@Base 2.5.3
+ webkit_back_forward_list_get_back_list_with_limit@Base 2.5.3
+ webkit_back_forward_list_get_current_item@Base 2.5.3
+ webkit_back_forward_list_get_forward_item@Base 2.5.3
+ webkit_back_forward_list_get_forward_list@Base 2.5.3
+ webkit_back_forward_list_get_forward_list_with_limit@Base 2.5.3
+ webkit_back_forward_list_get_length@Base 2.5.3
+ webkit_back_forward_list_get_nth_item@Base 2.5.3
+ webkit_back_forward_list_get_type@Base 2.5.3
+ webkit_back_forward_list_item_get_original_uri@Base 2.5.3
+ webkit_back_forward_list_item_get_title@Base 2.5.3
+ webkit_back_forward_list_item_get_type@Base 2.5.3
+ webkit_back_forward_list_item_get_uri@Base 2.5.3
+ webkit_cache_model_get_type@Base 2.5.3
+ webkit_context_menu_action_get_type@Base 2.5.3
+ webkit_context_menu_append@Base 2.5.3
+ webkit_context_menu_first@Base 2.5.3
+ webkit_context_menu_get_item_at_position@Base 2.5.3
+ webkit_context_menu_get_items@Base 2.5.3
+ webkit_context_menu_get_n_items@Base 2.5.3
+ webkit_context_menu_get_type@Base 2.5.3
+ webkit_context_menu_insert@Base 2.5.3
+ webkit_context_menu_item_get_action@Base 2.5.3
+ webkit_context_menu_item_get_stock_action@Base 2.5.3
+ webkit_context_menu_item_get_submenu@Base 2.5.3
+ webkit_context_menu_item_get_type@Base 2.5.3
+ webkit_context_menu_item_is_separator@Base 2.5.3
+ webkit_context_menu_item_new@Base 2.5.3
+ webkit_context_menu_item_new_from_stock_action@Base 2.5.3
+ webkit_context_menu_item_new_from_stock_action_with_label@Base 2.5.3
+ webkit_context_menu_item_new_separator@Base 2.5.3
+ webkit_context_menu_item_new_with_submenu@Base 2.5.3
+ webkit_context_menu_item_set_submenu@Base 2.5.3
+ webkit_context_menu_last@Base 2.5.3
+ webkit_context_menu_move_item@Base 2.5.3
+ webkit_context_menu_new@Base 2.5.3
+ webkit_context_menu_new_with_items@Base 2.5.3
+ webkit_context_menu_prepend@Base 2.5.3
+ webkit_context_menu_remove@Base 2.5.3
+ webkit_context_menu_remove_all@Base 2.5.3
+ webkit_cookie_accept_policy_get_type@Base 2.5.3
+ webkit_cookie_manager_delete_all_cookies@Base 2.5.3
+ webkit_cookie_manager_delete_cookies_for_domain@Base 2.5.3
+ webkit_cookie_manager_get_accept_policy@Base 2.5.3
+ webkit_cookie_manager_get_accept_policy_finish@Base 2.5.3
+ webkit_cookie_manager_get_domains_with_cookies@Base 2.5.3
+ webkit_cookie_manager_get_domains_with_cookies_finish@Base 2.5.3
+ webkit_cookie_manager_get_type@Base 2.5.3
+ webkit_cookie_manager_set_accept_policy@Base 2.5.3
+ webkit_cookie_manager_set_persistent_storage@Base 2.5.3
+ webkit_cookie_persistent_storage_get_type@Base 2.5.3
+ webkit_credential_copy@Base 2.5.3
+ webkit_credential_free@Base 2.5.3
+ webkit_credential_get_password@Base 2.5.3
+ webkit_credential_get_persistence@Base 2.5.3
+ webkit_credential_get_type@Base 2.5.3
+ webkit_credential_get_username@Base 2.5.3
+ webkit_credential_has_password@Base 2.5.3
+ webkit_credential_new@Base 2.5.3
+ webkit_credential_persistence_get_type@Base 2.5.3
+ (optional)webkit_dom_attr_get_is_id@Base 2.5.3
+ webkit_dom_attr_get_name@Base 2.5.3
+ webkit_dom_attr_get_owner_element@Base 2.5.3
+ webkit_dom_attr_get_specified@Base 2.5.3
+ webkit_dom_attr_get_type@Base 2.5.3
+ webkit_dom_attr_get_value@Base 2.5.3
+ webkit_dom_attr_set_value@Base 2.5.3
+ (optional)webkit_dom_audio_track_get_enabled@Base 2.5.3
+ (optional)webkit_dom_audio_track_get_id@Base 2.5.3
+ (optional)webkit_dom_audio_track_get_kind@Base 2.5.3
+ (optional)webkit_dom_audio_track_get_label@Base 2.5.3
+ (optional)webkit_dom_audio_track_get_language@Base 2.5.3
+ (optional)webkit_dom_audio_track_get_type@Base 2.5.3
+ (optional)webkit_dom_audio_track_list_get_length@Base 2.5.3
+ (optional)webkit_dom_audio_track_list_get_track_by_id@Base 2.5.3
+ (optional)webkit_dom_audio_track_list_get_type@Base 2.5.3
+ (optional)webkit_dom_audio_track_list_item@Base 2.5.3
+ (optional)webkit_dom_audio_track_set_enabled@Base 2.5.3
+ (optional)webkit_dom_bar_prop_get_type@Base 2.5.3
+ (optional)webkit_dom_bar_prop_get_visible@Base 2.5.3
+ (optional)webkit_dom_battery_manager_get_charging@Base 2.5.3
+ (optional)webkit_dom_battery_manager_get_charging_time@Base 2.5.3
+ (optional)webkit_dom_battery_manager_get_discharging_time@Base 2.5.3
+ (optional)webkit_dom_battery_manager_get_level@Base 2.5.3
+ (optional)webkit_dom_battery_manager_get_type@Base 2.5.3
+ (optional)webkit_dom_blob_get_blob_type@Base 2.5.3
+ webkit_dom_blob_get_size@Base 2.5.3
+ webkit_dom_blob_get_type@Base 2.5.3
+ (optional)webkit_dom_blob_slice@Base 2.5.3
+ webkit_dom_cdata_section_get_type@Base 2.5.3
+ webkit_dom_character_data_append_data@Base 2.5.3
+ webkit_dom_character_data_delete_data@Base 2.5.3
+ webkit_dom_character_data_get_data@Base 2.5.3
+ webkit_dom_character_data_get_length@Base 2.5.3
+ webkit_dom_character_data_get_type@Base 2.5.3
+ webkit_dom_character_data_insert_data@Base 2.5.3
+ (optional)webkit_dom_character_data_remove@Base 2.5.3
+ webkit_dom_character_data_replace_data@Base 2.5.3
+ webkit_dom_character_data_set_data@Base 2.5.3
+ webkit_dom_character_data_substring_data@Base 2.5.3
+ webkit_dom_comment_get_type@Base 2.5.3
+ webkit_dom_css_rule_get_css_text@Base 2.5.3
+ webkit_dom_css_rule_get_parent_rule@Base 2.5.3
+ webkit_dom_css_rule_get_parent_style_sheet@Base 2.5.3
+ webkit_dom_css_rule_get_rule_type@Base 2.5.3
+ webkit_dom_css_rule_get_type@Base 2.5.3
+ webkit_dom_css_rule_list_get_length@Base 2.5.3
+ webkit_dom_css_rule_list_get_type@Base 2.5.3
+ webkit_dom_css_rule_list_item@Base 2.5.3
+ webkit_dom_css_rule_set_css_text@Base 2.5.3
+ webkit_dom_css_style_declaration_get_css_text@Base 2.5.3
+ webkit_dom_css_style_declaration_get_length@Base 2.5.3
+ webkit_dom_css_style_declaration_get_parent_rule@Base 2.5.3
+ webkit_dom_css_style_declaration_get_property_priority@Base 2.5.3
+ webkit_dom_css_style_declaration_get_property_shorthand@Base 2.5.3
+ webkit_dom_css_style_declaration_get_property_value@Base 2.5.3
+ webkit_dom_css_style_declaration_get_type@Base 2.5.3
+ webkit_dom_css_style_declaration_is_property_implicit@Base 2.5.3
+ webkit_dom_css_style_declaration_item@Base 2.5.3
+ webkit_dom_css_style_declaration_remove_property@Base 2.5.3
+ webkit_dom_css_style_declaration_set_css_text@Base 2.5.3
+ webkit_dom_css_style_declaration_set_property@Base 2.5.3
+ webkit_dom_css_style_sheet_add_rule@Base 2.5.3
+ webkit_dom_css_style_sheet_delete_rule@Base 2.5.3
+ webkit_dom_css_style_sheet_get_css_rules@Base 2.5.3
+ webkit_dom_css_style_sheet_get_owner_rule@Base 2.5.3
+ webkit_dom_css_style_sheet_get_rules@Base 2.5.3
+ webkit_dom_css_style_sheet_get_type@Base 2.5.3
+ webkit_dom_css_style_sheet_insert_rule@Base 2.5.3
+ webkit_dom_css_style_sheet_remove_rule@Base 2.5.3
+ webkit_dom_css_value_get_css_text@Base 2.5.3
+ webkit_dom_css_value_get_css_value_type@Base 2.5.3
+ webkit_dom_css_value_get_type@Base 2.5.3
+ webkit_dom_css_value_set_css_text@Base 2.5.3
+ (optional)webkit_dom_data_cue_get_text@Base 2.5.3
+ (optional)webkit_dom_data_cue_get_type@Base 2.5.3
+ (optional)webkit_dom_database_get_type@Base 2.5.3
+ (optional)webkit_dom_database_get_version@Base 2.5.3
+ webkit_dom_document_adopt_node@Base 2.5.3
+ (optional)webkit_dom_document_caret_range_from_point@Base 2.5.3
+ webkit_dom_document_create_attribute@Base 2.5.3
+ webkit_dom_document_create_attribute_ns@Base 2.5.3
+ webkit_dom_document_create_cdata_section@Base 2.5.3
+ webkit_dom_document_create_comment@Base 2.5.3
+ webkit_dom_document_create_css_style_declaration@Base 2.5.3
+ webkit_dom_document_create_document_fragment@Base 2.5.3
+ webkit_dom_document_create_element@Base 2.5.3
+ webkit_dom_document_create_element_ns@Base 2.5.3
+ webkit_dom_document_create_entity_reference@Base 2.5.3
+ webkit_dom_document_create_event@Base 2.5.3
+ webkit_dom_document_create_expression@Base 2.5.3
+ webkit_dom_document_create_node_iterator@Base 2.5.3
+ webkit_dom_document_create_ns_resolver@Base 2.5.3
+ webkit_dom_document_create_processing_instruction@Base 2.5.3
+ webkit_dom_document_create_range@Base 2.5.3
+ webkit_dom_document_create_text_node@Base 2.5.3
+ (optional)webkit_dom_document_create_touch@Base 2.5.3
+ webkit_dom_document_create_tree_walker@Base 2.5.3
+ webkit_dom_document_element_from_point@Base 2.5.3
+ webkit_dom_document_evaluate@Base 2.5.3
+ webkit_dom_document_exec_command@Base 2.5.3
+ (optional)webkit_dom_document_exit_pointer_lock@Base 2.5.3
+ webkit_dom_document_fragment_get_type@Base 2.5.3
+ (optional)webkit_dom_document_fragment_query_selector@Base 2.5.3
+ (optional)webkit_dom_document_fragment_query_selector_all@Base 2.5.3
+ webkit_dom_document_get_active_element@Base 2.5.3
+ webkit_dom_document_get_anchors@Base 2.5.3
+ webkit_dom_document_get_applets@Base 2.5.3
+ webkit_dom_document_get_body@Base 2.5.3
+ webkit_dom_document_get_character_set@Base 2.5.3
+ webkit_dom_document_get_charset@Base 2.5.3
+ (optional)webkit_dom_document_get_compat_mode@Base 2.5.3
+ webkit_dom_document_get_cookie@Base 2.5.3
+ (optional)webkit_dom_document_get_current_script@Base 2.5.3
+ webkit_dom_document_get_default_charset@Base 2.5.3
+ webkit_dom_document_get_default_view@Base 2.5.3
+ webkit_dom_document_get_doctype@Base 2.5.3
+ webkit_dom_document_get_document_element@Base 2.5.3
+ webkit_dom_document_get_document_uri@Base 2.5.3
+ webkit_dom_document_get_domain@Base 2.5.3
+ webkit_dom_document_get_element_by_id@Base 2.5.3
+ webkit_dom_document_get_elements_by_class_name@Base 2.5.3
+ webkit_dom_document_get_elements_by_name@Base 2.5.3
+ webkit_dom_document_get_elements_by_tag_name@Base 2.5.3
+ webkit_dom_document_get_elements_by_tag_name_ns@Base 2.5.3
+ webkit_dom_document_get_forms@Base 2.5.3
+ webkit_dom_document_get_head@Base 2.5.3
+ (optional)webkit_dom_document_get_hidden@Base 2.5.3
+ webkit_dom_document_get_images@Base 2.5.3
+ webkit_dom_document_get_implementation@Base 2.5.3
+ webkit_dom_document_get_input_encoding@Base 2.5.3
+ webkit_dom_document_get_last_modified@Base 2.5.3
+ webkit_dom_document_get_links@Base 2.5.3
+ (optional)webkit_dom_document_get_origin@Base 2.5.3
+ webkit_dom_document_get_override_style@Base 2.5.3
+ (optional)webkit_dom_document_get_pointer_lock_element@Base 2.5.3
+ webkit_dom_document_get_preferred_stylesheet_set@Base 2.5.3
+ webkit_dom_document_get_ready_state@Base 2.5.3
+ webkit_dom_document_get_referrer@Base 2.5.3
+ (optional)webkit_dom_document_get_security_policy@Base 2.5.3
+ webkit_dom_document_get_selected_stylesheet_set@Base 2.5.3
+ webkit_dom_document_get_style_sheets@Base 2.5.3
+ webkit_dom_document_get_title@Base 2.5.3
+ webkit_dom_document_get_type@Base 2.5.3
+ webkit_dom_document_get_url@Base 2.5.3
+ (optional)webkit_dom_document_get_visibility_state@Base 2.5.3
+ (optional)webkit_dom_document_get_webkit_current_full_screen_element@Base 2.5.3
+ (optional)webkit_dom_document_get_webkit_full_screen_keyboard_input_allowed@Base 2.5.3
+ (optional)webkit_dom_document_get_webkit_fullscreen_element@Base 2.5.3
+ (optional)webkit_dom_document_get_webkit_fullscreen_enabled@Base 2.5.3
+ (optional)webkit_dom_document_get_webkit_is_full_screen@Base 2.5.3
+ webkit_dom_document_get_xml_encoding@Base 2.5.3
+ webkit_dom_document_get_xml_standalone@Base 2.5.3
+ webkit_dom_document_get_xml_version@Base 2.5.3
+ webkit_dom_document_has_focus@Base 2.5.3
+ webkit_dom_document_import_node@Base 2.5.3
+ webkit_dom_document_query_command_enabled@Base 2.5.3
+ webkit_dom_document_query_command_indeterm@Base 2.5.3
+ webkit_dom_document_query_command_state@Base 2.5.3
+ webkit_dom_document_query_command_supported@Base 2.5.3
+ webkit_dom_document_query_command_value@Base 2.5.3
+ webkit_dom_document_query_selector@Base 2.5.3
+ webkit_dom_document_query_selector_all@Base 2.5.3
+ webkit_dom_document_set_body@Base 2.5.3
+ webkit_dom_document_set_charset@Base 2.5.3
+ webkit_dom_document_set_cookie@Base 2.5.3
+ webkit_dom_document_set_document_uri@Base 2.5.3
+ webkit_dom_document_set_selected_stylesheet_set@Base 2.5.3
+ webkit_dom_document_set_title@Base 2.5.3
+ webkit_dom_document_set_xml_standalone@Base 2.5.3
+ webkit_dom_document_set_xml_version@Base 2.5.3
+ webkit_dom_document_type_get_entities@Base 2.5.3
+ webkit_dom_document_type_get_internal_subset@Base 2.5.3
+ webkit_dom_document_type_get_name@Base 2.5.3
+ webkit_dom_document_type_get_notations@Base 2.5.3
+ webkit_dom_document_type_get_public_id@Base 2.5.3
+ webkit_dom_document_type_get_system_id@Base 2.5.3
+ webkit_dom_document_type_get_type@Base 2.5.3
+ (optional)webkit_dom_document_type_remove@Base 2.5.3
+ (optional)webkit_dom_document_webkit_cancel_full_screen@Base 2.5.3
+ (optional)webkit_dom_document_webkit_exit_fullscreen@Base 2.5.3
+ (optional)webkit_dom_document_webkit_get_named_flows@Base 2.5.3
+ (optional)webkit_dom_dom_application_cache_abort@Base 2.5.3
+ (optional)webkit_dom_dom_application_cache_get_status@Base 2.5.3
+ (optional)webkit_dom_dom_application_cache_get_type@Base 2.5.3
+ (optional)webkit_dom_dom_application_cache_swap_cache@Base 2.5.3
+ (optional)webkit_dom_dom_application_cache_update@Base 2.5.3
+ webkit_dom_dom_implementation_create_css_style_sheet@Base 2.5.3
+ webkit_dom_dom_implementation_create_document@Base 2.5.3
+ webkit_dom_dom_implementation_create_document_type@Base 2.5.3
+ webkit_dom_dom_implementation_create_html_document@Base 2.5.3
+ webkit_dom_dom_implementation_get_type@Base 2.5.3
+ webkit_dom_dom_implementation_has_feature@Base 2.5.3
+ (optional)webkit_dom_dom_mime_type_array_get_length@Base 2.5.3
+ (optional)webkit_dom_dom_mime_type_array_get_type@Base 2.5.3
+ (optional)webkit_dom_dom_mime_type_array_item@Base 2.5.3
+ (optional)webkit_dom_dom_mime_type_array_named_item@Base 2.5.3
+ (optional)webkit_dom_dom_mime_type_get_content_type@Base 2.5.3
+ (optional)webkit_dom_dom_mime_type_get_description@Base 2.5.3
+ (optional)webkit_dom_dom_mime_type_get_enabled_plugin@Base 2.5.3
+ (optional)webkit_dom_dom_mime_type_get_suffixes@Base 2.5.3
+ (optional)webkit_dom_dom_mime_type_get_type@Base 2.5.3
+ (optional)webkit_dom_dom_named_flow_collection_get_length@Base 2.5.3
+ (optional)webkit_dom_dom_named_flow_collection_get_type@Base 2.5.3
+ (optional)webkit_dom_dom_named_flow_collection_item@Base 2.5.3
+ (optional)webkit_dom_dom_named_flow_collection_named_item@Base 2.5.3
+ (optional)webkit_dom_dom_plugin_array_get_length@Base 2.5.3
+ (optional)webkit_dom_dom_plugin_array_get_type@Base 2.5.3
+ (optional)webkit_dom_dom_plugin_array_item@Base 2.5.3
+ (optional)webkit_dom_dom_plugin_array_named_item@Base 2.5.3
+ (optional)webkit_dom_dom_plugin_array_refresh@Base 2.5.3
+ (optional)webkit_dom_dom_plugin_get_description@Base 2.5.3
+ (optional)webkit_dom_dom_plugin_get_filename@Base 2.5.3
+ (optional)webkit_dom_dom_plugin_get_length@Base 2.5.3
+ (optional)webkit_dom_dom_plugin_get_name@Base 2.5.3
+ (optional)webkit_dom_dom_plugin_get_type@Base 2.5.3
+ (optional)webkit_dom_dom_plugin_item@Base 2.5.3
+ (optional)webkit_dom_dom_plugin_named_item@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_allows_connection_to@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_allows_font_from@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_allows_form_action@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_allows_frame_from@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_allows_image_from@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_allows_media_from@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_allows_object_from@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_allows_plugin_type@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_allows_script_from@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_allows_style_from@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_get_allows_eval@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_get_allows_inline_script@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_get_allows_inline_style@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_get_is_active@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_get_report_ur_is@Base 2.5.3
+ (optional)webkit_dom_dom_security_policy_get_type@Base 2.5.3
+ (optional)webkit_dom_dom_selection_add_range@Base 2.5.3
+ (optional)webkit_dom_dom_selection_collapse@Base 2.5.3
+ (optional)webkit_dom_dom_selection_collapse_to_end@Base 2.5.3
+ (optional)webkit_dom_dom_selection_collapse_to_start@Base 2.5.3
+ (optional)webkit_dom_dom_selection_contains_node@Base 2.5.3
+ (optional)webkit_dom_dom_selection_delete_from_document@Base 2.5.3
+ (optional)webkit_dom_dom_selection_empty@Base 2.5.3
+ (optional)webkit_dom_dom_selection_extend@Base 2.5.3
+ (optional)webkit_dom_dom_selection_get_anchor_node@Base 2.5.3
+ (optional)webkit_dom_dom_selection_get_anchor_offset@Base 2.5.3
+ (optional)webkit_dom_dom_selection_get_base_node@Base 2.5.3
+ (optional)webkit_dom_dom_selection_get_base_offset@Base 2.5.3
+ (optional)webkit_dom_dom_selection_get_extent_node@Base 2.5.3
+ (optional)webkit_dom_dom_selection_get_extent_offset@Base 2.5.3
+ (optional)webkit_dom_dom_selection_get_focus_node@Base 2.5.3
+ (optional)webkit_dom_dom_selection_get_focus_offset@Base 2.5.3
+ (optional)webkit_dom_dom_selection_get_is_collapsed@Base 2.5.3
+ (optional)webkit_dom_dom_selection_get_range_at@Base 2.5.3
+ (optional)webkit_dom_dom_selection_get_range_count@Base 2.5.3
+ (optional)webkit_dom_dom_selection_get_selection_type@Base 2.5.3
+ (optional)webkit_dom_dom_selection_get_type@Base 2.5.3
+ (optional)webkit_dom_dom_selection_modify@Base 2.5.3
+ (optional)webkit_dom_dom_selection_remove_all_ranges@Base 2.5.3
+ (optional)webkit_dom_dom_selection_select_all_children@Base 2.5.3
+ (optional)webkit_dom_dom_selection_set_base_and_extent@Base 2.5.3
+ (optional)webkit_dom_dom_selection_set_position@Base 2.5.3
+ (optional)webkit_dom_dom_settable_token_list_get_type@Base 2.5.3
+ (optional)webkit_dom_dom_settable_token_list_get_value@Base 2.5.3
+ (optional)webkit_dom_dom_settable_token_list_set_value@Base 2.5.3
+ (optional)webkit_dom_dom_string_list_contains@Base 2.5.3
+ (optional)webkit_dom_dom_string_list_get_length@Base 2.5.3
+ (optional)webkit_dom_dom_string_list_get_type@Base 2.5.3
+ (optional)webkit_dom_dom_string_list_item@Base 2.5.3
+ (optional)webkit_dom_dom_string_map_get_type@Base 2.5.3
+ (optional)webkit_dom_dom_token_list_add@Base 2.5.3
+ (optional)webkit_dom_dom_token_list_contains@Base 2.5.3
+ (optional)webkit_dom_dom_token_list_get_length@Base 2.5.3
+ (optional)webkit_dom_dom_token_list_get_type@Base 2.5.3
+ (optional)webkit_dom_dom_token_list_item@Base 2.5.3
+ (optional)webkit_dom_dom_token_list_remove@Base 2.5.3
+ (optional)webkit_dom_dom_token_list_toggle@Base 2.5.3
+ (optional)webkit_dom_dom_window_alert@Base 2.5.3
+ (optional)webkit_dom_dom_window_atob@Base 2.5.3
+ (optional)webkit_dom_dom_window_blur@Base 2.5.3
+ (optional)webkit_dom_dom_window_btoa@Base 2.5.3
+ (optional)webkit_dom_dom_window_cancel_animation_frame@Base 2.5.3
+ (optional)webkit_dom_dom_window_capture_events@Base 2.5.3
+ (optional)webkit_dom_dom_window_clear_interval@Base 2.5.3
+ (optional)webkit_dom_dom_window_clear_timeout@Base 2.5.3
+ (optional)webkit_dom_dom_window_close@Base 2.5.3
+ (optional)webkit_dom_dom_window_confirm@Base 2.5.3
+ (optional)webkit_dom_dom_window_css_get_type@Base 2.5.3
+ (optional)webkit_dom_dom_window_css_supports@Base 2.5.3
+ (optional)webkit_dom_dom_window_find@Base 2.5.3
+ (optional)webkit_dom_dom_window_focus@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_application_cache@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_client_information@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_closed@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_computed_style@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_css@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_default_status@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_device_pixel_ratio@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_document@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_frame_element@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_frames@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_history@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_inner_height@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_inner_width@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_length@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_local_storage@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_locationbar@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_menubar@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_name@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_navigator@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_offscreen_buffering@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_opener@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_outer_height@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_outer_width@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_page_x_offset@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_page_y_offset@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_parent@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_performance@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_personalbar@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_screen@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_screen_left@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_screen_top@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_screen_x@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_screen_y@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_scroll_x@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_scroll_y@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_scrollbars@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_selection@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_self@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_session_storage@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_speech_synthesis@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_status@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_statusbar@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_style_media@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_toolbar@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_top@Base 2.5.3
+ webkit_dom_dom_window_get_type@Base 2.5.3
+ (optional)webkit_dom_dom_window_get_window@Base 2.5.3
+ (optional)webkit_dom_dom_window_match_media@Base 2.5.3
+ (optional)webkit_dom_dom_window_move_by@Base 2.5.3
+ (optional)webkit_dom_dom_window_move_to@Base 2.5.3
+ (optional)webkit_dom_dom_window_print@Base 2.5.3
+ (optional)webkit_dom_dom_window_prompt@Base 2.5.3
+ (optional)webkit_dom_dom_window_release_events@Base 2.5.3
+ (optional)webkit_dom_dom_window_resize_by@Base 2.5.3
+ (optional)webkit_dom_dom_window_resize_to@Base 2.5.3
+ (optional)webkit_dom_dom_window_scroll@Base 2.5.3
+ (optional)webkit_dom_dom_window_scroll_by@Base 2.5.3
+ (optional)webkit_dom_dom_window_scroll_to@Base 2.5.3
+ (optional)webkit_dom_dom_window_set_default_status@Base 2.5.3
+ (optional)webkit_dom_dom_window_set_name@Base 2.5.3
+ (optional)webkit_dom_dom_window_set_status@Base 2.5.3
+ (optional)webkit_dom_dom_window_stop@Base 2.5.3
+ (optional)webkit_dom_dom_window_webkit_cancel_animation_frame@Base 2.5.3
+ (optional)webkit_dom_dom_window_webkit_cancel_request_animation_frame@Base 2.5.3
+ (optional)webkit_dom_dom_window_webkit_convert_point_from_node_to_page@Base 2.5.3
+ (optional)webkit_dom_dom_window_webkit_convert_point_from_page_to_node@Base 2.5.3
+ webkit_dom_element_blur@Base 2.5.3
+ webkit_dom_element_focus@Base 2.5.3
+ webkit_dom_element_get_attribute@Base 2.5.3
+ webkit_dom_element_get_attribute_node@Base 2.5.3
+ webkit_dom_element_get_attribute_node_ns@Base 2.5.3
+ webkit_dom_element_get_attribute_ns@Base 2.5.3
+ webkit_dom_element_get_attributes@Base 2.5.3
+ webkit_dom_element_get_child_element_count@Base 2.5.3
+ (optional)webkit_dom_element_get_class_list@Base 2.5.3
+ webkit_dom_element_get_class_name@Base 2.5.3
+ webkit_dom_element_get_client_height@Base 2.5.3
+ webkit_dom_element_get_client_left@Base 2.5.3
+ webkit_dom_element_get_client_top@Base 2.5.3
+ webkit_dom_element_get_client_width@Base 2.5.3
+ webkit_dom_element_get_elements_by_class_name@Base 2.5.3
+ webkit_dom_element_get_elements_by_tag_name@Base 2.5.3
+ webkit_dom_element_get_elements_by_tag_name_ns@Base 2.5.3
+ webkit_dom_element_get_first_element_child@Base 2.5.3
+ webkit_dom_element_get_id@Base 2.5.3
+ webkit_dom_element_get_last_element_child@Base 2.5.3
+ webkit_dom_element_get_next_element_sibling@Base 2.5.3
+ webkit_dom_element_get_offset_height@Base 2.5.3
+ webkit_dom_element_get_offset_left@Base 2.5.3
+ webkit_dom_element_get_offset_parent@Base 2.5.3
+ webkit_dom_element_get_offset_top@Base 2.5.3
+ webkit_dom_element_get_offset_width@Base 2.5.3
+ webkit_dom_element_get_previous_element_sibling@Base 2.5.3
+ webkit_dom_element_get_scroll_height@Base 2.5.3
+ webkit_dom_element_get_scroll_left@Base 2.5.3
+ webkit_dom_element_get_scroll_top@Base 2.5.3
+ webkit_dom_element_get_scroll_width@Base 2.5.3
+ webkit_dom_element_get_style@Base 2.5.3
+ webkit_dom_element_get_tag_name@Base 2.5.3
+ webkit_dom_element_get_type@Base 2.5.3
+ (optional)webkit_dom_element_get_webkit_region_overset@Base 2.5.3
+ webkit_dom_element_has_attribute@Base 2.5.3
+ webkit_dom_element_has_attribute_ns@Base 2.5.3
+ webkit_dom_element_has_attributes@Base 2.5.3
+ (optional)webkit_dom_element_matches@Base 2.5.3
+ webkit_dom_element_query_selector@Base 2.5.3
+ webkit_dom_element_query_selector_all@Base 2.5.3
+ (optional)webkit_dom_element_remove@Base 2.5.3
+ webkit_dom_element_remove_attribute@Base 2.5.3
+ webkit_dom_element_remove_attribute_node@Base 2.5.3
+ webkit_dom_element_remove_attribute_ns@Base 2.5.3
+ (optional)webkit_dom_element_request_pointer_lock@Base 2.5.3
+ webkit_dom_element_scroll_by_lines@Base 2.5.3
+ webkit_dom_element_scroll_by_pages@Base 2.5.3
+ webkit_dom_element_scroll_into_view@Base 2.5.3
+ webkit_dom_element_scroll_into_view_if_needed@Base 2.5.3
+ webkit_dom_element_set_attribute@Base 2.5.3
+ webkit_dom_element_set_attribute_node@Base 2.5.3
+ webkit_dom_element_set_attribute_node_ns@Base 2.5.3
+ webkit_dom_element_set_attribute_ns@Base 2.5.3
+ webkit_dom_element_set_class_name@Base 2.5.3
+ webkit_dom_element_set_id@Base 2.5.3
+ webkit_dom_element_set_scroll_left@Base 2.5.3
+ webkit_dom_element_set_scroll_top@Base 2.5.3
+ (optional)webkit_dom_element_webkit_matches_selector@Base 2.5.3
+ (optional)webkit_dom_element_webkit_request_full_screen@Base 2.5.3
+ (optional)webkit_dom_element_webkit_request_fullscreen@Base 2.5.3
+ webkit_dom_entity_reference_get_type@Base 2.5.3
+ webkit_dom_event_get_bubbles@Base 2.5.3
+ webkit_dom_event_get_cancel_bubble@Base 2.5.3
+ webkit_dom_event_get_cancelable@Base 2.5.3
+ webkit_dom_event_get_current_target@Base 2.5.3
+ (optional)webkit_dom_event_get_default_prevented@Base 2.5.3
+ webkit_dom_event_get_event_phase@Base 2.5.3
+ webkit_dom_event_get_event_type@Base 2.5.3
+ webkit_dom_event_get_return_value@Base 2.5.3
+ webkit_dom_event_get_src_element@Base 2.5.3
+ webkit_dom_event_get_target@Base 2.5.3
+ webkit_dom_event_get_time_stamp@Base 2.5.3
+ webkit_dom_event_get_type@Base 2.5.3
+ webkit_dom_event_init_event@Base 2.5.3
+ webkit_dom_event_prevent_default@Base 2.5.3
+ webkit_dom_event_set_cancel_bubble@Base 2.5.3
+ webkit_dom_event_set_return_value@Base 2.5.3
+ (optional)webkit_dom_event_stop_immediate_propagation@Base 2.5.3
+ webkit_dom_event_stop_propagation@Base 2.5.3
+ webkit_dom_event_target_add_event_listener@Base 2.5.3
+ webkit_dom_event_target_add_event_listener_with_closure@Base 2.5.3
+ webkit_dom_event_target_dispatch_event@Base 2.5.3
+ webkit_dom_event_target_get_type@Base 2.5.3
+ webkit_dom_event_target_remove_event_listener@Base 2.5.3
+ webkit_dom_event_target_remove_event_listener_with_closure@Base 2.5.3
+ webkit_dom_file_get_name@Base 2.5.3
+ webkit_dom_file_get_type@Base 2.5.3
+ webkit_dom_file_list_get_length@Base 2.5.3
+ webkit_dom_file_list_get_type@Base 2.5.3
+ webkit_dom_file_list_item@Base 2.5.3
+ (optional)webkit_dom_gamepad_get_id@Base 2.5.3
+ (optional)webkit_dom_gamepad_get_index@Base 2.5.3
+ (optional)webkit_dom_gamepad_get_timestamp@Base 2.5.3
+ (optional)webkit_dom_gamepad_get_type@Base 2.5.3
+ (optional)webkit_dom_gamepad_list_get_length@Base 2.5.3
+ (optional)webkit_dom_gamepad_list_get_type@Base 2.5.3
+ (optional)webkit_dom_gamepad_list_item@Base 2.5.3
+ (optional)webkit_dom_geolocation_clear_watch@Base 2.5.3
+ (optional)webkit_dom_geolocation_get_type@Base 2.5.3
+ (optional)webkit_dom_history_back@Base 2.5.3
+ (optional)webkit_dom_history_forward@Base 2.5.3
+ (optional)webkit_dom_history_get_length@Base 2.5.3
+ (optional)webkit_dom_history_get_type@Base 2.5.3
+ (optional)webkit_dom_history_go@Base 2.5.3
+ webkit_dom_html_anchor_element_get_charset@Base 2.5.3
+ webkit_dom_html_anchor_element_get_coords@Base 2.5.3
+ (optional)webkit_dom_html_anchor_element_get_download@Base 2.5.3
+ webkit_dom_html_anchor_element_get_hash@Base 2.5.3
+ webkit_dom_html_anchor_element_get_host@Base 2.5.3
+ webkit_dom_html_anchor_element_get_hostname@Base 2.5.3
+ webkit_dom_html_anchor_element_get_href@Base 2.5.3
+ webkit_dom_html_anchor_element_get_hreflang@Base 2.5.3
+ webkit_dom_html_anchor_element_get_name@Base 2.5.3
+ (optional)webkit_dom_html_anchor_element_get_origin@Base 2.5.3
+ webkit_dom_html_anchor_element_get_pathname@Base 2.5.3
+ (optional)webkit_dom_html_anchor_element_get_ping@Base 2.5.3
+ webkit_dom_html_anchor_element_get_port@Base 2.5.3
+ webkit_dom_html_anchor_element_get_protocol@Base 2.5.3
+ webkit_dom_html_anchor_element_get_rel@Base 2.5.3
+ webkit_dom_html_anchor_element_get_rev@Base 2.5.3
+ webkit_dom_html_anchor_element_get_search@Base 2.5.3
+ webkit_dom_html_anchor_element_get_shape@Base 2.5.3
+ webkit_dom_html_anchor_element_get_target@Base 2.5.3
+ webkit_dom_html_anchor_element_get_text@Base 2.5.3
+ webkit_dom_html_anchor_element_get_type@Base 2.5.3
+ webkit_dom_html_anchor_element_get_type_attr@Base 2.5.3
+ webkit_dom_html_anchor_element_set_charset@Base 2.5.3
+ webkit_dom_html_anchor_element_set_coords@Base 2.5.3
+ (optional)webkit_dom_html_anchor_element_set_download@Base 2.5.3
+ webkit_dom_html_anchor_element_set_hash@Base 2.5.3
+ webkit_dom_html_anchor_element_set_host@Base 2.5.3
+ webkit_dom_html_anchor_element_set_hostname@Base 2.5.3
+ webkit_dom_html_anchor_element_set_href@Base 2.5.3
+ webkit_dom_html_anchor_element_set_hreflang@Base 2.5.3
+ webkit_dom_html_anchor_element_set_name@Base 2.5.3
+ webkit_dom_html_anchor_element_set_pathname@Base 2.5.3
+ (optional)webkit_dom_html_anchor_element_set_ping@Base 2.5.3
+ webkit_dom_html_anchor_element_set_port@Base 2.5.3
+ webkit_dom_html_anchor_element_set_protocol@Base 2.5.3
+ webkit_dom_html_anchor_element_set_rel@Base 2.5.3
+ webkit_dom_html_anchor_element_set_rev@Base 2.5.3
+ webkit_dom_html_anchor_element_set_search@Base 2.5.3
+ webkit_dom_html_anchor_element_set_shape@Base 2.5.3
+ webkit_dom_html_anchor_element_set_target@Base 2.5.3
+ webkit_dom_html_anchor_element_set_type_attr@Base 2.5.3
+ webkit_dom_html_applet_element_get_align@Base 2.5.3
+ webkit_dom_html_applet_element_get_alt@Base 2.5.3
+ webkit_dom_html_applet_element_get_archive@Base 2.5.3
+ webkit_dom_html_applet_element_get_code@Base 2.5.3
+ webkit_dom_html_applet_element_get_code_base@Base 2.5.3
+ webkit_dom_html_applet_element_get_height@Base 2.5.3
+ webkit_dom_html_applet_element_get_hspace@Base 2.5.3
+ webkit_dom_html_applet_element_get_name@Base 2.5.3
+ webkit_dom_html_applet_element_get_object@Base 2.5.3
+ webkit_dom_html_applet_element_get_type@Base 2.5.3
+ webkit_dom_html_applet_element_get_vspace@Base 2.5.3
+ webkit_dom_html_applet_element_get_width@Base 2.5.3
+ webkit_dom_html_applet_element_set_align@Base 2.5.3
+ webkit_dom_html_applet_element_set_alt@Base 2.5.3
+ webkit_dom_html_applet_element_set_archive@Base 2.5.3
+ webkit_dom_html_applet_element_set_code@Base 2.5.3
+ webkit_dom_html_applet_element_set_code_base@Base 2.5.3
+ webkit_dom_html_applet_element_set_height@Base 2.5.3
+ webkit_dom_html_applet_element_set_hspace@Base 2.5.3
+ webkit_dom_html_applet_element_set_name@Base 2.5.3
+ webkit_dom_html_applet_element_set_object@Base 2.5.3
+ webkit_dom_html_applet_element_set_vspace@Base 2.5.3
+ webkit_dom_html_applet_element_set_width@Base 2.5.3
+ webkit_dom_html_area_element_get_alt@Base 2.5.3
+ webkit_dom_html_area_element_get_coords@Base 2.5.3
+ webkit_dom_html_area_element_get_hash@Base 2.5.3
+ webkit_dom_html_area_element_get_host@Base 2.5.3
+ webkit_dom_html_area_element_get_hostname@Base 2.5.3
+ webkit_dom_html_area_element_get_href@Base 2.5.3
+ webkit_dom_html_area_element_get_no_href@Base 2.5.3
+ webkit_dom_html_area_element_get_pathname@Base 2.5.3
+ (optional)webkit_dom_html_area_element_get_ping@Base 2.5.3
+ webkit_dom_html_area_element_get_port@Base 2.5.3
+ webkit_dom_html_area_element_get_protocol@Base 2.5.3
+ webkit_dom_html_area_element_get_search@Base 2.5.3
+ webkit_dom_html_area_element_get_shape@Base 2.5.3
+ webkit_dom_html_area_element_get_target@Base 2.5.3
+ webkit_dom_html_area_element_get_type@Base 2.5.3
+ webkit_dom_html_area_element_set_alt@Base 2.5.3
+ webkit_dom_html_area_element_set_coords@Base 2.5.3
+ webkit_dom_html_area_element_set_href@Base 2.5.3
+ webkit_dom_html_area_element_set_no_href@Base 2.5.3
+ (optional)webkit_dom_html_area_element_set_ping@Base 2.5.3
+ webkit_dom_html_area_element_set_shape@Base 2.5.3
+ webkit_dom_html_area_element_set_target@Base 2.5.3
+ (optional)webkit_dom_html_audio_element_get_type@Base 2.5.3
+ webkit_dom_html_base_element_get_href@Base 2.5.3
+ webkit_dom_html_base_element_get_target@Base 2.5.3
+ webkit_dom_html_base_element_get_type@Base 2.5.3
+ webkit_dom_html_base_element_set_href@Base 2.5.3
+ webkit_dom_html_base_element_set_target@Base 2.5.3
+ webkit_dom_html_base_font_element_get_color@Base 2.5.3
+ webkit_dom_html_base_font_element_get_face@Base 2.5.3
+ webkit_dom_html_base_font_element_get_size@Base 2.5.3
+ webkit_dom_html_base_font_element_get_type@Base 2.5.3
+ webkit_dom_html_base_font_element_set_color@Base 2.5.3
+ webkit_dom_html_base_font_element_set_face@Base 2.5.3
+ webkit_dom_html_base_font_element_set_size@Base 2.5.3
+ webkit_dom_html_body_element_get_a_link@Base 2.5.3
+ webkit_dom_html_body_element_get_background@Base 2.5.3
+ webkit_dom_html_body_element_get_bg_color@Base 2.5.3
+ webkit_dom_html_body_element_get_link@Base 2.5.3
+ webkit_dom_html_body_element_get_text@Base 2.5.3
+ webkit_dom_html_body_element_get_type@Base 2.5.3
+ webkit_dom_html_body_element_get_v_link@Base 2.5.3
+ webkit_dom_html_body_element_set_a_link@Base 2.5.3
+ webkit_dom_html_body_element_set_background@Base 2.5.3
+ webkit_dom_html_body_element_set_bg_color@Base 2.5.3
+ webkit_dom_html_body_element_set_link@Base 2.5.3
+ webkit_dom_html_body_element_set_text@Base 2.5.3
+ webkit_dom_html_body_element_set_v_link@Base 2.5.3
+ webkit_dom_html_br_element_get_clear@Base 2.5.3
+ webkit_dom_html_br_element_get_type@Base 2.5.3
+ webkit_dom_html_br_element_set_clear@Base 2.5.3
+ (optional)webkit_dom_html_button_element_check_validity@Base 2.5.3
+ webkit_dom_html_button_element_get_autofocus@Base 2.5.3
+ webkit_dom_html_button_element_get_button_type@Base 2.5.3
+ webkit_dom_html_button_element_get_disabled@Base 2.5.3
+ webkit_dom_html_button_element_get_form@Base 2.5.3
+ (optional)webkit_dom_html_button_element_get_form_action@Base 2.5.3
+ (optional)webkit_dom_html_button_element_get_form_enctype@Base 2.5.3
+ (optional)webkit_dom_html_button_element_get_form_method@Base 2.5.3
+ (optional)webkit_dom_html_button_element_get_form_no_validate@Base 2.5.3
+ (optional)webkit_dom_html_button_element_get_form_target@Base 2.5.3
+ (optional)webkit_dom_html_button_element_get_labels@Base 2.5.3
+ webkit_dom_html_button_element_get_name@Base 2.5.3
+ webkit_dom_html_button_element_get_type@Base 2.5.3
+ (optional)webkit_dom_html_button_element_get_validation_message@Base 2.5.3
+ (optional)webkit_dom_html_button_element_get_validity@Base 2.5.3
+ webkit_dom_html_button_element_get_value@Base 2.5.3
+ webkit_dom_html_button_element_get_will_validate@Base 2.5.3
+ webkit_dom_html_button_element_set_autofocus@Base 2.5.3
+ webkit_dom_html_button_element_set_button_type@Base 2.5.3
+ (optional)webkit_dom_html_button_element_set_custom_validity@Base 2.5.3
+ webkit_dom_html_button_element_set_disabled@Base 2.5.3
+ (optional)webkit_dom_html_button_element_set_form_action@Base 2.5.3
+ (optional)webkit_dom_html_button_element_set_form_enctype@Base 2.5.3
+ (optional)webkit_dom_html_button_element_set_form_method@Base 2.5.3
+ (optional)webkit_dom_html_button_element_set_form_no_validate@Base 2.5.3
+ (optional)webkit_dom_html_button_element_set_form_target@Base 2.5.3
+ webkit_dom_html_button_element_set_name@Base 2.5.3
+ webkit_dom_html_button_element_set_value@Base 2.5.3
+ webkit_dom_html_canvas_element_get_height@Base 2.5.3
+ webkit_dom_html_canvas_element_get_type@Base 2.5.3
+ webkit_dom_html_canvas_element_get_width@Base 2.5.3
+ webkit_dom_html_canvas_element_set_height@Base 2.5.3
+ webkit_dom_html_canvas_element_set_width@Base 2.5.3
+ webkit_dom_html_collection_get_length@Base 2.5.3
+ webkit_dom_html_collection_get_type@Base 2.5.3
+ webkit_dom_html_collection_item@Base 2.5.3
+ webkit_dom_html_collection_named_item@Base 2.5.3
+ webkit_dom_html_d_list_element_get_compact@Base 2.5.3
+ webkit_dom_html_d_list_element_get_type@Base 2.5.3
+ webkit_dom_html_d_list_element_set_compact@Base 2.5.3
+ (optional)webkit_dom_html_details_element_get_open@Base 2.5.3
+ (optional)webkit_dom_html_details_element_get_type@Base 2.5.3
+ (optional)webkit_dom_html_details_element_set_open@Base 2.5.3
+ webkit_dom_html_directory_element_get_compact@Base 2.5.3
+ webkit_dom_html_directory_element_get_type@Base 2.5.3
+ webkit_dom_html_directory_element_set_compact@Base 2.5.3
+ webkit_dom_html_div_element_get_align@Base 2.5.3
+ webkit_dom_html_div_element_get_type@Base 2.5.3
+ webkit_dom_html_div_element_set_align@Base 2.5.3
+ webkit_dom_html_document_capture_events@Base 2.5.3
+ webkit_dom_html_document_clear@Base 2.5.3
+ webkit_dom_html_document_close@Base 2.5.3
+ webkit_dom_html_document_get_alink_color@Base 2.5.3
+ webkit_dom_html_document_get_bg_color@Base 2.5.3
+ webkit_dom_html_document_get_compat_mode@Base 2.5.3
+ webkit_dom_html_document_get_design_mode@Base 2.5.3
+ webkit_dom_html_document_get_dir@Base 2.5.3
+ webkit_dom_html_document_get_embeds@Base 2.5.3
+ webkit_dom_html_document_get_fg_color@Base 2.5.3
+ webkit_dom_html_document_get_height@Base 2.5.3
+ webkit_dom_html_document_get_link_color@Base 2.5.3
+ webkit_dom_html_document_get_plugins@Base 2.5.3
+ webkit_dom_html_document_get_scripts@Base 2.5.3
+ webkit_dom_html_document_get_type@Base 2.5.3
+ webkit_dom_html_document_get_vlink_color@Base 2.5.3
+ webkit_dom_html_document_get_width@Base 2.5.3
+ webkit_dom_html_document_release_events@Base 2.5.3
+ webkit_dom_html_document_set_alink_color@Base 2.5.3
+ webkit_dom_html_document_set_bg_color@Base 2.5.3
+ webkit_dom_html_document_set_design_mode@Base 2.5.3
+ webkit_dom_html_document_set_dir@Base 2.5.3
+ webkit_dom_html_document_set_fg_color@Base 2.5.3
+ webkit_dom_html_document_set_link_color@Base 2.5.3
+ webkit_dom_html_document_set_vlink_color@Base 2.5.3
+ webkit_dom_html_element_click@Base 2.5.3
+ webkit_dom_html_element_get_access_key@Base 2.5.3
+ webkit_dom_html_element_get_children@Base 2.5.3
+ webkit_dom_html_element_get_content_editable@Base 2.5.3
+ webkit_dom_html_element_get_dir@Base 2.5.3
+ (optional)webkit_dom_html_element_get_draggable@Base 2.5.3
+ (optional)webkit_dom_html_element_get_hidden@Base 2.5.3
+ webkit_dom_html_element_get_inner_html@Base 2.5.3
+ webkit_dom_html_element_get_inner_text@Base 2.5.3
+ webkit_dom_html_element_get_is_content_editable@Base 2.5.3
+ webkit_dom_html_element_get_lang@Base 2.5.3
+ webkit_dom_html_element_get_outer_html@Base 2.5.3
+ webkit_dom_html_element_get_outer_text@Base 2.5.3
+ (optional)webkit_dom_html_element_get_spellcheck@Base 2.5.3
+ webkit_dom_html_element_get_tab_index@Base 2.5.3
+ webkit_dom_html_element_get_title@Base 2.5.3
+ (optional)webkit_dom_html_element_get_translate@Base 2.5.3
+ webkit_dom_html_element_get_type@Base 2.5.3
+ (optional)webkit_dom_html_element_get_webkitdropzone@Base 2.5.3
+ (optional)webkit_dom_html_element_insert_adjacent_element@Base 2.5.3
+ (optional)webkit_dom_html_element_insert_adjacent_html@Base 2.5.3
+ (optional)webkit_dom_html_element_insert_adjacent_text@Base 2.5.3
+ webkit_dom_html_element_set_access_key@Base 2.5.3
+ webkit_dom_html_element_set_content_editable@Base 2.5.3
+ webkit_dom_html_element_set_dir@Base 2.5.3
+ (optional)webkit_dom_html_element_set_draggable@Base 2.5.3
+ (optional)webkit_dom_html_element_set_hidden@Base 2.5.3
+ webkit_dom_html_element_set_inner_html@Base 2.5.3
+ webkit_dom_html_element_set_inner_text@Base 2.5.3
+ webkit_dom_html_element_set_lang@Base 2.5.3
+ webkit_dom_html_element_set_outer_html@Base 2.5.3
+ webkit_dom_html_element_set_outer_text@Base 2.5.3
+ (optional)webkit_dom_html_element_set_spellcheck@Base 2.5.3
+ webkit_dom_html_element_set_tab_index@Base 2.5.3
+ webkit_dom_html_element_set_title@Base 2.5.3
+ (optional)webkit_dom_html_element_set_translate@Base 2.5.3
+ (optional)webkit_dom_html_element_set_webkitdropzone@Base 2.5.3
+ webkit_dom_html_embed_element_get_align@Base 2.5.3
+ webkit_dom_html_embed_element_get_height@Base 2.5.3
+ webkit_dom_html_embed_element_get_name@Base 2.5.3
+ webkit_dom_html_embed_element_get_src@Base 2.5.3
+ webkit_dom_html_embed_element_get_type@Base 2.5.3
+ webkit_dom_html_embed_element_get_type_attr@Base 2.5.3
+ webkit_dom_html_embed_element_get_width@Base 2.5.3
+ webkit_dom_html_embed_element_set_align@Base 2.5.3
+ webkit_dom_html_embed_element_set_height@Base 2.5.3
+ webkit_dom_html_embed_element_set_name@Base 2.5.3
+ webkit_dom_html_embed_element_set_src@Base 2.5.3
+ webkit_dom_html_embed_element_set_type_attr@Base 2.5.3
+ webkit_dom_html_embed_element_set_width@Base 2.5.3
+ (optional)webkit_dom_html_field_set_element_check_validity@Base 2.5.3
+ (optional)webkit_dom_html_field_set_element_get_disabled@Base 2.5.3
+ (optional)webkit_dom_html_field_set_element_get_elements@Base 2.5.3
+ webkit_dom_html_field_set_element_get_form@Base 2.5.3
+ (optional)webkit_dom_html_field_set_element_get_name@Base 2.5.3
+ (optional)webkit_dom_html_field_set_element_get_set_type@Base 2.5.3
+ webkit_dom_html_field_set_element_get_type@Base 2.5.3
+ (optional)webkit_dom_html_field_set_element_get_validation_message@Base 2.5.3
+ (optional)webkit_dom_html_field_set_element_get_validity@Base 2.5.3
+ (optional)webkit_dom_html_field_set_element_get_will_validate@Base 2.5.3
+ (optional)webkit_dom_html_field_set_element_set_custom_validity@Base 2.5.3
+ (optional)webkit_dom_html_field_set_element_set_disabled@Base 2.5.3
+ (optional)webkit_dom_html_field_set_element_set_name@Base 2.5.3
+ webkit_dom_html_font_element_get_color@Base 2.5.3
+ webkit_dom_html_font_element_get_face@Base 2.5.3
+ webkit_dom_html_font_element_get_size@Base 2.5.3
+ webkit_dom_html_font_element_get_type@Base 2.5.3
+ webkit_dom_html_font_element_set_color@Base 2.5.3
+ webkit_dom_html_font_element_set_face@Base 2.5.3
+ webkit_dom_html_font_element_set_size@Base 2.5.3
+ (optional)webkit_dom_html_form_element_check_validity@Base 2.5.3
+ webkit_dom_html_form_element_get_accept_charset@Base 2.5.3
+ webkit_dom_html_form_element_get_action@Base 2.5.3
+ (optional)webkit_dom_html_form_element_get_autocapitalize@Base 2.5.3
+ (optional)webkit_dom_html_form_element_get_autocomplete@Base 2.5.3
+ (optional)webkit_dom_html_form_element_get_autocorrect@Base 2.5.3
+ webkit_dom_html_form_element_get_elements@Base 2.5.3
+ webkit_dom_html_form_element_get_encoding@Base 2.5.3
+ webkit_dom_html_form_element_get_enctype@Base 2.5.3
+ webkit_dom_html_form_element_get_length@Base 2.5.3
+ webkit_dom_html_form_element_get_method@Base 2.5.3
+ webkit_dom_html_form_element_get_name@Base 2.5.3
+ (optional)webkit_dom_html_form_element_get_no_validate@Base 2.5.3
+ webkit_dom_html_form_element_get_target@Base 2.5.3
+ webkit_dom_html_form_element_get_type@Base 2.5.3
+ webkit_dom_html_form_element_request_autocomplete@Base 2.6.0
+ webkit_dom_html_form_element_reset@Base 2.5.3
+ webkit_dom_html_form_element_set_accept_charset@Base 2.5.3
+ webkit_dom_html_form_element_set_action@Base 2.5.3
+ (optional)webkit_dom_html_form_element_set_autocapitalize@Base 2.5.3
+ (optional)webkit_dom_html_form_element_set_autocomplete@Base 2.5.3
+ (optional)webkit_dom_html_form_element_set_autocorrect@Base 2.5.3
+ webkit_dom_html_form_element_set_encoding@Base 2.5.3
+ webkit_dom_html_form_element_set_enctype@Base 2.5.3
+ webkit_dom_html_form_element_set_method@Base 2.5.3
+ webkit_dom_html_form_element_set_name@Base 2.5.3
+ (optional)webkit_dom_html_form_element_set_no_validate@Base 2.5.3
+ webkit_dom_html_form_element_set_target@Base 2.5.3
+ webkit_dom_html_form_element_submit@Base 2.5.3
+ webkit_dom_html_frame_element_get_content_document@Base 2.5.3
+ webkit_dom_html_frame_element_get_content_window@Base 2.5.3
+ webkit_dom_html_frame_element_get_frame_border@Base 2.5.3
+ webkit_dom_html_frame_element_get_height@Base 2.5.3
+ webkit_dom_html_frame_element_get_long_desc@Base 2.5.3
+ webkit_dom_html_frame_element_get_margin_height@Base 2.5.3
+ webkit_dom_html_frame_element_get_margin_width@Base 2.5.3
+ webkit_dom_html_frame_element_get_name@Base 2.5.3
+ webkit_dom_html_frame_element_get_no_resize@Base 2.5.3
+ webkit_dom_html_frame_element_get_scrolling@Base 2.5.3
+ webkit_dom_html_frame_element_get_src@Base 2.5.3
+ webkit_dom_html_frame_element_get_type@Base 2.5.3
+ webkit_dom_html_frame_element_get_width@Base 2.5.3
+ webkit_dom_html_frame_element_set_frame_border@Base 2.5.3
+ webkit_dom_html_frame_element_set_long_desc@Base 2.5.3
+ webkit_dom_html_frame_element_set_margin_height@Base 2.5.3
+ webkit_dom_html_frame_element_set_margin_width@Base 2.5.3
+ webkit_dom_html_frame_element_set_name@Base 2.5.3
+ webkit_dom_html_frame_element_set_no_resize@Base 2.5.3
+ webkit_dom_html_frame_element_set_scrolling@Base 2.5.3
+ webkit_dom_html_frame_element_set_src@Base 2.5.3
+ webkit_dom_html_frame_set_element_get_cols@Base 2.5.3
+ webkit_dom_html_frame_set_element_get_rows@Base 2.5.3
+ webkit_dom_html_frame_set_element_get_type@Base 2.5.3
+ webkit_dom_html_frame_set_element_set_cols@Base 2.5.3
+ webkit_dom_html_frame_set_element_set_rows@Base 2.5.3
+ webkit_dom_html_head_element_get_profile@Base 2.5.3
+ webkit_dom_html_head_element_get_type@Base 2.5.3
+ webkit_dom_html_head_element_set_profile@Base 2.5.3
+ webkit_dom_html_heading_element_get_align@Base 2.5.3
+ webkit_dom_html_heading_element_get_type@Base 2.5.3
+ webkit_dom_html_heading_element_set_align@Base 2.5.3
+ webkit_dom_html_hr_element_get_align@Base 2.5.3
+ webkit_dom_html_hr_element_get_no_shade@Base 2.5.3
+ webkit_dom_html_hr_element_get_size@Base 2.5.3
+ webkit_dom_html_hr_element_get_type@Base 2.5.3
+ webkit_dom_html_hr_element_get_width@Base 2.5.3
+ webkit_dom_html_hr_element_set_align@Base 2.5.3
+ webkit_dom_html_hr_element_set_no_shade@Base 2.5.3
+ webkit_dom_html_hr_element_set_size@Base 2.5.3
+ webkit_dom_html_hr_element_set_width@Base 2.5.3
+ (optional)webkit_dom_html_html_element_get_manifest@Base 2.5.3
+ webkit_dom_html_html_element_get_type@Base 2.5.3
+ webkit_dom_html_html_element_get_version@Base 2.5.3
+ (optional)webkit_dom_html_html_element_set_manifest@Base 2.5.3
+ webkit_dom_html_html_element_set_version@Base 2.5.3
+ webkit_dom_html_iframe_element_get_align@Base 2.5.3
+ webkit_dom_html_iframe_element_get_content_document@Base 2.5.3
+ webkit_dom_html_iframe_element_get_content_window@Base 2.5.3
+ webkit_dom_html_iframe_element_get_frame_border@Base 2.5.3
+ webkit_dom_html_iframe_element_get_height@Base 2.5.3
+ webkit_dom_html_iframe_element_get_long_desc@Base 2.5.3
+ webkit_dom_html_iframe_element_get_margin_height@Base 2.5.3
+ webkit_dom_html_iframe_element_get_margin_width@Base 2.5.3
+ webkit_dom_html_iframe_element_get_name@Base 2.5.3
+ (optional)webkit_dom_html_iframe_element_get_sandbox@Base 2.5.3
+ webkit_dom_html_iframe_element_get_scrolling@Base 2.5.3
+ webkit_dom_html_iframe_element_get_src@Base 2.5.3
+ (optional)webkit_dom_html_iframe_element_get_srcdoc@Base 2.5.3
+ webkit_dom_html_iframe_element_get_type@Base 2.5.3
+ webkit_dom_html_iframe_element_get_width@Base 2.5.3
+ webkit_dom_html_iframe_element_set_align@Base 2.5.3
+ webkit_dom_html_iframe_element_set_frame_border@Base 2.5.3
+ webkit_dom_html_iframe_element_set_height@Base 2.5.3
+ webkit_dom_html_iframe_element_set_long_desc@Base 2.5.3
+ webkit_dom_html_iframe_element_set_margin_height@Base 2.5.3
+ webkit_dom_html_iframe_element_set_margin_width@Base 2.5.3
+ webkit_dom_html_iframe_element_set_name@Base 2.5.3
+ (optional)webkit_dom_html_iframe_element_set_sandbox@Base 2.5.3
+ webkit_dom_html_iframe_element_set_scrolling@Base 2.5.3
+ webkit_dom_html_iframe_element_set_src@Base 2.5.3
+ (optional)webkit_dom_html_iframe_element_set_srcdoc@Base 2.5.3
+ webkit_dom_html_iframe_element_set_width@Base 2.5.3
+ webkit_dom_html_image_element_get_align@Base 2.5.3
+ webkit_dom_html_image_element_get_alt@Base 2.5.3
+ webkit_dom_html_image_element_get_border@Base 2.5.3
+ webkit_dom_html_image_element_get_complete@Base 2.5.3
+ (optional)webkit_dom_html_image_element_get_cross_origin@Base 2.5.3
+ (optional)webkit_dom_html_image_element_get_current_src@Base 2.5.3
+ webkit_dom_html_image_element_get_height@Base 2.5.3
+ webkit_dom_html_image_element_get_hspace@Base 2.5.3
+ webkit_dom_html_image_element_get_is_map@Base 2.5.3
+ webkit_dom_html_image_element_get_long_desc@Base 2.5.3
+ webkit_dom_html_image_element_get_lowsrc@Base 2.5.3
+ webkit_dom_html_image_element_get_name@Base 2.5.3
+ webkit_dom_html_image_element_get_natural_height@Base 2.5.3
+ webkit_dom_html_image_element_get_natural_width@Base 2.5.3
+ (optional)webkit_dom_html_image_element_get_sizes@Base 2.5.3
+ webkit_dom_html_image_element_get_src@Base 2.5.3
+ (optional)webkit_dom_html_image_element_get_srcset@Base 2.5.3
+ webkit_dom_html_image_element_get_type@Base 2.5.3
+ webkit_dom_html_image_element_get_use_map@Base 2.5.3
+ webkit_dom_html_image_element_get_vspace@Base 2.5.3
+ webkit_dom_html_image_element_get_width@Base 2.5.3
+ webkit_dom_html_image_element_get_x@Base 2.5.3
+ webkit_dom_html_image_element_get_y@Base 2.5.3
+ webkit_dom_html_image_element_set_align@Base 2.5.3
+ webkit_dom_html_image_element_set_alt@Base 2.5.3
+ webkit_dom_html_image_element_set_border@Base 2.5.3
+ (optional)webkit_dom_html_image_element_set_cross_origin@Base 2.5.3
+ webkit_dom_html_image_element_set_height@Base 2.5.3
+ webkit_dom_html_image_element_set_hspace@Base 2.5.3
+ webkit_dom_html_image_element_set_is_map@Base 2.5.3
+ webkit_dom_html_image_element_set_long_desc@Base 2.5.3
+ webkit_dom_html_image_element_set_lowsrc@Base 2.5.3
+ webkit_dom_html_image_element_set_name@Base 2.5.3
+ (optional)webkit_dom_html_image_element_set_sizes@Base 2.5.3
+ webkit_dom_html_image_element_set_src@Base 2.5.3
+ (optional)webkit_dom_html_image_element_set_srcset@Base 2.5.3
+ webkit_dom_html_image_element_set_use_map@Base 2.5.3
+ webkit_dom_html_image_element_set_vspace@Base 2.5.3
+ webkit_dom_html_image_element_set_width@Base 2.5.3
+ (optional)webkit_dom_html_input_element_check_validity@Base 2.5.3
+ webkit_dom_html_input_element_get_accept@Base 2.5.3
+ webkit_dom_html_input_element_get_align@Base 2.5.3
+ webkit_dom_html_input_element_get_alt@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_autocapitalize@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_autocomplete@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_autocorrect@Base 2.5.3
+ webkit_dom_html_input_element_get_autofocus@Base 2.5.3
+ webkit_dom_html_input_element_get_capture@Base 2.5.3
+ webkit_dom_html_input_element_get_checked@Base 2.5.3
+ webkit_dom_html_input_element_get_default_checked@Base 2.5.3
+ webkit_dom_html_input_element_get_default_value@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_dir_name@Base 2.5.3
+ webkit_dom_html_input_element_get_disabled@Base 2.5.3
+ webkit_dom_html_input_element_get_files@Base 2.5.3
+ webkit_dom_html_input_element_get_form@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_form_action@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_form_enctype@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_form_method@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_form_no_validate@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_form_target@Base 2.5.3
+ webkit_dom_html_input_element_get_height@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_incremental@Base 2.5.3
+ webkit_dom_html_input_element_get_indeterminate@Base 2.5.3
+ webkit_dom_html_input_element_get_input_type@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_labels@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_list@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_max@Base 2.5.3
+ webkit_dom_html_input_element_get_max_length@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_min@Base 2.5.3
+ webkit_dom_html_input_element_get_multiple@Base 2.5.3
+ webkit_dom_html_input_element_get_name@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_pattern@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_placeholder@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_read_only@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_required@Base 2.5.3
+ webkit_dom_html_input_element_get_size@Base 2.5.3
+ webkit_dom_html_input_element_get_src@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_step@Base 2.5.3
+ webkit_dom_html_input_element_get_type@Base 2.5.3
+ webkit_dom_html_input_element_get_use_map@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_validation_message@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_validity@Base 2.5.3
+ webkit_dom_html_input_element_get_value@Base 2.5.3
+ (optional)webkit_dom_html_input_element_get_value_as_number@Base 2.5.3
+ webkit_dom_html_input_element_get_width@Base 2.5.3
+ webkit_dom_html_input_element_get_will_validate@Base 2.5.3
+ webkit_dom_html_input_element_is_edited@Base 2.5.3
+ webkit_dom_html_input_element_select@Base 2.5.3
+ webkit_dom_html_input_element_set_accept@Base 2.5.3
+ webkit_dom_html_input_element_set_align@Base 2.5.3
+ webkit_dom_html_input_element_set_alt@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_autocapitalize@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_autocomplete@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_autocorrect@Base 2.5.3
+ webkit_dom_html_input_element_set_autofocus@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_capture@Base 2.5.3
+ webkit_dom_html_input_element_set_checked@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_custom_validity@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_default_checked@Base 2.5.3
+ webkit_dom_html_input_element_set_default_value@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_dir_name@Base 2.5.3
+ webkit_dom_html_input_element_set_disabled@Base 2.5.3
+ webkit_dom_html_input_element_set_files@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_form_action@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_form_enctype@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_form_method@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_form_no_validate@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_form_target@Base 2.5.3
+ webkit_dom_html_input_element_set_height@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_incremental@Base 2.5.3
+ webkit_dom_html_input_element_set_indeterminate@Base 2.5.3
+ webkit_dom_html_input_element_set_input_type@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_max@Base 2.5.3
+ webkit_dom_html_input_element_set_max_length@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_min@Base 2.5.3
+ webkit_dom_html_input_element_set_multiple@Base 2.5.3
+ webkit_dom_html_input_element_set_name@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_pattern@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_placeholder@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_range_text@Base 2.5.3
+ webkit_dom_html_input_element_set_read_only@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_required@Base 2.5.3
+ webkit_dom_html_input_element_set_size@Base 2.5.3
+ webkit_dom_html_input_element_set_src@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_step@Base 2.5.3
+ webkit_dom_html_input_element_set_use_map@Base 2.5.3
+ webkit_dom_html_input_element_set_value@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_value_as_number@Base 2.5.3
+ (optional)webkit_dom_html_input_element_set_value_for_user@Base 2.5.3
+ webkit_dom_html_input_element_set_width@Base 2.5.3
+ (optional)webkit_dom_html_input_element_step_down@Base 2.5.3
+ (optional)webkit_dom_html_input_element_step_up@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_check_validity@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_get_autofocus@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_get_challenge@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_get_disabled@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_get_form@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_get_keygen_type@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_get_keytype@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_get_labels@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_get_name@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_get_type@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_get_validation_message@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_get_validity@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_get_will_validate@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_set_autofocus@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_set_challenge@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_set_custom_validity@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_set_disabled@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_set_keytype@Base 2.5.3
+ (optional)webkit_dom_html_keygen_element_set_name@Base 2.5.3
+ (optional)webkit_dom_html_label_element_get_control@Base 2.5.3
+ webkit_dom_html_label_element_get_form@Base 2.5.3
+ webkit_dom_html_label_element_get_html_for@Base 2.5.3
+ webkit_dom_html_label_element_get_type@Base 2.5.3
+ webkit_dom_html_label_element_set_html_for@Base 2.5.3
+ webkit_dom_html_legend_element_get_align@Base 2.5.3
+ webkit_dom_html_legend_element_get_form@Base 2.5.3
+ webkit_dom_html_legend_element_get_type@Base 2.5.3
+ webkit_dom_html_legend_element_set_align@Base 2.5.3
+ webkit_dom_html_li_element_get_type@Base 2.5.3
+ webkit_dom_html_li_element_get_type_attr@Base 2.5.3
+ webkit_dom_html_li_element_get_value@Base 2.5.3
+ webkit_dom_html_li_element_set_type_attr@Base 2.5.3
+ webkit_dom_html_li_element_set_value@Base 2.5.3
+ webkit_dom_html_link_element_get_charset@Base 2.5.3
+ webkit_dom_html_link_element_get_disabled@Base 2.5.3
+ webkit_dom_html_link_element_get_href@Base 2.5.3
+ webkit_dom_html_link_element_get_hreflang@Base 2.5.3
+ webkit_dom_html_link_element_get_media@Base 2.5.3
+ webkit_dom_html_link_element_get_rel@Base 2.5.3
+ webkit_dom_html_link_element_get_rev@Base 2.5.3
+ webkit_dom_html_link_element_get_sheet@Base 2.5.3
+ webkit_dom_html_link_element_get_target@Base 2.5.3
+ webkit_dom_html_link_element_get_type@Base 2.5.3
+ webkit_dom_html_link_element_get_type_attr@Base 2.5.3
+ webkit_dom_html_link_element_set_charset@Base 2.5.3
+ webkit_dom_html_link_element_set_disabled@Base 2.5.3
+ webkit_dom_html_link_element_set_href@Base 2.5.3
+ webkit_dom_html_link_element_set_hreflang@Base 2.5.3
+ webkit_dom_html_link_element_set_media@Base 2.5.3
+ webkit_dom_html_link_element_set_rel@Base 2.5.3
+ webkit_dom_html_link_element_set_rev@Base 2.5.3
+ webkit_dom_html_link_element_set_target@Base 2.5.3
+ webkit_dom_html_link_element_set_type_attr@Base 2.5.3
+ webkit_dom_html_map_element_get_areas@Base 2.5.3
+ webkit_dom_html_map_element_get_name@Base 2.5.3
+ webkit_dom_html_map_element_get_type@Base 2.5.3
+ webkit_dom_html_map_element_set_name@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_get_behavior@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_get_bg_color@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_get_direction@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_get_height@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_get_hspace@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_get_loop@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_get_scroll_amount@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_get_scroll_delay@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_get_true_speed@Base 2.5.3
+ webkit_dom_html_marquee_element_get_type@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_get_vspace@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_get_width@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_set_behavior@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_set_bg_color@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_set_direction@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_set_height@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_set_hspace@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_set_loop@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_set_scroll_amount@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_set_scroll_delay@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_set_true_speed@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_set_vspace@Base 2.5.3
+ (optional)webkit_dom_html_marquee_element_set_width@Base 2.5.3
+ webkit_dom_html_marquee_element_start@Base 2.5.3
+ webkit_dom_html_marquee_element_stop@Base 2.5.3
+ (optional)webkit_dom_html_media_element_add_text_track@Base 2.5.3
+ (optional)webkit_dom_html_media_element_can_play_type@Base 2.5.3
+ (optional)webkit_dom_html_media_element_fast_seek@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_audio_tracks@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_autoplay@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_buffered@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_controller@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_controls@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_current_src@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_current_time@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_default_muted@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_default_playback_rate@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_duration@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_ended@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_error@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_loop@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_media_group@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_muted@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_network_state@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_paused@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_playback_rate@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_played@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_preload@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_ready_state@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_seekable@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_seeking@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_src@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_text_tracks@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_type@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_video_tracks@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_volume@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_webkit_audio_decoded_byte_count@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_webkit_closed_captions_visible@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_webkit_current_playback_target_is_wireless@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_webkit_has_closed_captions@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_webkit_preserves_pitch@Base 2.5.3
+ (optional)webkit_dom_html_media_element_get_webkit_video_decoded_byte_count@Base 2.5.3
+ (optional)webkit_dom_html_media_element_load@Base 2.5.3
+ (optional)webkit_dom_html_media_element_pause@Base 2.5.3
+ (optional)webkit_dom_html_media_element_play@Base 2.5.3
+ (optional)webkit_dom_html_media_element_set_autoplay@Base 2.5.3
+ (optional)webkit_dom_html_media_element_set_controls@Base 2.5.3
+ (optional)webkit_dom_html_media_element_set_current_time@Base 2.5.3
+ (optional)webkit_dom_html_media_element_set_default_muted@Base 2.5.3
+ (optional)webkit_dom_html_media_element_set_default_playback_rate@Base 2.5.3
+ (optional)webkit_dom_html_media_element_set_loop@Base 2.5.3
+ (optional)webkit_dom_html_media_element_set_media_group@Base 2.5.3
+ (optional)webkit_dom_html_media_element_set_muted@Base 2.5.3
+ (optional)webkit_dom_html_media_element_set_playback_rate@Base 2.5.3
+ (optional)webkit_dom_html_media_element_set_preload@Base 2.5.3
+ (optional)webkit_dom_html_media_element_set_src@Base 2.5.3
+ (optional)webkit_dom_html_media_element_set_volume@Base 2.5.3
+ (optional)webkit_dom_html_media_element_set_webkit_closed_captions_visible@Base 2.5.3
+ (optional)webkit_dom_html_media_element_set_webkit_preserves_pitch@Base 2.5.3
+ (optional)webkit_dom_html_media_element_webkit_show_playback_target_picker@Base 2.5.3
+ webkit_dom_html_menu_element_get_compact@Base 2.5.3
+ webkit_dom_html_menu_element_get_type@Base 2.5.3
+ webkit_dom_html_menu_element_set_compact@Base 2.5.3
+ webkit_dom_html_meta_element_get_content@Base 2.5.3
+ webkit_dom_html_meta_element_get_http_equiv@Base 2.5.3
+ webkit_dom_html_meta_element_get_name@Base 2.5.3
+ webkit_dom_html_meta_element_get_scheme@Base 2.5.3
+ webkit_dom_html_meta_element_get_type@Base 2.5.3
+ webkit_dom_html_meta_element_set_content@Base 2.5.3
+ webkit_dom_html_meta_element_set_http_equiv@Base 2.5.3
+ webkit_dom_html_meta_element_set_name@Base 2.5.3
+ webkit_dom_html_meta_element_set_scheme@Base 2.5.3
+ webkit_dom_html_mod_element_get_cite@Base 2.5.3
+ webkit_dom_html_mod_element_get_date_time@Base 2.5.3
+ webkit_dom_html_mod_element_get_type@Base 2.5.3
+ webkit_dom_html_mod_element_set_cite@Base 2.5.3
+ webkit_dom_html_mod_element_set_date_time@Base 2.5.3
+ webkit_dom_html_o_list_element_get_compact@Base 2.5.3
+ (optional)webkit_dom_html_o_list_element_get_reversed@Base 2.5.3
+ webkit_dom_html_o_list_element_get_start@Base 2.5.3
+ webkit_dom_html_o_list_element_get_type@Base 2.5.3
+ webkit_dom_html_o_list_element_get_type_attr@Base 2.5.3
+ webkit_dom_html_o_list_element_set_compact@Base 2.5.3
+ (optional)webkit_dom_html_o_list_element_set_reversed@Base 2.5.3
+ webkit_dom_html_o_list_element_set_start@Base 2.5.3
+ webkit_dom_html_o_list_element_set_type_attr@Base 2.5.3
+ (optional)webkit_dom_html_object_element_check_validity@Base 2.5.3
+ webkit_dom_html_object_element_get_align@Base 2.5.3
+ webkit_dom_html_object_element_get_archive@Base 2.5.3
+ webkit_dom_html_object_element_get_border@Base 2.5.3
+ webkit_dom_html_object_element_get_code@Base 2.5.3
+ webkit_dom_html_object_element_get_code_base@Base 2.5.3
+ webkit_dom_html_object_element_get_code_type@Base 2.5.3
+ webkit_dom_html_object_element_get_content_document@Base 2.5.3
+ webkit_dom_html_object_element_get_data@Base 2.5.3
+ webkit_dom_html_object_element_get_declare@Base 2.5.3
+ webkit_dom_html_object_element_get_form@Base 2.5.3
+ webkit_dom_html_object_element_get_height@Base 2.5.3
+ webkit_dom_html_object_element_get_hspace@Base 2.5.3
+ webkit_dom_html_object_element_get_name@Base 2.5.3
+ webkit_dom_html_object_element_get_standby@Base 2.5.3
+ webkit_dom_html_object_element_get_type@Base 2.5.3
+ webkit_dom_html_object_element_get_type_attr@Base 2.5.3
+ webkit_dom_html_object_element_get_use_map@Base 2.5.3
+ (optional)webkit_dom_html_object_element_get_validation_message@Base 2.5.3
+ (optional)webkit_dom_html_object_element_get_validity@Base 2.5.3
+ webkit_dom_html_object_element_get_vspace@Base 2.5.3
+ webkit_dom_html_object_element_get_width@Base 2.5.3
+ (optional)webkit_dom_html_object_element_get_will_validate@Base 2.5.3
+ webkit_dom_html_object_element_set_align@Base 2.5.3
+ webkit_dom_html_object_element_set_archive@Base 2.5.3
+ webkit_dom_html_object_element_set_border@Base 2.5.3
+ webkit_dom_html_object_element_set_code@Base 2.5.3
+ webkit_dom_html_object_element_set_code_base@Base 2.5.3
+ webkit_dom_html_object_element_set_code_type@Base 2.5.3
+ (optional)webkit_dom_html_object_element_set_custom_validity@Base 2.5.3
+ webkit_dom_html_object_element_set_data@Base 2.5.3
+ webkit_dom_html_object_element_set_declare@Base 2.5.3
+ webkit_dom_html_object_element_set_height@Base 2.5.3
+ webkit_dom_html_object_element_set_hspace@Base 2.5.3
+ webkit_dom_html_object_element_set_name@Base 2.5.3
+ webkit_dom_html_object_element_set_standby@Base 2.5.3
+ webkit_dom_html_object_element_set_type_attr@Base 2.5.3
+ webkit_dom_html_object_element_set_use_map@Base 2.5.3
+ webkit_dom_html_object_element_set_vspace@Base 2.5.3
+ webkit_dom_html_object_element_set_width@Base 2.5.3
+ webkit_dom_html_opt_group_element_get_disabled@Base 2.5.3
+ webkit_dom_html_opt_group_element_get_label@Base 2.5.3
+ webkit_dom_html_opt_group_element_get_type@Base 2.5.3
+ webkit_dom_html_opt_group_element_set_disabled@Base 2.5.3
+ webkit_dom_html_opt_group_element_set_label@Base 2.5.3
+ webkit_dom_html_option_element_get_default_selected@Base 2.5.3
+ webkit_dom_html_option_element_get_disabled@Base 2.5.3
+ webkit_dom_html_option_element_get_form@Base 2.5.3
+ webkit_dom_html_option_element_get_index@Base 2.5.3
+ webkit_dom_html_option_element_get_label@Base 2.5.3
+ webkit_dom_html_option_element_get_selected@Base 2.5.3
+ webkit_dom_html_option_element_get_text@Base 2.5.3
+ webkit_dom_html_option_element_get_type@Base 2.5.3
+ webkit_dom_html_option_element_get_value@Base 2.5.3
+ webkit_dom_html_option_element_set_default_selected@Base 2.5.3
+ webkit_dom_html_option_element_set_disabled@Base 2.5.3
+ webkit_dom_html_option_element_set_label@Base 2.5.3
+ webkit_dom_html_option_element_set_selected@Base 2.5.3
+ webkit_dom_html_option_element_set_value@Base 2.5.3
+ webkit_dom_html_options_collection_get_length@Base 2.5.3
+ webkit_dom_html_options_collection_get_selected_index@Base 2.5.3
+ webkit_dom_html_options_collection_get_type@Base 2.5.3
+ webkit_dom_html_options_collection_named_item@Base 2.5.3
+ webkit_dom_html_options_collection_set_selected_index@Base 2.5.3
+ webkit_dom_html_paragraph_element_get_align@Base 2.5.3
+ webkit_dom_html_paragraph_element_get_type@Base 2.5.3
+ webkit_dom_html_paragraph_element_set_align@Base 2.5.3
+ webkit_dom_html_param_element_get_name@Base 2.5.3
+ webkit_dom_html_param_element_get_type@Base 2.5.3
+ webkit_dom_html_param_element_get_type_attr@Base 2.5.3
+ webkit_dom_html_param_element_get_value@Base 2.5.3
+ webkit_dom_html_param_element_get_value_type@Base 2.5.3
+ webkit_dom_html_param_element_set_name@Base 2.5.3
+ webkit_dom_html_param_element_set_type_attr@Base 2.5.3
+ webkit_dom_html_param_element_set_value@Base 2.5.3
+ webkit_dom_html_param_element_set_value_type@Base 2.5.3
+ webkit_dom_html_pre_element_get_type@Base 2.5.3
+ webkit_dom_html_pre_element_get_width@Base 2.5.3
+ webkit_dom_html_pre_element_get_wrap@Base 2.5.3
+ webkit_dom_html_pre_element_set_width@Base 2.5.3
+ webkit_dom_html_pre_element_set_wrap@Base 2.5.3
+ webkit_dom_html_quote_element_get_cite@Base 2.5.3
+ webkit_dom_html_quote_element_get_type@Base 2.5.3
+ webkit_dom_html_quote_element_set_cite@Base 2.5.3
+ (optional)webkit_dom_html_script_element_get_async@Base 2.5.3
+ webkit_dom_html_script_element_get_charset@Base 2.5.3
+ (optional)webkit_dom_html_script_element_get_cross_origin@Base 2.5.3
+ webkit_dom_html_script_element_get_defer@Base 2.5.3
+ webkit_dom_html_script_element_get_event@Base 2.5.3
+ webkit_dom_html_script_element_get_html_for@Base 2.5.3
+ (optional)webkit_dom_html_script_element_get_nonce@Base 2.5.3
+ webkit_dom_html_script_element_get_src@Base 2.5.3
+ webkit_dom_html_script_element_get_text@Base 2.5.3
+ webkit_dom_html_script_element_get_type@Base 2.5.3
+ webkit_dom_html_script_element_get_type_attr@Base 2.5.3
+ (optional)webkit_dom_html_script_element_set_async@Base 2.5.3
+ (optional)webkit_dom_html_script_element_set_charset@Base 2.5.3
+ (optional)webkit_dom_html_script_element_set_cross_origin@Base 2.5.3
+ webkit_dom_html_script_element_set_defer@Base 2.5.3
+ webkit_dom_html_script_element_set_event@Base 2.5.3
+ webkit_dom_html_script_element_set_html_for@Base 2.5.3
+ (optional)webkit_dom_html_script_element_set_nonce@Base 2.5.3
+ webkit_dom_html_script_element_set_src@Base 2.5.3
+ webkit_dom_html_script_element_set_text@Base 2.5.3
+ webkit_dom_html_script_element_set_type_attr@Base 2.5.3
+ webkit_dom_html_select_element_add@Base 2.5.3
+ (optional)webkit_dom_html_select_element_check_validity@Base 2.5.3
+ webkit_dom_html_select_element_get_autofocus@Base 2.5.3
+ webkit_dom_html_select_element_get_disabled@Base 2.5.3
+ webkit_dom_html_select_element_get_form@Base 2.5.3
+ (optional)webkit_dom_html_select_element_get_labels@Base 2.5.3
+ webkit_dom_html_select_element_get_length@Base 2.5.3
+ webkit_dom_html_select_element_get_multiple@Base 2.5.3
+ webkit_dom_html_select_element_get_name@Base 2.5.3
+ webkit_dom_html_select_element_get_options@Base 2.5.3
+ (optional)webkit_dom_html_select_element_get_required@Base 2.5.3
+ webkit_dom_html_select_element_get_select_type@Base 2.5.3
+ webkit_dom_html_select_element_get_selected_index@Base 2.5.3
+ (optional)webkit_dom_html_select_element_get_selected_options@Base 2.5.3
+ webkit_dom_html_select_element_get_size@Base 2.5.3
+ webkit_dom_html_select_element_get_type@Base 2.5.3
+ (optional)webkit_dom_html_select_element_get_validation_message@Base 2.5.3
+ (optional)webkit_dom_html_select_element_get_validity@Base 2.5.3
+ webkit_dom_html_select_element_get_value@Base 2.5.3
+ webkit_dom_html_select_element_get_will_validate@Base 2.5.3
+ webkit_dom_html_select_element_item@Base 2.5.3
+ webkit_dom_html_select_element_named_item@Base 2.5.3
+ webkit_dom_html_select_element_remove@Base 2.5.3
+ webkit_dom_html_select_element_set_autofocus@Base 2.5.3
+ (optional)webkit_dom_html_select_element_set_custom_validity@Base 2.5.3
+ webkit_dom_html_select_element_set_disabled@Base 2.5.3
+ webkit_dom_html_select_element_set_length@Base 2.5.3
+ webkit_dom_html_select_element_set_multiple@Base 2.5.3
+ webkit_dom_html_select_element_set_name@Base 2.5.3
+ (optional)webkit_dom_html_select_element_set_required@Base 2.5.3
+ webkit_dom_html_select_element_set_selected_index@Base 2.5.3
+ webkit_dom_html_select_element_set_size@Base 2.5.3
+ webkit_dom_html_select_element_set_value@Base 2.5.3
+ webkit_dom_html_style_element_get_disabled@Base 2.5.3
+ webkit_dom_html_style_element_get_media@Base 2.5.3
+ webkit_dom_html_style_element_get_sheet@Base 2.5.3
+ webkit_dom_html_style_element_get_type@Base 2.5.3
+ webkit_dom_html_style_element_get_type_attr@Base 2.5.3
+ webkit_dom_html_style_element_set_disabled@Base 2.5.3
+ webkit_dom_html_style_element_set_media@Base 2.5.3
+ webkit_dom_html_style_element_set_type_attr@Base 2.5.3
+ webkit_dom_html_table_caption_element_get_align@Base 2.5.3
+ webkit_dom_html_table_caption_element_get_type@Base 2.5.3
+ webkit_dom_html_table_caption_element_set_align@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_abbr@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_align@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_axis@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_bg_color@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_cell_index@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_ch@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_ch_off@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_col_span@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_headers@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_height@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_no_wrap@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_row_span@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_scope@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_type@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_v_align@Base 2.5.3
+ webkit_dom_html_table_cell_element_get_width@Base 2.5.3
+ webkit_dom_html_table_cell_element_set_abbr@Base 2.5.3
+ webkit_dom_html_table_cell_element_set_align@Base 2.5.3
+ webkit_dom_html_table_cell_element_set_axis@Base 2.5.3
+ webkit_dom_html_table_cell_element_set_bg_color@Base 2.5.3
+ webkit_dom_html_table_cell_element_set_ch@Base 2.5.3
+ webkit_dom_html_table_cell_element_set_ch_off@Base 2.5.3
+ webkit_dom_html_table_cell_element_set_col_span@Base 2.5.3
+ webkit_dom_html_table_cell_element_set_headers@Base 2.5.3
+ webkit_dom_html_table_cell_element_set_height@Base 2.5.3
+ webkit_dom_html_table_cell_element_set_no_wrap@Base 2.5.3
+ webkit_dom_html_table_cell_element_set_row_span@Base 2.5.3
+ webkit_dom_html_table_cell_element_set_scope@Base 2.5.3
+ webkit_dom_html_table_cell_element_set_v_align@Base 2.5.3
+ webkit_dom_html_table_cell_element_set_width@Base 2.5.3
+ webkit_dom_html_table_col_element_get_align@Base 2.5.3
+ webkit_dom_html_table_col_element_get_ch@Base 2.5.3
+ webkit_dom_html_table_col_element_get_ch_off@Base 2.5.3
+ webkit_dom_html_table_col_element_get_span@Base 2.5.3
+ webkit_dom_html_table_col_element_get_type@Base 2.5.3
+ webkit_dom_html_table_col_element_get_v_align@Base 2.5.3
+ webkit_dom_html_table_col_element_get_width@Base 2.5.3
+ webkit_dom_html_table_col_element_set_align@Base 2.5.3
+ webkit_dom_html_table_col_element_set_ch@Base 2.5.3
+ webkit_dom_html_table_col_element_set_ch_off@Base 2.5.3
+ webkit_dom_html_table_col_element_set_span@Base 2.5.3
+ webkit_dom_html_table_col_element_set_v_align@Base 2.5.3
+ webkit_dom_html_table_col_element_set_width@Base 2.5.3
+ webkit_dom_html_table_element_create_caption@Base 2.5.3
+ (optional)webkit_dom_html_table_element_create_t_body@Base 2.5.3
+ webkit_dom_html_table_element_create_t_foot@Base 2.5.3
+ webkit_dom_html_table_element_create_t_head@Base 2.5.3
+ webkit_dom_html_table_element_delete_caption@Base 2.5.3
+ webkit_dom_html_table_element_delete_row@Base 2.5.3
+ webkit_dom_html_table_element_delete_t_foot@Base 2.5.3
+ webkit_dom_html_table_element_delete_t_head@Base 2.5.3
+ webkit_dom_html_table_element_get_align@Base 2.5.3
+ webkit_dom_html_table_element_get_bg_color@Base 2.5.3
+ webkit_dom_html_table_element_get_border@Base 2.5.3
+ webkit_dom_html_table_element_get_caption@Base 2.5.3
+ webkit_dom_html_table_element_get_cell_padding@Base 2.5.3
+ webkit_dom_html_table_element_get_cell_spacing@Base 2.5.3
+ (optional)webkit_dom_html_table_element_get_frame@Base 2.5.3
+ webkit_dom_html_table_element_get_rows@Base 2.5.3
+ webkit_dom_html_table_element_get_rules@Base 2.5.3
+ webkit_dom_html_table_element_get_summary@Base 2.5.3
+ webkit_dom_html_table_element_get_t_bodies@Base 2.5.3
+ webkit_dom_html_table_element_get_t_foot@Base 2.5.3
+ webkit_dom_html_table_element_get_t_head@Base 2.5.3
+ webkit_dom_html_table_element_get_type@Base 2.5.3
+ webkit_dom_html_table_element_get_width@Base 2.5.3
+ webkit_dom_html_table_element_insert_row@Base 2.5.3
+ webkit_dom_html_table_element_set_align@Base 2.5.3
+ webkit_dom_html_table_element_set_bg_color@Base 2.5.3
+ webkit_dom_html_table_element_set_border@Base 2.5.3
+ webkit_dom_html_table_element_set_caption@Base 2.5.3
+ webkit_dom_html_table_element_set_cell_padding@Base 2.5.3
+ webkit_dom_html_table_element_set_cell_spacing@Base 2.5.3
+ (optional)webkit_dom_html_table_element_set_frame@Base 2.5.3
+ webkit_dom_html_table_element_set_rules@Base 2.5.3
+ webkit_dom_html_table_element_set_summary@Base 2.5.3
+ webkit_dom_html_table_element_set_t_foot@Base 2.5.3
+ webkit_dom_html_table_element_set_t_head@Base 2.5.3
+ webkit_dom_html_table_element_set_width@Base 2.5.3
+ webkit_dom_html_table_row_element_delete_cell@Base 2.5.3
+ webkit_dom_html_table_row_element_get_align@Base 2.5.3
+ webkit_dom_html_table_row_element_get_bg_color@Base 2.5.3
+ webkit_dom_html_table_row_element_get_cells@Base 2.5.3
+ webkit_dom_html_table_row_element_get_ch@Base 2.5.3
+ webkit_dom_html_table_row_element_get_ch_off@Base 2.5.3
+ webkit_dom_html_table_row_element_get_row_index@Base 2.5.3
+ webkit_dom_html_table_row_element_get_section_row_index@Base 2.5.3
+ webkit_dom_html_table_row_element_get_type@Base 2.5.3
+ webkit_dom_html_table_row_element_get_v_align@Base 2.5.3
+ webkit_dom_html_table_row_element_insert_cell@Base 2.5.3
+ webkit_dom_html_table_row_element_set_align@Base 2.5.3
+ webkit_dom_html_table_row_element_set_bg_color@Base 2.5.3
+ webkit_dom_html_table_row_element_set_ch@Base 2.5.3
+ webkit_dom_html_table_row_element_set_ch_off@Base 2.5.3
+ webkit_dom_html_table_row_element_set_v_align@Base 2.5.3
+ webkit_dom_html_table_section_element_delete_row@Base 2.5.3
+ webkit_dom_html_table_section_element_get_align@Base 2.5.3
+ webkit_dom_html_table_section_element_get_ch@Base 2.5.3
+ webkit_dom_html_table_section_element_get_ch_off@Base 2.5.3
+ webkit_dom_html_table_section_element_get_rows@Base 2.5.3
+ webkit_dom_html_table_section_element_get_type@Base 2.5.3
+ webkit_dom_html_table_section_element_get_v_align@Base 2.5.3
+ webkit_dom_html_table_section_element_insert_row@Base 2.5.3
+ webkit_dom_html_table_section_element_set_align@Base 2.5.3
+ webkit_dom_html_table_section_element_set_ch@Base 2.5.3
+ webkit_dom_html_table_section_element_set_ch_off@Base 2.5.3
+ webkit_dom_html_table_section_element_set_v_align@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_check_validity@Base 2.5.3
+ webkit_dom_html_text_area_element_get_area_type@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_get_autocapitalize@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_get_autocorrect@Base 2.5.3
+ webkit_dom_html_text_area_element_get_autofocus@Base 2.5.3
+ webkit_dom_html_text_area_element_get_cols@Base 2.5.3
+ webkit_dom_html_text_area_element_get_default_value@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_get_dir_name@Base 2.5.3
+ webkit_dom_html_text_area_element_get_disabled@Base 2.5.3
+ webkit_dom_html_text_area_element_get_form@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_get_labels@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_get_max_length@Base 2.5.3
+ webkit_dom_html_text_area_element_get_name@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_get_placeholder@Base 2.5.3
+ webkit_dom_html_text_area_element_get_read_only@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_get_required@Base 2.5.3
+ webkit_dom_html_text_area_element_get_rows@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_get_selection_direction@Base 2.5.3
+ webkit_dom_html_text_area_element_get_selection_end@Base 2.5.3
+ webkit_dom_html_text_area_element_get_selection_start@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_get_text_length@Base 2.5.3
+ webkit_dom_html_text_area_element_get_type@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_get_validation_message@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_get_validity@Base 2.5.3
+ webkit_dom_html_text_area_element_get_value@Base 2.5.3
+ webkit_dom_html_text_area_element_get_will_validate@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_get_wrap@Base 2.5.3
+ webkit_dom_html_text_area_element_is_edited@Base 2.5.3
+ webkit_dom_html_text_area_element_select@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_set_autocapitalize@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_set_autocorrect@Base 2.5.3
+ webkit_dom_html_text_area_element_set_autofocus@Base 2.5.3
+ webkit_dom_html_text_area_element_set_cols@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_set_custom_validity@Base 2.5.3
+ webkit_dom_html_text_area_element_set_default_value@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_set_dir_name@Base 2.5.3
+ webkit_dom_html_text_area_element_set_disabled@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_set_max_length@Base 2.5.3
+ webkit_dom_html_text_area_element_set_name@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_set_placeholder@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_set_range_text@Base 2.5.3
+ webkit_dom_html_text_area_element_set_read_only@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_set_required@Base 2.5.3
+ webkit_dom_html_text_area_element_set_rows@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_set_selection_direction@Base 2.5.3
+ webkit_dom_html_text_area_element_set_selection_end@Base 2.5.3
+ webkit_dom_html_text_area_element_set_selection_range@Base 2.5.3
+ webkit_dom_html_text_area_element_set_selection_start@Base 2.5.3
+ webkit_dom_html_text_area_element_set_value@Base 2.5.3
+ (optional)webkit_dom_html_text_area_element_set_wrap@Base 2.5.3
+ webkit_dom_html_title_element_get_text@Base 2.5.3
+ webkit_dom_html_title_element_get_type@Base 2.5.3
+ webkit_dom_html_title_element_set_text@Base 2.5.3
+ webkit_dom_html_u_list_element_get_compact@Base 2.5.3
+ webkit_dom_html_u_list_element_get_type@Base 2.5.3
+ webkit_dom_html_u_list_element_get_type_attr@Base 2.5.3
+ webkit_dom_html_u_list_element_set_compact@Base 2.5.3
+ webkit_dom_html_u_list_element_set_type_attr@Base 2.5.3
+ (optional)webkit_dom_html_video_element_get_height@Base 2.5.3
+ (optional)webkit_dom_html_video_element_get_poster@Base 2.5.3
+ (optional)webkit_dom_html_video_element_get_type@Base 2.5.3
+ (optional)webkit_dom_html_video_element_get_video_height@Base 2.5.3
+ (optional)webkit_dom_html_video_element_get_video_width@Base 2.5.3
+ (optional)webkit_dom_html_video_element_get_webkit_decoded_frame_count@Base 2.5.3
+ (optional)webkit_dom_html_video_element_get_webkit_displaying_fullscreen@Base 2.5.3
+ (optional)webkit_dom_html_video_element_get_webkit_dropped_frame_count@Base 2.5.3
+ (optional)webkit_dom_html_video_element_get_webkit_supports_fullscreen@Base 2.5.3
+ (optional)webkit_dom_html_video_element_get_webkit_wireless_video_playback_disabled@Base 2.5.3
+ (optional)webkit_dom_html_video_element_get_width@Base 2.5.3
+ (optional)webkit_dom_html_video_element_set_height@Base 2.5.3
+ (optional)webkit_dom_html_video_element_set_poster@Base 2.5.3
+ (optional)webkit_dom_html_video_element_set_webkit_wireless_video_playback_disabled@Base 2.5.3
+ (optional)webkit_dom_html_video_element_set_width@Base 2.5.3
+ (optional)webkit_dom_html_video_element_webkit_enter_full_screen@Base 2.5.3
+ (optional)webkit_dom_html_video_element_webkit_enter_fullscreen@Base 2.5.3
+ (optional)webkit_dom_html_video_element_webkit_exit_full_screen@Base 2.5.3
+ (optional)webkit_dom_html_video_element_webkit_exit_fullscreen@Base 2.5.3
+ webkit_dom_keyboard_event_get_alt_graph_key@Base 2.5.3
+ webkit_dom_keyboard_event_get_alt_key@Base 2.5.3
+ webkit_dom_keyboard_event_get_ctrl_key@Base 2.5.3
+ webkit_dom_keyboard_event_get_key_identifier@Base 2.5.3
+ webkit_dom_keyboard_event_get_key_location@Base 2.5.3
+ webkit_dom_keyboard_event_get_meta_key@Base 2.5.3
+ webkit_dom_keyboard_event_get_modifier_state@Base 2.5.3
+ webkit_dom_keyboard_event_get_shift_key@Base 2.5.3
+ webkit_dom_keyboard_event_get_type@Base 2.5.3
+ webkit_dom_keyboard_event_init_keyboard_event@Base 2.5.3
+ (optional)webkit_dom_location_get_ancestor_origins@Base 2.5.3
+ (optional)webkit_dom_location_get_hash@Base 2.5.3
+ (optional)webkit_dom_location_get_host@Base 2.5.3
+ (optional)webkit_dom_location_get_hostname@Base 2.5.3
+ (optional)webkit_dom_location_get_href@Base 2.5.3
+ (optional)webkit_dom_location_get_origin@Base 2.5.3
+ (optional)webkit_dom_location_get_pathname@Base 2.5.3
+ (optional)webkit_dom_location_get_port@Base 2.5.3
+ (optional)webkit_dom_location_get_protocol@Base 2.5.3
+ (optional)webkit_dom_location_get_search@Base 2.5.3
+ (optional)webkit_dom_location_get_type@Base 2.5.3
+ (optional)webkit_dom_media_controller_get_buffered@Base 2.5.3
+ (optional)webkit_dom_media_controller_get_current_time@Base 2.5.3
+ (optional)webkit_dom_media_controller_get_default_playback_rate@Base 2.5.3
+ (optional)webkit_dom_media_controller_get_duration@Base 2.5.3
+ (optional)webkit_dom_media_controller_get_muted@Base 2.5.3
+ (optional)webkit_dom_media_controller_get_paused@Base 2.5.3
+ (optional)webkit_dom_media_controller_get_playback_rate@Base 2.5.3
+ (optional)webkit_dom_media_controller_get_playback_state@Base 2.5.3
+ (optional)webkit_dom_media_controller_get_played@Base 2.5.3
+ (optional)webkit_dom_media_controller_get_seekable@Base 2.5.3
+ (optional)webkit_dom_media_controller_get_type@Base 2.5.3
+ (optional)webkit_dom_media_controller_get_volume@Base 2.5.3
+ (optional)webkit_dom_media_controller_pause@Base 2.5.3
+ (optional)webkit_dom_media_controller_play@Base 2.5.3
+ (optional)webkit_dom_media_controller_set_current_time@Base 2.5.3
+ (optional)webkit_dom_media_controller_set_default_playback_rate@Base 2.5.3
+ (optional)webkit_dom_media_controller_set_muted@Base 2.5.3
+ (optional)webkit_dom_media_controller_set_playback_rate@Base 2.5.3
+ (optional)webkit_dom_media_controller_set_volume@Base 2.5.3
+ (optional)webkit_dom_media_controller_unpause@Base 2.5.3
+ (optional)webkit_dom_media_error_get_code@Base 2.5.3
+ (optional)webkit_dom_media_error_get_type@Base 2.5.3
+ webkit_dom_media_list_append_medium@Base 2.5.3
+ webkit_dom_media_list_delete_medium@Base 2.5.3
+ webkit_dom_media_list_get_length@Base 2.5.3
+ webkit_dom_media_list_get_media_text@Base 2.5.3
+ webkit_dom_media_list_get_type@Base 2.5.3
+ webkit_dom_media_list_item@Base 2.5.3
+ webkit_dom_media_list_set_media_text@Base 2.5.3
+ (optional)webkit_dom_media_query_list_get_matches@Base 2.5.3
+ (optional)webkit_dom_media_query_list_get_media@Base 2.5.3
+ (optional)webkit_dom_media_query_list_get_type@Base 2.5.3
+ (optional)webkit_dom_message_port_get_type@Base 2.5.3
+ webkit_dom_mouse_event_get_alt_key@Base 2.5.3
+ webkit_dom_mouse_event_get_button@Base 2.5.3
+ webkit_dom_mouse_event_get_client_x@Base 2.5.3
+ webkit_dom_mouse_event_get_client_y@Base 2.5.3
+ webkit_dom_mouse_event_get_ctrl_key@Base 2.5.3
+ webkit_dom_mouse_event_get_from_element@Base 2.5.3
+ webkit_dom_mouse_event_get_meta_key@Base 2.5.3
+ (optional)webkit_dom_mouse_event_get_movement_x@Base 2.5.3
+ (optional)webkit_dom_mouse_event_get_movement_y@Base 2.5.3
+ webkit_dom_mouse_event_get_offset_x@Base 2.5.3
+ webkit_dom_mouse_event_get_offset_y@Base 2.5.3
+ webkit_dom_mouse_event_get_related_target@Base 2.5.3
+ webkit_dom_mouse_event_get_screen_x@Base 2.5.3
+ webkit_dom_mouse_event_get_screen_y@Base 2.5.3
+ webkit_dom_mouse_event_get_shift_key@Base 2.5.3
+ webkit_dom_mouse_event_get_to_element@Base 2.5.3
+ webkit_dom_mouse_event_get_type@Base 2.5.3
+ webkit_dom_mouse_event_get_x@Base 2.5.3
+ webkit_dom_mouse_event_get_y@Base 2.5.3
+ webkit_dom_mouse_event_init_mouse_event@Base 2.5.3
+ webkit_dom_named_node_map_get_length@Base 2.5.3
+ webkit_dom_named_node_map_get_named_item@Base 2.5.3
+ webkit_dom_named_node_map_get_named_item_ns@Base 2.5.3
+ webkit_dom_named_node_map_get_type@Base 2.5.3
+ webkit_dom_named_node_map_item@Base 2.5.3
+ webkit_dom_named_node_map_remove_named_item@Base 2.5.3
+ webkit_dom_named_node_map_remove_named_item_ns@Base 2.5.3
+ webkit_dom_named_node_map_set_named_item@Base 2.5.3
+ webkit_dom_named_node_map_set_named_item_ns@Base 2.5.3
+ (optional)webkit_dom_navigator_get_app_code_name@Base 2.5.3
+ (optional)webkit_dom_navigator_get_app_name@Base 2.5.3
+ (optional)webkit_dom_navigator_get_app_version@Base 2.5.3
+ (optional)webkit_dom_navigator_get_cookie_enabled@Base 2.5.3
+ (optional)webkit_dom_navigator_get_geolocation@Base 2.5.3
+ (optional)webkit_dom_navigator_get_hardware_concurrency@Base 2.5.3
+ (optional)webkit_dom_navigator_get_language@Base 2.5.3
+ (optional)webkit_dom_navigator_get_mime_types@Base 2.5.3
+ (optional)webkit_dom_navigator_get_on_line@Base 2.5.3
+ (optional)webkit_dom_navigator_get_platform@Base 2.5.3
+ (optional)webkit_dom_navigator_get_plugins@Base 2.5.3
+ (optional)webkit_dom_navigator_get_product@Base 2.5.3
+ (optional)webkit_dom_navigator_get_product_sub@Base 2.5.3
+ (optional)webkit_dom_navigator_get_storage_updates@Base 2.5.3
+ (optional)webkit_dom_navigator_get_type@Base 2.5.3
+ (optional)webkit_dom_navigator_get_user_agent@Base 2.5.3
+ (optional)webkit_dom_navigator_get_vendor@Base 2.5.3
+ (optional)webkit_dom_navigator_get_vendor_sub@Base 2.5.3
+ (optional)webkit_dom_navigator_get_webkit_battery@Base 2.5.3
+ (optional)webkit_dom_navigator_is_protocol_handler_registered@Base 2.5.3
+ (optional)webkit_dom_navigator_java_enabled@Base 2.5.3
+ (optional)webkit_dom_navigator_register_protocol_handler@Base 2.5.3
+ (optional)webkit_dom_navigator_unregister_protocol_handler@Base 2.5.3
+ (optional)webkit_dom_navigator_vibrate@Base 2.5.3
+ (optional)webkit_dom_navigator_webkit_get_gamepads@Base 2.5.3
+ webkit_dom_node_append_child@Base 2.5.3
+ webkit_dom_node_clone_node@Base 2.5.3
+ webkit_dom_node_compare_document_position@Base 2.5.3
+ webkit_dom_node_contains@Base 2.5.3
+ webkit_dom_node_filter_accept_node@Base 2.5.3
+ webkit_dom_node_filter_get_type@Base 2.5.3
+ webkit_dom_node_get_base_uri@Base 2.5.3
+ webkit_dom_node_get_child_nodes@Base 2.5.3
+ webkit_dom_node_get_first_child@Base 2.5.3
+ webkit_dom_node_get_last_child@Base 2.5.3
+ webkit_dom_node_get_local_name@Base 2.5.3
+ webkit_dom_node_get_namespace_uri@Base 2.5.3
+ webkit_dom_node_get_next_sibling@Base 2.5.3
+ webkit_dom_node_get_node_name@Base 2.5.3
+ webkit_dom_node_get_node_type@Base 2.5.3
+ webkit_dom_node_get_node_value@Base 2.5.3
+ webkit_dom_node_get_owner_document@Base 2.5.3
+ webkit_dom_node_get_parent_element@Base 2.5.3
+ webkit_dom_node_get_parent_node@Base 2.5.3
+ webkit_dom_node_get_prefix@Base 2.5.3
+ webkit_dom_node_get_previous_sibling@Base 2.5.3
+ webkit_dom_node_get_text_content@Base 2.5.3
+ webkit_dom_node_get_type@Base 2.5.3
+ webkit_dom_node_has_child_nodes@Base 2.5.3
+ webkit_dom_node_insert_before@Base 2.5.3
+ webkit_dom_node_is_default_namespace@Base 2.5.3
+ webkit_dom_node_is_equal_node@Base 2.5.3
+ webkit_dom_node_is_same_node@Base 2.5.3
+ webkit_dom_node_is_supported@Base 2.5.3
+ webkit_dom_node_iterator_detach@Base 2.5.3
+ webkit_dom_node_iterator_get_expand_entity_references@Base 2.5.3
+ webkit_dom_node_iterator_get_filter@Base 2.5.3
+ webkit_dom_node_iterator_get_pointer_before_reference_node@Base 2.5.3
+ webkit_dom_node_iterator_get_reference_node@Base 2.5.3
+ webkit_dom_node_iterator_get_root@Base 2.5.3
+ webkit_dom_node_iterator_get_type@Base 2.5.3
+ webkit_dom_node_iterator_get_what_to_show@Base 2.5.3
+ webkit_dom_node_iterator_next_node@Base 2.5.3
+ webkit_dom_node_iterator_previous_node@Base 2.5.3
+ webkit_dom_node_list_get_length@Base 2.5.3
+ webkit_dom_node_list_get_type@Base 2.5.3
+ webkit_dom_node_list_item@Base 2.5.3
+ webkit_dom_node_lookup_namespace_uri@Base 2.5.3
+ webkit_dom_node_lookup_prefix@Base 2.5.3
+ webkit_dom_node_normalize@Base 2.5.3
+ webkit_dom_node_remove_child@Base 2.5.3
+ webkit_dom_node_replace_child@Base 2.5.3
+ webkit_dom_node_set_node_value@Base 2.5.3
+ webkit_dom_node_set_prefix@Base 2.5.3
+ webkit_dom_node_set_text_content@Base 2.5.3
+ webkit_dom_object_get_type@Base 2.5.3
+ (optional)webkit_dom_performance_entry_get_duration@Base 2.5.3
+ (optional)webkit_dom_performance_entry_get_entry_type@Base 2.5.3
+ (optional)webkit_dom_performance_entry_get_name@Base 2.5.3
+ (optional)webkit_dom_performance_entry_get_start_time@Base 2.5.3
+ (optional)webkit_dom_performance_entry_get_type@Base 2.5.3
+ (optional)webkit_dom_performance_entry_list_get_length@Base 2.5.3
+ (optional)webkit_dom_performance_entry_list_get_type@Base 2.5.3
+ (optional)webkit_dom_performance_entry_list_item@Base 2.5.3
+ (optional)webkit_dom_performance_get_navigation@Base 2.5.3
+ (optional)webkit_dom_performance_get_timing@Base 2.5.3
+ (optional)webkit_dom_performance_get_type@Base 2.5.3
+ webkit_navigation_policy_decision_get_navigation_action@Base 2.5.3
+ (optional)webkit_dom_performance_navigation_get_navigation_type@Base 2.5.3
+ (optional)webkit_dom_performance_navigation_get_redirect_count@Base 2.5.3
+ (optional)webkit_dom_performance_navigation_get_type@Base 2.5.3
+ (optional)webkit_dom_performance_now@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_connect_end@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_connect_start@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_dom_complete@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_dom_content_loaded_event_end@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_dom_content_loaded_event_start@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_dom_interactive@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_dom_loading@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_domain_lookup_end@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_domain_lookup_start@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_fetch_start@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_load_event_end@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_load_event_start@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_navigation_start@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_redirect_end@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_redirect_start@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_request_start@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_response_end@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_response_start@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_secure_connection_start@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_type@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_unload_event_end@Base 2.5.3
+ (optional)webkit_dom_performance_timing_get_unload_event_start@Base 2.5.3
+ webkit_dom_processing_instruction_get_sheet@Base 2.5.3
+ webkit_dom_processing_instruction_get_target@Base 2.5.3
+ webkit_dom_processing_instruction_get_type@Base 2.5.3
+ webkit_dom_range_clone_contents@Base 2.5.3
+ webkit_dom_range_clone_range@Base 2.5.3
+ webkit_dom_range_collapse@Base 2.5.3
+ webkit_dom_range_compare_boundary_points@Base 2.5.3
+ webkit_dom_range_compare_node@Base 2.5.3
+ webkit_dom_range_compare_point@Base 2.5.3
+ webkit_dom_range_create_contextual_fragment@Base 2.5.3
+ webkit_dom_range_delete_contents@Base 2.5.3
+ webkit_dom_range_detach@Base 2.5.3
+ (optional)webkit_dom_range_expand@Base 2.5.3
+ webkit_dom_range_extract_contents@Base 2.5.3
+ webkit_dom_range_get_collapsed@Base 2.5.3
+ webkit_dom_range_get_common_ancestor_container@Base 2.5.3
+ webkit_dom_range_get_end_container@Base 2.5.3
+ webkit_dom_range_get_end_offset@Base 2.5.3
+ webkit_dom_range_get_start_container@Base 2.5.3
+ webkit_dom_range_get_start_offset@Base 2.5.3
+ webkit_dom_range_get_text@Base 2.5.3
+ webkit_dom_range_get_type@Base 2.5.3
+ webkit_dom_range_insert_node@Base 2.5.3
+ webkit_dom_range_intersects_node@Base 2.5.3
+ webkit_dom_range_is_point_in_range@Base 2.5.3
+ webkit_dom_range_select_node@Base 2.5.3
+ webkit_dom_range_select_node_contents@Base 2.5.3
+ webkit_dom_range_set_end@Base 2.5.3
+ webkit_dom_range_set_end_after@Base 2.5.3
+ webkit_dom_range_set_end_before@Base 2.5.3
+ webkit_dom_range_set_start@Base 2.5.3
+ webkit_dom_range_set_start_after@Base 2.5.3
+ webkit_dom_range_set_start_before@Base 2.5.3
+ webkit_dom_range_surround_contents@Base 2.5.3
+ webkit_dom_range_to_string@Base 2.5.3
+ (optional)webkit_dom_screen_get_avail_height@Base 2.5.3
+ (optional)webkit_dom_screen_get_avail_left@Base 2.5.3
+ (optional)webkit_dom_screen_get_avail_top@Base 2.5.3
+ (optional)webkit_dom_screen_get_avail_width@Base 2.5.3
+ (optional)webkit_dom_screen_get_color_depth@Base 2.5.3
+ (optional)webkit_dom_screen_get_height@Base 2.5.3
+ (optional)webkit_dom_screen_get_pixel_depth@Base 2.5.3
+ (optional)webkit_dom_screen_get_type@Base 2.5.3
+ (optional)webkit_dom_screen_get_width@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_cancel@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_event_get_char_index@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_event_get_elapsed_time@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_event_get_name@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_event_get_type@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_get_paused@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_get_pending@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_get_speaking@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_get_type@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_pause@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_resume@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_speak@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_utterance_get_lang@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_utterance_get_pitch@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_utterance_get_rate@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_utterance_get_text@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_utterance_get_type@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_utterance_get_voice@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_utterance_get_volume@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_utterance_set_lang@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_utterance_set_pitch@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_utterance_set_rate@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_utterance_set_text@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_utterance_set_voice@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_utterance_set_volume@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_voice_get_default@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_voice_get_lang@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_voice_get_local_service@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_voice_get_name@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_voice_get_type@Base 2.5.3
+ (optional)webkit_dom_speech_synthesis_voice_get_voice_uri@Base 2.5.3
+ (optional)webkit_dom_storage_clear@Base 2.5.3
+ (optional)webkit_dom_storage_get_item@Base 2.5.3
+ (optional)webkit_dom_storage_get_length@Base 2.5.3
+ (optional)webkit_dom_storage_get_type@Base 2.5.3
+ (optional)webkit_dom_storage_key@Base 2.5.3
+ (optional)webkit_dom_storage_remove_item@Base 2.5.3
+ (optional)webkit_dom_storage_set_item@Base 2.5.3
+ (optional)webkit_dom_style_media_get_media_type@Base 2.5.3
+ (optional)webkit_dom_style_media_get_type@Base 2.5.3
+ (optional)webkit_dom_style_media_match_medium@Base 2.5.3
+ webkit_dom_style_sheet_get_content_type@Base 2.5.3
+ webkit_dom_style_sheet_get_disabled@Base 2.5.3
+ webkit_dom_style_sheet_get_href@Base 2.5.3
+ webkit_dom_style_sheet_get_media@Base 2.5.3
+ webkit_dom_style_sheet_get_owner_node@Base 2.5.3
+ webkit_dom_style_sheet_get_parent_style_sheet@Base 2.5.3
+ webkit_dom_style_sheet_get_title@Base 2.5.3
+ webkit_dom_style_sheet_get_type@Base 2.5.3
+ webkit_dom_style_sheet_list_get_length@Base 2.5.3
+ webkit_dom_style_sheet_list_get_type@Base 2.5.3
+ webkit_dom_style_sheet_list_item@Base 2.5.3
+ webkit_dom_style_sheet_set_disabled@Base 2.5.3
+ webkit_dom_text_get_type@Base 2.5.3
+ webkit_dom_text_get_whole_text@Base 2.5.3
+ webkit_dom_text_replace_whole_text@Base 2.5.3
+ webkit_dom_text_split_text@Base 2.5.3
+ (optional)webkit_dom_text_track_add_cue@Base 2.5.3
+ (optional)webkit_dom_text_track_cue_get_end_time@Base 2.5.3
+ (optional)webkit_dom_text_track_cue_get_id@Base 2.5.3
+ (optional)webkit_dom_text_track_cue_get_pause_on_exit@Base 2.5.3
+ (optional)webkit_dom_text_track_cue_get_start_time@Base 2.5.3
+ (optional)webkit_dom_text_track_cue_get_track@Base 2.5.3
+ (optional)webkit_dom_text_track_cue_get_type@Base 2.5.3
+ (optional)webkit_dom_text_track_cue_list_get_cue_by_id@Base 2.5.3
+ (optional)webkit_dom_text_track_cue_list_get_length@Base 2.5.3
+ (optional)webkit_dom_text_track_cue_list_get_type@Base 2.5.3
+ (optional)webkit_dom_text_track_cue_list_item@Base 2.5.3
+ (optional)webkit_dom_text_track_cue_set_end_time@Base 2.5.3
+ (optional)webkit_dom_text_track_cue_set_id@Base 2.5.3
+ (optional)webkit_dom_text_track_cue_set_pause_on_exit@Base 2.5.3
+ (optional)webkit_dom_text_track_cue_set_start_time@Base 2.5.3
+ (optional)webkit_dom_text_track_get_active_cues@Base 2.5.3
+ (optional)webkit_dom_text_track_get_cues@Base 2.5.3
+ (optional)webkit_dom_text_track_get_id@Base 2.5.3
+ (optional)webkit_dom_text_track_get_in_band_metadata_track_dispatch_type@Base 2.5.3
+ (optional)webkit_dom_text_track_get_label@Base 2.5.3
+ (optional)webkit_dom_text_track_get_language@Base 2.5.3
+ (optional)webkit_dom_text_track_get_type@Base 2.5.3
+ (optional)webkit_dom_text_track_list_get_length@Base 2.5.3
+ (optional)webkit_dom_text_track_list_get_track_by_id@Base 2.5.3
+ (optional)webkit_dom_text_track_list_get_type@Base 2.5.3
+ (optional)webkit_dom_text_track_list_item@Base 2.5.3
+ (optional)webkit_dom_text_track_remove_cue@Base 2.5.3
+ (optional)webkit_dom_time_ranges_end@Base 2.5.3
+ (optional)webkit_dom_time_ranges_get_length@Base 2.5.3
+ (optional)webkit_dom_time_ranges_get_type@Base 2.5.3
+ (optional)webkit_dom_time_ranges_start@Base 2.5.3
+ (optional)webkit_dom_touch_get_client_x@Base 2.5.3
+ (optional)webkit_dom_touch_get_client_y@Base 2.5.3
+ (optional)webkit_dom_touch_get_identifier@Base 2.5.3
+ (optional)webkit_dom_touch_get_page_x@Base 2.5.3
+ (optional)webkit_dom_touch_get_page_y@Base 2.5.3
+ (optional)webkit_dom_touch_get_screen_x@Base 2.5.3
+ (optional)webkit_dom_touch_get_screen_y@Base 2.5.3
+ (optional)webkit_dom_touch_get_target@Base 2.5.3
+ (optional)webkit_dom_touch_get_type@Base 2.5.3
+ (optional)webkit_dom_touch_get_webkit_force@Base 2.5.3
+ (optional)webkit_dom_touch_get_webkit_radius_x@Base 2.5.3
+ (optional)webkit_dom_touch_get_webkit_radius_y@Base 2.5.3
+ (optional)webkit_dom_touch_get_webkit_rotation_angle@Base 2.5.3
+ (optional)webkit_dom_track_event_get_type@Base 2.5.3
+ webkit_dom_tree_walker_first_child@Base 2.5.3
+ webkit_dom_tree_walker_get_current_node@Base 2.5.3
+ webkit_dom_tree_walker_get_expand_entity_references@Base 2.5.3
+ webkit_dom_tree_walker_get_filter@Base 2.5.3
+ webkit_dom_tree_walker_get_root@Base 2.5.3
+ webkit_dom_tree_walker_get_type@Base 2.5.3
+ webkit_dom_tree_walker_get_what_to_show@Base 2.5.3
+ webkit_dom_tree_walker_last_child@Base 2.5.3
+ webkit_dom_tree_walker_next_node@Base 2.5.3
+ webkit_dom_tree_walker_next_sibling@Base 2.5.3
+ webkit_dom_tree_walker_parent_node@Base 2.5.3
+ webkit_dom_tree_walker_previous_node@Base 2.5.3
+ webkit_dom_tree_walker_previous_sibling@Base 2.5.3
+ webkit_dom_tree_walker_set_current_node@Base 2.5.3
+ webkit_dom_ui_event_get_char_code@Base 2.5.3
+ webkit_dom_ui_event_get_detail@Base 2.5.3
+ webkit_dom_ui_event_get_key_code@Base 2.5.3
+ webkit_dom_ui_event_get_layer_x@Base 2.5.3
+ webkit_dom_ui_event_get_layer_y@Base 2.5.3
+ webkit_dom_ui_event_get_page_x@Base 2.5.3
+ webkit_dom_ui_event_get_page_y@Base 2.5.3
+ webkit_dom_ui_event_get_type@Base 2.5.3
+ webkit_dom_ui_event_get_view@Base 2.5.3
+ (optional)webkit_dom_ui_event_get_which@Base 2.5.3
+ webkit_dom_ui_event_init_ui_event@Base 2.5.3
+ (optional)webkit_dom_validity_state_get_bad_input@Base 2.5.3
+ (optional)webkit_dom_validity_state_get_custom_error@Base 2.5.3
+ (optional)webkit_dom_validity_state_get_pattern_mismatch@Base 2.5.3
+ (optional)webkit_dom_validity_state_get_range_overflow@Base 2.5.3
+ (optional)webkit_dom_validity_state_get_range_underflow@Base 2.5.3
+ (optional)webkit_dom_validity_state_get_step_mismatch@Base 2.5.3
+ (optional)webkit_dom_validity_state_get_too_long@Base 2.5.3
+ (optional)webkit_dom_validity_state_get_type@Base 2.5.3
+ (optional)webkit_dom_validity_state_get_type_mismatch@Base 2.5.3
+ (optional)webkit_dom_validity_state_get_valid@Base 2.5.3
+ (optional)webkit_dom_validity_state_get_value_missing@Base 2.5.3
+ (optional)webkit_dom_video_playback_quality_get_corrupted_video_frames@Base 2.5.3
+ (optional)webkit_dom_video_playback_quality_get_creation_time@Base 2.5.3
+ (optional)webkit_dom_video_playback_quality_get_dropped_video_frames@Base 2.5.3
+ (optional)webkit_dom_video_playback_quality_get_total_frame_delay@Base 2.5.3
+ (optional)webkit_dom_video_playback_quality_get_total_video_frames@Base 2.5.3
+ (optional)webkit_dom_video_playback_quality_get_type@Base 2.5.3
+ (optional)webkit_dom_video_track_get_id@Base 2.5.3
+ (optional)webkit_dom_video_track_get_kind@Base 2.5.3
+ (optional)webkit_dom_video_track_get_label@Base 2.5.3
+ (optional)webkit_dom_video_track_get_language@Base 2.5.3
+ (optional)webkit_dom_video_track_get_selected@Base 2.5.3
+ (optional)webkit_dom_video_track_get_type@Base 2.5.3
+ (optional)webkit_dom_video_track_list_get_length@Base 2.5.3
+ (optional)webkit_dom_video_track_list_get_selected_index@Base 2.5.3
+ (optional)webkit_dom_video_track_list_get_track_by_id@Base 2.5.3
+ (optional)webkit_dom_video_track_list_get_type@Base 2.5.3
+ (optional)webkit_dom_video_track_list_item@Base 2.5.3
+ (optional)webkit_dom_video_track_set_selected@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_get_align@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_get_cue_as_html@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_get_line@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_get_position@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_get_size@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_get_snap_to_lines@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_get_text@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_get_type@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_get_vertical@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_set_align@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_set_line@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_set_position@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_set_size@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_set_snap_to_lines@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_set_text@Base 2.5.3
+ (optional)webkit_dom_vtt_cue_set_vertical@Base 2.5.3
+ (optional)webkit_dom_webkit_named_flow_get_content@Base 2.5.3
+ (optional)webkit_dom_webkit_named_flow_get_first_empty_region_index@Base 2.5.3
+ (optional)webkit_dom_webkit_named_flow_get_name@Base 2.5.3
+ (optional)webkit_dom_webkit_named_flow_get_overset@Base 2.5.3
+ (optional)webkit_dom_webkit_named_flow_get_regions@Base 2.5.3
+ (optional)webkit_dom_webkit_named_flow_get_regions_by_content@Base 2.5.3
+ (optional)webkit_dom_webkit_named_flow_get_type@Base 2.5.3
+ (optional)webkit_dom_webkit_point_get_type@Base 2.5.3
+ (optional)webkit_dom_webkit_point_get_x@Base 2.5.3
+ (optional)webkit_dom_webkit_point_get_y@Base 2.5.3
+ (optional)webkit_dom_webkit_point_set_x@Base 2.5.3
+ (optional)webkit_dom_webkit_point_set_y@Base 2.5.3
+ (optional)webkit_dom_wheel_event_get_delta_mode@Base 2.5.3
+ (optional)webkit_dom_wheel_event_get_delta_x@Base 2.5.3
+ (optional)webkit_dom_wheel_event_get_delta_y@Base 2.5.3
+ (optional)webkit_dom_wheel_event_get_delta_z@Base 2.5.3
+ webkit_dom_wheel_event_get_type@Base 2.5.3
+ (optional)webkit_dom_wheel_event_get_webkit_direction_inverted_from_device@Base 2.5.3
+ webkit_dom_wheel_event_get_wheel_delta@Base 2.5.3
+ webkit_dom_wheel_event_get_wheel_delta_x@Base 2.5.3
+ webkit_dom_wheel_event_get_wheel_delta_y@Base 2.5.3
+ webkit_dom_wheel_event_init_wheel_event@Base 2.5.3
+ webkit_dom_xpath_expression_evaluate@Base 2.5.3
+ webkit_dom_xpath_expression_get_type@Base 2.5.3
+ webkit_dom_xpath_ns_resolver_get_type@Base 2.5.3
+ webkit_dom_xpath_ns_resolver_lookup_namespace_uri@Base 2.5.3
+ webkit_dom_xpath_result_get_boolean_value@Base 2.5.3
+ webkit_dom_xpath_result_get_invalid_iterator_state@Base 2.5.3
+ webkit_dom_xpath_result_get_number_value@Base 2.5.3
+ webkit_dom_xpath_result_get_result_type@Base 2.5.3
+ webkit_dom_xpath_result_get_single_node_value@Base 2.5.3
+ webkit_dom_xpath_result_get_snapshot_length@Base 2.5.3
+ webkit_dom_xpath_result_get_string_value@Base 2.5.3
+ webkit_dom_xpath_result_get_type@Base 2.5.3
+ webkit_dom_xpath_result_iterate_next@Base 2.5.3
+ webkit_dom_xpath_result_snapshot_item@Base 2.5.3
+ webkit_download_cancel@Base 2.5.3
+ webkit_download_error_get_type@Base 2.5.3
+ webkit_download_error_quark@Base 2.5.3
+ webkit_download_get_allow_overwrite@Base 2.6.0
+ webkit_download_get_destination@Base 2.5.3
+ webkit_download_get_elapsed_time@Base 2.5.3
+ webkit_download_get_estimated_progress@Base 2.5.3
+ webkit_download_get_received_data_length@Base 2.5.3
+ webkit_download_get_request@Base 2.5.3
+ webkit_download_get_response@Base 2.5.3
+ webkit_download_get_type@Base 2.5.3
+ webkit_download_get_web_view@Base 2.5.3
+ webkit_download_set_allow_overwrite@Base 2.6.0
+ webkit_download_set_destination@Base 2.5.3
+ webkit_favicon_database_clear@Base 2.5.3
+ webkit_favicon_database_error_get_type@Base 2.5.3
+ webkit_favicon_database_error_quark@Base 2.5.3
+ webkit_favicon_database_get_favicon@Base 2.5.3
+ webkit_favicon_database_get_favicon_finish@Base 2.5.3
+ webkit_favicon_database_get_favicon_uri@Base 2.5.3
+ webkit_favicon_database_get_type@Base 2.5.3
+ webkit_file_chooser_request_cancel@Base 2.5.3
+ webkit_file_chooser_request_get_mime_types@Base 2.5.3
+ webkit_file_chooser_request_get_mime_types_filter@Base 2.5.3
+ webkit_file_chooser_request_get_select_multiple@Base 2.5.3
+ webkit_file_chooser_request_get_selected_files@Base 2.5.3
+ webkit_file_chooser_request_get_type@Base 2.5.3
+ webkit_file_chooser_request_select_files@Base 2.5.3
+ webkit_find_controller_count_matches@Base 2.5.3
+ webkit_find_controller_get_max_match_count@Base 2.5.3
+ webkit_find_controller_get_options@Base 2.5.3
+ webkit_find_controller_get_search_text@Base 2.5.3
+ webkit_find_controller_get_type@Base 2.5.3
+ webkit_find_controller_get_web_view@Base 2.5.3
+ webkit_find_controller_search@Base 2.5.3
+ webkit_find_controller_search_finish@Base 2.5.3
+ webkit_find_controller_search_next@Base 2.5.3
+ webkit_find_controller_search_previous@Base 2.5.3
+ webkit_find_options_get_type@Base 2.5.3
+ webkit_form_submission_request_get_text_fields@Base 2.5.3
+ webkit_form_submission_request_get_type@Base 2.5.3
+ webkit_form_submission_request_submit@Base 2.5.3
+ webkit_frame_get_javascript_context_for_script_world@Base 2.5.3
+ webkit_frame_get_javascript_global_context@Base 2.5.3
+ webkit_frame_get_type@Base 2.5.3
+ webkit_frame_get_uri@Base 2.5.3
+ webkit_frame_is_main_frame@Base 2.5.3
+ webkit_geolocation_permission_request_get_type@Base 2.5.3
+ webkit_get_major_version@Base 2.5.3
+ webkit_get_micro_version@Base 2.5.3
+ webkit_get_minor_version@Base 2.5.3
+ webkit_hit_test_result_context_get_type@Base 2.5.3
+ webkit_hit_test_result_context_is_editable@Base 2.5.3
+ webkit_hit_test_result_context_is_image@Base 2.5.3
+ webkit_hit_test_result_context_is_link@Base 2.5.3
+ webkit_hit_test_result_context_is_media@Base 2.5.3
+ webkit_hit_test_result_context_is_scrollbar@Base 2.5.3
+ webkit_hit_test_result_get_context@Base 2.5.3
+ webkit_hit_test_result_get_image_uri@Base 2.5.3
+ webkit_hit_test_result_get_link_label@Base 2.5.3
+ webkit_hit_test_result_get_link_title@Base 2.5.3
+ webkit_hit_test_result_get_link_uri@Base 2.5.3
+ webkit_hit_test_result_get_media_uri@Base 2.5.3
+ webkit_hit_test_result_get_type@Base 2.5.3
+ webkit_insecure_content_event_get_type@Base 2.5.3
+ webkit_javascript_error_get_type@Base 2.5.3
+ webkit_javascript_error_quark@Base 2.5.3
+ webkit_javascript_result_get_global_context@Base 2.5.3
+ webkit_javascript_result_get_type@Base 2.5.3
+ webkit_javascript_result_get_value@Base 2.5.3
+ webkit_javascript_result_ref@Base 2.5.3
+ webkit_javascript_result_unref@Base 2.5.3
+ webkit_load_event_get_type@Base 2.5.3
+ webkit_marshal_BOOLEAN__BOXED@Base 2.5.3
+ webkit_marshal_BOOLEAN__BOXED_STRING@Base 2.5.3
+ webkit_marshal_BOOLEAN__ENUM_STRING_POINTER@Base 2.5.3
+ webkit_marshal_BOOLEAN__OBJECT@Base 2.5.3
+ webkit_marshal_BOOLEAN__OBJECT_BOXED_OBJECT@Base 2.5.3
+ webkit_marshal_BOOLEAN__OBJECT_ENUM@Base 2.5.3
+ webkit_marshal_BOOLEAN__OBJECT_OBJECT@Base 2.5.3
+ webkit_marshal_BOOLEAN__STRING@Base 2.5.3
+ webkit_marshal_BOOLEAN__VOID@Base 2.5.3
+ webkit_marshal_OBJECT__VOID@Base 2.5.3
+ webkit_marshal_VOID__OBJECT_OBJECT@Base 2.5.3
+ webkit_marshal_VOID__OBJECT_POINTER@Base 2.5.3
+ webkit_marshal_VOID__OBJECT_UINT@Base 2.5.3
+ webkit_marshal_VOID__STRING_STRING@Base 2.5.3
+ webkit_marshal_VOID__UINT64@Base 2.5.3
+ webkit_mime_info_get_description@Base 2.5.3
+ webkit_mime_info_get_extensions@Base 2.5.3
+ webkit_mime_info_get_mime_type@Base 2.5.3
+ webkit_mime_info_get_type@Base 2.5.3
+ webkit_mime_info_ref@Base 2.5.3
+ webkit_mime_info_unref@Base 2.5.3
+ webkit_navigation_action_copy@Base 2.5.3
+ webkit_navigation_action_free@Base 2.5.3
+ webkit_navigation_action_get_modifiers@Base 2.5.3
+ webkit_navigation_action_get_mouse_button@Base 2.5.3
+ webkit_navigation_action_get_navigation_type@Base 2.5.3
+ webkit_navigation_action_get_request@Base 2.5.3
+ webkit_navigation_action_get_type@Base 2.5.3
+ webkit_navigation_action_is_user_gesture@Base 2.5.3
+ webkit_navigation_policy_decision_get_frame_name@Base 2.5.3
+ webkit_navigation_policy_decision_get_modifiers@Base 2.5.3
+ webkit_navigation_policy_decision_get_mouse_button@Base 2.5.3
+ webkit_navigation_policy_decision_get_navigation_type@Base 2.5.3
+ webkit_navigation_policy_decision_get_request@Base 2.5.3
+ webkit_navigation_policy_decision_get_type@Base 2.5.3
+ webkit_navigation_type_get_type@Base 2.5.3
+ webkit_network_error_get_type@Base 2.5.3
+ webkit_network_error_quark@Base 2.5.3
+ webkit_permission_request_allow@Base 2.5.3
+ webkit_permission_request_deny@Base 2.5.3
+ webkit_permission_request_get_type@Base 2.5.3
+ webkit_plugin_error_get_type@Base 2.5.3
+ webkit_plugin_error_quark@Base 2.5.3
+ webkit_plugin_get_description@Base 2.5.3
+ webkit_plugin_get_mime_info_list@Base 2.5.3
+ webkit_plugin_get_name@Base 2.5.3
+ webkit_plugin_get_path@Base 2.5.3
+ webkit_plugin_get_type@Base 2.5.3
+ webkit_policy_decision_download@Base 2.5.3
+ webkit_policy_decision_get_type@Base 2.5.3
+ webkit_policy_decision_ignore@Base 2.5.3
+ webkit_policy_decision_type_get_type@Base 2.5.3
+ webkit_policy_decision_use@Base 2.5.3
+ webkit_policy_error_get_type@Base 2.5.3
+ webkit_policy_error_quark@Base 2.5.3
+ webkit_print_error_get_type@Base 2.5.3
+ webkit_print_error_quark@Base 2.5.3
+ webkit_print_operation_get_page_setup@Base 2.5.3
+ webkit_print_operation_get_print_settings@Base 2.5.3
+ webkit_print_operation_get_type@Base 2.5.3
+ webkit_print_operation_new@Base 2.5.3
+ webkit_print_operation_print@Base 2.5.3
+ webkit_print_operation_response_get_type@Base 2.5.3
+ webkit_print_operation_run_dialog@Base 2.5.3
+ webkit_print_operation_set_page_setup@Base 2.5.3
+ webkit_print_operation_set_print_settings@Base 2.5.3
+ webkit_process_model_get_type@Base 2.5.3
+ webkit_response_policy_decision_get_request@Base 2.5.3
+ webkit_response_policy_decision_get_response@Base 2.5.3
+ webkit_response_policy_decision_get_type@Base 2.5.3
+ webkit_response_policy_decision_is_mime_type_supported@Base 2.5.3
+ webkit_save_mode_get_type@Base 2.5.3
+ webkit_script_dialog_confirm_set_confirmed@Base 2.5.3
+ webkit_script_dialog_get_dialog_type@Base 2.5.3
+ webkit_script_dialog_get_message@Base 2.5.3
+ webkit_script_dialog_get_type@Base 2.5.3
+ webkit_script_dialog_prompt_get_default_text@Base 2.5.3
+ webkit_script_dialog_prompt_set_text@Base 2.5.3
+ webkit_script_dialog_type_get_type@Base 2.5.3
+ webkit_script_world_get_default@Base 2.5.3
+ webkit_script_world_get_type@Base 2.5.3
+ webkit_script_world_new@Base 2.5.3
+ webkit_security_manager_get_type@Base 2.5.3
+ webkit_security_manager_register_uri_scheme_as_cors_enabled@Base 2.5.3
+ webkit_security_manager_register_uri_scheme_as_display_isolated@Base 2.5.3
+ webkit_security_manager_register_uri_scheme_as_empty_document@Base 2.5.3
+ webkit_security_manager_register_uri_scheme_as_local@Base 2.5.3
+ webkit_security_manager_register_uri_scheme_as_no_access@Base 2.5.3
+ webkit_security_manager_register_uri_scheme_as_secure@Base 2.5.3
+ webkit_security_manager_uri_scheme_is_cors_enabled@Base 2.5.3
+ webkit_security_manager_uri_scheme_is_display_isolated@Base 2.5.3
+ webkit_security_manager_uri_scheme_is_empty_document@Base 2.5.3
+ webkit_security_manager_uri_scheme_is_local@Base 2.5.3
+ webkit_security_manager_uri_scheme_is_no_access@Base 2.5.3
+ webkit_security_manager_uri_scheme_is_secure@Base 2.5.3
+ webkit_settings_get_allow_modal_dialogs@Base 2.5.3
+ webkit_settings_get_auto_load_images@Base 2.5.3
+ webkit_settings_get_cursive_font_family@Base 2.5.3
+ webkit_settings_get_default_charset@Base 2.5.3
+ webkit_settings_get_default_font_family@Base 2.5.3
+ webkit_settings_get_default_font_size@Base 2.5.3
+ webkit_settings_get_default_monospace_font_size@Base 2.5.3
+ webkit_settings_get_draw_compositing_indicators@Base 2.5.3
+ webkit_settings_get_enable_accelerated_2d_canvas@Base 2.5.3
+ webkit_settings_get_enable_caret_browsing@Base 2.5.3
+ webkit_settings_get_enable_developer_extras@Base 2.5.3
+ webkit_settings_get_enable_dns_prefetching@Base 2.5.3
+ webkit_settings_get_enable_frame_flattening@Base 2.5.3
+ webkit_settings_get_enable_fullscreen@Base 2.5.3
+ webkit_settings_get_enable_html5_database@Base 2.5.3
+ webkit_settings_get_enable_html5_local_storage@Base 2.5.3
+ webkit_settings_get_enable_hyperlink_auditing@Base 2.5.3
+ webkit_settings_get_enable_java@Base 2.5.3
+ webkit_settings_get_enable_javascript@Base 2.5.3
+ webkit_settings_get_enable_media_stream@Base 2.5.3
+ webkit_settings_get_enable_mediasource@Base 2.5.3
+ webkit_settings_get_enable_offline_web_application_cache@Base 2.5.3
+ webkit_settings_get_enable_page_cache@Base 2.5.3
+ webkit_settings_get_enable_plugins@Base 2.5.3
+ webkit_settings_get_enable_private_browsing@Base 2.5.3
+ webkit_settings_get_enable_resizable_text_areas@Base 2.5.3
+ webkit_settings_get_enable_site_specific_quirks@Base 2.5.3
+ webkit_settings_get_enable_smooth_scrolling@Base 2.5.3
+ webkit_settings_get_enable_spatial_navigation@Base 2.5.3
+ webkit_settings_get_enable_tabs_to_links@Base 2.5.3
+ webkit_settings_get_enable_webaudio@Base 2.5.3
+ webkit_settings_get_enable_webgl@Base 2.5.3
+ webkit_settings_get_enable_write_console_messages_to_stdout@Base 2.5.3
+ webkit_settings_get_enable_xss_auditor@Base 2.5.3
+ webkit_settings_get_fantasy_font_family@Base 2.5.3
+ webkit_settings_get_javascript_can_access_clipboard@Base 2.5.3
+ webkit_settings_get_javascript_can_open_windows_automatically@Base 2.5.3
+ webkit_settings_get_load_icons_ignoring_image_load_setting@Base 2.5.3
+ webkit_settings_get_media_playback_allows_inline@Base 2.5.3
+ webkit_settings_get_media_playback_requires_user_gesture@Base 2.5.3
+ webkit_settings_get_minimum_font_size@Base 2.5.3
+ webkit_settings_get_monospace_font_family@Base 2.5.3
+ webkit_settings_get_pictograph_font_family@Base 2.5.3
+ webkit_settings_get_print_backgrounds@Base 2.5.3
+ webkit_settings_get_sans_serif_font_family@Base 2.5.3
+ webkit_settings_get_serif_font_family@Base 2.5.3
+ webkit_settings_get_type@Base 2.5.3
+ webkit_settings_get_user_agent@Base 2.5.3
+ webkit_settings_get_zoom_text_only@Base 2.5.3
+ webkit_settings_new@Base 2.5.3
+ webkit_settings_new_with_settings@Base 2.5.3
+ webkit_settings_set_allow_modal_dialogs@Base 2.5.3
+ webkit_settings_set_auto_load_images@Base 2.5.3
+ webkit_settings_set_cursive_font_family@Base 2.5.3
+ webkit_settings_set_default_charset@Base 2.5.3
+ webkit_settings_set_default_font_family@Base 2.5.3
+ webkit_settings_set_default_font_size@Base 2.5.3
+ webkit_settings_set_default_monospace_font_size@Base 2.5.3
+ webkit_settings_set_draw_compositing_indicators@Base 2.5.3
+ webkit_settings_set_enable_accelerated_2d_canvas@Base 2.5.3
+ webkit_settings_set_enable_caret_browsing@Base 2.5.3
+ webkit_settings_set_enable_developer_extras@Base 2.5.3
+ webkit_settings_set_enable_dns_prefetching@Base 2.5.3
+ webkit_settings_set_enable_frame_flattening@Base 2.5.3
+ webkit_settings_set_enable_fullscreen@Base 2.5.3
+ webkit_settings_set_enable_html5_database@Base 2.5.3
+ webkit_settings_set_enable_html5_local_storage@Base 2.5.3
+ webkit_settings_set_enable_hyperlink_auditing@Base 2.5.3
+ webkit_settings_set_enable_java@Base 2.5.3
+ webkit_settings_set_enable_javascript@Base 2.5.3
+ webkit_settings_set_enable_media_stream@Base 2.5.3
+ webkit_settings_set_enable_mediasource@Base 2.5.3
+ webkit_settings_set_enable_offline_web_application_cache@Base 2.5.3
+ webkit_settings_set_enable_page_cache@Base 2.5.3
+ webkit_settings_set_enable_plugins@Base 2.5.3
+ webkit_settings_set_enable_private_browsing@Base 2.5.3
+ webkit_settings_set_enable_resizable_text_areas@Base 2.5.3
+ webkit_settings_set_enable_site_specific_quirks@Base 2.5.3
+ webkit_settings_set_enable_smooth_scrolling@Base 2.5.3
+ webkit_settings_set_enable_spatial_navigation@Base 2.5.3
+ webkit_settings_set_enable_tabs_to_links@Base 2.5.3
+ webkit_settings_set_enable_webaudio@Base 2.5.3
+ webkit_settings_set_enable_webgl@Base 2.5.3
+ webkit_settings_set_enable_write_console_messages_to_stdout@Base 2.5.3
+ webkit_settings_set_enable_xss_auditor@Base 2.5.3
+ webkit_settings_set_fantasy_font_family@Base 2.5.3
+ webkit_settings_set_javascript_can_access_clipboard@Base 2.5.3
+ webkit_settings_set_javascript_can_open_windows_automatically@Base 2.5.3
+ webkit_settings_set_load_icons_ignoring_image_load_setting@Base 2.5.3
+ webkit_settings_set_media_playback_allows_inline@Base 2.5.3
+ webkit_settings_set_media_playback_requires_user_gesture@Base 2.5.3
+ webkit_settings_set_minimum_font_size@Base 2.5.3
+ webkit_settings_set_monospace_font_family@Base 2.5.3
+ webkit_settings_set_pictograph_font_family@Base 2.5.3
+ webkit_settings_set_print_backgrounds@Base 2.5.3
+ webkit_settings_set_sans_serif_font_family@Base 2.5.3
+ webkit_settings_set_serif_font_family@Base 2.5.3
+ webkit_settings_set_user_agent@Base 2.5.3
+ webkit_settings_set_user_agent_with_application_details@Base 2.5.3
+ webkit_settings_set_zoom_text_only@Base 2.5.3
+ webkit_snapshot_error_get_type@Base 2.5.3
+ webkit_snapshot_error_quark@Base 2.5.3
+ webkit_snapshot_options_get_type@Base 2.5.3
+ webkit_snapshot_region_get_type@Base 2.5.3
+ (optional)webkit_soup_cookie_jar_sqlite_get_type@Base 2.5.3
+ (optional)webkit_soup_request_generic_get_type@Base 2.5.3
+ (optional)webkit_soup_request_input_stream_get_type@Base 2.5.3
+ webkit_tls_errors_policy_get_type@Base 2.5.3
+ webkit_uri_request_get_http_headers@Base 2.5.3
+ webkit_uri_request_get_type@Base 2.5.3
+ webkit_uri_request_get_uri@Base 2.5.3
+ webkit_uri_request_new@Base 2.5.3
+ webkit_uri_request_set_uri@Base 2.5.3
+ webkit_uri_response_get_content_length@Base 2.5.3
+ webkit_uri_response_get_http_headers@Base 2.6.0
+ webkit_uri_response_get_mime_type@Base 2.5.3
+ webkit_uri_response_get_status_code@Base 2.5.3
+ webkit_uri_response_get_suggested_filename@Base 2.5.3
+ webkit_uri_response_get_type@Base 2.5.3
+ webkit_uri_response_get_uri@Base 2.5.3
+ webkit_uri_scheme_request_finish@Base 2.5.3
+ webkit_uri_scheme_request_finish_error@Base 2.5.3
+ webkit_uri_scheme_request_get_path@Base 2.5.3
+ webkit_uri_scheme_request_get_scheme@Base 2.5.3
+ webkit_uri_scheme_request_get_type@Base 2.5.3
+ webkit_uri_scheme_request_get_uri@Base 2.5.3
+ webkit_uri_scheme_request_get_web_view@Base 2.5.3
+ webkit_user_content_injected_frames_get_type@Base 2.5.3
+ webkit_user_content_manager_add_script@Base 2.5.3
+ webkit_user_content_manager_add_style_sheet@Base 2.5.3
+ webkit_user_content_manager_get_type@Base 2.5.3
+ webkit_user_content_manager_new@Base 2.5.3
+ webkit_user_content_manager_remove_all_scripts@Base 2.5.3
+ webkit_user_content_manager_remove_all_style_sheets@Base 2.5.3
+ webkit_user_script_get_type@Base 2.5.3
+ webkit_user_script_injection_time_get_type@Base 2.5.3
+ webkit_user_script_new@Base 2.5.3
+ webkit_user_script_ref@Base 2.5.3
+ webkit_user_script_unref@Base 2.5.3
+ webkit_user_style_level_get_type@Base 2.5.3
+ webkit_user_style_sheet_get_type@Base 2.5.3
+ webkit_user_style_sheet_new@Base 2.5.3
+ webkit_user_style_sheet_ref@Base 2.5.3
+ webkit_user_style_sheet_unref@Base 2.5.3
+ webkit_web_context_allow_tls_certificate_for_host@Base 2.5.3
+ webkit_web_context_clear_cache@Base 2.5.3
+ webkit_web_context_download_uri@Base 2.5.3
+ webkit_web_context_get_cache_model@Base 2.5.3
+ webkit_web_context_get_cookie_manager@Base 2.5.3
+ webkit_web_context_get_default@Base 2.5.3
+ webkit_web_context_get_favicon_database@Base 2.5.3
+ webkit_web_context_get_favicon_database_directory@Base 2.5.3
+ webkit_web_context_get_plugins@Base 2.5.3
+ webkit_web_context_get_plugins_finish@Base 2.5.3
+ webkit_web_context_get_process_model@Base 2.5.3
+ webkit_web_context_get_security_manager@Base 2.5.3
+ webkit_web_context_get_spell_checking_enabled@Base 2.5.3
+ webkit_web_context_get_spell_checking_languages@Base 2.5.3
+ webkit_web_context_get_tls_errors_policy@Base 2.5.3
+ webkit_web_context_get_type@Base 2.5.3
+ webkit_web_context_prefetch_dns@Base 2.5.3
+ webkit_web_context_register_uri_scheme@Base 2.5.3
+ webkit_web_context_set_additional_plugins_directory@Base 2.5.3
+ webkit_web_context_set_cache_model@Base 2.5.3
+ webkit_web_context_set_disk_cache_directory@Base 2.5.3
+ webkit_web_context_set_favicon_database_directory@Base 2.5.3
+ webkit_web_context_set_preferred_languages@Base 2.5.3
+ webkit_web_context_set_process_model@Base 2.5.3
+ webkit_web_context_set_spell_checking_enabled@Base 2.5.3
+ webkit_web_context_set_spell_checking_languages@Base 2.5.3
+ webkit_web_context_set_tls_errors_policy@Base 2.5.3
+ webkit_web_context_set_web_extensions_directory@Base 2.5.3
+ webkit_web_context_set_web_extensions_initialization_user_data@Base 2.5.3
+ webkit_web_extension_get_page@Base 2.5.3
+ webkit_web_extension_get_type@Base 2.5.3
+ webkit_web_inspector_attach@Base 2.5.3
+ webkit_web_inspector_close@Base 2.5.3
+ webkit_web_inspector_detach@Base 2.5.3
+ webkit_web_inspector_get_attached_height@Base 2.5.3
+ webkit_web_inspector_get_inspected_uri@Base 2.5.3
+ webkit_web_inspector_get_type@Base 2.5.3
+ webkit_web_inspector_get_web_view@Base 2.5.3
+ webkit_web_inspector_is_attached@Base 2.5.3
+ webkit_web_inspector_show@Base 2.5.3
+ webkit_web_page_get_dom_document@Base 2.5.3
+ webkit_web_page_get_id@Base 2.5.3
+ webkit_web_page_get_main_frame@Base 2.5.3
+ webkit_web_page_get_type@Base 2.5.3
+ webkit_web_page_get_uri@Base 2.5.3
+ webkit_web_resource_get_data@Base 2.5.3
+ webkit_web_resource_get_data_finish@Base 2.5.3
+ webkit_web_resource_get_response@Base 2.5.3
+ webkit_web_resource_get_type@Base 2.5.3
+ webkit_web_resource_get_uri@Base 2.5.3
+ webkit_web_src_get_type@Base 2.5.3
+ webkit_web_view_base_accessible_get_type@Base 2.5.3
+ webkit_web_view_base_get_type@Base 2.5.3
+ webkit_web_view_can_execute_editing_command@Base 2.5.3
+ webkit_web_view_can_execute_editing_command_finish@Base 2.5.3
+ webkit_web_view_can_go_back@Base 2.5.3
+ webkit_web_view_can_go_forward@Base 2.5.3
+ webkit_web_view_can_show_mime_type@Base 2.5.3
+ webkit_web_view_download_uri@Base 2.5.3
+ webkit_web_view_execute_editing_command@Base 2.5.3
+ webkit_web_view_get_back_forward_list@Base 2.5.3
+ webkit_web_view_get_context@Base 2.5.3
+ webkit_web_view_get_custom_charset@Base 2.5.3
+ webkit_web_view_get_estimated_load_progress@Base 2.5.3
+ webkit_web_view_get_favicon@Base 2.5.3
+ webkit_web_view_get_find_controller@Base 2.5.3
+ webkit_web_view_get_inspector@Base 2.5.3
+ webkit_web_view_get_javascript_global_context@Base 2.5.3
+ webkit_web_view_get_main_resource@Base 2.5.3
+ webkit_web_view_get_page_id@Base 2.5.3
+ webkit_web_view_get_settings@Base 2.5.3
+ webkit_web_view_get_snapshot@Base 2.5.3
+ webkit_web_view_get_snapshot_finish@Base 2.5.3
+ webkit_web_view_get_title@Base 2.5.3
+ webkit_web_view_get_tls_info@Base 2.5.3
+ webkit_web_view_get_type@Base 2.5.3
+ webkit_web_view_get_uri@Base 2.5.3
+ webkit_web_view_get_user_content_manager@Base 2.5.3
+ webkit_web_view_get_window_properties@Base 2.5.3
+ webkit_web_view_get_zoom_level@Base 2.5.3
+ webkit_web_view_go_back@Base 2.5.3
+ webkit_web_view_go_forward@Base 2.5.3
+ webkit_web_view_go_to_back_forward_list_item@Base 2.5.3
+ webkit_web_view_is_loading@Base 2.5.3
+ webkit_web_view_load_alternate_html@Base 2.5.3
+ webkit_web_view_load_bytes@Base 2.5.3
+ webkit_web_view_load_html@Base 2.5.3
+ webkit_web_view_load_plain_text@Base 2.5.3
+ webkit_web_view_load_request@Base 2.5.3
+ webkit_web_view_load_uri@Base 2.5.3
+ webkit_web_view_new@Base 2.5.3
+ webkit_web_view_new_with_context@Base 2.5.3
+ webkit_web_view_new_with_related_view@Base 2.5.3
+ webkit_web_view_new_with_settings@Base 2.5.3
+ webkit_web_view_new_with_user_content_manager@Base 2.5.3
+ webkit_web_view_reload@Base 2.5.3
+ webkit_web_view_reload_bypass_cache@Base 2.5.3
+ webkit_web_view_run_javascript@Base 2.5.3
+ webkit_web_view_run_javascript_finish@Base 2.5.3
+ webkit_web_view_run_javascript_from_gresource@Base 2.5.3
+ webkit_web_view_run_javascript_from_gresource_finish@Base 2.5.3
+ webkit_web_view_save@Base 2.5.3
+ webkit_web_view_save_finish@Base 2.5.3
+ webkit_web_view_save_to_file@Base 2.5.3
+ webkit_web_view_save_to_file_finish@Base 2.5.3
+ webkit_web_view_set_custom_charset@Base 2.5.3
+ webkit_web_view_set_settings@Base 2.5.3
+ webkit_web_view_set_zoom_level@Base 2.5.3
+ webkit_web_view_stop_loading@Base 2.5.3
+ webkit_window_properties_get_fullscreen@Base 2.5.3
+ webkit_window_properties_get_geometry@Base 2.5.3
+ webkit_window_properties_get_locationbar_visible@Base 2.5.3
+ webkit_window_properties_get_menubar_visible@Base 2.5.3
+ webkit_window_properties_get_resizable@Base 2.5.3
+ webkit_window_properties_get_scrollbars_visible@Base 2.5.3
+ webkit_window_properties_get_statusbar_visible@Base 2.5.3
+ webkit_window_properties_get_toolbar_visible@Base 2.5.3
+ webkit_window_properties_get_type@Base 2.5.3
diff --git a/libwebkit2gtk-4.0-dev.install b/libwebkit2gtk-4.0-dev.install
new file mode 100644 (file)
index 0000000..b916518
--- /dev/null
@@ -0,0 +1,7 @@
+usr/include/webkitgtk-4.0/webkit2
+usr/include/webkitgtk-4.0/webkitdom
+usr/lib/*/libwebkit2gtk-4.0.so
+usr/lib/*/pkgconfig/webkit2gtk-4.0.pc
+usr/lib/*/pkgconfig/webkit2gtk-web-extension-4.0.pc
+usr/share/gir-1.0/WebKit2-4.0.gir usr/share/gir-1.0/
+usr/share/gir-1.0/WebKit2WebExtension-4.0.gir usr/share/gir-1.0/
diff --git a/libwebkit2gtk-4.0-doc.doc-base b/libwebkit2gtk-4.0-doc.doc-base
new file mode 100644 (file)
index 0000000..61f54bf
--- /dev/null
@@ -0,0 +1,15 @@
+Document: webkit2gtk
+Title: WebKit2GTK+ reference manual
+Author: WebKitGTK+ development team
+Abstract: This manual contains the developer documentation of
+ WebKitGTK+, a web content engine, designed to be embedded in other
+ applications, such as mail readers, or web browsers.
+ .
+ It is able to display content such as HTML, SVG, XML, and others. It
+ also supports DOM, XMLHttpRequest, XSLT, CSS, JavaScript/ECMAScript
+ and more.
+Section: Programming
+
+Format: HTML
+Index: /usr/share/doc/libwebkit2gtk-4.0-doc/html/index.html
+Files: /usr/share/doc/libwebkit2gtk-4.0-doc/html/*.html
diff --git a/libwebkit2gtk-4.0-doc.install b/libwebkit2gtk-4.0-doc.install
new file mode 100644 (file)
index 0000000..8a32731
--- /dev/null
@@ -0,0 +1 @@
+Documentation/webkit2gtk/html/* usr/share/doc/libwebkit2gtk-4.0-doc/html/
diff --git a/libwebkit2gtk-4.0-doc.links b/libwebkit2gtk-4.0-doc.links
new file mode 100644 (file)
index 0000000..9daa84c
--- /dev/null
@@ -0,0 +1,2 @@
+usr/share/doc/libwebkit2gtk-4.0-doc/html usr/share/gtk-doc/html/webkit2gtk-4.0
+usr/share/doc/libwebkit2gtk-4.0-doc/html/webkit2gtk.devhelp2.gz usr/share/doc/libwebkit2gtk-4.0-doc/html/webkit2gtk-4.0.devhelp2.gz
diff --git a/patches/at-spi2.patch b/patches/at-spi2.patch
new file mode 100644 (file)
index 0000000..37c9e9a
--- /dev/null
@@ -0,0 +1,39 @@
+From: Joanmarie Diggs <jdiggs@igalia.com>
+Subject: Accessible values are no longer accessible via AT-SPI2
+Origin: http://trac.webkit.org/changeset/176193
+Index: webkitgtk/Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceValue.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceValue.cpp
++++ webkitgtk/Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceValue.cpp
+@@ -114,7 +114,7 @@ static AtkRange* webkitAccessibleGetRang
+     gchar* valueDescription = g_strdup_printf("%s", coreObject->valueDescription().utf8().data());
+     return atk_range_new(minValue, maxValue, valueDescription);
+ }
+-#else
++#endif
+ static void webkitAccessibleValueGetCurrentValue(AtkValue* value, GValue* gValue)
+ {
+     g_return_if_fail(ATK_VALUE(value));
+@@ -184,7 +184,6 @@ static void webkitAccessibleValueGetMini
+     AccessibilityObject* coreObject = core(value);
+     g_value_set_float(gValue, webkitAccessibleGetIncrementValue(coreObject));
+ }
+-#endif
+ void webkitAccessibleValueInterfaceInit(AtkValueIface* iface)
+ {
+@@ -193,13 +192,12 @@ void webkitAccessibleValueInterfaceInit(
+     iface->get_increment = webkitAccessibleGetIncrement;
+     iface->set_value = webkitAccessibleSetValue;
+     iface->get_range = webkitAccessibleGetRange;
+-#else
++#endif
+     iface->get_current_value = webkitAccessibleValueGetCurrentValue;
+     iface->get_maximum_value = webkitAccessibleValueGetMaximumValue;
+     iface->get_minimum_value = webkitAccessibleValueGetMinimumValue;
+     iface->set_current_value = webkitAccessibleValueSetCurrentValue;
+     iface->get_minimum_increment = webkitAccessibleValueGetMinimumIncrement;
+-#endif
+ }
+ #endif
diff --git a/patches/atomic_build_fix.patch b/patches/atomic_build_fix.patch
new file mode 100644 (file)
index 0000000..2021d93
--- /dev/null
@@ -0,0 +1,29 @@
+From: Alberto Garcia <berto@igalia.com>
+Subject: Some architectures need to add -latomic explicitly
+Index: webkitgtk/Source/cmake/OptionsCommon.cmake
+===================================================================
+--- webkitgtk.orig/Source/cmake/OptionsCommon.cmake
++++ webkitgtk/Source/cmake/OptionsCommon.cmake
+@@ -69,3 +69,10 @@ endif ()
+ # files must be used to deal with very long linker command lines.
+ # See https://bugs.webkit.org/show_bug.cgi?id=129771
+ set(CMAKE_NINJA_FORCE_RESPONSE_FILE 1)
++
++try_compile(ATOMIC_BUILD_SUCCEEDED ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/atomic.cpp)
++if (NOT ATOMIC_BUILD_SUCCEEDED)
++    message(STATUS "Adding -latomic to the linker flags")
++    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--push-state,--no-as-needed,-latomic,--pop-state")
++    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--push-state,--no-as-needed,-latomic,--pop-state")
++endif()
+Index: webkitgtk/atomic.cpp
+===================================================================
+--- /dev/null
++++ webkitgtk/atomic.cpp
+@@ -0,0 +1,7 @@
++#include <atomic>
++
++int main() {
++   std::atomic<int64_t> i(0);
++   i++;
++   return 0;
++}
diff --git a/patches/ax-focus-events.patch b/patches/ax-focus-events.patch
new file mode 100644 (file)
index 0000000..57fdbfd
--- /dev/null
@@ -0,0 +1,78 @@
+From: Joanmarie Diggs <jdiggs@igalia.com>
+Subject: Fix accessible focus events in non-focused combo boxes
+Origin: http://trac.webkit.org/changeset/176177, http://trac.webkit.org/changeset/176178
+Index: webkitgtk/Source/WebCore/accessibility/atk/AXObjectCacheAtk.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/accessibility/atk/AXObjectCacheAtk.cpp
++++ webkitgtk/Source/WebCore/accessibility/atk/AXObjectCacheAtk.cpp
+@@ -175,8 +175,12 @@ static void notifyChildrenSelectionChang
+     if (axItem) {
+         bool isSelected = item->isSelected();
+         atk_object_notify_state_change(axItem, ATK_STATE_SELECTED, isSelected);
+-        g_signal_emit_by_name(axItem, "focus-event", isSelected);
+-        atk_object_notify_state_change(axItem, ATK_STATE_FOCUSED, isSelected);
++        // When the selection changes in a collapsed widget such as a combo box
++        // whose child menu is not showing, that collapsed widget retains focus.
++        if (!object->isCollapsed()) {
++            g_signal_emit_by_name(axItem, "focus-event", isSelected);
++            atk_object_notify_state_change(axItem, ATK_STATE_FOCUSED, isSelected);
++        }
+     }
+     // Update pointers to the previously involved objects.
+@@ -199,7 +203,8 @@ void AXObjectCache::postPlatformNotifica
+     case AXSelectedChildrenChanged:
+     case AXMenuListValueChanged:
+-        if (notification == AXMenuListValueChanged && coreObject->isMenuList()) {
++        // Accessible focus claims should not be made if the associated widget is not focused.
++        if (notification == AXMenuListValueChanged && coreObject->isMenuList() && coreObject->isFocused()) {
+             g_signal_emit_by_name(axObject, "focus-event", true);
+             atk_object_notify_state_change(axObject, ATK_STATE_FOCUSED, true);
+         }
+Index: webkitgtk/Source/WebCore/accessibility/atk/WebKitAccessibleWrapperAtk.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/accessibility/atk/WebKitAccessibleWrapperAtk.cpp
++++ webkitgtk/Source/WebCore/accessibility/atk/WebKitAccessibleWrapperAtk.cpp
+@@ -748,13 +748,15 @@ static AtkRole atkRole(AccessibilityObje
+ static AtkRole webkitAccessibleGetRole(AtkObject* object)
+ {
+-    g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE(object), ATK_ROLE_UNKNOWN);
+-    returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE(object), ATK_ROLE_UNKNOWN);
++    // ATK_ROLE_UNKNOWN should only be applied in cases where there is a valid
++    // WebCore accessible object for which the platform role mapping is unknown.
++    g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE(object), ATK_ROLE_INVALID);
++    returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE(object), ATK_ROLE_INVALID);
+     AccessibilityObject* coreObject = core(object);
+     if (!coreObject)
+-        return ATK_ROLE_UNKNOWN;
++        return ATK_ROLE_INVALID;
+     // Note: Why doesn't WebCore have a password field for this
+     if (coreObject->isPasswordField())
+Index: webkitgtk/Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp
+===================================================================
+--- webkitgtk.orig/Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp
++++ webkitgtk/Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp
+@@ -369,6 +369,8 @@ const gchar* roleToString(AtkObject* obj
+         return "AXImage";
+     case ATK_ROLE_IMAGE_MAP:
+         return "AXImageMap";
++    case ATK_ROLE_INVALID:
++        return "AXInvalid";
+     case ATK_ROLE_LABEL:
+         return "AXLabel";
+     case ATK_ROLE_LINK:
+@@ -1013,9 +1015,6 @@ JSRetainPtr<JSStringRef> AccessibilityUI
+     if (!ATK_IS_OBJECT(m_element.get()))
+         return JSStringCreateWithCharacters(0, 0);
+-    if (!atk_object_get_role(ATK_OBJECT(m_element.get())))
+-        return JSStringCreateWithCharacters(0, 0);
+-
+     GUniquePtr<char> roleStringWithPrefix(g_strdup_printf("AXRole: %s", roleToString(ATK_OBJECT(m_element.get()))));
+     return JSStringCreateWithUTF8CString(roleStringWithPrefix.get());
+ }
diff --git a/patches/check-tls-errors.patch b/patches/check-tls-errors.patch
new file mode 100644 (file)
index 0000000..c7b4645
--- /dev/null
@@ -0,0 +1,121 @@
+From: Carlos Garcia Campos <carlosgc@webkit.org>
+Subject: Check TLS errors as soon as they are set in the SoupMessage
+Bug: https://bugs.webkit.org/show_bug.cgi?id=142244
+Origin: http://trac.webkit.org/changeset/181074
+Index: webkitgtk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp
++++ webkitgtk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp
+@@ -331,16 +331,21 @@ static bool handleUnignoredTLSErrors(Res
+     return true;
+ }
+-static void gotHeadersCallback(SoupMessage* message, gpointer data)
++static void tlsErrorsChangedCallback(SoupMessage* message, GParamSpec*, gpointer data)
+ {
+     ResourceHandle* handle = static_cast<ResourceHandle*>(data);
+     if (!handle || handle->cancelledOrClientless())
+         return;
+-    if (handleUnignoredTLSErrors(handle, message)) {
++    if (handleUnignoredTLSErrors(handle, message))
+         handle->cancel();
++}
++
++static void gotHeadersCallback(SoupMessage* message, gpointer data)
++{
++    ResourceHandle* handle = static_cast<ResourceHandle*>(data);
++    if (!handle || handle->cancelledOrClientless())
+         return;
+-    }
+     ResourceHandleInternal* d = handle->getInternal();
+@@ -931,6 +936,7 @@ static bool createSoupMessageForHandleAn
+         && (!request.httpBody() || request.httpBody()->isEmpty()))
+         soup_message_headers_set_content_length(soupMessage->request_headers, 0);
++    g_signal_connect(d->m_soupMessage.get(), "notify::tls-errors", G_CALLBACK(tlsErrorsChangedCallback), handle);
+     g_signal_connect(d->m_soupMessage.get(), "got-headers", G_CALLBACK(gotHeadersCallback), handle);
+     g_signal_connect(d->m_soupMessage.get(), "wrote-body-data", G_CALLBACK(wroteBodyDataCallback), handle);
+Index: webkitgtk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp
+===================================================================
+--- webkitgtk.orig/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp
++++ webkitgtk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp
+@@ -129,16 +129,21 @@ static void testInsecureContent(Insecure
+     webkit_web_context_set_tls_errors_policy(context, originalPolicy);
+ }
++static bool assertIfSSLRequestProcessed = false;
++
+ static void testTLSErrorsPolicy(SSLTest* test, gconstpointer)
+ {
+     WebKitWebContext* context = webkit_web_view_get_context(test->m_webView);
+     // TLS errors are treated as transport failures by default.
+     g_assert(webkit_web_context_get_tls_errors_policy(context) == WEBKIT_TLS_ERRORS_POLICY_FAIL);
++
++    assertIfSSLRequestProcessed = true;
+     test->loadURI(kHttpsServer->getURIForPath("/").data());
+     test->waitUntilLoadFinished();
+     g_assert(test->m_loadFailed);
+     g_assert(test->m_loadEvents.contains(LoadTrackingTest::ProvisionalLoadFailed));
+     g_assert(!test->m_loadEvents.contains(LoadTrackingTest::LoadCommitted));
++    assertIfSSLRequestProcessed = false;
+     webkit_web_context_set_tls_errors_policy(context, WEBKIT_TLS_ERRORS_POLICY_IGNORE);
+     g_assert(webkit_web_context_get_tls_errors_policy(context) == WEBKIT_TLS_ERRORS_POLICY_IGNORE);
+@@ -158,11 +163,13 @@ static void testTLSErrorsRedirect(SSLTes
+     WebKitTLSErrorsPolicy originalPolicy = webkit_web_context_get_tls_errors_policy(context);
+     webkit_web_context_set_tls_errors_policy(context, WEBKIT_TLS_ERRORS_POLICY_FAIL);
++    assertIfSSLRequestProcessed = true;
+     test->loadURI(kHttpsServer->getURIForPath("/redirect").data());
+     test->waitUntilLoadFinished();
+     g_assert(test->m_loadFailed);
+     g_assert(test->m_loadEvents.contains(LoadTrackingTest::ProvisionalLoadFailed));
+     g_assert(!test->m_loadEvents.contains(LoadTrackingTest::LoadCommitted));
++    assertIfSSLRequestProcessed = false;
+     webkit_web_context_set_tls_errors_policy(context, originalPolicy);
+ }
+@@ -180,12 +187,14 @@ static void testTLSErrorsHTTPAuth(SSLTes
+     WebKitTLSErrorsPolicy originalPolicy = webkit_web_context_get_tls_errors_policy(context);
+     webkit_web_context_set_tls_errors_policy(context, WEBKIT_TLS_ERRORS_POLICY_FAIL);
++    assertIfSSLRequestProcessed = true;
+     g_signal_connect(test->m_webView, "authenticate", G_CALLBACK(webViewAuthenticationCallback), NULL);
+     test->loadURI(kHttpsServer->getURIForPath("/auth").data());
+     test->waitUntilLoadFinished();
+     g_assert(test->m_loadFailed);
+     g_assert(test->m_loadEvents.contains(LoadTrackingTest::ProvisionalLoadFailed));
+     g_assert(!test->m_loadEvents.contains(LoadTrackingTest::LoadCommitted));
++    assertIfSSLRequestProcessed = false;
+     webkit_web_context_set_tls_errors_policy(context, originalPolicy);
+ }
+@@ -235,6 +244,7 @@ static void testLoadFailedWithTLSErrors(
+     WebKitTLSErrorsPolicy originalPolicy = webkit_web_context_get_tls_errors_policy(context);
+     webkit_web_context_set_tls_errors_policy(context, WEBKIT_TLS_ERRORS_POLICY_FAIL);
++    assertIfSSLRequestProcessed = true;
+     // The load-failed-with-tls-errors signal should be emitted when there is a TLS failure.
+     test->loadURI(kHttpsServer->getURIForPath("/test-tls/").data());
+     test->waitUntilLoadFinished();
+@@ -244,6 +254,7 @@ static void testLoadFailedWithTLSErrors(
+     g_assert_cmpint(test->m_loadEvents[0], ==, LoadTrackingTest::ProvisionalLoadStarted);
+     g_assert_cmpint(test->m_loadEvents[1], ==, LoadTrackingTest::LoadFailedWithTLSErrors);
+     g_assert_cmpint(test->m_loadEvents[2], ==, LoadTrackingTest::LoadFinished);
++    assertIfSSLRequestProcessed = false;
+     // Test allowing an exception for this certificate on this host.
+     webkit_web_context_allow_tls_certificate_for_host(context, test->certificate(), test->host());
+@@ -267,6 +278,8 @@ static void httpsServerCallback(SoupServ
+         return;
+     }
++    g_assert(!assertIfSSLRequestProcessed);
++
+     if (g_str_equal(path, "/")) {
+         soup_message_set_status(message, SOUP_STATUS_OK);
+         soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, indexHTML, strlen(indexHTML));
diff --git a/patches/css-image-set.patch b/patches/css-image-set.patch
new file mode 100644 (file)
index 0000000..5190fdf
--- /dev/null
@@ -0,0 +1,16 @@
+From: Carlos Garcia Campos <cgarcia@igalia.com>
+Subject: Enable CSS_IMAGE_SET, required in order to display all inspector icons
+Origin: http://trac.webkit.org/changeset/173999
+Index: webkitgtk/Source/cmake/OptionsGTK.cmake
+===================================================================
+--- webkitgtk.orig/Source/cmake/OptionsGTK.cmake
++++ webkitgtk/Source/cmake/OptionsGTK.cmake
+@@ -111,7 +111,7 @@ WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_
+ WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS3_TEXT OFF)
+ WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_DEVICE_ADAPTATION OFF)
+ WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_GRID_LAYOUT OFF)
+-WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_IMAGE_SET OFF)
++WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_IMAGE_SET ON)
+ WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_REGIONS ON)
+ WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_SELECTORS_LEVEL4 ON)
+ WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CUSTOM_SCHEME_HANDLER OFF)
diff --git a/patches/dfg-jit.patch b/patches/dfg-jit.patch
new file mode 100644 (file)
index 0000000..c1441a0
--- /dev/null
@@ -0,0 +1,16 @@
+From: Alberto Garcia <berto@igalia.com>
+Subject: Enable DFG JIT on FreeBSD and Hurd
+Bug: https://bugs.webkit.org/show_bug.cgi?id=128898
+Index: webkitgtk/Source/WTF/wtf/Platform.h
+===================================================================
+--- webkitgtk.orig/Source/WTF/wtf/Platform.h
++++ webkitgtk/Source/WTF/wtf/Platform.h
+@@ -713,7 +713,7 @@
+ #if !defined(ENABLE_DFG_JIT) && ENABLE(JIT)
+ /* Enable the DFG JIT on X86 and X86_64. */
+-#if (CPU(X86) || CPU(X86_64)) && (OS(DARWIN) || OS(LINUX) || OS(FREEBSD) || OS(WINDOWS))
++#if (CPU(X86) || CPU(X86_64)) && (OS(DARWIN) || OS(LINUX) || OS(FREEBSD) || OS(WINDOWS) || OS(HURD))
+ #define ENABLE_DFG_JIT 1
+ #endif
+ /* Enable the DFG JIT on ARMv7.  Only tested on iOS and Qt/GTK+ Linux. */
diff --git a/patches/fix-ax-crash.patch b/patches/fix-ax-crash.patch
new file mode 100644 (file)
index 0000000..96740a9
--- /dev/null
@@ -0,0 +1,75 @@
+From: Carlos Garcia Campos <carlosgc@webkit.org>
+Subject: Recursive crash at WebCore::accessibleNameForNode
+Bug: https://bugs.webkit.org/show_bug.cgi?id=139616
+Origin: http://trac.webkit.org/changeset/178359
+Index: webkitgtk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/accessibility/AccessibilityNodeObject.cpp
++++ webkitgtk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp
+@@ -86,7 +86,7 @@ namespace WebCore {
+ using namespace HTMLNames;
+-static String accessibleNameForNode(Node*);
++static String accessibleNameForNode(Node* node, Node* labelledbyNode = nullptr);
+ AccessibilityNodeObject::AccessibilityNodeObject(Node* node)
+     : AccessibilityObject()
+@@ -1664,6 +1664,8 @@ String AccessibilityNodeObject::textUnde
+     StringBuilder builder;
+     for (AccessibilityObject* child = firstChild(); child; child = child->nextSibling()) {
++        if (mode.ignoredChildNode && child->node() == mode.ignoredChildNode)
++            continue;
+         
+         bool shouldDeriveNameFromAuthor = (mode.childrenInclusion == AccessibilityTextUnderElementMode::TextUnderElementModeIncludeNameFromContentsChildren && !child->accessibleNameDerivesFromContent());
+         if (shouldDeriveNameFromAuthor) {
+@@ -1840,7 +1842,7 @@ void AccessibilityNodeObject::colorValue
+ // This function implements the ARIA accessible name as described by the Mozilla                                        
+ // ARIA Implementer's Guide.                                                                                            
+-static String accessibleNameForNode(Node* node)
++static String accessibleNameForNode(Node* node, Node* labelledbyNode)
+ {
+     ASSERT(node);
+     if (!node || !node->isElementNode())
+@@ -1870,7 +1872,7 @@ static String accessibleNameForNode(Node
+     String text;
+     if (axObject) {
+         if (axObject->accessibleNameDerivesFromContent())
+-            text = axObject->textUnderElement(AccessibilityTextUnderElementMode(AccessibilityTextUnderElementMode::TextUnderElementModeIncludeNameFromContentsChildren, true));
++            text = axObject->textUnderElement(AccessibilityTextUnderElementMode(AccessibilityTextUnderElementMode::TextUnderElementModeIncludeNameFromContentsChildren, true, labelledbyNode));
+     } else
+         text = element->innerText();
+@@ -1889,7 +1891,7 @@ String AccessibilityNodeObject::accessib
+     StringBuilder builder;
+     unsigned size = elements.size();
+     for (unsigned i = 0; i < size; ++i)
+-        appendNameToStringBuilder(builder, accessibleNameForNode(elements[i]));
++        appendNameToStringBuilder(builder, accessibleNameForNode(elements[i], node()));
+     return builder.toString();
+ }
+Index: webkitgtk/Source/WebCore/accessibility/AccessibilityObject.h
+===================================================================
+--- webkitgtk.orig/Source/WebCore/accessibility/AccessibilityObject.h
++++ webkitgtk/Source/WebCore/accessibility/AccessibilityObject.h
+@@ -253,11 +253,13 @@ struct AccessibilityTextUnderElementMode
+     
+     ChildrenInclusion childrenInclusion;
+     bool includeFocusableContent;
++    Node* ignoredChildNode;
+     
+-    AccessibilityTextUnderElementMode(ChildrenInclusion c = TextUnderElementModeSkipIgnoredChildren, bool i = false)
+-    : childrenInclusion(c)
+-    , includeFocusableContent(i)
+-    { }
++    AccessibilityTextUnderElementMode(ChildrenInclusion c = TextUnderElementModeSkipIgnoredChildren, bool i = false, Node* ignored = nullptr)
++        : childrenInclusion(c)
++        , includeFocusableContent(i)
++        , ignoredChildNode(ignored)
++        { }
+ };
+     
+ enum AccessibilityOrientation {
diff --git a/patches/fix-clearselection-segfault.patch b/patches/fix-clearselection-segfault.patch
new file mode 100644 (file)
index 0000000..6074a86
--- /dev/null
@@ -0,0 +1,39 @@
+From: Carlos Garcia Campos <carlosgc@webkit.org>
+Subject: Fix segfault when calling clearSelection on a detached RenderObject
+Bug: https://bugs.webkit.org/show_bug.cgi?id=140275
+Origin: http://trac.webkit.org/changeset/178360
+Index: webkitgtk/Source/WebCore/rendering/RenderBox.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/rendering/RenderBox.cpp
++++ webkitgtk/Source/WebCore/rendering/RenderBox.cpp
+@@ -1828,6 +1828,8 @@ LayoutUnit RenderBox::containingBlockLog
+ #endif
+     RenderBlock* cb = containingBlock();
++    if (!cb)
++        return LayoutUnit();
+     return cb->availableLogicalWidth();
+ }
+@@ -1839,6 +1841,8 @@ LayoutUnit RenderBox::containingBlockLog
+ #endif
+     RenderBlock* cb = containingBlock();
++    if (!cb)
++        return LayoutUnit();
+     return cb->availableLogicalHeight(heightType);
+ }
+Index: webkitgtk/Source/WebCore/rendering/RenderView.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/rendering/RenderView.cpp
++++ webkitgtk/Source/WebCore/rendering/RenderView.cpp
+@@ -1105,7 +1105,7 @@ void RenderView::getSelection(RenderObje
+ void RenderView::clearSelection()
+ {
+     layer()->repaintBlockSelectionGaps();
+-    setSelection(0, -1, 0, -1, RepaintNewMinusOld);
++    setSelection(nullptr, -1, nullptr, -1, RepaintNewMinusOld);
+ }
+ bool RenderView::printing() const
diff --git a/patches/fix-date.patch b/patches/fix-date.patch
new file mode 100644 (file)
index 0000000..c855a9b
--- /dev/null
@@ -0,0 +1,477 @@
+From: Carlos Garcia Campos <carlosgc@webkit.org>
+Subject: String(new Date(Mar 30 2014 01:00:00)) is wrong in CET
+Bug: https://bugs.webkit.org/show_bug.cgi?id=130967
+Origin: http://trac.webkit.org/changeset/175904
+Index: webkitgtk/Source/JavaScriptCore/runtime/DateConstructor.cpp
+===================================================================
+--- webkitgtk.orig/Source/JavaScriptCore/runtime/DateConstructor.cpp
++++ webkitgtk/Source/JavaScriptCore/runtime/DateConstructor.cpp
+@@ -166,7 +166,7 @@ JSObject* constructDate(ExecState* exec,
+             t.setSecond(JSC::toInt32(doubleArguments[5]));
+             t.setIsDST(-1);
+             double ms = (numArgs >= 7) ? doubleArguments[6] : 0;
+-            value = gregorianDateTimeToMS(vm, t, ms, false);
++            value = gregorianDateTimeToMS(vm, t, ms, WTF::LocalTime);
+         }
+     }
+@@ -190,7 +190,7 @@ static EncodedJSValue JSC_HOST_CALL call
+ {
+     VM& vm = exec->vm();
+     GregorianDateTime ts;
+-    msToGregorianDateTime(vm, currentTimeMS(), false, ts);
++    msToGregorianDateTime(vm, currentTimeMS(), WTF::LocalTime, ts);
+     return JSValue::encode(jsNontrivialString(&vm, formatDateTime(ts, DateTimeFormatDateAndTime, false)));
+ }
+@@ -244,7 +244,7 @@ EncodedJSValue JSC_HOST_CALL dateUTC(Exe
+     t.setMinute(JSC::toInt32(doubleArguments[4]));
+     t.setSecond(JSC::toInt32(doubleArguments[5]));
+     double ms = (n >= 7) ? doubleArguments[6] : 0;
+-    return JSValue::encode(jsNumber(timeClip(gregorianDateTimeToMS(exec->vm(), t, ms, true))));
++    return JSValue::encode(jsNumber(timeClip(gregorianDateTimeToMS(exec->vm(), t, ms, WTF::UTCTime))));
+ }
+ } // namespace JSC
+Index: webkitgtk/Source/JavaScriptCore/runtime/DateInstance.cpp
+===================================================================
+--- webkitgtk.orig/Source/JavaScriptCore/runtime/DateInstance.cpp
++++ webkitgtk/Source/JavaScriptCore/runtime/DateInstance.cpp
+@@ -69,7 +69,7 @@ const GregorianDateTime* DateInstance::c
+         m_data = vm.dateInstanceCache.add(milli);
+     if (m_data->m_gregorianDateTimeCachedForMS != milli) {
+-        msToGregorianDateTime(vm, milli, false, m_data->m_cachedGregorianDateTime);
++        msToGregorianDateTime(vm, milli, WTF::LocalTime, m_data->m_cachedGregorianDateTime);
+         m_data->m_gregorianDateTimeCachedForMS = milli;
+     }
+     return &m_data->m_cachedGregorianDateTime;
+@@ -86,7 +86,7 @@ const GregorianDateTime* DateInstance::c
+         m_data = vm.dateInstanceCache.add(milli);
+     if (m_data->m_gregorianDateTimeUTCCachedForMS != milli) {
+-        msToGregorianDateTime(vm, milli, true, m_data->m_cachedGregorianDateTimeUTC);
++        msToGregorianDateTime(vm, milli, WTF::UTCTime, m_data->m_cachedGregorianDateTimeUTC);
+         m_data->m_gregorianDateTimeUTCCachedForMS = milli;
+     }
+     return &m_data->m_cachedGregorianDateTimeUTC;
+Index: webkitgtk/Source/JavaScriptCore/runtime/DatePrototype.cpp
+===================================================================
+--- webkitgtk.orig/Source/JavaScriptCore/runtime/DatePrototype.cpp
++++ webkitgtk/Source/JavaScriptCore/runtime/DatePrototype.cpp
+@@ -859,7 +859,7 @@ EncodedJSValue JSC_HOST_CALL dateProtoFu
+     return JSValue::encode(result);
+ }
+-static EncodedJSValue setNewValueFromTimeArgs(ExecState* exec, int numArgsToUse, bool inputIsUTC)
++static EncodedJSValue setNewValueFromTimeArgs(ExecState* exec, int numArgsToUse, WTF::TimeType inputTimeType)
+ {
+     JSValue thisValue = exec->thisValue();
+     if (!thisValue.inherits(DateInstance::info()))
+@@ -878,7 +878,7 @@ static EncodedJSValue setNewValueFromTim
+     double secs = floor(milli / msPerSecond);
+     double ms = milli - secs * msPerSecond;
+-    const GregorianDateTime* other = inputIsUTC 
++    const GregorianDateTime* other = inputTimeType == WTF::UTCTime
+         ? thisDateObj->gregorianDateTimeUTC(exec)
+         : thisDateObj->gregorianDateTime(exec);
+     if (!other)
+@@ -892,12 +892,12 @@ static EncodedJSValue setNewValueFromTim
+         return JSValue::encode(result);
+     } 
+     
+-    JSValue result = jsNumber(gregorianDateTimeToMS(vm, gregorianDateTime, ms, inputIsUTC));
++    JSValue result = jsNumber(gregorianDateTimeToMS(vm, gregorianDateTime, ms, inputTimeType));
+     thisDateObj->setInternalValue(vm, result);
+     return JSValue::encode(result);
+ }
+-static EncodedJSValue setNewValueFromDateArgs(ExecState* exec, int numArgsToUse, bool inputIsUTC)
++static EncodedJSValue setNewValueFromDateArgs(ExecState* exec, int numArgsToUse, WTF::TimeType inputTimeType)
+ {
+     JSValue thisValue = exec->thisValue();
+     if (!thisValue.inherits(DateInstance::info()))
+@@ -916,10 +916,10 @@ static EncodedJSValue setNewValueFromDat
+     GregorianDateTime gregorianDateTime; 
+     if (numArgsToUse == 3 && std::isnan(milli)) 
+-        msToGregorianDateTime(vm, 0, true, gregorianDateTime);
++        msToGregorianDateTime(vm, 0, WTF::UTCTime, gregorianDateTime);
+     else { 
+         ms = milli - floor(milli / msPerSecond) * msPerSecond; 
+-        const GregorianDateTime* other = inputIsUTC 
++        const GregorianDateTime* other = inputTimeType == WTF::UTCTime
+             ? thisDateObj->gregorianDateTimeUTC(exec)
+             : thisDateObj->gregorianDateTime(exec);
+         if (!other)
+@@ -933,93 +933,93 @@ static EncodedJSValue setNewValueFromDat
+         return JSValue::encode(result);
+     } 
+            
+-    JSValue result = jsNumber(gregorianDateTimeToMS(vm, gregorianDateTime, ms, inputIsUTC));
++    JSValue result = jsNumber(gregorianDateTimeToMS(vm, gregorianDateTime, ms, inputTimeType));
+     thisDateObj->setInternalValue(vm, result);
+     return JSValue::encode(result);
+ }
+ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetMilliSeconds(ExecState* exec)
+ {
+-    const bool inputIsUTC = false;
+-    return setNewValueFromTimeArgs(exec, 1, inputIsUTC);
++    const WTF::TimeType inputTimeType = WTF::LocalTime;
++    return setNewValueFromTimeArgs(exec, 1, inputTimeType);
+ }
+ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetUTCMilliseconds(ExecState* exec)
+ {
+-    const bool inputIsUTC = true;
+-    return setNewValueFromTimeArgs(exec, 1, inputIsUTC);
++    const WTF::TimeType inputTimeType = WTF::UTCTime;
++    return setNewValueFromTimeArgs(exec, 1, inputTimeType);
+ }
+ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetSeconds(ExecState* exec)
+ {
+-    const bool inputIsUTC = false;
+-    return setNewValueFromTimeArgs(exec, 2, inputIsUTC);
++    const WTF::TimeType inputTimeType = WTF::LocalTime;
++    return setNewValueFromTimeArgs(exec, 2, inputTimeType);
+ }
+ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetUTCSeconds(ExecState* exec)
+ {
+-    const bool inputIsUTC = true;
+-    return setNewValueFromTimeArgs(exec, 2, inputIsUTC);
++    const WTF::TimeType inputTimeType = WTF::UTCTime;
++    return setNewValueFromTimeArgs(exec, 2, inputTimeType);
+ }
+ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetMinutes(ExecState* exec)
+ {
+-    const bool inputIsUTC = false;
+-    return setNewValueFromTimeArgs(exec, 3, inputIsUTC);
++    const WTF::TimeType inputTimeType = WTF::LocalTime;
++    return setNewValueFromTimeArgs(exec, 3, inputTimeType);
+ }
+ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetUTCMinutes(ExecState* exec)
+ {
+-    const bool inputIsUTC = true;
+-    return setNewValueFromTimeArgs(exec, 3, inputIsUTC);
++    const WTF::TimeType inputTimeType = WTF::UTCTime;
++    return setNewValueFromTimeArgs(exec, 3, inputTimeType);
+ }
+ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetHours(ExecState* exec)
+ {
+-    const bool inputIsUTC = false;
+-    return setNewValueFromTimeArgs(exec, 4, inputIsUTC);
++    const WTF::TimeType inputTimeType = WTF::LocalTime;
++    return setNewValueFromTimeArgs(exec, 4, inputTimeType);
+ }
+ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetUTCHours(ExecState* exec)
+ {
+-    const bool inputIsUTC = true;
+-    return setNewValueFromTimeArgs(exec, 4, inputIsUTC);
++    const WTF::TimeType inputTimeType = WTF::UTCTime;
++    return setNewValueFromTimeArgs(exec, 4, inputTimeType);
+ }
+ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetDate(ExecState* exec)
+ {
+-    const bool inputIsUTC = false;
+-    return setNewValueFromDateArgs(exec, 1, inputIsUTC);
++    const WTF::TimeType inputTimeType = WTF::LocalTime;
++    return setNewValueFromDateArgs(exec, 1, inputTimeType);
+ }
+ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetUTCDate(ExecState* exec)
+ {
+-    const bool inputIsUTC = true;
+-    return setNewValueFromDateArgs(exec, 1, inputIsUTC);
++    const WTF::TimeType inputTimeType = WTF::UTCTime;
++    return setNewValueFromDateArgs(exec, 1, inputTimeType);
+ }
+ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetMonth(ExecState* exec)
+ {
+-    const bool inputIsUTC = false;
+-    return setNewValueFromDateArgs(exec, 2, inputIsUTC);
++    const WTF::TimeType inputTimeType = WTF::LocalTime;
++    return setNewValueFromDateArgs(exec, 2, inputTimeType);
+ }
+ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetUTCMonth(ExecState* exec)
+ {
+-    const bool inputIsUTC = true;
+-    return setNewValueFromDateArgs(exec, 2, inputIsUTC);
++    const WTF::TimeType inputTimeType = WTF::UTCTime;
++    return setNewValueFromDateArgs(exec, 2, inputTimeType);
+ }
+ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetFullYear(ExecState* exec)
+ {
+-    const bool inputIsUTC = false;
+-    return setNewValueFromDateArgs(exec, 3, inputIsUTC);
++    const WTF::TimeType inputTimeType = WTF::LocalTime;
++    return setNewValueFromDateArgs(exec, 3, inputTimeType);
+ }
+ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetUTCFullYear(ExecState* exec)
+ {
+-    const bool inputIsUTC = true;
+-    return setNewValueFromDateArgs(exec, 3, inputIsUTC);
++    const WTF::TimeType inputTimeType = WTF::UTCTime;
++    return setNewValueFromDateArgs(exec, 3, inputTimeType);
+ }
+ EncodedJSValue JSC_HOST_CALL dateProtoFuncSetYear(ExecState* exec)
+@@ -1043,7 +1043,7 @@ EncodedJSValue JSC_HOST_CALL dateProtoFu
+     if (std::isnan(milli))
+         // Based on ECMA 262 B.2.5 (setYear)
+         // the time must be reset to +0 if it is NaN.
+-        msToGregorianDateTime(vm, 0, true, gregorianDateTime);
++        msToGregorianDateTime(vm, 0, WTF::UTCTime, gregorianDateTime);
+     else {
+         double secs = floor(milli / msPerSecond);
+         ms = milli - secs * msPerSecond;
+@@ -1059,7 +1059,7 @@ EncodedJSValue JSC_HOST_CALL dateProtoFu
+     }
+     gregorianDateTime.setYear(toInt32((year >= 0 && year <= 99) ? (year + 1900) : year));
+-    JSValue result = jsNumber(gregorianDateTimeToMS(vm, gregorianDateTime, ms, false));
++    JSValue result = jsNumber(gregorianDateTimeToMS(vm, gregorianDateTime, ms, WTF::LocalTime));
+     thisDateObj->setInternalValue(vm, result);
+     return JSValue::encode(result);
+ }
+Index: webkitgtk/Source/JavaScriptCore/runtime/JSDateMath.cpp
+===================================================================
+--- webkitgtk.orig/Source/JavaScriptCore/runtime/JSDateMath.cpp
++++ webkitgtk/Source/JavaScriptCore/runtime/JSDateMath.cpp
+@@ -132,13 +132,14 @@ static inline int msToWeekDay(double ms)
+ // NOTE: The implementation relies on the fact that no time zones have
+ // more than one daylight savings offset change per month.
+ // If this function is called with NaN it returns NaN.
+-static LocalTimeOffset localTimeOffset(VM& vm, double ms)
++static LocalTimeOffset localTimeOffset(VM& vm, double ms, WTF::TimeType inputTimeType = WTF::UTCTime)
+ {
+     LocalTimeOffsetCache& cache = vm.localTimeOffsetCache;
+     double start = cache.start;
+     double end = cache.end;
++    WTF::TimeType cachedTimeType = cache.timeType;
+-    if (start <= ms) {
++    if (cachedTimeType == inputTimeType && start <= ms) {
+         // If the time fits in the cached interval, return the cached offset.
+         if (ms <= end) return cache.offset;
+@@ -146,7 +147,7 @@ static LocalTimeOffset localTimeOffset(V
+         double newEnd = end + cache.increment;
+         if (ms <= newEnd) {
+-            LocalTimeOffset endOffset = calculateLocalTimeOffset(newEnd);
++            LocalTimeOffset endOffset = calculateLocalTimeOffset(newEnd, inputTimeType);
+             if (cache.offset == endOffset) {
+                 // If the offset at the end of the new interval still matches
+                 // the offset in the cache, we grow the cached time interval
+@@ -155,7 +156,7 @@ static LocalTimeOffset localTimeOffset(V
+                 cache.increment = msPerMonth;
+                 return endOffset;
+             }
+-            LocalTimeOffset offset = calculateLocalTimeOffset(ms);
++            LocalTimeOffset offset = calculateLocalTimeOffset(ms, inputTimeType);
+             if (offset == endOffset) {
+                 // The offset at the given time is equal to the offset at the
+                 // new end of the interval, so that means that we've just skipped
+@@ -180,31 +181,31 @@ static LocalTimeOffset localTimeOffset(V
+     // Compute the DST offset for the time and shrink the cache interval
+     // to only contain the time. This allows fast repeated DST offset
+     // computations for the same time.
+-    LocalTimeOffset offset = calculateLocalTimeOffset(ms);
++    LocalTimeOffset offset = calculateLocalTimeOffset(ms, inputTimeType);
+     cache.offset = offset;
+     cache.start = ms;
+     cache.end = ms;
+     cache.increment = msPerMonth;
++    cache.timeType = inputTimeType;
+     return offset;
+ }
+-double gregorianDateTimeToMS(VM& vm, const GregorianDateTime& t, double milliSeconds, bool inputIsUTC)
++double gregorianDateTimeToMS(VM& vm, const GregorianDateTime& t, double milliSeconds, WTF::TimeType inputTimeType)
+ {
+     double day = dateToDaysFrom1970(t.year(), t.month(), t.monthDay());
+     double ms = timeToMS(t.hour(), t.minute(), t.second(), milliSeconds);
+-    double result = (day * WTF::msPerDay) + ms;
++    double localTimeResult = (day * WTF::msPerDay) + ms;
++    double localToUTCTimeOffset = inputTimeType == LocalTime
++        ? localTimeOffset(vm, localTimeResult, inputTimeType).offset : 0;
+-    if (!inputIsUTC)
+-        result -= localTimeOffset(vm, result).offset;
+-
+-    return result;
++    return localTimeResult - localToUTCTimeOffset;
+ }
+ // input is UTC
+-void msToGregorianDateTime(VM& vm, double ms, bool outputIsUTC, GregorianDateTime& tm)
++void msToGregorianDateTime(VM& vm, double ms, WTF::TimeType outputTimeType, GregorianDateTime& tm)
+ {
+     LocalTimeOffset localTime;
+-    if (!outputIsUTC) {
++    if (outputTimeType == WTF::LocalTime) {
+         localTime = localTimeOffset(vm, ms);
+         ms += localTime.offset;
+     }
+@@ -226,15 +227,15 @@ double parseDateFromNullTerminatedCharac
+ {
+     bool haveTZ;
+     int offset;
+-    double ms = WTF::parseDateFromNullTerminatedCharacters(dateString, haveTZ, offset);
+-    if (std::isnan(ms))
++    double localTimeMS = WTF::parseDateFromNullTerminatedCharacters(dateString, haveTZ, offset);
++    if (std::isnan(localTimeMS))
+         return std::numeric_limits<double>::quiet_NaN();
+-    // fall back to local timezone
++    // fall back to local timezone.
+     if (!haveTZ)
+-        offset = localTimeOffset(vm, ms).offset / WTF::msPerMinute;
++        offset = localTimeOffset(vm, localTimeMS, WTF::LocalTime).offset / WTF::msPerMinute;
+-    return ms - (offset * WTF::msPerMinute);
++    return localTimeMS - (offset * WTF::msPerMinute);
+ }
+ double parseDate(VM& vm, const String& date)
+Index: webkitgtk/Source/JavaScriptCore/runtime/JSDateMath.h
+===================================================================
+--- webkitgtk.orig/Source/JavaScriptCore/runtime/JSDateMath.h
++++ webkitgtk/Source/JavaScriptCore/runtime/JSDateMath.h
+@@ -50,8 +50,8 @@ namespace JSC {
+ class VM;
+-JS_EXPORT_PRIVATE void msToGregorianDateTime(VM&, double, bool outputIsUTC, GregorianDateTime&);
+-JS_EXPORT_PRIVATE double gregorianDateTimeToMS(VM&, const GregorianDateTime&, double, bool inputIsUTC);
++JS_EXPORT_PRIVATE void msToGregorianDateTime(VM&, double, WTF::TimeType outputTimeType, GregorianDateTime&);
++JS_EXPORT_PRIVATE double gregorianDateTimeToMS(VM&, const GregorianDateTime&, double, WTF::TimeType inputTimeType);
+ JS_EXPORT_PRIVATE double getUTCOffset(VM&);
+ JS_EXPORT_PRIVATE double parseDateFromNullTerminatedCharacters(VM&, const char* dateString);
+ JS_EXPORT_PRIVATE double parseDate(VM&, const WTF::String&);
+Index: webkitgtk/Source/JavaScriptCore/runtime/VM.h
+===================================================================
+--- webkitgtk.orig/Source/JavaScriptCore/runtime/VM.h
++++ webkitgtk/Source/JavaScriptCore/runtime/VM.h
+@@ -133,6 +133,7 @@ struct LocalTimeOffsetCache {
+         : start(0.0)
+         , end(-1.0)
+         , increment(0.0)
++        , timeType(WTF::UTCTime)
+     {
+     }
+@@ -142,12 +143,14 @@ struct LocalTimeOffsetCache {
+         start = 0.0;
+         end = -1.0;
+         increment = 0.0;
++        timeType = WTF::UTCTime;
+     }
+     LocalTimeOffset offset;
+     double start;
+     double end;
+     double increment;
++    WTF::TimeType timeType;
+ };
+ class ConservativeRoots;
+Index: webkitgtk/Source/WTF/wtf/DateMath.cpp
+===================================================================
+--- webkitgtk.orig/Source/WTF/wtf/DateMath.cpp
++++ webkitgtk/Source/WTF/wtf/DateMath.cpp
+@@ -363,8 +363,6 @@ int equivalentYearForDST(int year)
+     return year;
+ }
+-#if !HAVE(TM_GMTOFF)
+-
+ static int32_t calculateUTCOffset()
+ {
+ #if OS(WINDOWS)
+@@ -406,6 +404,8 @@ static int32_t calculateUTCOffset()
+ #endif
+ }
++#if !HAVE(TM_GMTOFF)
++
+ #if OS(WINDOWS)
+ // Code taken from http://support.microsoft.com/kb/167296
+ static void UnixTimeToFileTime(time_t t, LPFILETIME pft)
+@@ -467,8 +467,16 @@ static double calculateDSTOffset(time_t
+ #endif
+ // Returns combined offset in millisecond (UTC + DST).
+-LocalTimeOffset calculateLocalTimeOffset(double ms)
++LocalTimeOffset calculateLocalTimeOffset(double ms, TimeType inputTimeType)
+ {
++#if HAVE(TM_GMTOFF)
++    double localToUTCTimeOffset = inputTimeType == LocalTime ? calculateUTCOffset() : 0;
++#else
++    double localToUTCTimeOffset = calculateUTCOffset();
++#endif
++    if (inputTimeType == LocalTime)
++        ms -= localToUTCTimeOffset;
++
+     // On Mac OS X, the call to localtime (see calculateDSTOffset) will return historically accurate
+     // DST information (e.g. New Zealand did not have DST from 1946 to 1974) however the JavaScript
+     // standard explicitly dictates that historical information should not be considered when
+@@ -498,9 +506,8 @@ LocalTimeOffset calculateLocalTimeOffset
+     getLocalTime(&localTime, &localTM);
+     return LocalTimeOffset(localTM.tm_isdst, localTM.tm_gmtoff * msPerSecond);
+ #else
+-    double utcOffset = calculateUTCOffset();
+-    double dstOffset = calculateDSTOffset(localTime, utcOffset);
+-    return LocalTimeOffset(dstOffset, utcOffset + dstOffset);
++    double dstOffset = calculateDSTOffset(localTime, localToUTCTimeOffset);
++    return LocalTimeOffset(dstOffset, localToUTCTimeOffset + dstOffset);
+ #endif
+ }
+@@ -1091,7 +1098,7 @@ double parseDateFromNullTerminatedCharac
+     // fall back to local timezone
+     if (!haveTZ)
+-        offset = calculateLocalTimeOffset(ms).offset / msPerMinute;
++        offset = calculateLocalTimeOffset(ms, LocalTime).offset / msPerMinute; // ms value is in local time milliseconds.
+     return ms - (offset * msPerMinute);
+ }
+Index: webkitgtk/Source/WTF/wtf/DateMath.h
+===================================================================
+--- webkitgtk.orig/Source/WTF/wtf/DateMath.h
++++ webkitgtk/Source/WTF/wtf/DateMath.h
+@@ -53,6 +53,11 @@
+ namespace WTF {
++enum TimeType {
++    UTCTime = 0,
++    LocalTime
++};
++
+ struct LocalTimeOffset {
+     LocalTimeOffset()
+         : isDST(false)
+@@ -126,7 +131,7 @@ WTF_EXPORT_PRIVATE int monthFromDayInYea
+ WTF_EXPORT_PRIVATE int dayInMonthFromDayInYear(int dayInYear, bool leapYear);
+ // Returns combined offset in millisecond (UTC + DST).
+-WTF_EXPORT_PRIVATE LocalTimeOffset calculateLocalTimeOffset(double utcInMilliseconds);
++WTF_EXPORT_PRIVATE LocalTimeOffset calculateLocalTimeOffset(double utcInMilliseconds, TimeType = UTCTime);
+ } // namespace WTF
diff --git a/patches/fix-ftbfs-hppa.patch b/patches/fix-ftbfs-hppa.patch
new file mode 100644 (file)
index 0000000..4581a8d
--- /dev/null
@@ -0,0 +1,28 @@
+From: Helge Deller <deller@gmx.de>
+Subject: Fix FTBFS in HPPA
+Bug-Debian: http://bugs.debian.org/776281
+Index: webkitgtk/CMakeLists.txt
+===================================================================
+--- webkitgtk.orig/CMakeLists.txt
++++ webkitgtk/CMakeLists.txt
+@@ -99,6 +99,8 @@ elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR
+     set(WTF_CPU_PPC64 1)
+ elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le")
+     set(WTF_CPU_PPC64LE 1)
++elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "parisc*")
++    set(WTF_CPU_HPPA 1)
+ elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "s390")
+     set(WTF_CPU_S390 1)
+ elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "s390x")
+Index: webkitgtk/Source/JavaScriptCore/CMakeLists.txt
+===================================================================
+--- webkitgtk.orig/Source/JavaScriptCore/CMakeLists.txt
++++ webkitgtk/Source/JavaScriptCore/CMakeLists.txt
+@@ -1056,6 +1056,7 @@ if (WTF_CPU_ARM)
+         list(APPEND JavaScriptCore_SOURCES ${DERIVED_SOURCES_DIR}/GeneratedJITStubs.obj)
+     endif ()
+ elseif (WTF_CPU_ARM64)
++elseif (WTF_CPU_HPPA)
+ elseif (WTF_CPU_PPC)
+ elseif (WTF_CPU_PPC64)
+ elseif (WTF_CPU_PPC64LE)
diff --git a/patches/fix-gstreamer-leak.patch b/patches/fix-gstreamer-leak.patch
new file mode 100644 (file)
index 0000000..080c675
--- /dev/null
@@ -0,0 +1,116 @@
+From: Carlos Garcia Campos <carlosgc@webkit.org>
+Subject: Fix memory leak in GStreamer code
+Bug: https://bugs.webkit.org/show_bug.cgi?id=46560
+Origin: http://trac.webkit.org/changeset/175945
+Index: webkitgtk/Source/WebCore/platform/graphics/MediaPlayer.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/platform/graphics/MediaPlayer.cpp
++++ webkitgtk/Source/WebCore/platform/graphics/MediaPlayer.cpp
+@@ -130,7 +130,7 @@ public:
+     virtual double minTimeSeekable() const { return 0; }
+     virtual std::unique_ptr<PlatformTimeRanges> buffered() const { return PlatformTimeRanges::create(); }
+-    virtual unsigned totalBytes() const { return 0; }
++    virtual unsigned long long totalBytes() const { return 0; }
+     virtual bool didLoadingProgress() const { return false; }
+     virtual void setSize(const IntSize&) { }
+Index: webkitgtk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h
+===================================================================
+--- webkitgtk.orig/Source/WebCore/platform/graphics/MediaPlayerPrivate.h
++++ webkitgtk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h
+@@ -130,6 +130,7 @@ public:
+     virtual MediaTime minMediaTimeSeekable() const { return MediaTime::createWithDouble(minTimeSeekable()); }
+     virtual std::unique_ptr<PlatformTimeRanges> buffered() const = 0;
++    virtual unsigned long long totalBytes() const { return 0; }
+     virtual bool didLoadingProgress() const = 0;
+     virtual void setSize(const IntSize&) = 0;
+@@ -242,8 +243,16 @@ public:
+     virtual String languageOfPrimaryAudioTrack() const { return emptyString(); }
+-    virtual size_t extraMemoryCost() const { return 0; }
+-    
++    virtual size_t extraMemoryCost() const
++    {
++        MediaTime duration = this->durationMediaTime();
++        if (!duration)
++            return 0;
++
++        unsigned long long extra = totalBytes() * buffered()->totalDuration().toDouble() / duration.toDouble();
++        return static_cast<unsigned>(extra);
++    }
++
+     virtual unsigned long long fileSize() const { return 0; }
+ #if ENABLE(MEDIA_SOURCE)
+Index: webkitgtk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
++++ webkitgtk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
+@@ -211,7 +211,7 @@ MediaPlayerPrivateGStreamer::MediaPlayer
+     , m_volumeAndMuteInitialized(false)
+     , m_hasVideo(false)
+     , m_hasAudio(false)
+-    , m_totalBytes(-1)
++    , m_totalBytes(0)
+     , m_preservesPitch(false)
+     , m_requestedState(GST_STATE_VOID_PENDING)
+     , m_missingPlugins(false)
+@@ -1228,12 +1228,12 @@ bool MediaPlayerPrivateGStreamer::didLoa
+     return didLoadingProgress;
+ }
+-unsigned MediaPlayerPrivateGStreamer::totalBytes() const
++unsigned long long MediaPlayerPrivateGStreamer::totalBytes() const
+ {
+     if (m_errorOccured)
+         return 0;
+-    if (m_totalBytes != -1)
++    if (m_totalBytes)
+         return m_totalBytes;
+     if (!m_source)
+@@ -1243,7 +1243,7 @@ unsigned MediaPlayerPrivateGStreamer::to
+     gint64 length = 0;
+     if (gst_element_query_duration(m_source.get(), fmt, &length)) {
+         INFO_MEDIA_MESSAGE("totalBytes %" G_GINT64_FORMAT, length);
+-        m_totalBytes = static_cast<unsigned>(length);
++        m_totalBytes = static_cast<unsigned long long>(length);
+         m_isStreaming = !length;
+         return m_totalBytes;
+     }
+@@ -1278,7 +1278,7 @@ unsigned MediaPlayerPrivateGStreamer::to
+     gst_iterator_free(iter);
+     INFO_MEDIA_MESSAGE("totalBytes %" G_GINT64_FORMAT, length);
+-    m_totalBytes = static_cast<unsigned>(length);
++    m_totalBytes = static_cast<unsigned long long>(length);
+     m_isStreaming = !length;
+     return m_totalBytes;
+ }
+Index: webkitgtk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h
+===================================================================
+--- webkitgtk.orig/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h
++++ webkitgtk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h
+@@ -92,7 +92,7 @@ public:
+     std::unique_ptr<PlatformTimeRanges> buffered() const;
+     float maxTimeSeekable() const;
+     bool didLoadingProgress() const;
+-    unsigned totalBytes() const;
++    unsigned long long totalBytes() const;
+     float maxTimeLoaded() const;
+     void loadStateChanged();
+@@ -207,7 +207,7 @@ private:
+     GThreadSafeMainLoopSource m_videoTimerHandler;
+     GThreadSafeMainLoopSource m_videoCapsTimerHandler;
+     GThreadSafeMainLoopSource m_readyTimerHandler;
+-    mutable long m_totalBytes;
++    mutable unsigned long long m_totalBytes;
+     URL m_url;
+     bool m_preservesPitch;
+     GstState m_requestedState;
diff --git a/patches/fix-integer-overflow.patch b/patches/fix-integer-overflow.patch
new file mode 100644 (file)
index 0000000..da8b76e
--- /dev/null
@@ -0,0 +1,26 @@
+From: Carlos Garcia Campos <carlosgc@webkit.org>
+Subject: Fix crash due to integer overflow
+Bug: https://bugs.webkit.org/show_bug.cgi?id=139165
+Origin: http://trac.webkit.org/changeset/178283
+Index: webkitgtk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
+===================================================================
+--- webkitgtk.orig/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
++++ webkitgtk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
+@@ -2023,7 +2023,7 @@ void ByteCodeParser::handleGetById(
+ {
+     NodeType getById = getByIdStatus.makesCalls() ? GetByIdFlush : GetById;
+     
+-    if (!getByIdStatus.isSimple() || !Options::enableAccessInlining()) {
++    if (!getByIdStatus.isSimple() || !getByIdStatus.numVariants() || !Options::enableAccessInlining()) {
+         set(VirtualRegister(destinationOperand),
+             addToGraph(getById, OpInfo(identifierNumber), OpInfo(prediction), base));
+         return;
+@@ -2138,7 +2138,7 @@ void ByteCodeParser::handlePutById(
+     Node* base, unsigned identifierNumber, Node* value,
+     const PutByIdStatus& putByIdStatus, bool isDirect)
+ {
+-    if (!putByIdStatus.isSimple() || !Options::enableAccessInlining()) {
++    if (!putByIdStatus.isSimple() || !putByIdStatus.numVariants() || !Options::enableAccessInlining()) {
+         if (!putByIdStatus.isSet())
+             addToGraph(ForceOSRExit);
+         emitPutById(base, identifierNumber, value, putByIdStatus, isDirect);
diff --git a/patches/fix-jit-crash.patch b/patches/fix-jit-crash.patch
new file mode 100644 (file)
index 0000000..6673a9d
--- /dev/null
@@ -0,0 +1,69 @@
+From: Carlos Garcia Campos <carlosgc@webkit.org>
+Subject: Fix crash in SpeculativeJIT::compile() when loading theblaze.com
+Bug: https://bugs.webkit.org/show_bug.cgi?id=137642
+Origin: http://trac.webkit.org/changeset/178264
+Index: webkitgtk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
+===================================================================
+--- webkitgtk.orig/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
++++ webkitgtk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
+@@ -1692,7 +1692,26 @@ void SpeculativeJIT::compile(Node* node)
+         break;
+     case Identity: {
+-        RELEASE_ASSERT_NOT_REACHED();
++        speculate(node, node->child1());
++        switch (node->child1().useKind()) {
++        case DoubleRepUse:
++        case DoubleRepRealUse: {
++            SpeculateDoubleOperand op(this, node->child1());
++            doubleResult(op.fpr(), node);
++            break;
++        }
++        case Int52RepUse: 
++        case MachineIntUse:
++        case DoubleRepMachineIntUse: {
++            RELEASE_ASSERT_NOT_REACHED();   
++            break;
++        }
++        default: {
++            JSValueOperand op(this, node->child1());
++            jsValueResult(op.tagGPR(), op.payloadGPR(), node);
++            break;
++        }
++        } // switch
+         break;
+     }
+Index: webkitgtk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
+===================================================================
+--- webkitgtk.orig/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
++++ webkitgtk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
+@@ -1795,8 +1795,26 @@ void SpeculativeJIT::compile(Node* node)
+         break;
+     case Identity: {
+-        // CSE should always eliminate this.
+-        DFG_CRASH(m_jit.graph(), node, "Unexpected Identity node");
++        speculate(node, node->child1());
++        switch (node->child1().useKind()) {
++        case DoubleRepUse:
++        case DoubleRepRealUse:
++        case DoubleRepMachineIntUse: {
++            SpeculateDoubleOperand op(this, node->child1());
++            doubleResult(op.fpr(), node);
++            break;
++        }
++        case Int52RepUse: {
++            SpeculateInt52Operand op(this, node->child1());
++            int52Result(op.gpr(), node);
++            break;
++        }
++        default: {
++            JSValueOperand op(this, node->child1());
++            jsValueResult(op.gpr(), node);
++            break;
++        }
++        } // switch
+         break;
+     }
diff --git a/patches/fix-mips64-build.patch b/patches/fix-mips64-build.patch
new file mode 100644 (file)
index 0000000..b2c50d2
--- /dev/null
@@ -0,0 +1,55 @@
+From: YunQiang Su <wzssyqa@gmail.com>
+Subject: Fix build in MIPS64EL
+Bug-Debian: http://bugs.debian.org/767598
+Bug: https://bugs.webkit.org/show_bug.cgi?id=124370
+Index: webkitgtk/Source/WTF/wtf/Platform.h
+===================================================================
+--- webkitgtk.orig/Source/WTF/wtf/Platform.h
++++ webkitgtk/Source/WTF/wtf/Platform.h
+@@ -80,16 +80,20 @@
+ #endif
+ #endif
+-/* CPU(MIPS) - MIPS 32-bit */
+-/* Note: Only O32 ABI is tested, so we enable it for O32 ABI for now.  */
+-#if (defined(mips) || defined(__mips__) || defined(MIPS) || defined(_MIPS_)) \
+-    && defined(_ABIO32)
++/* CPU(MIPS) - MIPS 32-bit and 64-bit */
++#if (defined(mips) || defined(__mips__) || defined(MIPS) || defined(_MIPS_) \
++    || defined(__mips64))
++#if defined(__mips64)
++#define WTF_CPU_MIPS64 1
++#define WTF_MIPS_ARCH __mips64
++#else
+ #define WTF_CPU_MIPS 1
++#define WTF_MIPS_ARCH __mips
++#endif
+ #if defined(__MIPSEB__)
+ #define WTF_CPU_BIG_ENDIAN 1
+ #endif
+ #define WTF_MIPS_PIC (defined __PIC__)
+-#define WTF_MIPS_ARCH __mips
+ #define WTF_MIPS_ISA(v) (defined WTF_MIPS_ARCH && WTF_MIPS_ARCH == v)
+ #define WTF_MIPS_ISA_AT_LEAST(v) (defined WTF_MIPS_ARCH && WTF_MIPS_ARCH >= v)
+ #define WTF_MIPS_ARCH_REV __mips_isa_rev
+@@ -662,6 +666,7 @@
+     || CPU(ARM64) \
+     || CPU(SPARC64) \
+     || CPU(S390X) \
++    || CPU(MIPS64) \
+     || CPU(PPC64) \
+     || CPU(PPC64LE)
+ #define WTF_USE_JSVALUE64 1
+Index: webkitgtk/Source/WTF/wtf/dtoa/utils.h
+===================================================================
+--- webkitgtk.orig/Source/WTF/wtf/dtoa/utils.h
++++ webkitgtk/Source/WTF/wtf/dtoa/utils.h
+@@ -49,7 +49,7 @@
+ defined(__ARMEL__) || \
+ defined(_MIPS_ARCH_MIPS32R2)
+ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+-#elif CPU(MIPS) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || OS(WINCE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(SPARC) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA)
++#elif CPU(MIPS) || CPU(MIPS64) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || OS(WINCE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(SPARC) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA)
+ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+ #elif defined(_M_IX86) || defined(__i386__)
+ #if defined(_WIN32)
diff --git a/patches/fix-null-renderer.patch b/patches/fix-null-renderer.patch
new file mode 100644 (file)
index 0000000..4c84569
--- /dev/null
@@ -0,0 +1,18 @@
+From: Carlos Garcia Campos <carlosgc@webkit.org>
+Subject: NULL pointer check in HTMLPlugInImageElement
+Bug: https://bugs.webkit.org/show_bug.cgi?id=139057
+Origin: http://trac.webkit.org/changeset/178276
+Index: webkitgtk/Source/WebCore/html/HTMLPlugInImageElement.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/html/HTMLPlugInImageElement.cpp
++++ webkitgtk/Source/WebCore/html/HTMLPlugInImageElement.cpp
+@@ -334,6 +334,9 @@ void HTMLPlugInImageElement::updateSnaps
+     m_snapshotImage = image;
++    if (!renderer())
++        return;
++
+     if (renderer()->isSnapshottedPlugIn()) {
+         toRenderSnapshottedPlugIn(renderer())->updateSnapshot(image);
+         return;
diff --git a/patches/fix-null-string-conversion.patch b/patches/fix-null-string-conversion.patch
new file mode 100644 (file)
index 0000000..2015897
--- /dev/null
@@ -0,0 +1,38 @@
+From: Carlos Garcia Campos <carlosgc@webkit.org>
+Subject: Add NULL check to convertToUTF8String()
+Bug: https://bugs.webkit.org/show_bug.cgi?id=133904
+Origin: http://trac.webkit.org/changeset/178339
+Index: webkitgtk/Source/WebCore/bindings/gobject/ConvertToUTF8String.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/bindings/gobject/ConvertToUTF8String.cpp
++++ webkitgtk/Source/WebCore/bindings/gobject/ConvertToUTF8String.cpp
+@@ -29,11 +29,14 @@
+ gchar* convertToUTF8String(WTF::String const& s)
+ {
++    if (s.isNull())
++        return 0;
++
+     return g_strdup(s.utf8().data());
+ }
+ gchar* convertToUTF8String(WebCore::URL const& s)
+ {
+-    return g_strdup(s.string().utf8().data());
++    return convertToUTF8String(s.string());
+ }
+Index: webkitgtk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp
+===================================================================
+--- webkitgtk.orig/Tools/TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp
++++ webkitgtk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp
+@@ -108,6 +108,9 @@ private:
+         // Body shouldn't have any children at this point.
+         g_assert(!webkit_dom_node_has_child_nodes(WEBKIT_DOM_NODE(body)));
++        // The value of a non-existent attribute should be null, not an empty string
++        g_assert(!webkit_dom_html_body_element_get_background(WEBKIT_DOM_HTML_BODY_ELEMENT(body)));
++
+         // Insert one P element.
+         WebKitDOMElement* p = webkit_dom_document_create_element(document, "P", 0);
+         g_assert(WEBKIT_DOM_IS_HTML_ELEMENT(p));
diff --git a/patches/fix-timers-animations.patch b/patches/fix-timers-animations.patch
new file mode 100644 (file)
index 0000000..1c05af9
--- /dev/null
@@ -0,0 +1,97 @@
+From: Carlos Garcia Campos <carlosgc@webkit.org>
+Subject: Timers might never be fired during animations
+Bug: https://bugs.webkit.org/show_bug.cgi?id=139062
+Origin: http://trac.webkit.org/changeset/178348
+Index: webkitgtk/Source/WebKit2/WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebKit2/WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp
++++ webkitgtk/Source/WebKit2/WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp
+@@ -72,7 +72,7 @@ LayerTreeHostGtk::LayerTreeHostGtk(WebPa
+     : LayerTreeHost(webPage)
+     , m_isValid(true)
+     , m_notifyAfterScheduledLayerFlush(false)
+-    , m_lastFlushTime(0)
++    , m_lastImmediateFlushTime(0)
+     , m_layerFlushSchedulingEnabled(true)
+ {
+ }
+@@ -273,16 +273,44 @@ void LayerTreeHostGtk::paintContents(con
+     // FIXME: Draw page overlays. https://bugs.webkit.org/show_bug.cgi?id=131433.
+ }
++static inline bool shouldSkipNextFrameBecauseOfContinousImmediateFlushes(double current, double lastImmediateFlushTime)
++{
++    // 100ms is about a perceptable delay in UI, so when scheduling layer flushes immediately for more than 100ms,
++    // we skip the next frame to ensure pending timers have a change to be fired.
++    static const double maxDurationOfImmediateFlushes = 0.100;
++    if (!lastImmediateFlushTime)
++        return false;
++    return lastImmediateFlushTime + maxDurationOfImmediateFlushes < current;
++}
++
++// Use a higher priority than WebCore timers.
++static const int layerFlushTimerPriority = GDK_PRIORITY_REDRAW - 1;
++
+ void LayerTreeHostGtk::layerFlushTimerFired()
+ {
++    double fireTime = monotonicallyIncreasingTime();
+     flushAndRenderLayers();
++    if (m_layerFlushTimerCallback.isScheduled() || !toTextureMapperLayer(m_rootLayer.get())->descendantsOrSelfHaveRunningAnimations())
++        return;
+-    if (!m_layerFlushTimerCallback.isScheduled() && toTextureMapperLayer(m_rootLayer.get())->descendantsOrSelfHaveRunningAnimations()) {
+-        const double targetFPS = 60;
+-        double nextFlush = std::max((1 / targetFPS) - (currentTime() - m_lastFlushTime), 0.0);
+-        m_layerFlushTimerCallback.scheduleAfterDelay("[WebKit] layerFlushTimer", std::bind(&LayerTreeHostGtk::layerFlushTimerFired, this),
+-            std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::duration<double>(nextFlush)), GDK_PRIORITY_EVENTS);
++    static const double targetFramerate = 1 / 60.0;
++    // When rendering layers takes more time than the target delay (0.016), we end up scheduling layer flushes
++    // immediately. Since the layer flush timer has a higher priority than WebCore timers, these are never
++    // fired while we keep scheduling layer flushes immediately.
++    double current = monotonicallyIncreasingTime();
++    double timeToNextFlush = std::max(targetFramerate - (current - fireTime), 0.0);
++    if (timeToNextFlush)
++        m_lastImmediateFlushTime = 0;
++    else if (!m_lastImmediateFlushTime)
++        m_lastImmediateFlushTime = current;
++
++    if (shouldSkipNextFrameBecauseOfContinousImmediateFlushes(current, m_lastImmediateFlushTime)) {
++        timeToNextFlush = targetFramerate;
++        m_lastImmediateFlushTime = 0;
+     }
++
++    m_layerFlushTimerCallback.scheduleAfterDelay("[WebKit] layerFlushTimer", std::bind(&LayerTreeHostGtk::layerFlushTimerFired, this),
++        std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::duration<double>(timeToNextFlush)), layerFlushTimerPriority);
+ }
+ bool LayerTreeHostGtk::flushPendingLayerChanges()
+@@ -335,7 +363,6 @@ void LayerTreeHostGtk::flushAndRenderLay
+     if (!context || !context->makeContextCurrent())
+         return;
+-    m_lastFlushTime = currentTime();
+     if (!flushPendingLayerChanges())
+         return;
+@@ -381,7 +408,7 @@ void LayerTreeHostGtk::scheduleLayerFlus
+     // We use a GLib timer because otherwise GTK+ event handling during dragging can starve WebCore timers, which have a lower priority.
+     if (!m_layerFlushTimerCallback.isScheduled())
+-        m_layerFlushTimerCallback.schedule("[WebKit] layerFlushTimer", std::bind(&LayerTreeHostGtk::layerFlushTimerFired, this), GDK_PRIORITY_EVENTS);
++        m_layerFlushTimerCallback.schedule("[WebKit] layerFlushTimer", std::bind(&LayerTreeHostGtk::layerFlushTimerFired, this), layerFlushTimerPriority);
+ }
+ void LayerTreeHostGtk::setLayerFlushSchedulingEnabled(bool layerFlushingEnabled)
+Index: webkitgtk/Source/WebKit2/WebProcess/WebPage/gtk/LayerTreeHostGtk.h
+===================================================================
+--- webkitgtk.orig/Source/WebKit2/WebProcess/WebPage/gtk/LayerTreeHostGtk.h
++++ webkitgtk/Source/WebKit2/WebProcess/WebPage/gtk/LayerTreeHostGtk.h
+@@ -103,7 +103,7 @@ private:
+     PageOverlayLayerMap m_pageOverlayLayers;
+     std::unique_ptr<WebCore::TextureMapper> m_textureMapper;
+     OwnPtr<WebCore::GLContext> m_context;
+-    double m_lastFlushTime;
++    double m_lastImmediateFlushTime;
+     bool m_layerFlushSchedulingEnabled;
+     GMainLoopSource m_layerFlushTimerCallback;
+ };
diff --git a/patches/flash-crash.patch b/patches/flash-crash.patch
new file mode 100644 (file)
index 0000000..86b824f
--- /dev/null
@@ -0,0 +1,19 @@
+From: Alberto Garcia <berto@igalia.com>
+Subject: Fix crash in the Flash plugin
+Bug: https://bugs.webkit.org/show_bug.cgi?id=137849
+Bug-Debian: http://bugs.debian.org/768341
+Index: webkitgtk/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp
++++ webkitgtk/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp
+@@ -202,7 +202,9 @@ void NetscapePlugin::platformPreInitiali
+ bool NetscapePlugin::platformPostInitialize()
+ {
+     uint64_t windowID = 0;
+-    bool needsXEmbed = false;
++    // NPPVpluginNeedsXEmbed is a boolean value, but at least the
++    // Flash player plugin is using an 'int' instead.
++    int needsXEmbed = 0;
+     if (m_isWindowed) {
+         NPP_GetValue(NPPVpluginNeedsXEmbed, &needsXEmbed);
+         if (needsXEmbed) {
diff --git a/patches/http-latin1.patch b/patches/http-latin1.patch
new file mode 100644 (file)
index 0000000..fa087e0
--- /dev/null
@@ -0,0 +1,64 @@
+From: Carlos Garcia Campos <carlosgc@webkit.org>
+Subject: HTTP header values should be treated as latin1, not UTF-8
+Bug: https://bugs.webkit.org/show_bug.cgi?id=128739
+Origin: http://trac.webkit.org/changeset/178328
+Index: webkitgtk/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp
++++ webkitgtk/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp
+@@ -65,12 +65,12 @@ void ResourceRequest::updateFromSoupMess
+     const char* headerName;
+     const char* headerValue;
+     while (soup_message_headers_iter_next(&headersIter, &headerName, &headerValue))
+-        m_httpHeaderFields.set(String::fromUTF8(headerName), String::fromUTF8(headerValue));
++        m_httpHeaderFields.set(String(headerName), String(headerValue));
+ }
+ void ResourceRequest::updateSoupMessage(SoupMessage* soupMessage) const
+ {
+-    g_object_set(soupMessage, SOUP_MESSAGE_METHOD, httpMethod().utf8().data(), NULL);
++    g_object_set(soupMessage, SOUP_MESSAGE_METHOD, httpMethod().ascii().data(), NULL);
+     GUniquePtr<SoupURI> uri = createSoupURI();
+     soup_message_set_uri(soupMessage, uri.get());
+@@ -80,7 +80,7 @@ void ResourceRequest::updateSoupMessage(
+ SoupMessage* ResourceRequest::toSoupMessage() const
+ {
+-    SoupMessage* soupMessage = soup_message_new(httpMethod().utf8().data(), url().string().utf8().data());
++    SoupMessage* soupMessage = soup_message_new(httpMethod().ascii().data(), url().string().utf8().data());
+     if (!soupMessage)
+         return 0;
+@@ -102,7 +102,7 @@ void ResourceRequest::updateFromSoupMess
+     if (shouldPortBeResetToZero)
+         m_url.setPort(0);
+-    m_httpMethod = String::fromUTF8(soupMessage->method);
++    m_httpMethod = String(soupMessage->method);
+     updateFromSoupMessageHeaders(soupMessage->request_headers);
+Index: webkitgtk/Source/WebCore/platform/network/soup/ResourceResponseSoup.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/platform/network/soup/ResourceResponseSoup.cpp
++++ webkitgtk/Source/WebCore/platform/network/soup/ResourceResponseSoup.cpp
+@@ -87,7 +87,7 @@ void ResourceResponse::updateFromSoupMes
+     soup_message_headers_iter_init(&headersIter, headers);
+     while (soup_message_headers_iter_next(&headersIter, &headerName, &headerValue))
+-        addHTTPHeaderField(String::fromUTF8WithLatin1Fallback(headerName, strlen(headerName)), String::fromUTF8WithLatin1Fallback(headerValue, strlen(headerValue)));
++        addHTTPHeaderField(String(headerName), String(headerValue));
+     String contentType;
+     const char* officialType = soup_message_headers_get_one(headers, "Content-Type");
+@@ -108,7 +108,8 @@ CertificateInfo ResourceResponse::platfo
+ String ResourceResponse::platformSuggestedFilename() const
+ {
+-    return filenameFromHTTPContentDisposition(httpHeaderField(HTTPHeaderName::ContentDisposition));
++    String contentDisposition(httpHeaderField(HTTPHeaderName::ContentDisposition));
++    return filenameFromHTTPContentDisposition(String::fromUTF8WithLatin1Fallback(contentDisposition.characters8(), contentDisposition.length()));
+ }
+ }
diff --git a/patches/install-minibrowser.patch b/patches/install-minibrowser.patch
new file mode 100644 (file)
index 0000000..db1b33d
--- /dev/null
@@ -0,0 +1,33 @@
+From: Alberto Garcia <berto@igalia.com>
+Subject: Install the MiniBrowser binary
+Forwarded: not-needed
+Index: webkitgtk/Tools/MiniBrowser/gtk/main.c
+===================================================================
+--- webkitgtk.orig/Tools/MiniBrowser/gtk/main.c
++++ webkitgtk/Tools/MiniBrowser/gtk/main.c
+@@ -240,7 +240,6 @@ aboutURISchemeRequestCallback(WebKitURIS
+ int main(int argc, char *argv[])
+ {
+     gtk_init(&argc, &argv);
+-    g_setenv("WEBKIT_INJECTED_BUNDLE_PATH", WEBKIT_INJECTED_BUNDLE_PATH, FALSE);
+     const gchar *multiprocess = g_getenv("MINIBROWSER_MULTIPROCESS");
+     if (multiprocess && *multiprocess) {
+Index: webkitgtk/Tools/MiniBrowser/gtk/CMakeLists.txt
+===================================================================
+--- webkitgtk.orig/Tools/MiniBrowser/gtk/CMakeLists.txt
++++ webkitgtk/Tools/MiniBrowser/gtk/CMakeLists.txt
+@@ -52,3 +52,4 @@ include_directories(${MiniBrowser_INCLUD
+ add_executable(MiniBrowser ${MiniBrowser_SOURCES})
+ target_link_libraries(MiniBrowser ${MiniBrowser_LIBRARIES})
+ set_target_properties(MiniBrowser PROPERTIES FOLDER "Tools")
++install(TARGETS MiniBrowser DESTINATION "${LIBEXEC_INSTALL_DIR}")
+Index: webkitgtk/CMakeLists.txt
+===================================================================
+--- webkitgtk.orig/CMakeLists.txt
++++ webkitgtk/CMakeLists.txt
+@@ -184,3 +184,4 @@ add_subdirectory(Source)
+ if (ENABLE_TOOLS)
+     add_subdirectory(Tools)
+ endif ()
++add_subdirectory(Tools/MiniBrowser/gtk)
diff --git a/patches/local-label-string-hurd.patch b/patches/local-label-string-hurd.patch
new file mode 100644 (file)
index 0000000..f27f853
--- /dev/null
@@ -0,0 +1,15 @@
+From: Alberto Garcia <berto@igalia.com>
+Subject: Fix FTBFS in Hurd
+Forwarded: no
+Index: webkitgtk/Source/WTF/wtf/InlineASM.h
+===================================================================
+--- webkitgtk.orig/Source/WTF/wtf/InlineASM.h
++++ webkitgtk/Source/WTF/wtf/InlineASM.h
+@@ -82,6 +82,7 @@
+ #elif   OS(LINUX)               \
+      || OS(FREEBSD)             \
+      || OS(OPENBSD)             \
++     || OS(HURD)                \
+      || OS(NETBSD)
+     // GNU as-compatible syntax.
+ #define LOCAL_LABEL_STRING(name) ".L" #name
diff --git a/patches/no-ssl-record-version.patch b/patches/no-ssl-record-version.patch
new file mode 100644 (file)
index 0000000..c159f9b
--- /dev/null
@@ -0,0 +1,29 @@
+From: Carlos Alberto Lopez Perez <clopez@igalia.com>
+Subject: Don't use a SSL3.0 record version in client hello
+Origin: http://trac.webkit.org/changeset/176253
+Index: webkitgtk/Source/WebKit2/NetworkProcess/EntryPoint/unix/NetworkProcessMain.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebKit2/NetworkProcess/EntryPoint/unix/NetworkProcessMain.cpp
++++ webkitgtk/Source/WebKit2/NetworkProcess/EntryPoint/unix/NetworkProcessMain.cpp
+@@ -39,7 +39,7 @@ int main(int argc, char** argv)
+     // overwrite this priority string if it's already set by the user.
+     // Keep this in sync with WebProcessMain.cpp.
+     // https://bugzilla.gnome.org/show_bug.cgi?id=738633
+-    setenv("G_TLS_GNUTLS_PRIORITY", "NORMAL:%COMPAT:!VERS-SSL3.0", 0);
++    setenv("G_TLS_GNUTLS_PRIORITY", "NORMAL:%COMPAT:%LATEST_RECORD_VERSION:!VERS-SSL3.0", 0);
+     return NetworkProcessMainUnix(argc, argv);
+ }
+Index: webkitgtk/Source/WebKit2/WebProcess/EntryPoint/unix/WebProcessMain.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebKit2/WebProcess/EntryPoint/unix/WebProcessMain.cpp
++++ webkitgtk/Source/WebKit2/WebProcess/EntryPoint/unix/WebProcessMain.cpp
+@@ -39,7 +39,7 @@ int main(int argc, char** argv)
+     // overwrite this priority string if it's already set by the user.
+     // Keep this in sync with NetworkProcessMain.cpp.
+     // https://bugzilla.gnome.org/show_bug.cgi?id=738633
+-    setenv("G_TLS_GNUTLS_PRIORITY", "NORMAL:%COMPAT:!VERS-SSL3.0", 0);
++    setenv("G_TLS_GNUTLS_PRIORITY", "NORMAL:%COMPAT:%LATEST_RECORD_VERSION:!VERS-SSL3.0", 0);
+     return WebProcessMainUnix(argc, argv);
+ }
diff --git a/patches/nullptr-accessibilitymenulistoption.patch b/patches/nullptr-accessibilitymenulistoption.patch
new file mode 100644 (file)
index 0000000..18aab8a
--- /dev/null
@@ -0,0 +1,21 @@
+From: Joanmarie Diggs <jdiggs@igalia.com>
+Subject: Check for NULL pointers in AccessibilityMenuListOption
+Origin: http://trac.webkit.org/changeset/176389
+Index: webkitgtk/Source/WebCore/accessibility/AccessibilityMenuListOption.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/accessibility/AccessibilityMenuListOption.cpp
++++ webkitgtk/Source/WebCore/accessibility/AccessibilityMenuListOption.cpp
+@@ -104,9 +104,13 @@ bool AccessibilityMenuListOption::comput
+ LayoutRect AccessibilityMenuListOption::elementRect() const
+ {
+     AccessibilityObject* parent = parentObject();
++    if (!parent)
++        return boundingBoxRect();
+     ASSERT(parent->isMenuListPopup());
+     AccessibilityObject* grandparent = parent->parentObject();
++    if (!grandparent)
++        return boundingBoxRect();
+     ASSERT(grandparent->isMenuList());
+     return grandparent->elementRect();
diff --git a/patches/nullptr-applystylecommand.patch b/patches/nullptr-applystylecommand.patch
new file mode 100644 (file)
index 0000000..13032a4
--- /dev/null
@@ -0,0 +1,17 @@
+From: Csaba Osztrogonác <ossy@webkit.org>
+Subject: Check for NULL pointer in ApplyStyleCommand
+Origin: http://trac.webkit.org/changeset/176182
+Index: webkitgtk/Source/WebCore/editing/ApplyStyleCommand.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/editing/ApplyStyleCommand.cpp
++++ webkitgtk/Source/WebCore/editing/ApplyStyleCommand.cpp
+@@ -257,6 +257,9 @@ void ApplyStyleCommand::applyBlockStyle(
+     // addBlockStyleIfNeeded may moveParagraphs, which can remove these endpoints.
+     // Calculate start and end indices from the start of the tree that they're in.
+     Node* scope = highestEditableRoot(visibleStart.deepEquivalent());
++    if (!scope)
++        return;
++
+     RefPtr<Range> startRange = Range::create(document(), firstPositionInNode(scope), visibleStart.deepEquivalent().parentAnchoredEquivalent());
+     RefPtr<Range> endRange = Range::create(document(), firstPositionInNode(scope), visibleEnd.deepEquivalent().parentAnchoredEquivalent());
+     int startIndex = TextIterator::rangeLength(startRange.get(), true);
diff --git a/patches/nullptr-frameprogresstracker.patch b/patches/nullptr-frameprogresstracker.patch
new file mode 100644 (file)
index 0000000..653402b
--- /dev/null
@@ -0,0 +1,17 @@
+From: Jeffrey Pfau <jpfau@apple.com>
+Subject: Check for NULL pointer in FrameProgressTracker
+Origin: http://trac.webkit.org/changeset/175919
+Index: webkitgtk/Source/WebCore/loader/FrameLoader.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/loader/FrameLoader.cpp
++++ webkitgtk/Source/WebCore/loader/FrameLoader.cpp
+@@ -189,8 +189,7 @@ public:
+     ~FrameProgressTracker()
+     {
+-        ASSERT(!m_inProgress || m_frame.page());
+-        if (m_inProgress)
++        if (m_inProgress && m_frame.page())
+             m_frame.page()->progress().progressCompleted(m_frame);
+     }
diff --git a/patches/protect-document.patch b/patches/protect-document.patch
new file mode 100644 (file)
index 0000000..95b0d88
--- /dev/null
@@ -0,0 +1,15 @@
+From: David Kilzer <ddkilzer@apple.com>
+Subject: Protect Document in ProcessingInstruction::setXSLStyleSheet()
+Origin: http://trac.webkit.org/changeset/176014
+Index: webkitgtk/Source/WebCore/dom/ProcessingInstruction.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/dom/ProcessingInstruction.cpp
++++ webkitgtk/Source/WebCore/dom/ProcessingInstruction.cpp
+@@ -215,6 +215,7 @@ void ProcessingInstruction::setXSLStyleS
+ {
+     ASSERT(m_isXSL);
+     m_sheet = XSLStyleSheet::create(this, href, baseURL);
++    Ref<Document> protect(document());
+     parseStyleSheet(sheet);
+ }
+ #endif
diff --git a/patches/remote-inspector.patch b/patches/remote-inspector.patch
new file mode 100644 (file)
index 0000000..54ab509
--- /dev/null
@@ -0,0 +1,17 @@
+From: Carlos Garcia Campos <carlosgc@webkit.org>
+Subject: Make the remote inspector work again
+Bug: https://bugs.webkit.org/show_bug.cgi?id=138246
+Origin: http://trac.webkit.org/changeset/176392
+Index: webkitgtk/Source/WebKit2/UIProcess/WebPageProxy.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebKit2/UIProcess/WebPageProxy.cpp
++++ webkitgtk/Source/WebKit2/UIProcess/WebPageProxy.cpp
+@@ -639,7 +639,7 @@ void WebPageProxy::initializeWebPage()
+ #endif
+ #if ENABLE(INSPECTOR_SERVER)
+-    if (pageGroup().preferences().developerExtrasEnabled())
++    if (m_preferences->developerExtrasEnabled())
+         inspector()->enableRemoteInspection();
+ #endif
diff --git a/patches/render-block-cast.patch b/patches/render-block-cast.patch
new file mode 100644 (file)
index 0000000..9f564e4
--- /dev/null
@@ -0,0 +1,17 @@
+From: Carlos Garcia Campos <carlosgc@webkit.org>
+Subject: Fix invalid cast in WebCore::RenderBlock::blockSelectionGaps
+Bug: https://bugs.webkit.org/show_bug.cgi?id=137590
+Origin: http://trac.webkit.org/changeset/178261
+Index: webkitgtk/Source/WebCore/rendering/RenderBlock.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/rendering/RenderBlock.cpp
++++ webkitgtk/Source/WebCore/rendering/RenderBlock.cpp
+@@ -2040,7 +2040,7 @@ GapRects RenderBlock::blockSelectionGaps
+             lastLogicalTop = blockDirectionOffset(rootBlock, offsetFromRootBlock) + curr->logicalBottom();
+             lastLogicalLeft = logicalLeftSelectionOffset(rootBlock, curr->logicalBottom(), cache);
+             lastLogicalRight = logicalRightSelectionOffset(rootBlock, curr->logicalBottom(), cache);
+-        } else if (childState != SelectionNone) {
++        } else if (childState != SelectionNone && curr->isRenderBlock()) {
+             // We must be a block that has some selected object inside it.  Go ahead and recur.
+             result.unite(toRenderBlock(curr)->selectionGaps(rootBlock, rootBlockPhysicalPosition, LayoutSize(offsetFromRootBlock.width() + curr->x(), offsetFromRootBlock.height() + curr->y()), 
+                 lastLogicalTop, lastLogicalLeft, lastLogicalRight, childCache, paintInfo));
diff --git a/patches/render-text-control.patch b/patches/render-text-control.patch
new file mode 100644 (file)
index 0000000..a1c271b
--- /dev/null
@@ -0,0 +1,16 @@
+From: Zalan Bujtas <zalan@apple.com>
+Subject: Check for NULL pointer in SearchInputType.
+Origin: http://trac.webkit.org/changeset/175912
+Index: webkitgtk/Source/WebCore/html/SearchInputType.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/html/SearchInputType.cpp
++++ webkitgtk/Source/WebCore/html/SearchInputType.cpp
+@@ -185,7 +185,7 @@ bool SearchInputType::searchEventsShould
+ void SearchInputType::didSetValueByUserEdit(ValueChangeState state)
+ {
+-    if (m_cancelButton)
++    if (m_cancelButton && element().renderer())
+         toRenderSearchField(element().renderer())->updateCancelButtonVisibility();
+     // If the incremental attribute is set, then dispatch the search event
diff --git a/patches/restore_sparc_code.patch b/patches/restore_sparc_code.patch
new file mode 100644 (file)
index 0000000..ad78ed2
--- /dev/null
@@ -0,0 +1,61 @@
+From: Alberto Garcia <berto@igalia.com>
+Subject: Restore removed SPARC code
+Bug: https://bugs.webkit.org/show_bug.cgi?id=124941
+Index: webkitgtk/Source/WTF/wtf/Platform.h
+===================================================================
+--- webkitgtk.orig/Source/WTF/wtf/Platform.h
++++ webkitgtk/Source/WTF/wtf/Platform.h
+@@ -138,6 +138,23 @@
+ #define WTF_CPU_SH4 1
+ #endif
++/* CPU(SPARC32) - SPARC 32-bit */
++#if defined(__sparc) && !defined(__arch64__) || defined(__sparcv8)
++#define WTF_CPU_SPARC32 1
++#define WTF_CPU_BIG_ENDIAN 1
++#endif
++
++/* CPU(SPARC64) - SPARC 64-bit */
++#if defined(__sparc__) && defined(__arch64__) || defined (__sparcv9)
++#define WTF_CPU_SPARC64 1
++#define WTF_CPU_BIG_ENDIAN 1
++#endif
++
++/* CPU(SPARC) - any SPARC, true for CPU(SPARC32) and CPU(SPARC64) */
++#if CPU(SPARC32) || CPU(SPARC64)
++#define WTF_CPU_SPARC 1
++#endif
++
+ /* CPU(S390X) - S390 64-bit */
+ #if defined(__s390x__)
+ #define WTF_CPU_S390X 1
+@@ -333,7 +350,7 @@
+ #endif /* ARM */
+-#if CPU(ARM) || CPU(MIPS) || CPU(SH4)
++#if CPU(ARM) || CPU(MIPS) || CPU(SH4) || CPU(SPARC)
+ #define WTF_CPU_NEEDS_ALIGNED_ACCESS 1
+ #endif
+@@ -643,6 +660,7 @@
+     || (CPU(IA64) && !CPU(IA64_32)) \
+     || CPU(ALPHA) \
+     || CPU(ARM64) \
++    || CPU(SPARC64) \
+     || CPU(S390X) \
+     || CPU(PPC64) \
+     || CPU(PPC64LE)
+Index: webkitgtk/Source/WTF/wtf/dtoa/utils.h
+===================================================================
+--- webkitgtk.orig/Source/WTF/wtf/dtoa/utils.h
++++ webkitgtk/Source/WTF/wtf/dtoa/utils.h
+@@ -49,7 +49,7 @@
+ defined(__ARMEL__) || \
+ defined(_MIPS_ARCH_MIPS32R2)
+ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+-#elif CPU(MIPS) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || OS(WINCE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA)
++#elif CPU(MIPS) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || OS(WINCE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(SPARC) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA)
+ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+ #elif defined(_M_IX86) || defined(__i386__)
+ #if defined(_WIN32)
diff --git a/patches/serialized-script-value.patch b/patches/serialized-script-value.patch
new file mode 100644 (file)
index 0000000..bbf825f
--- /dev/null
@@ -0,0 +1,54 @@
+From: Carlos Garcia Campos carlosgc@webkit.org>
+Subject: Prevent unsafe access to internal types
+Bug: https://bugs.webkit.org/show_bug.cgi?id=138653
+Origin: http://trac.webkit.org/changeset/178320
+Index: webkitgtk/Source/JavaScriptCore/runtime/MapData.h
+===================================================================
+--- webkitgtk.orig/Source/JavaScriptCore/runtime/MapData.h
++++ webkitgtk/Source/JavaScriptCore/runtime/MapData.h
+@@ -42,8 +42,8 @@ public:
+         const_iterator(const MapData*);
+         ~const_iterator();
+         const WTF::KeyValuePair<JSValue, JSValue> operator*() const;
+-        JSValue key() const { ASSERT(!atEnd()); return m_mapData->m_entries[m_index].key.get(); }
+-        JSValue value() const { ASSERT(!atEnd()); return m_mapData->m_entries[m_index].value.get(); }
++        JSValue key() const { RELEASE_ASSERT(!atEnd()); return m_mapData->m_entries[m_index].key.get(); }
++        JSValue value() const { RELEASE_ASSERT(!atEnd()); return m_mapData->m_entries[m_index].value.get(); }
+         void operator++() { ASSERT(!atEnd()); internalIncrement(); }
+         static const_iterator end(const MapData*);
+         bool operator!=(const const_iterator& other);
+Index: webkitgtk/Source/WebCore/bindings/js/SerializedScriptValue.cpp
+===================================================================
+--- webkitgtk.orig/Source/WebCore/bindings/js/SerializedScriptValue.cpp
++++ webkitgtk/Source/WebCore/bindings/js/SerializedScriptValue.cpp
+@@ -1218,6 +1218,7 @@ SerializationReturnCode CloneSerializer:
+     Vector<JSObject*, 32> inputObjectStack;
+     Vector<MapData*, 4> mapDataStack;
+     Vector<MapData::const_iterator, 4> iteratorStack;
++    Vector<JSValue, 4> iteratorValueStack;
+     Vector<WalkerState, 16> stateStack;
+     WalkerState state = StateUnknown;
+     JSValue inValue = in;
+@@ -1386,16 +1387,20 @@ SerializationReturnCode CloneSerializer:
+                     goto objectStartVisitMember;
+                 }
+                 inValue = ptr.key();
++                m_gcBuffer.append(ptr.value());
++                iteratorValueStack.append(ptr.value());
+                 stateStack.append(MapDataEndVisitKey);
+                 goto stateUnknown;
+             }
+             case MapDataEndVisitKey: {
+-                inValue = iteratorStack.last().value();
++                inValue = iteratorValueStack.last();
++                iteratorValueStack.removeLast();
+                 stateStack.append(MapDataEndVisitValue);
+                 goto stateUnknown;
+             }
+             case MapDataEndVisitValue: {
+-                ++iteratorStack.last();
++                if (iteratorStack.last() != mapDataStack.last()->end())
++                    ++iteratorStack.last();
+                 goto mapDataStartVisitEntry;
+             }
diff --git a/patches/series b/patches/series
new file mode 100644 (file)
index 0000000..b1db394
--- /dev/null
@@ -0,0 +1,32 @@
+dfg-jit.patch
+install-minibrowser.patch
+restore_sparc_code.patch
+local-label-string-hurd.patch
+atomic_build_fix.patch
+css-image-set.patch
+fix-mips64-build.patch
+flash-crash.patch
+no-ssl-record-version.patch
+render-text-control.patch
+nullptr-frameprogresstracker.patch
+nullptr-applystylecommand.patch
+nullptr-accessibilitymenulistoption.patch
+twitter-inserted-text.patch
+protect-document.patch
+at-spi2.patch
+ax-focus-events.patch
+fix-ftbfs-hppa.patch
+fix-gstreamer-leak.patch
+remote-inspector.patch
+render-block-cast.patch
+fix-jit-crash.patch
+fix-null-renderer.patch
+fix-integer-overflow.patch
+serialized-script-value.patch
+http-latin1.patch
+fix-null-string-conversion.patch
+fix-timers-animations.patch
+fix-ax-crash.patch
+fix-clearselection-segfault.patch
+fix-date.patch
+check-tls-errors.patch
diff --git a/patches/twitter-inserted-text.patch b/patches/twitter-inserted-text.patch
new file mode 100644 (file)
index 0000000..41a2eed
--- /dev/null
@@ -0,0 +1,21 @@
+From: Andreas Kling  <akling@apple.com>
+Subject: Fix inserted text when typing in the Twitter message box.
+Origin: http://trac.webkit.org/changeset/176824
+Index: webkitgtk/Source/JavaScriptCore/runtime/JSString.h
+===================================================================
+--- webkitgtk.orig/Source/JavaScriptCore/runtime/JSString.h
++++ webkitgtk/Source/JavaScriptCore/runtime/JSString.h
+@@ -482,12 +482,7 @@ ALWAYS_INLINE AtomicStringImpl* JSString
+         return static_cast<const JSRopeString*>(this)->resolveRopeToExistingAtomicString(exec);
+     if (m_value.impl()->isAtomic())
+         return static_cast<AtomicStringImpl*>(m_value.impl());
+-    if (AtomicStringImpl* existingAtomicString = AtomicString::find(m_value.impl())) {
+-        m_value = *existingAtomicString;
+-        setIs8Bit(m_value.impl()->is8Bit());
+-        return existingAtomicString;
+-    }
+-    return nullptr;
++    return AtomicString::find(m_value.impl());
+ }
+ inline const String& JSString::value(ExecState* exec) const
diff --git a/rules b/rules
new file mode 100755 (executable)
index 0000000..a98d2fe
--- /dev/null
+++ b/rules
@@ -0,0 +1,103 @@
+#!/usr/bin/make -f
+
+DEB_BUILD_ARCH     ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
+DEB_HOST_ARCH_BITS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_BITS)
+DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
+
+CPPFLAGS = $(shell dpkg-buildflags --get CPPFLAGS) -Wall
+CFLAGS = $(shell dpkg-buildflags --get CFLAGS)
+LDFLAGS = $(shell dpkg-buildflags --get LDFLAGS) -Wl,--as-needed
+
+EXTRA_DH_ARGUMENTS =
+
+# Sacrifice speed in order to make it more likely resource limits
+# won't be hit.
+ifeq ($(DEB_HOST_ARCH_BITS),32)
+       LDFLAGS += -Wl,--no-keep-memory
+endif
+
+ifeq ($(DEB_BUILD_ARCH),alpha)
+       LDFLAGS += -Wl,--no-relax
+endif
+
+# Disable debugging symbols on these arches.
+ifneq (,$(filter $(DEB_BUILD_ARCH),hurd-i386 ia64 kfreebsd-i386 kfreebsd-amd64 mips mipsel powerpc powerpcspe s390 s390x sparc armel armhf))
+       CFLAGS := $(CFLAGS:-g=)
+       EXTRA_DH_ARGUMENTS += -Nlibwebkit2gtk-4.0-37-dbg -Nlibjavascriptcoregtk-4.0-18-dbg
+endif
+
+# See https://bugs.webkit.org/show_bug.cgi?id=113638
+ifeq (,$(filter $(DEB_BUILD_ARCH),i386 amd64 hurd-i386 kfreebsd-i386 kfreebsd-amd64 armhf))
+       EXTRA_CMAKE_ARGUMENTS += -DENABLE_JIT=OFF
+       CPPFLAGS += -DENABLE_YARR_JIT=0 -DENABLE_ASSEMBLER=0
+endif
+
+ifneq (,$(filter noopt,$(DEB_BUILD_OPTIONS)))
+       EXTRA_CMAKE_ARGUMENTS += -DUSE_SYSTEM_MALLOC=ON
+endif
+
+ifneq (,$(filter debug,$(DEB_BUILD_OPTIONS)))
+       EXTRA_CMAKE_ARGUMENTS += -DCMAKE_BUILD_TYPE=Debug
+else
+       EXTRA_CMAKE_ARGUMENTS += -DCMAKE_BUILD_TYPE=Release
+       CPPFLAGS += -DNDEBUG
+endif
+
+ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes)
+       DEB_DH_GENCONTROL_ARGS += -- -Vgst:Recommends=""
+else
+       DEB_DH_GENCONTROL_ARGS += -- -Vgst:Recommends="gstreamer1.0-plugins-bad, gstreamer1.0-libav,"
+endif
+
+%:
+       dh $@ --parallel $(EXTRA_DH_ARGUMENTS)
+
+override_dh_auto_configure:
+       slimit -m debian/jquery-1.9.1.js > \
+          Source/WebInspectorUI/Tools/PrettyPrinting/populate/jquery.min.js
+       CFLAGS="$(CFLAGS) $(CPPFLAGS)" \
+       CXXFLAGS="$(CFLAGS) $(CPPFLAGS)" \
+       LDFLAGS="$(LDFLAGS)" \
+       dh_auto_configure -- \
+          -DPORT=GTK \
+          -DCMAKE_INSTALL_LIBEXECDIR=lib/$(DEB_HOST_MULTIARCH) \
+          -DCMAKE_C_FLAGS_RELEASE="" \
+          -DCMAKE_C_FLAGS_DEBUG="" \
+          -DCMAKE_CXX_FLAGS_RELEASE="" \
+          -DCMAKE_CXX_FLAGS_DEBUG="" \
+          $(EXTRA_CMAKE_ARGUMENTS)
+
+override_dh_strip:
+       dh_strip -plibwebkit2gtk-4.0-37 --dbg-package=libwebkit2gtk-4.0-37-dbg $(EXTRA_DH_ARGUMENTS)
+       dh_strip -plibjavascriptcoregtk-4.0-18 --dbg-package=libjavascriptcoregtk-4.0-18-dbg $(EXTRA_DH_ARGUMENTS)
+       dh_strip $(EXTRA_DH_ARGUMENTS)
+
+override_dh_makeshlibs:
+       dh_makeshlibs -plibwebkit2gtk-4.0-37 -Xinjected-bundle $(EXTRA_DH_ARGUMENTS)
+       dh_makeshlibs -plibjavascriptcoregtk-4.0-18 $(EXTRA_DH_ARGUMENTS)
+
+override_dh_shlibdeps:
+       dh_shlibdeps $(EXTRA_DH_ARGUMENTS)
+       dh_girepository $(EXTRA_DH_ARGUMENTS)
+
+override_dh_clean:
+       dh_clean $(EXTRA_DH_ARGUMENTS)
+       rm -f Source/WebInspectorUI/Tools/PrettyPrinting/populate/jquery.min.js
+
+override_dh_auto_test:
+
+VERSION := $(shell dpkg-parsechangelog | sed -ne 's/^Version: \(.*\)-.*/\1/p')
+UPSTREAM_VERSION := $(shell echo $(VERSION) | sed 's/+dfsg1//')
+
+get-orig-source:
+       dh_testdir
+       uscan --rename --download-current-version
+       mkdir "webkit2gtk-$(VERSION)"
+       tar -C "webkit2gtk-$(VERSION)" \
+               --strip-components=1 \
+               --exclude=Source/WebInspectorUI/Tools/PrettyPrinting/populate/jquery.min.js \
+               --exclude=Tools/WebKitTestRunner/gtk/fonts/FontWithNoValidEncoding.fon \
+               -xaf "../webkit2gtk_$(UPSTREAM_VERSION).orig.tar.xz"
+       fakeroot tar -caf "../webkit2gtk_$(VERSION).orig.tar.xz" \
+               "webkit2gtk-$(VERSION)"
+       rm -rf "webkit2gtk-$(VERSION)"
diff --git a/source/format b/source/format
new file mode 100644 (file)
index 0000000..163aaf8
--- /dev/null
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/watch b/watch
new file mode 100644 (file)
index 0000000..ac25f7a
--- /dev/null
+++ b/watch
@@ -0,0 +1,3 @@
+version=3
+opts="dversionmangle=s/\+dfsg\d+$//" \
+   http://webkitgtk.org/releases/ webkitgtk-([\d]+\.[\d]*[\d]\.[\d]+).tar.xz