From 76d603c04aa09eb159d5a40c53c4d26e30562eb6 Mon Sep 17 00:00:00 2001 From: Till Rohrmann Date: Fri, 10 Oct 2014 15:50:27 +0200 Subject: [PATCH] Moved WebInfoServer and WebInterfaceServer resources into resource folders of respective projects. Jetty uses the jar as base directory. --- DEPENDENCIES | 2 +- LICENSE | 2 +- .../apache/flink/yarn/ApplicationMaster.scala | 14 +- flink-addons/pom.xml | 10 +- .../flink/client/web/WebInterfaceServer.java | 30 ++-- .../resources/web-docs/css/bootstrap.css | 0 .../main}/resources/web-docs/css/graph.css | 0 .../web-docs/css/nephelefrontend.css | 0 .../main}/resources/web-docs/css/overlay.css | 0 .../resources/web-docs/css/pactgraphs.css | 0 .../main/resources/web-docs/img/FlinkLogo.png | Bin 0 -> 7547 bytes .../resources/web-docs/img/GradientBoxes.png | Bin 0 -> 26286 bytes .../resources/web-docs/img/arrows/arr.gif | Bin 0 -> 901 bytes .../resources/web-docs/img/arrows/arr2.gif | Bin 0 -> 845 bytes .../resources/web-docs/img/arrows/arr2_d.gif | Bin 0 -> 851 bytes .../resources/web-docs/img/arrows/arr2_l.gif | Bin 0 -> 846 bytes .../resources/web-docs/img/arrows/arr2_r.gif | Bin 0 -> 845 bytes .../resources/web-docs/img/arrows/arr2_u.gif | Bin 0 -> 852 bytes .../resources/web-docs/img/arrows/arr_d.gif | Bin 0 -> 911 bytes .../resources/web-docs/img/arrows/arr_l.gif | Bin 0 -> 902 bytes .../resources/web-docs/img/arrows/arr_r.gif | Bin 0 -> 901 bytes .../resources/web-docs/img/arrows/arr_u.gif | Bin 0 -> 910 bytes .../resources/web-docs/img/arrows/arrow.gif | Bin 0 -> 53 bytes .../resources/web-docs/img/arrows/arrow_d.gif | Bin 0 -> 828 bytes .../resources/web-docs/img/arrows/arrow_l.gif | Bin 0 -> 828 bytes .../resources/web-docs/img/arrows/arrow_r.gif | Bin 0 -> 53 bytes .../resources/web-docs/img/arrows/arrow_u.gif | Bin 0 -> 827 bytes .../resources/web-docs/img/delete-icon.png | Bin .../main/resources/web-docs/img/gradient.jpg | Bin 0 -> 28636 bytes .../resources/web-docs/img/overlay/close.png | Bin .../main}/resources/web-docs/index.html | 0 .../resources/web-docs/js/bootstrap.min.js | 0 .../main}/resources/web-docs/js/d3.js | 0 .../main}/resources/web-docs/js/dagre-d3.js | 0 .../resources/web-docs/js/graphCreator.js | 0 .../resources/web-docs/js/jquery-2.1.0.js | 0 .../resources/web-docs/js/jquery.tools.min.js | 0 .../main}/resources/web-docs/js/program.js | 0 .../main}/resources/web-docs/launch.html | 0 .../flink/configuration/ConfigConstants.java | 45 ----- flink-dist/pom.xml | 82 +++++++--- flink-dist/src/main/assemblies/bin.xml | 20 --- .../src/main/assemblies/yarn-uberjar.xml | 10 -- flink-dist/src/main/flink-bin/LICENSE | 2 +- flink-dist/src/main/resources/flink-conf.yaml | 77 +++++++++ .../runtime/jobmanager/web/WebInfoServer.java | 37 ++--- .../web-docs-infoserver/analyze.html | 0 .../web-docs-infoserver/blank-page.html | 0 .../web-docs-infoserver/configuration.html | 0 .../web-docs-infoserver/css/bootstrap.css | 0 .../web-docs-infoserver/css/bootstrap.min.css | 0 .../css/nephelefrontend.css | 0 .../web-docs-infoserver/css/sb-admin.css | 0 .../web-docs-infoserver/css/timeline.css | 0 .../font-awesome/css/font-awesome.css | 0 .../font-awesome/css/font-awesome.min.css | 0 .../font-awesome/fonts/FontAwesome.otf | Bin .../fonts/fontawesome-webfont.eot | Bin .../fonts/fontawesome-webfont.svg | 0 .../fonts/fontawesome-webfont.ttf | Bin .../fonts/fontawesome-webfont.woff | Bin .../font-awesome/less/bordered-pulled.less | 0 .../font-awesome/less/core.less | 0 .../font-awesome/less/fixed-width.less | 0 .../font-awesome/less/font-awesome.less | 0 .../font-awesome/less/icons.less | 0 .../font-awesome/less/larger.less | 0 .../font-awesome/less/list.less | 0 .../font-awesome/less/mixins.less | 0 .../font-awesome/less/path.less | 0 .../font-awesome/less/rotated-flipped.less | 0 .../font-awesome/less/spinning.less | 0 .../font-awesome/less/stacked.less | 0 .../font-awesome/less/variables.less | 0 .../font-awesome/scss/_bordered-pulled.scss | 0 .../font-awesome/scss/_core.scss | 0 .../font-awesome/scss/_fixed-width.scss | 0 .../font-awesome/scss/_icons.scss | 0 .../font-awesome/scss/_larger.scss | 0 .../font-awesome/scss/_list.scss | 0 .../font-awesome/scss/_mixins.scss | 0 .../font-awesome/scss/_path.scss | 0 .../font-awesome/scss/_rotated-flipped.scss | 0 .../font-awesome/scss/_spinning.scss | 0 .../font-awesome/scss/_stacked.scss | 0 .../font-awesome/scss/_variables.scss | 0 .../font-awesome/scss/font-awesome.scss | 0 .../web-docs-infoserver/history.html | 0 .../resources/web-docs-infoserver/index.html | 0 .../web-docs-infoserver/js/analyzer.js | 0 .../web-docs-infoserver/js/bootstrap.js | 0 .../web-docs-infoserver/js/bootstrap.min.js | 0 .../web-docs-infoserver/js/configuration.js | 0 .../js/flot/chart-data-flot.js | 0 .../js/flot/excanvas.min.js | 0 .../js/flot/jquery.flot.js | 0 .../js/flot/jquery.flot.pie.js | 0 .../js/flot/jquery.flot.resize.js | 0 .../js/flot/jquery.flot.tooltip.min.js | 0 .../web-docs-infoserver/js/helpers.js | 0 .../web-docs-infoserver/js/jcanvas.min.js | 0 .../js/jobmanagerFrontend.js | 0 .../web-docs-infoserver/js/jquery-1.10.2.js | 6 + .../js/jquery.flot.categories.min.js | 0 .../web-docs-infoserver/js/jquery.flot.min.js | 0 .../js/jquery.flot.stack.js | 0 .../js/jquery.flot.time.min.js | 0 .../web-docs-infoserver/js/jquery.js | 154 ++++++++++++++++++ .../web-docs-infoserver/js/taskmanager.js | 0 .../web-docs-infoserver/js/timeline.js | 0 .../web-docs-infoserver/taskmanagers.html | 0 flink-shaded/pom.xml | 32 ++-- pom.xml | 30 ++-- 113 files changed, 369 insertions(+), 184 deletions(-) rename flink-clients/{ => src/main}/resources/web-docs/css/bootstrap.css (100%) rename flink-clients/{ => src/main}/resources/web-docs/css/graph.css (100%) rename flink-clients/{ => src/main}/resources/web-docs/css/nephelefrontend.css (100%) rename flink-clients/{ => src/main}/resources/web-docs/css/overlay.css (100%) rename flink-clients/{ => src/main}/resources/web-docs/css/pactgraphs.css (100%) create mode 100755 flink-clients/src/main/resources/web-docs/img/FlinkLogo.png create mode 100755 flink-clients/src/main/resources/web-docs/img/GradientBoxes.png create mode 100755 flink-clients/src/main/resources/web-docs/img/arrows/arr.gif create mode 100755 flink-clients/src/main/resources/web-docs/img/arrows/arr2.gif create mode 100755 flink-clients/src/main/resources/web-docs/img/arrows/arr2_d.gif create mode 100755 flink-clients/src/main/resources/web-docs/img/arrows/arr2_l.gif create mode 100755 flink-clients/src/main/resources/web-docs/img/arrows/arr2_r.gif create mode 100755 flink-clients/src/main/resources/web-docs/img/arrows/arr2_u.gif create mode 100755 flink-clients/src/main/resources/web-docs/img/arrows/arr_d.gif create mode 100755 flink-clients/src/main/resources/web-docs/img/arrows/arr_l.gif create mode 100755 flink-clients/src/main/resources/web-docs/img/arrows/arr_r.gif create mode 100755 flink-clients/src/main/resources/web-docs/img/arrows/arr_u.gif create mode 100755 flink-clients/src/main/resources/web-docs/img/arrows/arrow.gif create mode 100755 flink-clients/src/main/resources/web-docs/img/arrows/arrow_d.gif create mode 100755 flink-clients/src/main/resources/web-docs/img/arrows/arrow_l.gif create mode 100755 flink-clients/src/main/resources/web-docs/img/arrows/arrow_r.gif create mode 100755 flink-clients/src/main/resources/web-docs/img/arrows/arrow_u.gif rename flink-clients/{ => src/main}/resources/web-docs/img/delete-icon.png (100%) create mode 100755 flink-clients/src/main/resources/web-docs/img/gradient.jpg rename flink-clients/{ => src/main}/resources/web-docs/img/overlay/close.png (100%) rename flink-clients/{ => src/main}/resources/web-docs/index.html (100%) rename flink-clients/{ => src/main}/resources/web-docs/js/bootstrap.min.js (100%) rename flink-clients/{ => src/main}/resources/web-docs/js/d3.js (100%) rename flink-clients/{ => src/main}/resources/web-docs/js/dagre-d3.js (100%) rename flink-clients/{ => src/main}/resources/web-docs/js/graphCreator.js (100%) rename flink-clients/{ => src/main}/resources/web-docs/js/jquery-2.1.0.js (100%) rename flink-clients/{ => src/main}/resources/web-docs/js/jquery.tools.min.js (100%) rename flink-clients/{ => src/main}/resources/web-docs/js/program.js (100%) rename flink-clients/{ => src/main}/resources/web-docs/launch.html (100%) create mode 100644 flink-dist/src/main/resources/flink-conf.yaml rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/analyze.html (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/blank-page.html (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/configuration.html (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/css/bootstrap.css (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/css/bootstrap.min.css (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/css/nephelefrontend.css (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/css/sb-admin.css (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/css/timeline.css (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/css/font-awesome.css (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/css/font-awesome.min.css (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/fonts/FontAwesome.otf (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.eot (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.svg (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.ttf (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.woff (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/less/bordered-pulled.less (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/less/core.less (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/less/fixed-width.less (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/less/font-awesome.less (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/less/icons.less (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/less/larger.less (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/less/list.less (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/less/mixins.less (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/less/path.less (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/less/rotated-flipped.less (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/less/spinning.less (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/less/stacked.less (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/less/variables.less (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/scss/_bordered-pulled.scss (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/scss/_core.scss (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/scss/_fixed-width.scss (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/scss/_icons.scss (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/scss/_larger.scss (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/scss/_list.scss (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/scss/_mixins.scss (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/scss/_path.scss (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/scss/_rotated-flipped.scss (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/scss/_spinning.scss (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/scss/_stacked.scss (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/scss/_variables.scss (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/font-awesome/scss/font-awesome.scss (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/history.html (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/index.html (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/analyzer.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/bootstrap.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/bootstrap.min.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/configuration.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/flot/chart-data-flot.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/flot/excanvas.min.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/flot/jquery.flot.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/flot/jquery.flot.pie.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/flot/jquery.flot.resize.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/flot/jquery.flot.tooltip.min.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/helpers.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/jcanvas.min.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/jobmanagerFrontend.js (100%) create mode 100755 flink-runtime/src/main/resources/web-docs-infoserver/js/jquery-1.10.2.js rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/jquery.flot.categories.min.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/jquery.flot.min.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/jquery.flot.stack.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/jquery.flot.time.min.js (100%) create mode 100644 flink-runtime/src/main/resources/web-docs-infoserver/js/jquery.js rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/taskmanager.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/js/timeline.js (100%) rename flink-runtime/{ => src/main}/resources/web-docs-infoserver/taskmanagers.html (100%) diff --git a/DEPENDENCIES b/DEPENDENCIES index 9947b0d868eb8..1f421d62c3187 100644 --- a/DEPENDENCIES +++ b/DEPENDENCIES @@ -165,7 +165,7 @@ The Apache Flink project packages the following fonts under the Open Font License (OFT) - http://scripts.sil.org/OFL/ - Font Awesome (http://fortawesome.github.io/Font-Awesome/) - Created by Dave Gandy - -> fonts in "flink-runtime/resources/web-docs-infoserver/font-awesome/fonts" + -> fonts in "flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/fonts" diff --git a/LICENSE b/LICENSE index 906991163d411..f4286fecf3fb3 100644 --- a/LICENSE +++ b/LICENSE @@ -293,5 +293,5 @@ The Apache Flink project bundles the following fonts under the Open Font License (OFT) - http://scripts.sil.org/OFL/ - Font Awesome (http://fortawesome.github.io/Font-Awesome/) - Created by Dave Gandy - -> fonts in "flink-runtime/resources/web-docs-infoserver/font-awesome/fonts" + -> fonts in "flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/fonts" diff --git a/flink-addons/flink-yarn/src/main/scala/org/apache/flink/yarn/ApplicationMaster.scala b/flink-addons/flink-yarn/src/main/scala/org/apache/flink/yarn/ApplicationMaster.scala index e305f5fa6bfad..eab1b484948ec 100644 --- a/flink-addons/flink-yarn/src/main/scala/org/apache/flink/yarn/ApplicationMaster.scala +++ b/flink-addons/flink-yarn/src/main/scala/org/apache/flink/yarn/ApplicationMaster.scala @@ -69,8 +69,6 @@ object ApplicationMaster{ val taskManagerCount = env.get(Client.ENV_TM_COUNT).toInt val slots = env.get(Client.ENV_SLOTS).toInt val dynamicPropertiesEncodedString = env.get(Client.ENV_DYNAMIC_PROPERTIES) - val localWebInterfaceDir = - s"$currDir/resources/${ConfigConstants.DEFAULT_JOB_MANAGER_WEB_PATH_NAME}" val appNumber = env.get(Client.ENV_APP_NUMBER).toInt @@ -84,8 +82,8 @@ object ApplicationMaster{ val jobManagerWebPort = GlobalConfiguration.getInteger(ConfigConstants .JOB_MANAGER_WEB_PORT_KEY, ConfigConstants.DEFAULT_JOB_MANAGER_WEB_FRONTEND_PORT) - generateConfigurationFile(currDir, ownHostname, jobManagerPort, localWebInterfaceDir, - jobManagerWebPort, logDirs, slots, taskManagerCount, dynamicPropertiesEncodedString) + generateConfigurationFile(currDir, ownHostname, jobManagerPort, jobManagerWebPort, + logDirs, slots, taskManagerCount, dynamicPropertiesEncodedString) val (system, actor) = startJobManager(currDir) @@ -114,8 +112,9 @@ object ApplicationMaster{ } def generateConfigurationFile(currDir: String, ownHostname: String, jobManagerPort: Int, - localWebInterfaceDir: String, jobManagerWebPort: Int, logDirs: - String, slots: Int, taskManagerCount: Int, dynamicPropertiesEncodedString: String): Unit = { + jobManagerWebPort: Int, logDirs: String, slots: Int, + taskManagerCount: Int, dynamicPropertiesEncodedString: String) + : Unit = { val output = new PrintWriter(new BufferedWriter(new FileWriter(s"$currDir/flink-conf-modified" + s".yaml"))) @@ -128,7 +127,6 @@ object ApplicationMaster{ output.println(s"${ConfigConstants.JOB_MANAGER_IPC_ADDRESS_KEY}: $ownHostname") output.println(s"${ConfigConstants.JOB_MANAGER_IPC_PORT_KEY}: $jobManagerPort") - output.println(s"${ConfigConstants.JOB_MANAGER_WEB_ROOT_PATH_KEY}: $localWebInterfaceDir") output.println(s"${ConfigConstants.JOB_MANAGER_WEB_LOG_PATH_KEY}: $logDirs") output.println(s"${ConfigConstants.JOB_MANAGER_WEB_PORT_KEY}: $jobManagerWebPort") @@ -151,8 +149,6 @@ object ApplicationMaster{ } def startJobManager(currDir: String): (ActorSystem, ActorRef) = { -// Utils.copyJarContents(s"resources/${ConfigConstants.DEFAULT_JOB_MANAGER_WEB_PATH_NAME}", -// classOf[YarnMaster].getProtectionDomain.getCodeSource.getLocation.getPath) val pathToConfig = s"$currDir/flink-conf.modified.yaml" val args = Array[String]("--configDir", pathToConfig) diff --git a/flink-addons/pom.xml b/flink-addons/pom.xml index 27783d11f0878..be3cfa9f4bc1d 100644 --- a/flink-addons/pom.xml +++ b/flink-addons/pom.xml @@ -34,11 +34,11 @@ under the License. pom - - - - - + flink-avro + flink-jdbc + flink-spargel + flink-hadoop-compatibility + flink-streaming flink-hbase diff --git a/flink-clients/src/main/java/org/apache/flink/client/web/WebInterfaceServer.java b/flink-clients/src/main/java/org/apache/flink/client/web/WebInterfaceServer.java index 92f60cd5b7dae..1de21ffab6165 100644 --- a/flink-clients/src/main/java/org/apache/flink/client/web/WebInterfaceServer.java +++ b/flink-clients/src/main/java/org/apache/flink/client/web/WebInterfaceServer.java @@ -22,6 +22,7 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.net.URL; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,6 +46,9 @@ * configures an embedded jetty server. */ public class WebInterfaceServer { + + private static final String WEB_ROOT_DIR = "web-docs"; + /** * The log for this class. */ @@ -81,20 +85,15 @@ public WebInterfaceServer(Configuration nepheleConfig, int port) // get base path of Flink installation String basePath = nepheleConfig.getString(ConfigConstants.FLINK_BASE_DIR_PATH_KEY,""); - File webDir; File tmpDir; File uploadDir; File planDumpDir; - String webDirPath = config.getString(ConfigConstants.WEB_ROOT_PATH_KEY, - ConfigConstants.DEFAULT_WEB_ROOT_DIR); - - if(webDirPath.startsWith("/")) { - // absolute path - webDir = new File(webDirPath); - } else { - // path relative to base dir - webDir = new File(basePath+"/"+webDirPath); + URL webRootDir = this.getClass().getClassLoader().getResource(WEB_ROOT_DIR); + + if(webRootDir == null){ + throw new FileNotFoundException("Cannot start web interface server because the web " + + "root dir " + WEB_ROOT_DIR + " is not included in the jar."); } String tmpDirPath = config.getString(ConfigConstants.WEB_TMP_DIR_KEY, @@ -131,7 +130,8 @@ public WebInterfaceServer(Configuration nepheleConfig, int port) } if (LOG.isInfoEnabled()) { - LOG.info("Setting up web frontend server, using web-root directory '" + webDir.getAbsolutePath() + "'."); + LOG.info("Setting up web frontend server, using web-root directory '" + + webRootDir.toExternalForm() + "'."); LOG.info("Web frontend server will store temporary files in '" + tmpDir.getAbsolutePath() + "', uploaded jobs in '" + uploadDir.getAbsolutePath() + "', plan-json-dumps in '" + planDumpDir.getAbsolutePath() + "'."); @@ -144,12 +144,6 @@ public WebInterfaceServer(Configuration nepheleConfig, int port) server = new Server(port); - // ensure that the directory with the web documents exists - if (!webDir.exists()) { - throw new FileNotFoundException("The directory containing the web documents does not exist: " - + webDir.getAbsolutePath()); - } - // ensure, that all the directories exist checkAndCreateDirectories(tmpDir, true); checkAndCreateDirectories(uploadDir, true); @@ -178,7 +172,7 @@ public WebInterfaceServer(Configuration nepheleConfig, int port) // ----- the handler serving all the static files ----- ResourceHandler resourceHandler = new ResourceHandler(); resourceHandler.setDirectoriesListed(false); - resourceHandler.setResourceBase(webDir.getAbsolutePath()); + resourceHandler.setResourceBase(webRootDir.toExternalForm()); // ----- add the handlers to the list handler ----- HandlerList handlers = new HandlerList(); diff --git a/flink-clients/resources/web-docs/css/bootstrap.css b/flink-clients/src/main/resources/web-docs/css/bootstrap.css similarity index 100% rename from flink-clients/resources/web-docs/css/bootstrap.css rename to flink-clients/src/main/resources/web-docs/css/bootstrap.css diff --git a/flink-clients/resources/web-docs/css/graph.css b/flink-clients/src/main/resources/web-docs/css/graph.css similarity index 100% rename from flink-clients/resources/web-docs/css/graph.css rename to flink-clients/src/main/resources/web-docs/css/graph.css diff --git a/flink-clients/resources/web-docs/css/nephelefrontend.css b/flink-clients/src/main/resources/web-docs/css/nephelefrontend.css similarity index 100% rename from flink-clients/resources/web-docs/css/nephelefrontend.css rename to flink-clients/src/main/resources/web-docs/css/nephelefrontend.css diff --git a/flink-clients/resources/web-docs/css/overlay.css b/flink-clients/src/main/resources/web-docs/css/overlay.css similarity index 100% rename from flink-clients/resources/web-docs/css/overlay.css rename to flink-clients/src/main/resources/web-docs/css/overlay.css diff --git a/flink-clients/resources/web-docs/css/pactgraphs.css b/flink-clients/src/main/resources/web-docs/css/pactgraphs.css similarity index 100% rename from flink-clients/resources/web-docs/css/pactgraphs.css rename to flink-clients/src/main/resources/web-docs/css/pactgraphs.css diff --git a/flink-clients/src/main/resources/web-docs/img/FlinkLogo.png b/flink-clients/src/main/resources/web-docs/img/FlinkLogo.png new file mode 100755 index 0000000000000000000000000000000000000000..90d30cf683c472865fa9dec2a48adadb0466e293 GIT binary patch literal 7547 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 FQ_WWfZ^41(zRePXC2 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 phu;=002ovPDHLkV1j5~s literal 0 HcmV?d00001 diff --git a/flink-clients/src/main/resources/web-docs/img/arrows/arr.gif b/flink-clients/src/main/resources/web-docs/img/arrows/arr.gif new file mode 100755 index 0000000000000000000000000000000000000000..e7fd0a1961760282fff76ed793253710351e0c7e GIT binary patch literal 901 zcmW-fJF6H(6of|*iH#x#E1MvMD=R2YbA1$vfvCj=BP>`(!BdMUh$w6!K1dM^X{Hbr zthN%#Z%8$ESrH2%kRSxHuDwqg^T*}@KXvKPD9%^nVLkfS)nVUBQulbppVPIHC} zT;wV)ahWR&7&66(F|+&FW3x~N6};Q3hH9)<)l|*ZQXSP@fF77Baq%p11 zl;*UgBc17$u5_m-0~ySy3}rYYnaE^jWh&E|$wC&hDoa_;Iu_eO+iq{<{_~Oyu&VTaxm$zTMa_8(rw?4S^ z-MK4|99_F}>W8}*uRn9<=6iqtdG~@2Fa2`k;M%W8@Be=G-|J64{lw8XFI|1$?ZaEQ SU;p&r>kmIV=$Fsoh5rG`G^}(0 literal 0 HcmV?d00001 diff --git a/flink-clients/src/main/resources/web-docs/img/arrows/arr2.gif b/flink-clients/src/main/resources/web-docs/img/arrows/arr2.gif new file mode 100755 index 0000000000000000000000000000000000000000..779c081bb916b2efe50709e26629ee363339ea65 GIT binary patch literal 845 zcmW-fvFaE!7{pIdw4LlAI9hNrZns!mORWwrk_Tv!n|*|!pl-U};4I`Rbic(Rui+|! zaOU3(A;|~1@B7_-@#Txpp1pdE$M_C-`tRFs0srAs-1YGG)58G-1Q-ZV3}6sL7{&-j zF@Z@;VHz`-#R3+wgk`K?6&u*Z7Phg2T^!&LM>xg_PVe6+QK3eI-pkb{A;Ls%jRPFy z5QjO!QBH7@Q=H}uXSu*dE^(PFT;&Egxy5bnaF+)>~yyzt_d&R5X@TRxC?H%v>z=uBau}^&J!lf(M zZrn@%n$19ggIqH*kiiUPI3pR&L?$zp>C9v{3t7xkma~%8Y-BTA+0IUObCAOvNIH|f^glqNN!)Zc%v}T!47q}BOUETCp*>Y&UCg5UF=eqyVBKebhBIC?oM}m z(8C_}xFfdbdeS&`;ef;~^zy0yUyXVRCpMU-6*^iGt`1_le cf4%zi`?tqe-@bhE`o%BrJbnHA!}sy||KgjBGd~CRH)IQ*X7bC zA;Lti8V5MYAr5ndqnzL*r#Q_S&T@f^T;eiUxXKM~a*NyC;Vut&$Ri%}gr_W6vSQ7K zz52MurXayWuC_FwK@DkGBO29&CN-sL&1hB&TGW!3wW3vRXj5C-){b^{phF$$SSLDF zp;DDY&LYd7vi|1z6_0tdOw$Up`&l;MnIG!vQ3RHieN*(_u+OIglJRndJR80cV!I^2U3v1+l4N6smopI zYB##st!{UxyFKV(k9ypbo?EdiXqVd;@@wup@w?RDZSQ=9e;)kt)6+kHd3FEI!}p*3 u_Sa{xAH27}e)9YCU%$P1^UaHAKmYjnyLTTw{o?N*KKT6md-vYPr~d<=fRarB literal 0 HcmV?d00001 diff --git a/flink-clients/src/main/resources/web-docs/img/arrows/arr2_l.gif b/flink-clients/src/main/resources/web-docs/img/arrows/arr2_l.gif new file mode 100755 index 0000000000000000000000000000000000000000..92bae98499ef4b0e5fc74e9f47e43902f25ed360 GIT binary patch literal 846 zcmW-fp$Z^G7=%YO=z(C-?1h7ay&z0c6hQ<}i)h%cWwJqR!kP?%h;4$wx{qMhICYy( z;0vfAjC;3X+1(#@{{NeK`pHLczw_k-Jiu4L!+&3T0r(G3aM!c9@1Gq&K!AY&#Q+8| zgkg+e6cd=l6s9qQSu9`?OIXGVR;Pn2D5*2DR=)GKR5+Y3G z);PdH4snP7G7H<>=I@qBOcci18=wzol-I>mIp^IJWa#y?69`~f@nb-~5b^9W}b3Yexg_PVe6+QK3eI-pkb{A;Ls%jRPFy z5QjO!QBH7@Q=H}uXSu*dE^(PFT;&Egxy5bnaF+)>~yyzt_d&R5X@TRxC?H%v>z=uBau}^&J!lf(M zZrn@%n$19ggIqH*kiiUPI3pR&L?$zp>C9v{3t7xkma~%8Y-BTA+0IUObCAOvNIH|f^glqNN!)Zc%v}T!47q}BOUETCp*>Y&UCg5UF=eqyVBKebhBIC?oM}m z(8C_}xFfdbdeS&`;ef;~^zy0yUyXVRCpMU-6*^iGt`1_le cf4%zi`?tqe-@bhE`o%BrJbnHA!}sy||KgjBZ^gM;z^z8jX^ePHK#eluTw^~Ix4A3wkYJOLiQy!RUL3LoNHw{OpG41<%L5+rh{rtPDGQdYShHcT zKCZDTNU)HrEe&W;LmJkIMm3>HO=(&)n$?09wWMXOXjL29)Rwljqg@^7P)9n}iB46h zRHa&tdLg)o(~w~!7ZDG5&_f>fh(|r)Nl$s&GoJN=7ro?VuXxoP-t?BYz2jXU_|Qi_ z_K8njxOC;(jeF6*%x0j#K`t{gkiiUPI3pR&L?$zp>C9v{3t7xkma~%8Y-BTA+0IUO zbCAOvNII@gK)WVA-VdxidPf{I@qBOcci18=wzol-I>mIp^IJWa#y?69`~f@R_qGe<@SaAn)^=tF7!0Ai`!9a}{>AU#{`1%Spa1&t v!{46$d-K6hkAC?3&+l&D{^;E|e|h}J)BEqe^XmE6-#q{Etv7D&;j{k%U9pq9 literal 0 HcmV?d00001 diff --git a/flink-clients/src/main/resources/web-docs/img/arrows/arr_d.gif b/flink-clients/src/main/resources/web-docs/img/arrows/arr_d.gif new file mode 100755 index 0000000000000000000000000000000000000000..93095cc16039a67d98ff39ef4ec9fd4ad595196f GIT binary patch literal 911 zcmW-fyXzP<9K=r$tS&wazA9LRLgRKFS{$U}13O5UIJvl77l$G^bPGNgDJnXAb?9KF zkiWn>DRk&?7E!W^=p=Md2cd| z>~-+=!NCCp1QcK(Xh0*H&MlgX%OkozLF@psxVhO9T zjFtU2LPSU*M)qZElMqpaca05fWD{GlnJw&KC%f2--R$822RX!19OeioILRr_;xuQt zz(p=`6_>fffFUEM7&E(%JvIdiC3v@`1~sZlt<ZNY=Xh4G+(kKmUL=&3S zlxAsKGg{E1mb6OCT2Y`-ky474jbIaJL4_)K6RC!3tfp#J&DByJ)mdHDtGcVF25PW| zYE%u^NKMpaP1UTLu9;e>#agOWwOlI|R9I1^Dz0q$+iV&#%J4SB4Q_OkTe;aS?r^8O z+{@kW@qhh$lShDbMn>XT0D=FL{-hz2d;3Bc~iYIS9gbV6OIelWtOKzfwC(mrzURIzemnKI zw?l8>*4>YvJbUESTQ?6Kf9>l(e?9&FeYYMt@$kpLU3>TN;U_L%KYQt$3y&Uq;O|3k z9=-ndV|V@d;ME&Xow?YK{PD%_e|`Dw=l{O?%BRQ9|8nh}6Ze1e(}jJuiX6bx##cs?A!}i&U~fI^TzS-2A=sJ*`lz+ literal 0 HcmV?d00001 diff --git a/flink-clients/src/main/resources/web-docs/img/arrows/arr_l.gif b/flink-clients/src/main/resources/web-docs/img/arrows/arr_l.gif new file mode 100755 index 0000000000000000000000000000000000000000..3f9c05d7d04ff99ca42d423e1eceb83de1020ae5 GIT binary patch literal 902 zcmW-fy^9z`6vRgmG?hw1DlH8016B)}LXFr6i5F0?*-9HZnbsg8*sYZ*3=)LMNC?{L zR$^%(+Nr!o$o>OjVNMXcAO^<0+hW<>2RrZmW?sE~>4g{Heh6o91$g}5`|ktp;Ti08 z{Pywj0R#jXC?IG+Bbv~RR%k&7I?;u0^g<5?Fo+=xV-!X(fk{kZ8nZBi1uS9-%UFe# z{Wn5Hh>=3}WowfVVWM`84Qyl+o7svj>|iIm*v($-;Q$9Y#9@x&2q!qnDNb`1XSl#c zE^(QwxWa%TBgRZIyN^9K1ql{vx1|O(s!7dir51IlQ(fv-FZF0ZgBsGXMrlM7n$(o0 zHA^#E(4v;KtW{c3piq%wrId|e6Q?1=Mr|T)aHE^t>{f1ZhdbTnZufGJ2R!H@4||kH zJmE=CdD^o);{`8z$;)2l6$cI-Id;m~^tah8sNh0vGpeB)tErl+Rkc({byin(SFh@+ zff}r#8m>__QWG^B{kG*pK`FDT+;o8v!ee&~fhZnCt z`Rt9GUw`++!PT>uf4zC?v$tOVoNpezbNAtMFMs;qAHUqYbN#8;uAjbk>HHV(KmEq7 QvmgC^_`oCI{5bH^|Hw40+yDRo literal 0 HcmV?d00001 diff --git a/flink-clients/src/main/resources/web-docs/img/arrows/arr_r.gif b/flink-clients/src/main/resources/web-docs/img/arrows/arr_r.gif new file mode 100755 index 0000000000000000000000000000000000000000..e7fd0a1961760282fff76ed793253710351e0c7e GIT binary patch literal 901 zcmW-fJF6H(6of|*iH#x#E1MvMD=R2YbA1$vfvCj=BP>`(!BdMUh$w6!K1dM^X{Hbr zthN%#Z%8$ESrH2%kRSxHuDwqg^T*}@KXvKPD9%^nVLkfS)nVUBQulbppVPIHC} zT;wV)ahWR&7&66(F|+&FW3x~N6};Q3hH9)<)l|*ZQXSP@fF77Baq%p11 zl;*UgBc17$u5_m-0~ySy3}rYYnaE^jWh&E|$wC&hDoa_;Iu_eO+iq{<{_~Oyu&VTaxm$zTMa_8(rw?4S^ z-MK4|99_F}>W8}*uRn9<=6iqtdG~@2Fa2`k;M%W8@Be=G-|J64{lw8XFI|1$?ZaEQ SU;p&r>kmIV=$Fsoh5rG`G^}(0 literal 0 HcmV?d00001 diff --git a/flink-clients/src/main/resources/web-docs/img/arrows/arr_u.gif b/flink-clients/src/main/resources/web-docs/img/arrows/arr_u.gif new file mode 100755 index 0000000000000000000000000000000000000000..5f92c874da6192ae8bb5e582210371a83a811fab GIT binary patch literal 910 zcmW-fKj;ud9K~NCsL&sXAJpKGv{cuSyr8m(mWsxLTcZ@dix4h?M8geI;SeH3JctUM zy3L?f5QHoq($H-!p<`1H5k#;1dBbscU%2=Ee%^cgowr_o<--F!hV#J5e~vr^{EO$Y z*Wue|hX)WSK!Aau0gY&dCN!f39q2?abfFtP7{DM#VF<$*!2~8T3sacJ3>L76Ran9@ zR`%ZrkwSzR*_W+Nq6iV*H8!x3t=Pn7wy=Yp?8Pp2vxfs5V`hDZySmtWh;o!!=S9 zHCeN2s-|nE7HY9p)lx0jN(B{Gs-lW38^I<{p#%xuMAV>0wNjIs)uIk{s+YRdtsV_% zP@^=YVU1`)lbWR|O>0IATGT2nX;~`@6e^`iv9jrJvuTte!`louxY4cLNN0MbE8XeIKn61^LmAFUCNh~>naXr#vXI5B%2JlI4#jrRw%Z%|p8J9LgVaCR zj-A8b$4@+S{+rVm?)~=j)3>jDck|M*b^YA!Uq85Y>G%`xeRA>o-CLKBp8E8)C*M7L z^NagWUA^|wUuS>${Qi;4zyI{Zy&D%^IQssd|UnGb(;=8=!DoOuJU{tr@|HL}kAFXTVbQ z;@CdlonQ7Z&-V{+8*TI>$6v14EIF85T@cU@igD2kze*3=&DW#Iyo5&&*sVGG& z#>EU}DofeQac_kxRi$dxc(g;E>QcAbOf{iNO=%k11~xQU4AVW{7oXN~2;f?`*8XAkNjMQ={!bPn?H1DZ@@2l^p_LRbR^X;{(<4;F(BG+1NjTqY;F zYHTF>SWDJjJ@|@TSWv9#8hpfQ41gEy7>!!2#1CjPjU8}8FbZJ}7^Inm7CcxCHqhe} zxtlUMF5GiouR;i-YX$&?t(ikpcr11o9+;D;nAQ<)#EWLq8cmr^VbQvK? zMSu6t5CXyzMe=xee7gJj>n2up9tO0{GETKh>#b5&s7QtkqD0XFc_Mje8^yXAf=O7P1pvg3LpdS(_gf(E0h9#}=U@_Q0 zgEe-}Wpbjc#zvx#wPfAZgRjVi1;v`K!AG3N0C>@k(Wu2r{D3CY*a0U5qY&1BL7GWu z!GpzM13f;GyD5_s!^JQXeXJ$x^^)1wb#E8f32pPbihGyQc71v0(Pf8^uoN0;k@ig% z4+Ae~UI(s(d1zwQ@!y9t=|bQ9R{KAp{Xxh5uRr&{x2KPvK0n{Qz23f@AHF{9FTd#f EJA&I|W&i*H literal 0 HcmV?d00001 diff --git a/flink-clients/src/main/resources/web-docs/img/arrows/arrow_r.gif b/flink-clients/src/main/resources/web-docs/img/arrows/arrow_r.gif new file mode 100755 index 0000000000000000000000000000000000000000..e59288f31e1ff06c5e496099161024e94df6027c GIT binary patch literal 53 zcmZ?wbhEHbWM^P!XkcXcKa=6inKOz%Sr{1@7#VaJfB+=Jz{KOjux$G2o<~lbC9}8~ FtN~k^4I2Oe literal 0 HcmV?d00001 diff --git a/flink-clients/src/main/resources/web-docs/img/arrows/arrow_u.gif b/flink-clients/src/main/resources/web-docs/img/arrows/arrow_u.gif new file mode 100755 index 0000000000000000000000000000000000000000..2d3dfdcccd98e099fbc08a1d3843709491363ca1 GIT binary patch literal 827 zcmb`Gu}wo^41^B}K_m)N(n3Q+X9qm~=`s~(YN49h9_xs`Z(X0ngz7hQPe-TnjCABw^MJQ5H zidKw^8Ol_avX$fB3RS8~)vEDmhdR}zZnc?eLX(=(G_(zDXs{Tjd%VYy5f#x9Hl3V339-w5YKdY@oqncr3^{QJI}N z*2h}1s;tf$%Y_BSuI$bp)I*BioXY7OtFx`{{s0dbVr&2a literal 0 HcmV?d00001 diff --git a/flink-clients/resources/web-docs/img/delete-icon.png b/flink-clients/src/main/resources/web-docs/img/delete-icon.png similarity index 100% rename from flink-clients/resources/web-docs/img/delete-icon.png rename to flink-clients/src/main/resources/web-docs/img/delete-icon.png diff --git a/flink-clients/src/main/resources/web-docs/img/gradient.jpg b/flink-clients/src/main/resources/web-docs/img/gradient.jpg new file mode 100755 index 0000000000000000000000000000000000000000..8c5e804c1468a23c50781e92cf36d1c28612dbd5 GIT binary patch literal 28636 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 JA9VWO|377H@CyI{ literal 0 HcmV?d00001 diff --git a/flink-clients/resources/web-docs/img/overlay/close.png b/flink-clients/src/main/resources/web-docs/img/overlay/close.png similarity index 100% rename from flink-clients/resources/web-docs/img/overlay/close.png rename to flink-clients/src/main/resources/web-docs/img/overlay/close.png diff --git a/flink-clients/resources/web-docs/index.html b/flink-clients/src/main/resources/web-docs/index.html similarity index 100% rename from flink-clients/resources/web-docs/index.html rename to flink-clients/src/main/resources/web-docs/index.html diff --git a/flink-clients/resources/web-docs/js/bootstrap.min.js b/flink-clients/src/main/resources/web-docs/js/bootstrap.min.js similarity index 100% rename from flink-clients/resources/web-docs/js/bootstrap.min.js rename to flink-clients/src/main/resources/web-docs/js/bootstrap.min.js diff --git a/flink-clients/resources/web-docs/js/d3.js b/flink-clients/src/main/resources/web-docs/js/d3.js similarity index 100% rename from flink-clients/resources/web-docs/js/d3.js rename to flink-clients/src/main/resources/web-docs/js/d3.js diff --git a/flink-clients/resources/web-docs/js/dagre-d3.js b/flink-clients/src/main/resources/web-docs/js/dagre-d3.js similarity index 100% rename from flink-clients/resources/web-docs/js/dagre-d3.js rename to flink-clients/src/main/resources/web-docs/js/dagre-d3.js diff --git a/flink-clients/resources/web-docs/js/graphCreator.js b/flink-clients/src/main/resources/web-docs/js/graphCreator.js similarity index 100% rename from flink-clients/resources/web-docs/js/graphCreator.js rename to flink-clients/src/main/resources/web-docs/js/graphCreator.js diff --git a/flink-clients/resources/web-docs/js/jquery-2.1.0.js b/flink-clients/src/main/resources/web-docs/js/jquery-2.1.0.js similarity index 100% rename from flink-clients/resources/web-docs/js/jquery-2.1.0.js rename to flink-clients/src/main/resources/web-docs/js/jquery-2.1.0.js diff --git a/flink-clients/resources/web-docs/js/jquery.tools.min.js b/flink-clients/src/main/resources/web-docs/js/jquery.tools.min.js similarity index 100% rename from flink-clients/resources/web-docs/js/jquery.tools.min.js rename to flink-clients/src/main/resources/web-docs/js/jquery.tools.min.js diff --git a/flink-clients/resources/web-docs/js/program.js b/flink-clients/src/main/resources/web-docs/js/program.js similarity index 100% rename from flink-clients/resources/web-docs/js/program.js rename to flink-clients/src/main/resources/web-docs/js/program.js diff --git a/flink-clients/resources/web-docs/launch.html b/flink-clients/src/main/resources/web-docs/launch.html similarity index 100% rename from flink-clients/resources/web-docs/launch.html rename to flink-clients/src/main/resources/web-docs/launch.html diff --git a/flink-core/src/main/java/org/apache/flink/configuration/ConfigConstants.java b/flink-core/src/main/java/org/apache/flink/configuration/ConfigConstants.java index 386ae5e548bd8..4e875812926d4 100644 --- a/flink-core/src/main/java/org/apache/flink/configuration/ConfigConstants.java +++ b/flink-core/src/main/java/org/apache/flink/configuration/ConfigConstants.java @@ -249,11 +249,6 @@ public final class ConfigConstants { */ public static final String JOB_MANAGER_WEB_PORT_KEY = "jobmanager.web.port"; - /** - * The parameter defining the directory containing the web documents for the jobmanager web frontend. - */ - public static final String JOB_MANAGER_WEB_ROOT_PATH_KEY = "jobmanager.web.rootpath"; - /** * The config parameter defining the path to the htaccess file protecting the web frontend. */ @@ -274,11 +269,6 @@ public final class ConfigConstants { */ public static final String WEB_FRONTEND_PORT_KEY = "webclient.port"; - /** - * The config parameter defining the directory containing the web documents. - */ - public static final String WEB_ROOT_PATH_KEY = "webclient.rootpath"; - /** * The config parameter defining the temporary data directory for the web client. */ @@ -299,9 +289,6 @@ public final class ConfigConstants { */ public static final String WEB_ACCESS_FILE_KEY = "webclient.access"; - // ----------------------------- YARN Client ---------------------------- - - public static final String YARN_AM_PRC_PORT = "yarn.am.rpc.port"; // ------------------------------ AKKA ------------------------------------ @@ -549,16 +536,6 @@ public final class ConfigConstants { */ public static final int DEFAULT_JOB_MANAGER_WEB_FRONTEND_PORT = 8081; - /** - * The default directory name of the info server - */ - public static final String DEFAULT_JOB_MANAGER_WEB_PATH_NAME = "web-docs-infoserver"; - - /** - * The default path of the directory for info server containing the web documents. - */ - public static final String DEFAULT_JOB_MANAGER_WEB_ROOT_PATH = "./resources/"+DEFAULT_JOB_MANAGER_WEB_PATH_NAME+"/"; - /** * The default number of archived jobs for the jobmanager */ @@ -572,11 +549,6 @@ public final class ConfigConstants { */ public static final int DEFAULT_WEBCLIENT_PORT = 8080; - /** - * The default path of the directory containing the web documents. - */ - public static final String DEFAULT_WEB_ROOT_DIR = "./resources/web-docs/"; - /** * The default directory to store temporary objects (e.g. during file uploads). */ @@ -599,10 +571,6 @@ public final class ConfigConstants { */ public static final String DEFAULT_WEB_ACCESS_FILE_PATH = null; - // ----------------------------- YARN ---------------------------- - - public static final int DEFAULT_YARN_AM_RPC_PORT = 10245; - // ------------------------------ Akka Values ------------------------------ public static String DEFAULT_AKKA_TRANSPORT_HEARTBEAT_INTERVAL = "1000 ms"; @@ -635,19 +603,6 @@ public final class ConfigConstants { */ public static final String LOCAL_INSTANCE_MANAGER_NUMBER_TASK_MANAGER = "localinstancemanager.numtaskmanager"; - - // ----------------------------- Deprecated -------------------------------- - - /** - * The default definition for an instance type, if no other configuration is provided. - */ - public static final String DEFAULT_INSTANCE_TYPE = "default,1,1,1,1,0"; // minimalistic instance type until "cloud" model is fully removed. - - /** - * The default index for the default instance type. - */ - public static final int DEFAULT_DEFAULT_INSTANCE_TYPE_INDEX = 1; - // ------------------------------------------------------------------------ /** diff --git a/flink-dist/pom.xml b/flink-dist/pom.xml index 17e17daee029f..93c066747f347 100644 --- a/flink-dist/pom.xml +++ b/flink-dist/pom.xml @@ -31,7 +31,7 @@ under the License. flink-dist flink-dist - pom + jar @@ -162,35 +162,71 @@ under the License. - maven-assembly-plugin - 2.4 + org.apache.maven.plugins + maven-shade-plugin + 2.3 - - uber-jar package - single + shade - - - - 420 - 493 - 493 - - - - org.apache.flink.yarn.Client - true - true - - - - src/main/assemblies/yarn-uberjar.xml - + + false + ${project.artifactId}-${project.version}-yarn-uberjar + + + org.apache.flink:flink-java-examples + org.apache.flink:flink-scala-examples + org.apache.flink:flink-streaming-examples + + + + + reference.conf + + + + org.apache.flink.yarn.Client + + + + + + + maven-assembly-plugin + 2.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flink-dist/src/main/assemblies/bin.xml b/flink-dist/src/main/assemblies/bin.xml index 0dc01965d4c6b..18c8b3d32c020 100644 --- a/flink-dist/src/main/assemblies/bin.xml +++ b/flink-dist/src/main/assemblies/bin.xml @@ -103,26 +103,6 @@ under the License. 0644 - - - ../flink-clients/resources - resources - 0644 - - *etc/users - - - - - - ../flink-runtime/resources - resources - 0644 - - *etc/users - - - src/main/flink-bin/tools diff --git a/flink-dist/src/main/assemblies/yarn-uberjar.xml b/flink-dist/src/main/assemblies/yarn-uberjar.xml index 54be9de0769bf..d677230d107a0 100644 --- a/flink-dist/src/main/assemblies/yarn-uberjar.xml +++ b/flink-dist/src/main/assemblies/yarn-uberjar.xml @@ -54,16 +54,6 @@ under the License. - - - ../nephele/nephele-server/resources - resources - 0644 - - *etc/users - - - ../flink-runtime/resources diff --git a/flink-dist/src/main/flink-bin/LICENSE b/flink-dist/src/main/flink-bin/LICENSE index 133aeaf04ff9b..5183b59b17659 100644 --- a/flink-dist/src/main/flink-bin/LICENSE +++ b/flink-dist/src/main/flink-bin/LICENSE @@ -367,7 +367,7 @@ The Apache Flink project bundles the following fonts under the Open Font License (OFT) - http://scripts.sil.org/OFL/ - Font Awesome (http://fortawesome.github.io/Font-Awesome/) - Created by Dave Gandy - -> fonts in "flink-runtime/resources/web-docs-infoserver/font-awesome/fonts" + -> fonts in "flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/fonts" ----------------------------------------------------------------------- diff --git a/flink-dist/src/main/resources/flink-conf.yaml b/flink-dist/src/main/resources/flink-conf.yaml new file mode 100644 index 0000000000000..65a87b97619e7 --- /dev/null +++ b/flink-dist/src/main/resources/flink-conf.yaml @@ -0,0 +1,77 @@ +################################################################################ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + + +#============================================================================== +# Common +#============================================================================== + +jobmanager.rpc.address: localhost + +jobmanager.rpc.port: 6123 + +jobmanager.heap.mb: 256 + +taskmanager.heap.mb: 512 + +taskmanager.numberOfTaskSlots: -1 + +parallelization.degree.default: 1 + +#============================================================================== +# Web Frontend +#============================================================================== + +jobmanager.web.port: 8081 + +webclient.port: 8080 + +#============================================================================== +# Advanced +#============================================================================== + +# The number of buffers for the network stack. +# +# taskmanager.network.numberOfBuffers: 2048 + +# Directories for temporary files. +# +# Add a delimited list for multiple directories, using the system directory +# delimiter (colon ':' on unix) or a comma, e.g.: +# /data1/tmp:/data2/tmp:/data3/tmp +# +# Note: Each directory entry is read from and written to by a different I/O +# thread. You can include the same directory multiple times in order to create +# multiple I/O threads against that directory. This is for example relevant for +# high-throughput RAIDs. +# +# If not specified, the system-specific Java temporary directory (java.io.tmpdir +# property) is taken. +# +# taskmanager.tmp.dirs: /tmp + +# Path to the Hadoop configuration directory. +# +# This configuration is used when writing into HDFS. Unless specified otherwise, +# HDFS file creation will use HDFS default settings with respect to block-size, +# replication factor, etc. +# +# You can also directly specify the paths to hdfs-default.xml and hdfs-site.xml +# via keys 'fs.hdfs.hdfsdefault' and 'fs.hdfs.hdfssite'. +# +# fs.hdfs.hadoopconf: /path/to/hadoop/conf/ diff --git a/flink-runtime/src/main/java/org/apache/flink/runtime/jobmanager/web/WebInfoServer.java b/flink-runtime/src/main/java/org/apache/flink/runtime/jobmanager/web/WebInfoServer.java index c6ede1683a5b9..c397a30409f2f 100644 --- a/flink-runtime/src/main/java/org/apache/flink/runtime/jobmanager/web/WebInfoServer.java +++ b/flink-runtime/src/main/java/org/apache/flink/runtime/jobmanager/web/WebInfoServer.java @@ -22,8 +22,10 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.net.URL; import akka.actor.ActorRef; +import org.eclipse.jetty.server.handler.ResourceHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.flink.configuration.ConfigConstants; @@ -36,7 +38,6 @@ import org.eclipse.jetty.security.authentication.BasicAuthenticator; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.HandlerList; -import org.eclipse.jetty.server.handler.ResourceHandler; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; @@ -47,6 +48,11 @@ */ public class WebInfoServer { + /** + * Web root dir in the jar + */ + private static final String WEB_ROOT_DIR = "web-docs-infoserver"; + /** * The log for this class. */ @@ -83,29 +89,26 @@ public WebInfoServer(Configuration config, ActorRef jobmanager, // get base path of Flink installation final String basePath = config.getString(ConfigConstants.FLINK_BASE_DIR_PATH_KEY, ""); - final String webDirPath = config.getString(ConfigConstants.JOB_MANAGER_WEB_ROOT_PATH_KEY, ConfigConstants.DEFAULT_JOB_MANAGER_WEB_ROOT_PATH); final String[] logDirPaths = config.getString(ConfigConstants.JOB_MANAGER_WEB_LOG_PATH_KEY, basePath+"/log").split(","); // YARN allows to specify multiple log directories + URL webRootDir = this.getClass().getClassLoader().getResource(WEB_ROOT_DIR); + + if(webRootDir == null) { + throw new FileNotFoundException("Cannot start jobmanager web info server. The " + + "resource " + WEB_ROOT_DIR + " is not included in the jar."); + } + final File[] logDirFiles = new File[logDirPaths.length]; int i = 0; for(String path : logDirPaths) { logDirFiles[i++] = new File(path); } - File webDir; - if(webDirPath.startsWith("/")) { - // absolute path - webDir = new File(webDirPath); - } else { - // path relative to base dir - webDir = new File(basePath+"/"+webDirPath); - } - if (LOG.isInfoEnabled()) { - LOG.info("Setting up web info server, using web-root directory '" + webDir.getAbsolutePath() + "'."); - //LOG.info("Web info server will store temporary files in '" + tmpDir.getAbsolutePath()); + LOG.info("Setting up web info server, using web-root directory" + + webRootDir.toExternalForm() + "."); LOG.info("Web info server will display information about flink job-manager on " + config.getString(ConfigConstants.JOB_MANAGER_IPC_ADDRESS_KEY, null) + ", port " @@ -113,12 +116,6 @@ public WebInfoServer(Configuration config, ActorRef jobmanager, + "."); } - // ensure that the directory with the web documents exists - if (!webDir.exists()) { - throw new FileNotFoundException("Cannot start jobmanager web info server. The directory containing the web documents does not exist: " - + webDir.getAbsolutePath()); - } - server = new Server(port); // ----- the handlers for the servlets ----- @@ -134,7 +131,7 @@ public WebInfoServer(Configuration config, ActorRef jobmanager, // ----- the handler serving all the static files ----- ResourceHandler resourceHandler = new ResourceHandler(); resourceHandler.setDirectoriesListed(false); - resourceHandler.setResourceBase(webDir.getAbsolutePath()); + resourceHandler.setResourceBase(webRootDir.toExternalForm()); // ----- add the handlers to the list handler ----- HandlerList handlers = new HandlerList(); diff --git a/flink-runtime/resources/web-docs-infoserver/analyze.html b/flink-runtime/src/main/resources/web-docs-infoserver/analyze.html similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/analyze.html rename to flink-runtime/src/main/resources/web-docs-infoserver/analyze.html diff --git a/flink-runtime/resources/web-docs-infoserver/blank-page.html b/flink-runtime/src/main/resources/web-docs-infoserver/blank-page.html similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/blank-page.html rename to flink-runtime/src/main/resources/web-docs-infoserver/blank-page.html diff --git a/flink-runtime/resources/web-docs-infoserver/configuration.html b/flink-runtime/src/main/resources/web-docs-infoserver/configuration.html similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/configuration.html rename to flink-runtime/src/main/resources/web-docs-infoserver/configuration.html diff --git a/flink-runtime/resources/web-docs-infoserver/css/bootstrap.css b/flink-runtime/src/main/resources/web-docs-infoserver/css/bootstrap.css similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/css/bootstrap.css rename to flink-runtime/src/main/resources/web-docs-infoserver/css/bootstrap.css diff --git a/flink-runtime/resources/web-docs-infoserver/css/bootstrap.min.css b/flink-runtime/src/main/resources/web-docs-infoserver/css/bootstrap.min.css similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/css/bootstrap.min.css rename to flink-runtime/src/main/resources/web-docs-infoserver/css/bootstrap.min.css diff --git a/flink-runtime/resources/web-docs-infoserver/css/nephelefrontend.css b/flink-runtime/src/main/resources/web-docs-infoserver/css/nephelefrontend.css similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/css/nephelefrontend.css rename to flink-runtime/src/main/resources/web-docs-infoserver/css/nephelefrontend.css diff --git a/flink-runtime/resources/web-docs-infoserver/css/sb-admin.css b/flink-runtime/src/main/resources/web-docs-infoserver/css/sb-admin.css similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/css/sb-admin.css rename to flink-runtime/src/main/resources/web-docs-infoserver/css/sb-admin.css diff --git a/flink-runtime/resources/web-docs-infoserver/css/timeline.css b/flink-runtime/src/main/resources/web-docs-infoserver/css/timeline.css similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/css/timeline.css rename to flink-runtime/src/main/resources/web-docs-infoserver/css/timeline.css diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/css/font-awesome.css b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/css/font-awesome.css similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/css/font-awesome.css rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/css/font-awesome.css diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/css/font-awesome.min.css b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/css/font-awesome.min.css similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/css/font-awesome.min.css rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/css/font-awesome.min.css diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/fonts/FontAwesome.otf b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/fonts/FontAwesome.otf similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/fonts/FontAwesome.otf rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/fonts/FontAwesome.otf diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.eot b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.eot similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.eot rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.eot diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.svg b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.svg similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.svg rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.svg diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.ttf b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.ttf similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.ttf rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.ttf diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.woff b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.woff similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.woff rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/fonts/fontawesome-webfont.woff diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/less/bordered-pulled.less b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/bordered-pulled.less similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/less/bordered-pulled.less rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/bordered-pulled.less diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/less/core.less b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/core.less similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/less/core.less rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/core.less diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/less/fixed-width.less b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/fixed-width.less similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/less/fixed-width.less rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/fixed-width.less diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/less/font-awesome.less b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/font-awesome.less similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/less/font-awesome.less rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/font-awesome.less diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/less/icons.less b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/icons.less similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/less/icons.less rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/icons.less diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/less/larger.less b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/larger.less similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/less/larger.less rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/larger.less diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/less/list.less b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/list.less similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/less/list.less rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/list.less diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/less/mixins.less b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/mixins.less similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/less/mixins.less rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/mixins.less diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/less/path.less b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/path.less similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/less/path.less rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/path.less diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/less/rotated-flipped.less b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/rotated-flipped.less similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/less/rotated-flipped.less rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/rotated-flipped.less diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/less/spinning.less b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/spinning.less similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/less/spinning.less rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/spinning.less diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/less/stacked.less b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/stacked.less similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/less/stacked.less rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/stacked.less diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/less/variables.less b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/variables.less similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/less/variables.less rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/less/variables.less diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_bordered-pulled.scss b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_bordered-pulled.scss similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_bordered-pulled.scss rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_bordered-pulled.scss diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_core.scss b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_core.scss similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_core.scss rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_core.scss diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_fixed-width.scss b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_fixed-width.scss similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_fixed-width.scss rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_fixed-width.scss diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_icons.scss b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_icons.scss similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_icons.scss rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_icons.scss diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_larger.scss b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_larger.scss similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_larger.scss rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_larger.scss diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_list.scss b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_list.scss similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_list.scss rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_list.scss diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_mixins.scss b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_mixins.scss similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_mixins.scss rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_mixins.scss diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_path.scss b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_path.scss similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_path.scss rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_path.scss diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_rotated-flipped.scss b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_rotated-flipped.scss similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_rotated-flipped.scss rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_rotated-flipped.scss diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_spinning.scss b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_spinning.scss similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_spinning.scss rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_spinning.scss diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_stacked.scss b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_stacked.scss similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_stacked.scss rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_stacked.scss diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_variables.scss b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_variables.scss similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/scss/_variables.scss rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/_variables.scss diff --git a/flink-runtime/resources/web-docs-infoserver/font-awesome/scss/font-awesome.scss b/flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/font-awesome.scss similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/font-awesome/scss/font-awesome.scss rename to flink-runtime/src/main/resources/web-docs-infoserver/font-awesome/scss/font-awesome.scss diff --git a/flink-runtime/resources/web-docs-infoserver/history.html b/flink-runtime/src/main/resources/web-docs-infoserver/history.html similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/history.html rename to flink-runtime/src/main/resources/web-docs-infoserver/history.html diff --git a/flink-runtime/resources/web-docs-infoserver/index.html b/flink-runtime/src/main/resources/web-docs-infoserver/index.html similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/index.html rename to flink-runtime/src/main/resources/web-docs-infoserver/index.html diff --git a/flink-runtime/resources/web-docs-infoserver/js/analyzer.js b/flink-runtime/src/main/resources/web-docs-infoserver/js/analyzer.js similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/js/analyzer.js rename to flink-runtime/src/main/resources/web-docs-infoserver/js/analyzer.js diff --git a/flink-runtime/resources/web-docs-infoserver/js/bootstrap.js b/flink-runtime/src/main/resources/web-docs-infoserver/js/bootstrap.js similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/js/bootstrap.js rename to flink-runtime/src/main/resources/web-docs-infoserver/js/bootstrap.js diff --git a/flink-runtime/resources/web-docs-infoserver/js/bootstrap.min.js b/flink-runtime/src/main/resources/web-docs-infoserver/js/bootstrap.min.js similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/js/bootstrap.min.js rename to flink-runtime/src/main/resources/web-docs-infoserver/js/bootstrap.min.js diff --git a/flink-runtime/resources/web-docs-infoserver/js/configuration.js b/flink-runtime/src/main/resources/web-docs-infoserver/js/configuration.js similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/js/configuration.js rename to flink-runtime/src/main/resources/web-docs-infoserver/js/configuration.js diff --git a/flink-runtime/resources/web-docs-infoserver/js/flot/chart-data-flot.js b/flink-runtime/src/main/resources/web-docs-infoserver/js/flot/chart-data-flot.js similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/js/flot/chart-data-flot.js rename to flink-runtime/src/main/resources/web-docs-infoserver/js/flot/chart-data-flot.js diff --git a/flink-runtime/resources/web-docs-infoserver/js/flot/excanvas.min.js b/flink-runtime/src/main/resources/web-docs-infoserver/js/flot/excanvas.min.js similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/js/flot/excanvas.min.js rename to flink-runtime/src/main/resources/web-docs-infoserver/js/flot/excanvas.min.js diff --git a/flink-runtime/resources/web-docs-infoserver/js/flot/jquery.flot.js b/flink-runtime/src/main/resources/web-docs-infoserver/js/flot/jquery.flot.js similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/js/flot/jquery.flot.js rename to flink-runtime/src/main/resources/web-docs-infoserver/js/flot/jquery.flot.js diff --git a/flink-runtime/resources/web-docs-infoserver/js/flot/jquery.flot.pie.js b/flink-runtime/src/main/resources/web-docs-infoserver/js/flot/jquery.flot.pie.js similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/js/flot/jquery.flot.pie.js rename to flink-runtime/src/main/resources/web-docs-infoserver/js/flot/jquery.flot.pie.js diff --git a/flink-runtime/resources/web-docs-infoserver/js/flot/jquery.flot.resize.js b/flink-runtime/src/main/resources/web-docs-infoserver/js/flot/jquery.flot.resize.js similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/js/flot/jquery.flot.resize.js rename to flink-runtime/src/main/resources/web-docs-infoserver/js/flot/jquery.flot.resize.js diff --git a/flink-runtime/resources/web-docs-infoserver/js/flot/jquery.flot.tooltip.min.js b/flink-runtime/src/main/resources/web-docs-infoserver/js/flot/jquery.flot.tooltip.min.js similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/js/flot/jquery.flot.tooltip.min.js rename to flink-runtime/src/main/resources/web-docs-infoserver/js/flot/jquery.flot.tooltip.min.js diff --git a/flink-runtime/resources/web-docs-infoserver/js/helpers.js b/flink-runtime/src/main/resources/web-docs-infoserver/js/helpers.js similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/js/helpers.js rename to flink-runtime/src/main/resources/web-docs-infoserver/js/helpers.js diff --git a/flink-runtime/resources/web-docs-infoserver/js/jcanvas.min.js b/flink-runtime/src/main/resources/web-docs-infoserver/js/jcanvas.min.js similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/js/jcanvas.min.js rename to flink-runtime/src/main/resources/web-docs-infoserver/js/jcanvas.min.js diff --git a/flink-runtime/resources/web-docs-infoserver/js/jobmanagerFrontend.js b/flink-runtime/src/main/resources/web-docs-infoserver/js/jobmanagerFrontend.js similarity index 100% rename from flink-runtime/resources/web-docs-infoserver/js/jobmanagerFrontend.js rename to flink-runtime/src/main/resources/web-docs-infoserver/js/jobmanagerFrontend.js diff --git a/flink-runtime/src/main/resources/web-docs-infoserver/js/jquery-1.10.2.js b/flink-runtime/src/main/resources/web-docs-infoserver/js/jquery-1.10.2.js new file mode 100755 index 0000000000000..5a814e28f7b56 --- /dev/null +++ b/flink-runtime/src/main/resources/web-docs-infoserver/js/jquery-1.10.2.js @@ -0,0 +1,6 @@ +/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery.min.map +*/ +(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="
","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
t
",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.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%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t +}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},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(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); +u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("