webkit2gtk (2.6.2+dfsg1-4) unstable; urgency=medium
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)
  * 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.

[dgit import unpatched webkit2gtk 2.6.2+dfsg1-4]

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

index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..6863a5bf939155c2f02610266b4244f532bf6602
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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 --cc debian/compat
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..45a4fb75db864000d01701c0f7a51864bd4daabf
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++8
diff --cc debian/control
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..19defbfa15f9f569dca3714e002c6b82fa2d0583
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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.
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b8e2e9940bfef7d4fb2bd527276108ded6e0cb00
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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 --cc debian/gbp.conf
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..de72780ed5e059c089e7834960f277260ef65cd3
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,5 @@@
++[DEFAULT]
++debian-branch = experimental
++upstream-branch = webkitgtk-2.6
++pristine-tar = False
++compression = xz
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..aa30b14b3bfd25b8a6624799923c099f2e5e8e60
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++usr/lib/*/girepository-1.0/JavaScriptCore-4.0.typelib
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..723337e75afa9fe762c52aceed6cc91b6842dda3
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,2 @@@
++usr/lib/*/girepository-1.0/WebKit2-4.0.typelib
++usr/lib/*/girepository-1.0/WebKit2WebExtension-4.0.typelib
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e2c203fe978b83f4ca8d1ba97633f5a5d50bd53b
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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 --cc debian/jsc.1
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..f8fbe5db554496ea024fb2fff96a92a5fa0a39c7
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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.
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..a4bec667e983aff5a14174454b73db2376ae41e7
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++usr/lib/*/libjavascriptcoregtk-4.0.so.*
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..95b258bbbe4e6a99625e7cae51927a9fd58136b0
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++usr/bin/jsc
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..edab6421537e1f6152be0583553a92d7600aa311
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++debian/jsc.1
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..9a0e4a17a3e6e887f5ab4c7dbb0ec495adb2de79
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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/
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..a7c1b21a6ad37acda015629f77df6675025a08cc
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,3 @@@
++usr/lib/*/libwebkit2gtk-4.0.so.*
++usr/lib/*/webkit2gtk-4.0
++usr/share/locale/*
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..3f99757879f45d1d4e00803e67bb6a18a8a016ae
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++libwebkit2gtk-4.0-37: shared-lib-without-dependency-information usr/lib/*/webkit2gtk-4.0/injected-bundle/libwebkit2gtkinjectedbundle.so
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..964e484eeb9931435b46fec0f43bc5919de739cf
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b91651824b6bbcbb7b122cffb1688961af277cdd
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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/
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..61f54bf80242ce855c99e75e990f86252d8d930c
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..8a32731195a9c5662709ebf5478af5c626168a78
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++Documentation/webkit2gtk/html/* usr/share/doc/libwebkit2gtk-4.0-doc/html/
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..9daa84c7d3f74d7c4a953600cb124443092afd1f
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..37c9e9a2b06ebe9699b30daa2d2f8af53e9aceb0
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..2021d93a100d64d58ebe53c07817741220b2f2a5
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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;
+++}
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..57fdbfd5ecdc2a78dce63394160bb813d8f40973
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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());
++ }
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..c7b464588611c62e72664823ed698682129388e7
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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));
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..5190fdfa9033059c9c69ef3301d7b7e920304adf
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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)
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..c1441a05e0993b1393f914b6a2dabd8c8cc2993e
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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. */
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..96740a9fea9db28ec84b5bed91587750333fecb8
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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 {
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..6074a864f0ad43f48892336aea86a9200ec4416b
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..c855a9bab6a0d91d65e8808b25a2317fbd49e051
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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
++ 
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..4581a8ddf5192b8560d6b3fe25dc2a6b4464fb88
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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)
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..080c67556fcff1804b737935d925e19096690916
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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;
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..da8b76ea40acf2ef15331d061e27ef8384077c9f
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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);
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..6673a9d11d2eb95854ca798ba75b6c5b37bbf130
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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;
++     }
++ 
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b2c50d2d3e90784d3e2b9c912b4878943ce5562d
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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)
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..4c8456956fb827e95f68d3a4e52735d13384c346
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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;
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..2015897a1a96643d5c13e8f0f2cbab19ff6fafd1
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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));
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..1c05af948278e07547417a0f891404d7bda2f9e3
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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;
++ };
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..86b824f25fd4461b561cac4ff0fcd977657c41c8
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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) {
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..fa087e0aa6d223b528e9b2bd6de19459edaec2cc
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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()));
++ }
++ 
++ }
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..db1b33d735b5588cae40bb54c4fd1e675cb058a7
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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)
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..f27f8537336ff68ec2d5ff1212ab4fd8aa6e1ce2
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..c159f9ba9809babfa8956b6e1068fac4ea1440fc
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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);
++ }
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..18aab8a710e64d433e65dd080bcf6f132e224a0c
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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();
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..13032a4113c0481d0e8e386ed34c6bfadade4df5
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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);
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..653402b30358e9903eb36f1daccfe734f4ea2c75
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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);
++     }
++ 
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..95b0d88467eba4fbe3d7c91be298a7ebaa592d9d
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..54ab509335d98557b6fdc3b12ea42b7d138a3c10
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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
++ 
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..9f564e4c31c8b5cee650bd283e788c8f40aeaf2f
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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));
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..a1c271b506dac577345bdb222e715ed52a6880fc
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..ad78ed23ca0aa368522ba4ddb72837d8c164585c
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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)
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..bbf825fecdd65eff38e1951fd046e9b7e1417fae
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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;
++             }
++ 
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b1db39490e9617a2203731a0df2c850b37838c1d
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..41a2eed7f0cf6aa07765878cf634508464b99d90
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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 --cc debian/rules
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..a98d2fe6abae7d6d04a31ed079a87352ddd95498
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,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)"
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..163aaf8d82b6c54f23c45f32895dbdfdcc27b047
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++3.0 (quilt)
diff --cc debian/watch
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..ac25f7a166f0ffae7bed43305c9147f61ee87777
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,3 @@@
++version=3
++opts="dversionmangle=s/\+dfsg\d+$//" \
++   http://webkitgtk.org/releases/ webkitgtk-([\d]+\.[\d]*[\d]\.[\d]+).tar.xz