From 54ae7854d8ae0bf84ada7aa2a1c250c7cc51d818 Mon Sep 17 00:00:00 2001 From: cloudapidoc Date: Wed, 5 Jun 2019 18:05:35 +0800 Subject: [PATCH 01/12] merge master --- CHANGELOG.md | 162 + CI_Deploy.md | 32 + CODE_OF_CONDUCT.md | 46 + Gemfile | 15 + Gemfile.lock | 135 + LICENSE | 13 + README.md | 14 +- Vagrantfile | 44 + build/v1/rest/fonts/slate.eot | Bin 0 -> 1876 bytes build/v1/rest/fonts/slate.svg | 14 + build/v1/rest/fonts/slate.ttf | Bin 0 -> 1720 bytes build/v1/rest/fonts/slate.woff | Bin 0 -> 1796 bytes build/v1/rest/fonts/slate.woff2 | Bin 0 -> 796 bytes build/v1/rest/images/favicon.ico | Bin 0 -> 10161 bytes build/v1/rest/images/icon_nav.svg | 18 + build/v1/rest/images/logo.png | Bin 0 -> 14099 bytes build/v1/rest/images/logo.svg | 28 + build/v1/rest/images/navbar.png | Bin 0 -> 96 bytes build/v1/rest/index.html | 3786 ++++++ build/v1/rest/javascripts/all.js | 131 + build/v1/rest/javascripts/all_nosearch.js | 31 + build/v1/rest/stylesheets/print.css | 1 + build/v1/rest/stylesheets/screen.css | 1 + build/v1/ws/fonts/slate.eot | Bin 0 -> 1876 bytes build/v1/ws/fonts/slate.svg | 14 + build/v1/ws/fonts/slate.ttf | Bin 0 -> 1720 bytes build/v1/ws/fonts/slate.woff | Bin 0 -> 1796 bytes build/v1/ws/fonts/slate.woff2 | Bin 0 -> 796 bytes build/v1/ws/images/favicon.ico | Bin 0 -> 10161 bytes build/v1/ws/images/icon_nav.svg | 18 + build/v1/ws/images/logo.png | Bin 0 -> 14099 bytes build/v1/ws/images/logo.svg | 28 + build/v1/ws/images/navbar.png | Bin 0 -> 96 bytes build/v1/ws/index.html | 1176 ++ build/v1/ws/javascripts/all.js | 131 + build/v1/ws/javascripts/all_nosearch.js | 31 + build/v1/ws/stylesheets/print.css | 1 + build/v1/ws/stylesheets/screen.css | 1 + config.rb | 59 + deploy.sh | 290 + font-selection.json | 148 + gh-pages/v1/rest/fonts/slate.eot | Bin 0 -> 1876 bytes gh-pages/v1/rest/fonts/slate.svg | 14 + gh-pages/v1/rest/fonts/slate.ttf | Bin 0 -> 1720 bytes gh-pages/v1/rest/fonts/slate.woff | Bin 0 -> 1796 bytes gh-pages/v1/rest/fonts/slate.woff2 | Bin 0 -> 796 bytes gh-pages/v1/rest/images/favicon.ico | Bin 0 -> 10161 bytes gh-pages/v1/rest/images/icon_nav.svg | 18 + gh-pages/v1/rest/images/logo.png | Bin 0 -> 14099 bytes gh-pages/v1/rest/images/logo.svg | 28 + gh-pages/v1/rest/images/navbar.png | Bin 0 -> 96 bytes gh-pages/v1/rest/index.html | 3786 ++++++ gh-pages/v1/rest/javascripts/all.js | 131 + gh-pages/v1/rest/javascripts/all_nosearch.js | 31 + gh-pages/v1/rest/stylesheets/print.css | 1 + gh-pages/v1/rest/stylesheets/screen.css | 1 + gh-pages/v1/ws/fonts/slate.eot | Bin 0 -> 1876 bytes gh-pages/v1/ws/fonts/slate.svg | 14 + gh-pages/v1/ws/fonts/slate.ttf | Bin 0 -> 1720 bytes gh-pages/v1/ws/fonts/slate.woff | Bin 0 -> 1796 bytes gh-pages/v1/ws/fonts/slate.woff2 | Bin 0 -> 796 bytes gh-pages/v1/ws/images/favicon.ico | Bin 0 -> 10161 bytes gh-pages/v1/ws/images/icon_nav.svg | 18 + gh-pages/v1/ws/images/logo.png | Bin 0 -> 14099 bytes gh-pages/v1/ws/images/logo.svg | 28 + gh-pages/v1/ws/images/navbar.png | Bin 0 -> 96 bytes gh-pages/v1/ws/index.html | 1176 ++ gh-pages/v1/ws/javascripts/all.js | 131 + gh-pages/v1/ws/javascripts/all_nosearch.js | 31 + gh-pages/v1/ws/stylesheets/print.css | 1 + gh-pages/v1/ws/stylesheets/screen.css | 1 + lib/multilang.rb | 16 + lib/nesting_unique_head.rb | 22 + lib/toc_data.rb | 31 + lib/unique_head.rb | 24 + source/fonts/slate.eot | Bin 0 -> 1876 bytes source/fonts/slate.svg | 14 + source/fonts/slate.ttf | Bin 0 -> 1720 bytes source/fonts/slate.woff | Bin 0 -> 1796 bytes source/fonts/slate.woff2 | Bin 0 -> 796 bytes source/images/favicon.ico | Bin 0 -> 10161 bytes source/images/icon_nav.svg | 18 + source/images/logo.png | Bin 0 -> 14099 bytes source/images/logo.svg | 28 + source/images/navbar.png | Bin 0 -> 96 bytes source/includes/_errors.md | 22 + source/index.html.md | 1718 +++ source/javascripts/all.js | 2 + source/javascripts/all_nosearch.js | 16 + source/javascripts/app/_lang.js | 164 + source/javascripts/app/_search.js | 98 + source/javascripts/app/_toc.js | 122 + source/javascripts/lib/_energize.js | 169 + source/javascripts/lib/_imagesloaded.min.js | 7 + source/javascripts/lib/_jquery.highlight.js | 108 + source/javascripts/lib/_jquery.js | 10253 +++++++++++++++++ source/javascripts/lib/_lunr.js | 1910 +++ source/layouts/layout.erb | 183 + source/stylesheets/_icon-font.scss | 38 + source/stylesheets/_normalize.scss | 427 + source/stylesheets/_rtl.scss | 140 + source/stylesheets/_variables.scss | 104 + source/stylesheets/print.css.scss | 147 + source/stylesheets/screen.css.scss | 788 ++ 104 files changed, 28337 insertions(+), 10 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 CI_Deploy.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 LICENSE create mode 100644 Vagrantfile create mode 100644 build/v1/rest/fonts/slate.eot create mode 100644 build/v1/rest/fonts/slate.svg create mode 100644 build/v1/rest/fonts/slate.ttf create mode 100644 build/v1/rest/fonts/slate.woff create mode 100644 build/v1/rest/fonts/slate.woff2 create mode 100644 build/v1/rest/images/favicon.ico create mode 100644 build/v1/rest/images/icon_nav.svg create mode 100644 build/v1/rest/images/logo.png create mode 100644 build/v1/rest/images/logo.svg create mode 100644 build/v1/rest/images/navbar.png create mode 100644 build/v1/rest/index.html create mode 100644 build/v1/rest/javascripts/all.js create mode 100644 build/v1/rest/javascripts/all_nosearch.js create mode 100644 build/v1/rest/stylesheets/print.css create mode 100644 build/v1/rest/stylesheets/screen.css create mode 100644 build/v1/ws/fonts/slate.eot create mode 100644 build/v1/ws/fonts/slate.svg create mode 100644 build/v1/ws/fonts/slate.ttf create mode 100644 build/v1/ws/fonts/slate.woff create mode 100644 build/v1/ws/fonts/slate.woff2 create mode 100644 build/v1/ws/images/favicon.ico create mode 100644 build/v1/ws/images/icon_nav.svg create mode 100644 build/v1/ws/images/logo.png create mode 100644 build/v1/ws/images/logo.svg create mode 100644 build/v1/ws/images/navbar.png create mode 100644 build/v1/ws/index.html create mode 100644 build/v1/ws/javascripts/all.js create mode 100644 build/v1/ws/javascripts/all_nosearch.js create mode 100644 build/v1/ws/stylesheets/print.css create mode 100644 build/v1/ws/stylesheets/screen.css create mode 100644 config.rb create mode 100755 deploy.sh create mode 100755 font-selection.json create mode 100644 gh-pages/v1/rest/fonts/slate.eot create mode 100644 gh-pages/v1/rest/fonts/slate.svg create mode 100644 gh-pages/v1/rest/fonts/slate.ttf create mode 100644 gh-pages/v1/rest/fonts/slate.woff create mode 100644 gh-pages/v1/rest/fonts/slate.woff2 create mode 100644 gh-pages/v1/rest/images/favicon.ico create mode 100644 gh-pages/v1/rest/images/icon_nav.svg create mode 100644 gh-pages/v1/rest/images/logo.png create mode 100644 gh-pages/v1/rest/images/logo.svg create mode 100644 gh-pages/v1/rest/images/navbar.png create mode 100644 gh-pages/v1/rest/index.html create mode 100644 gh-pages/v1/rest/javascripts/all.js create mode 100644 gh-pages/v1/rest/javascripts/all_nosearch.js create mode 100644 gh-pages/v1/rest/stylesheets/print.css create mode 100644 gh-pages/v1/rest/stylesheets/screen.css create mode 100644 gh-pages/v1/ws/fonts/slate.eot create mode 100644 gh-pages/v1/ws/fonts/slate.svg create mode 100644 gh-pages/v1/ws/fonts/slate.ttf create mode 100644 gh-pages/v1/ws/fonts/slate.woff create mode 100644 gh-pages/v1/ws/fonts/slate.woff2 create mode 100644 gh-pages/v1/ws/images/favicon.ico create mode 100644 gh-pages/v1/ws/images/icon_nav.svg create mode 100644 gh-pages/v1/ws/images/logo.png create mode 100644 gh-pages/v1/ws/images/logo.svg create mode 100644 gh-pages/v1/ws/images/navbar.png create mode 100644 gh-pages/v1/ws/index.html create mode 100644 gh-pages/v1/ws/javascripts/all.js create mode 100644 gh-pages/v1/ws/javascripts/all_nosearch.js create mode 100644 gh-pages/v1/ws/stylesheets/print.css create mode 100644 gh-pages/v1/ws/stylesheets/screen.css create mode 100644 lib/multilang.rb create mode 100644 lib/nesting_unique_head.rb create mode 100644 lib/toc_data.rb create mode 100644 lib/unique_head.rb create mode 100644 source/fonts/slate.eot create mode 100644 source/fonts/slate.svg create mode 100644 source/fonts/slate.ttf create mode 100644 source/fonts/slate.woff create mode 100644 source/fonts/slate.woff2 create mode 100644 source/images/favicon.ico create mode 100644 source/images/icon_nav.svg create mode 100644 source/images/logo.png create mode 100644 source/images/logo.svg create mode 100644 source/images/navbar.png create mode 100644 source/includes/_errors.md create mode 100644 source/index.html.md create mode 100644 source/javascripts/all.js create mode 100644 source/javascripts/all_nosearch.js create mode 100644 source/javascripts/app/_lang.js create mode 100644 source/javascripts/app/_search.js create mode 100644 source/javascripts/app/_toc.js create mode 100644 source/javascripts/lib/_energize.js create mode 100644 source/javascripts/lib/_imagesloaded.min.js create mode 100644 source/javascripts/lib/_jquery.highlight.js create mode 100644 source/javascripts/lib/_jquery.js create mode 100644 source/javascripts/lib/_lunr.js create mode 100644 source/layouts/layout.erb create mode 100644 source/stylesheets/_icon-font.scss create mode 100644 source/stylesheets/_normalize.scss create mode 100644 source/stylesheets/_rtl.scss create mode 100644 source/stylesheets/_variables.scss create mode 100644 source/stylesheets/print.css.scss create mode 100644 source/stylesheets/screen.css.scss diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..218f5ca --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,162 @@ +# Changelog + +## Version 2.3.1 + +*July 5, 2018* + +- Update `sprockets` in `Gemfile.lock` to fix security warnings + +## Version 2.3 + +*July 5, 2018* + +- Allows strikethrough in markdown by default. +- Upgrades jQuery to 3.2.1, thanks to [Tomi Takussaari](https://github.com/TomiTakussaari) +- Fixes invalid HTML in `layout.erb`, thanks to [Eric Scouten](https://github.com/scouten) for pointing out +- Hopefully fixes Vagrant memory issues, thanks to [Petter Blomberg](https://github.com/p-blomberg) for the suggestion +- Cleans HTML in headers before setting `document.title`, thanks to [Dan Levy](https://github.com/justsml) +- Allows trailing whitespace in markdown files, thanks to [Samuel Cousin](https://github.com/kuzyn) +- Fixes pushState/replaceState problems with scrolling not changing the document hash, thanks to [Andrey Fedorov](https://github.com/anfedorov) +- Removes some outdated examples, thanks [@al-tr](https://github.com/al-tr), [Jerome Dahdah](https://github.com/jdahdah), and [Ricardo Castro](https://github.com/mccricardo) +- Fixes `nav-padding` bug, thanks [Jerome Dahdah](https://github.com/jdahdah) +- Code style fixes thanks to [Sebastian Zaremba](https://github.com/vassyz) +- Nokogiri version bump thanks to [Grey Baker](https://github.com/greysteil) +- Fix to default `index.md` text thanks to [Nick Busey](https://github.com/NickBusey) + +Thanks to everyone who contributed to this release! + +## Version 2.2 + +*January 19, 2018* + +- Fixes bugs with some non-roman languages not generating unique headers +- Adds editorconfig, thanks to [Jay Thomas](https://github.com/jaythomas) +- Adds optional `NestingUniqueHeadCounter`, thanks to [Vladimir Morozov](https://github.com/greenhost87) +- Small fixes to typos and language, thx [Emir Ribić](https://github.com/ribice), [Gregor Martynus](https://github.com/gr2m), and [Martius](https://github.com/martiuslim)! +- Adds links to Spectrum chat for questions in README and ISSUE_TEMPLATE + +## Version 2.1 + +*October 30, 2017* + +- Right-to-left text stylesheet option, thanks to [Mohammad Hossein Rabiee](https://github.com/mhrabiee) +- Fix for HTML5 history state bug, thanks to [Zach Toolson](https://github.com/ztoolson) +- Small styling changes, typo fixes, small bug fixes from [Marian Friedmann](https://github.com/rnarian), [Ben Wilhelm](https://github.com/benwilhelm), [Fouad Matin](https://github.com/fouad), [Nicolas Bonduel](https://github.com/NicolasBonduel), [Christian Oliff](https://github.com/coliff) + +Thanks to everyone who submitted PRs for this version! + +## Version 2.0 + +*July 17, 2017* + +- All-new statically generated table of contents + - Should be much faster loading and scrolling for large pages + - Smaller Javascript file sizes + - Avoids the problem with the last link in the ToC not ever highlighting if the section was shorter than the page + - Fixes control-click not opening in a new page + - Automatically updates the HTML title as you scroll +- Updated design + - New default colors! + - New spacings and sizes! + - System-default typefaces, just like GitHub +- Added search input delay on large corpuses to reduce lag +- We even bumped the major version cause hey, why not? +- Various small bug fixes + +Thanks to everyone who helped debug or wrote code for this version! It was a serious community effort, and I couldn't have done it alone. + +## Version 1.5 + +*February 23, 2017* + +- Add [multiple tabs per programming language](https://github.com/lord/slate/wiki/Multiple-language-tabs-per-programming-language) feature +- Upgrade Middleman to add Ruby 1.4.0 compatibility +- Switch default code highlighting color scheme to better highlight JSON +- Various small typo and bug fixes + +## Version 1.4 + +*November 24, 2016* + +- Upgrade Middleman and Rouge gems, should hopefully solve a number of bugs +- Update some links in README +- Fix broken Vagrant startup script +- Fix some problems with deploy.sh help message +- Fix bug with language tabs not hiding properly if no error +- Add `!default` to SASS variables +- Fix bug with logo margin +- Bump tested Ruby versions in .travis.yml + +## Version 1.3.3 + +*June 11, 2016* + +Documentation and example changes. + +## Version 1.3.2 + +*February 3, 2016* + +A small bugfix for slightly incorrect background colors on code samples in some cases. + +## Version 1.3.1 + +*January 31, 2016* + +A small bugfix for incorrect whitespace in code blocks. + +## Version 1.3 + +*January 27, 2016* + +We've upgraded Middleman and a number of other dependencies, which should fix quite a few bugs. + +Instead of `rake build` and `rake deploy`, you should now run `bundle exec middleman build --clean` to build your server, and `./deploy.sh` to deploy it to Github Pages. + +## Version 1.2 + +*June 20, 2015* + +**Fixes:** + +- Remove crash on invalid languages +- Update Tocify to scroll to the highlighted header in the Table of Contents +- Fix variable leak and update search algorithms +- Update Python examples to be valid Python +- Update gems +- More misc. bugfixes of Javascript errors +- Add Dockerfile +- Remove unused gems +- Optimize images, fonts, and generated asset files +- Add chinese font support +- Remove RedCarpet header ID patch +- Update language tabs to not disturb existing query strings + +## Version 1.1 + +*July 27, 2014* + +**Fixes:** + +- Finally, a fix for the redcarpet upgrade bug + +## Version 1.0 + +*July 2, 2014* + +[View Issues](https://github.com/tripit/slate/issues?milestone=1&state=closed) + +**Features:** + +- Responsive designs for phones and tablets +- Started tagging versions + +**Fixes:** + +- Fixed 'unrecognized expression' error +- Fixed #undefined hash bug +- Fixed bug where the current language tab would be unselected +- Fixed bug where tocify wouldn't highlight the current section while searching +- Fixed bug where ids of header tags would have special characters that caused problems +- Updated layout so that pages with disabled search wouldn't load search.js +- Cleaned up Javascript diff --git a/CI_Deploy.md b/CI_Deploy.md new file mode 100644 index 0000000..f390ab3 --- /dev/null +++ b/CI_Deploy.md @@ -0,0 +1,32 @@ +# CI 部署 + +目前使用的是 [Travis CI](https://travis-ci.org/cloudapidoc/API_Docs),由于 `slate` 原生不支持多语言多版本独立部署,此项目改为用 `临时目录` 中转部署文件的方案部署。与原生的部署方案相比,此方案便于部署单个分支,不会对其他分支造成影响。 + +## 部署脚本 + +### 部署过程 +- 修改 `./deploy.sh`,实现在 `./gh-pages` 文件夹下 `checkout origin/gh-pages` 分支,再将 build 所生成的静态页面文件全部粘贴过来。 + +## 配置 +- 修改 `./.travis.yml` + ```yml + sudo: false + + language: ruby + + rvm: + - 2.4.0 + + branches: + only: + - v1_cn + - v1_en + - v2_cn + - v2_en + # new branch add here + + cache: bundler + + script: + - ./deploy.sh + ``` \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..cc17fd9 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hello@lord.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..8af6595 --- /dev/null +++ b/Gemfile @@ -0,0 +1,15 @@ +ruby '>=2.3.1' +source 'https://rubygems.org' + +# Middleman +gem 'middleman', '~>4.2.1' +gem 'middleman-syntax', '~> 3.0.0' +gem 'middleman-autoprefixer', '~> 2.7.0' +gem 'middleman-sprockets', '~> 4.1.0' +gem 'rouge', '~> 2.0.5' +gem 'redcarpet', '~> 3.4.0' +gem 'nokogiri', '~> 1.8.5' + +# Javascript Runtime +gem 'therubyracer', '~> 0.12.3' + diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..6f80b6c --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,135 @@ +GEM + remote: https://rubygems.org/ + specs: + activesupport (5.0.1) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (~> 0.7) + minitest (~> 5.1) + tzinfo (~> 1.1) + addressable (2.5.0) + public_suffix (~> 2.0, >= 2.0.2) + autoprefixer-rails (6.6.1) + execjs + backports (3.6.8) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + compass-import-once (1.0.5) + sass (>= 3.2, < 3.5) + concurrent-ruby (1.0.5) + contracts (0.13.0) + dotenv (2.2.0) + erubis (2.7.0) + execjs (2.7.0) + fast_blank (1.0.0) + fastimage (2.0.1) + addressable (~> 2) + ffi (1.9.17) + haml (4.0.7) + tilt + hamster (3.0.0) + concurrent-ruby (~> 1.0) + hashie (3.5.1) + i18n (0.7.0) + kramdown (1.13.2) + libv8 (3.16.14.19) + listen (3.0.8) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + memoist (0.15.0) + middleman (4.2.1) + coffee-script (~> 2.2) + compass-import-once (= 1.0.5) + haml (>= 4.0.5) + kramdown (~> 1.2) + middleman-cli (= 4.2.1) + middleman-core (= 4.2.1) + sass (>= 3.4.0, < 4.0) + middleman-autoprefixer (2.7.1) + autoprefixer-rails (>= 6.5.2, < 7.0.0) + middleman-core (>= 3.3.3) + middleman-cli (4.2.1) + thor (>= 0.17.0, < 2.0) + middleman-core (4.2.1) + activesupport (>= 4.2, < 5.1) + addressable (~> 2.3) + backports (~> 3.6) + bundler (~> 1.1) + contracts (~> 0.13.0) + dotenv + erubis + execjs (~> 2.0) + fast_blank + fastimage (~> 2.0) + hamster (~> 3.0) + hashie (~> 3.4) + i18n (~> 0.7.0) + listen (~> 3.0.0) + memoist (~> 0.14) + padrino-helpers (~> 0.13.0) + parallel + rack (>= 1.4.5, < 3) + sass (>= 3.4) + servolux + tilt (~> 2.0) + uglifier (~> 3.0) + middleman-sprockets (4.1.0) + middleman-core (~> 4.0) + sprockets (>= 3.0) + middleman-syntax (3.0.0) + middleman-core (>= 3.2) + rouge (~> 2.0) + mini_portile2 (2.3.0) + minitest (5.10.1) + nokogiri (1.8.5) + mini_portile2 (~> 2.3.0) + padrino-helpers (0.13.3.3) + i18n (~> 0.6, >= 0.6.7) + padrino-support (= 0.13.3.3) + tilt (>= 1.4.1, < 3) + padrino-support (0.13.3.3) + activesupport (>= 3.1) + parallel (1.10.0) + public_suffix (2.0.5) + rack (2.0.5) + rb-fsevent (0.9.8) + rb-inotify (0.9.8) + ffi (>= 0.5.0) + redcarpet (3.4.0) + ref (2.0.0) + rouge (2.0.7) + sass (3.4.23) + servolux (0.12.0) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + therubyracer (0.12.3) + libv8 (~> 3.16.14.15) + ref + thor (0.19.4) + thread_safe (0.3.5) + tilt (2.0.6) + tzinfo (1.2.2) + thread_safe (~> 0.1) + uglifier (3.0.4) + execjs (>= 0.3.0, < 3) + +PLATFORMS + ruby + +DEPENDENCIES + middleman (~> 4.2.1) + middleman-autoprefixer (~> 2.7.0) + middleman-sprockets (~> 4.1.0) + middleman-syntax (~> 3.0.0) + nokogiri (~> 1.8.5) + redcarpet (~> 3.4.0) + rouge (~> 2.0.5) + therubyracer (~> 0.12.3) + +RUBY VERSION + ruby 2.3.3p222 + +BUNDLED WITH + 1.17.1 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5ceddf5 --- /dev/null +++ b/LICENSE @@ -0,0 +1,13 @@ +Copyright 2008-2013 Concur Technologies, Inc. + +Licensed 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. \ No newline at end of file diff --git a/README.md b/README.md index 0934bee..2bdd241 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,9 @@ # API_Docs -# WebSocket行情API
+# WebSocket行情API -* [WebSocket API简介](https://github.com/cloudapidoc/API_Docs/blob/master/websocket_api.md#websocket-api%E7%AE%80%E4%BB%8B)
-* [请求与订阅说明](https://github.com/cloudapidoc/API_Docs/blob/master/websocket_api.md#%E8%AF%B7%E6%B1%82%E4%B8%8E%E8%AE%A2%E9%98%85%E8%AF%B4%E6%98%8E)
-* [API Reference](https://github.com/cloudapidoc/API_Docs/blob/master/websocket_api.md#websocket-api-reference)
+* [WebSocket API](https://cloudapidoc.github.io/API_Docs/v1/rest/) -# REST行情、交易API
+# REST行情、交易API -* [REST API简介](https://github.com/cloudapidoc/API_Docs/blob/master/rest_api.md#rest-api-%E7%AE%80%E4%BB%8B)
-* [签名认证(重要,请仔细阅读)](https://github.com/cloudapidoc/API_Docs/blob/master/rest_api.md#%E5%AE%89%E5%85%A8%E8%AE%A4%E8%AF%81)
-* [请求说明(一定要看)](https://github.com/cloudapidoc/API_Docs/blob/master/rest_api.md#%E8%AF%B7%E6%B1%82%E8%AF%B4%E6%98%8E)
-* [API Reference](https://github.com/cloudapidoc/API_Docs/blob/master/rest_api.md#api-reference)
-* [错误代码](https://github.com/cloudapidoc/API_Docs/blob/master/rest_api.md#%E9%94%99%E8%AF%AF%E7%A0%81)
+* [REST API](https://cloudapidoc.github.io/API_Docs/v1/ws/) diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 0000000..6f2444e --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,44 @@ +Vagrant.configure(2) do |config| + config.vm.box = "ubuntu/trusty64" + config.vm.network :forwarded_port, guest: 4567, host: 4567 + config.vm.provider "virtualbox" do |vb| + vb.memory = "2048" + end + + config.vm.provision "bootstrap", + type: "shell", + inline: <<-SHELL + sudo apt-add-repository ppa:brightbox/ruby-ng + sudo apt-get update + sudo apt-get install -yq ruby2.4 ruby2.4-dev + sudo apt-get install -yq pkg-config build-essential nodejs git libxml2-dev libxslt-dev + sudo apt-get autoremove -yq + gem2.4 install --no-ri --no-rdoc bundler + SHELL + + # add the local user git config to the vm + config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig" + + config.vm.provision "install", + type: "shell", + privileged: false, + inline: <<-SHELL + echo "==============================================" + echo "Installing app dependencies" + cd /vagrant + bundle config build.nokogiri --use-system-libraries + bundle install + SHELL + + config.vm.provision "run", + type: "shell", + privileged: false, + run: "always", + inline: <<-SHELL + echo "==============================================" + echo "Starting up middleman at http://localhost:4567" + echo "If it does not come up, check the ~/middleman.log file for any error messages" + cd /vagrant + bundle exec middleman server --watcher-force-polling --watcher-latency=1 &> ~/middleman.log & + SHELL +end diff --git a/build/v1/rest/fonts/slate.eot b/build/v1/rest/fonts/slate.eot new file mode 100644 index 0000000000000000000000000000000000000000..13c4839a1975d4c92d66753d75553f922743c6ef GIT binary patch literal 1876 zcmaJ?&2Jl35TEDWeRg&sP8)xqh$Kr)Yzaiu#`dnNaHtS!Xx9i53LF}#nAmmP`Xfq= z;s{Zte*qCEK;i~h4hYFPaA-x4sD#vVrBXQ{MIaD@1Ke8kn|8tnQ^fdI9N^x@? zd<=RUJW{D`U;b-v<0kYSA}zO8E|&DaCqF0BzlPme0}$TUZbAP8`m<~GR{K~75*dg= zcCEQu4DE@ZpmS=+>&5muJwb0nf0^x#V!izR7X1vpggLV7&CM3_1j&!tPMS_)mkgrN zC!rsJe5kniow8zt{RT+zltXle=pd}!=-!|+8X9a|iyqm&z#GOh#?Z4hMmoI$K1va6 zrUYgm&_U=R+`ZrJ0!LQ9E`42ef0@uHvC8U zo}w4%B?O&MCX$JGEG)w^HIqqa()pb0xK4IFpUb457c*fwDPqaQf|z%md}h1{#>ac0 zD>_@{@&c$_-fEYWRBE3yj7U8q4MTz%hA^cOxdwei%19MlXpM(P_)+e=@Rm}B>tXap zwoqO*DogaoKF+^`!zvX>{f10 zq*F6dk@0&Ok4=k2cHR|EKKaOn+_Q3KG-~~J-9n!;&D+d{W9=SQ|IqlDm9?y2uUl{( zi(0o$Q@Cby<g+B7U zE7gMM6{=S}Ps}C~lhg72%h#4X&vB-0d)je4Z)w>(?>M%-xE~jH;l@L}Lcyy(n4O9z z65lS`w&R>XbW_^$2bKN!lz(S%N3N!tcP>R={D&-^3rjyfS-aWi!AkH>sk+00G5&qW zC1%n(1Gmpd;5$IPUF_Lw@K%&WbbxEX?LgKcF9x!K$J`8LiMQ^#KsG5yOZ=|rBS1K&l2uG4tC&hwF_o-hDp_Le zTrgI}?0+pse + + +Generated by IcoMoon + + + + + + + + + + diff --git a/build/v1/rest/fonts/slate.ttf b/build/v1/rest/fonts/slate.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ace9a46a7e1ed6b6ab3de2f30ef3e27c572f88d3 GIT binary patch literal 1720 zcmaJ>-D_KA7=PaL@t*V?ZMro%kz(6pV-rwZyCyk@Q7?wb>UJv9`gO6wj7^qiCTUqB zO%X@;7dX69!8^V6LWJzXiw!F%45qgVdLa}=5xvm6E&iVKo-9$jJ@CHI_viaTf`}a2 zC!H2wcyVDVd0amU$>&(FZ8pn0bm7yth{U7dH)`ef4)6r{E^wmO*t_`0^~*QG?-S|8 zt!lYq{5ky*k?|Sy{uTt*p8hrX-@re<)$DYS^+1t{800m!H_O^}@g4X@@W-3w?hZXf zuY!M;^{sNV`qeJ|2)=?Gg`Mqo2XzAEd#oqjAaRXMBJF+c79{T|EPkbe7-PE;5S;Q~ zaGL1Q(r@%{&}khDI-bPX!~GUGz-0@x9Aaiik?BxrHq?#(PnWnI%nYaReOv*$ZSm>?)ctla|1hAG;T1^YPnfOv{N&_J8ekcvoG^Cm?MLpzb znO-8ASEU{s)D{<<&JKz%JjTWAM|EWWzjHMajT;ECdZ?bsKw&|^tZONrkvOuIkI%De zUYTtG_26}0jYK0>4*B1QgBuPLXU?}t^*TiboK|r`R>P0_HD+(cdi{Ze{FKYDLBs0R~?v6B%Rx~Edo2aasT@IJ-vtfG(iE^ z$Awv_E5l{^C4s84a|;3+->t#z!u^V-9Nj!@+Ph(RslFP9tMyA^DCS*vdNzG<@yc2l z`u?ov&H8>AuC0gXeBbj{4$|U#n6XQ^x*FE+&d;P>_lp(J^Zj%8%oMl&cI_ZN6TKO{ zkvFp2-&{yO{TDd~50<`txN&oc<4*8TskuV~pXj~g5i{t$k=GYVU^@bQTx>a5uvcK? zADE$i`dge4A3((KH9;?{zv*7K*f>Jt^humckR5yQeHf=xv0R7Ti)jP&N=%#Ng5wPM z_VCv|5z{smX^sCCV+<0Gsc02b(JH2*RZK;zn2MJ0U5I^E%r-TsOdYDyD_EDQO?BF) z7OFc*Cuk9TtZz5Uo$8RKb(q)a%}C8|gD__z_YMNoV9|<#sst6tUZ*|mXK52w&tq|_ J6Wq-M;U6NW`v(93 literal 0 HcmV?d00001 diff --git a/build/v1/rest/fonts/slate.woff b/build/v1/rest/fonts/slate.woff new file mode 100644 index 0000000000000000000000000000000000000000..1e72e0ee0018119d7c814c2097cc60c0bcd05d84 GIT binary patch literal 1796 zcmaJ>&2Jl35TCanZ=GF;-Nqj%Qj#SmwgjS~vAs(b4i$%lc7v*fuR|jhlemtH?Nqf< z5&;$c3y8RZ#0{p83^QtGf$~^ZU#vdPL3b z4fcBr_DN>rKz!G#?&4f~pM4ZRM6a}~ts1aTadwIM%N_dh>UO7#K7YRFXF@YA68l_? z@xFm7>0K?wZ&VUvut!OxMlIIQ5*<0_&Hha~Yl49Y@PK@!7+CqFG*;eClSR)#j$=Xw zNnrjF9T`VX|4zRT99<||DqHk_nzSa(NzO5voBad{L?lOWoE4r?ZbRP(V_X@TZL>{} z(3A8mk}l-3xojrwNJr*pi-lsLQVxSKC{0w##ljO}){#>poy#tYg)pcTCk9|L<3To?f*omEO$b9ODUa}gVj!a zAvUB1l6OCpmTg;7PgnO)phbF-Xik@UVo+OLa3((}zVs*;Zywi?{r}GOL=0{q1ou!q ztD%;HAbGE?Z5HC#RzAMSTXWiN9ioS*i+Usm@#fI}eK@$`F!8DQHtAj`iEnm!UKH}P zNl{d*%%o>TwzLq6ppv_9BR_a$H<|Q)z2RXkyY6k4BJlQ)o4+xU@=Bif%MA~%sib$? zbw%hV*Y96nzi0MvpHdWZeO#D>x^i4rP!XsqKRYk5@ZB2RF5E9QWp(qg81F^VmBvaG ztu(Ggk(kS7r)DyTm#?ozQ4q}d{!9==(dt@sJ_vk&`7k5ChZ~1PD=Sgs?%Z@HoBe#* z_k-a4JvVKwyWWZ=q2@1#9uk~9EfrHBtA=!8%MC` zIGu@c6SyDi7WCym@ z2-w*rE$c_UfviKEL=Vy>={0bo+(i5#P1q3$6VB``hVMrCzU@B6vbqKcPy}m-BtQn- zkylU>byNe6DE>18g5d9bm%bZqa|qF=7&3(|U!AY)%Yg-vOsqKIq$w0D$r*3}ks4=+ z>U6?w2xMd=B$;zQ9v)F1K7KwfQ9|)<9nl&i?6-rchs{I8LC1eK^@#(|^QwB-{VeQz zoHLn@cwG?Yo(X!F(Q8iBOqSNs${h}C*?qJYLuZAnVXqx{ww|}Ux0`ca^V#hz?c7{r z7ldYbmk!M1m3G+IYC6(!VcCzqp&pJkZ#1@kw2W<^EJMqOM;^&dq6ELC*|pK!(cC0< zbZtF%BzLsuTw5O*+eg;dX0a+hcfI=gj8a~qWYJoMamHAo)!Qq|6&~9S8`{d0T?L&% z@$R=P6H0rTp6V+-Dlb>EB67JEMQ>kk%`y}{hvBC(RNEw)*%|U|4>SL+B=3rE@y*rw zR_bLZr&~XN?C;+yx2IilcDnrb?M)}An;DsTe@^rq$9L-UWNqY_oTyWyYisN3CMIh; z*C)b12exYgK^2c4S}J#2YJ+00rUlj%+LqQ7E%lldEc`K|1Bky)iLkwF{Wltvj!{A+PBEzhE3BX) zFBgqmj@&z?N1*=OK?z54T7is8FiA(N66oe`X+cKl>`n&&000000HC;3 zk^ug-#56-JW5JAtMV6Rgj#+|9A(7;@^`+^dWy@Alt7D86w|;R>QMs>d+47HJVfKhH aD;vc&%m&dlj4($-ipx}q&#}A+00017%3vV? literal 0 HcmV?d00001 diff --git a/build/v1/rest/images/favicon.ico b/build/v1/rest/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5c63651b083911c23709c7e235da45fc3f7bf38e GIT binary patch literal 10161 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 u`~?fr4wr40q@$#2*7 + + + Group 59 Copy 5 + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/build/v1/rest/images/logo.png b/build/v1/rest/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..413fbaf3d28bd73f46be8b5c0d3b2af5d83193f6 GIT binary patch literal 14099 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 + + + Group 54 Copy 2 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build/v1/rest/images/navbar.png b/build/v1/rest/images/navbar.png new file mode 100644 index 0000000000000000000000000000000000000000..df38e90d87e1a215371b4977e18cde90f8832537 GIT binary patch literal 96 zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk@BpAX3RW*PVQ%R6tFatx` + + + + + + + API 文档 + + + + + + + + + + Navbar + + +
+
+

Cloud API

+ + +
+ +
+ +
+
+
+

REST API 简介

+

API实现程序化交易。

+ +

通过API可以实现以下功能:

+ +
    +
  • 市场行情信息查询(K线、深度、实时成交、24小时行情)
  • +
  • 账户资产信息查询
  • +
  • 下单、撤单操作
  • +
  • 订单信息查询
  • +
+

安全认证

+

目前关于apikey申请和修改,请在“账户 - API管理”页面进行相关操作。其中AccessKey为API 访问密钥,SecretKey为用户对请求进行签名的密钥(仅申请时可见)。

+ +

重要提示:这两个密钥与账号安全紧密相关,无论何时都请勿向其它人透露。

+

合法请求结构

+

基于安全考虑,除行情API 外的 API 请求都必须进行签名运算。一个合法的请求由以下几部分组成:

+ +
    +
  • 方法请求地址 即访问服务器地址:HOST+/api+方法名,比如{HOST}/api/v1/order/orders。

  • +
  • Host的常用格式:www.xxxx.com 如果有host格式相关问题,请咨询Host提供方)

  • +
  • API 访问密钥(AccessKeyId) 您申请的 APIKEY 中的AccessKey。

  • +
  • 签名方法(SignatureMethod) 用户计算签名的基于哈希的协议,此处使用 HmacSHA256。

  • +
  • 签名版本(SignatureVersion) 签名协议的版本,此处使用2。

  • +
  • 时间戳(Timestamp) 您发出请求的时间 (UTC 时区) (UTC 时区) (UTC 时区) 。在查询请求中包含此值有助于防止第三方截取您的请求。如:2017-05-11T16:22:06。再次强调是 (UTC 时区) 。

  • +
  • 必选和可选参数 每个方法都有一组用于定义 API 调用的必需参数和可选参数。可以在每个方法的说明中查看这些参数及其含义。 请一定注意:对于GET请求,每个方法自带的参数都需要进行签名运算; 对于POST请求,每个方法自带的参数不进行签名认证,即POST请求中需要进行签名运算的只有AccessKeyId、SignatureMethod、SignatureVersion、Timestamp四个参数,其它参数放在body中。

  • +
  • 签名 签名计算得出的值,用于确保签名有效和未被篡改。

  • +
+ +

例:

+
https://{HOST}/api/v1/order/orders?
+AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx
+&SignatureMethod=HmacSHA256
+&SignatureVersion=2
+&Timestamp=2017-05-11T15%3A19%3A30
+&order-id=1234567890
+&Signature=calculated value
+

签名运算

+

API 请求在通过 Internet 发送的过程中极有可能被篡改。为了确保请求未被更改,我们会要求用户在每个请求中带上签名(行情 API 除外),来校验参数或参数值在传输途中是否发生了更改。

+

计算签名所需的步骤:

+
    +
  1. 规范要计算签名的请求 +因为使用 HMAC 进行签名计算时,使用不同内容计算得到的结果会完全不同。所以在进行签名计算前,请先对请求进行规范化处理。下面以查询某订单详情请求为例进行说明
  2. +
+
https://{HOST}/api/v1/order/orders?
+AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx
+&SignatureMethod=HmacSHA256
+&SignatureVersion=2
+&Timestamp=2017-05-11T15:19:30
+&order-id=1234567890
+
+
    +
  1. 请求方法(GET 或 POST),后面添加换行符\n。
  2. +
+
GET\n
+
+
    +
  1. 添加小写的访问地址,后面添加换行符\n。
  2. +
+
{host}\n
+
+
    +
  1. 访问方法的路径,后面添加换行符\n。
  2. +
+
/v1/order/orders\n
+
+
    +
  1. 按照ASCII码的顺序对参数名进行排序(使用 UTF-8 编码,且进行了 URI 编码,十六进制字符必须大写,如‘:’会被编码为'%3A',空格被编码为'%20')。 +例如,下面是请求参数的原始顺序,进行过编码后。
  2. +
+
AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx
+order-id=1234567890
+SignatureMethod=HmacSHA256
+SignatureVersion=2
+Timestamp=2017-05-11T15%3A19%3A30
+
+

这些参数会被排序为:

+
AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx
+SignatureMethod=HmacSHA256
+SignatureVersion=2
+Timestamp=2017-05-11T15%3A19%3A30
+order-id=1234567890
+
+
+

按照以上顺序,将各参数使用字符’&’连接。

+
AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2017-05-11T15%3A19%3A30&order-id=1234567890
+
+

组成最终的要进行签名计算的字符串如下:

+
GET\n
+{host}\n
+/v1/order/orders\n
+AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2017-05-11T15%3A19%3A30&order-id=1234567890
+
+

计算签名,将以下两个参数传入加密哈希函数: +要进行签名计算的字符串

+
GET\n
+{host}\n
+/v1/order/orders\n
+AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2017-05-11T15%3A19%3A30&order-id=1234567890
+
+

进行签名的密钥(SecretKey)

+
b0xxxxxx-c6xxxxxx-94xxxxxx-dxxxx
+
+

得到签名计算结果并进行 Base64编码

+
4F65x5A2bLyMWVQj3Aqp+B4w+ivaA7n5Oi2SuYtCJ9o=
+
+

将上述值作为参数Signature的取值添加到 API 请求中。 将此参数添加到请求时,必须将该值进行 URI 编码。

+ +

最终,发送到服务器的 API 请求应该为:

+
https://{host}/v1/order/orders?AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&order-id=1234567890&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2017-05-11T15%3A19%3A30&Signature=4F65x5A2bLyMWVQj3Aqp%2BB4w%2BivaA7n5Oi2SuYtCJ9o%3D
+

请求说明

+
    +
  1. 访问地址:将文档中的{HOST}替换为服务商的host
  2. +
  3. POST请求头信息中必须声明 Content-Type:application/json;GET请求头信息中必须声明 Content-Type:application/x-www-form-urlencoded。(汉语用户建议设置 Accept-Language:zh-cn)
  4. +
  5. 所有请求参数请按照 API 说明进行参数封装。
  6. +
  7. 将封装好参数的 API 请求通过 POST 或 GET 的方式提交到服务器。
  8. +
  9. 服务端处理请求,并返回相应的 JSON 格式结果。
  10. +
  11. 请使用 https 请求。
  12. +
  13. 限制频率(每个接口,只针对交易api,行情api不限制)为10秒100次。
  14. +
  15. 查询资产详情方法调用顺序:查询当前用户的所有账户->查询指定账户的余额
  16. +
+

API Reference

+ + + +

接口列表

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
接口数据类型请求方法类型描述需要验签子账号可用
市场行情GET /market/history/klineGETK线NY
市场行情GET /market/detail/mergedGET滚动24小时交易和最优报价聚合行情(单个symbol)NY
市场行情GET /market/tickersGET全部symbol的交易行情NY
市场行情GET /market/depthGET市场深度行情(单个symbol)NY
市场行情GET /market/tradeGET单个symbol最新成交记录NY
市场行情GET /market/history/tradeGET单个symbol批量成交记录NY
交易品种信息GET /v1/common/symbolsGET交易品种的计价货币和报价精度NY
交易品种信息GET /v1/common/currencysGET交易币种列表NY
系统信息GET /v1/common/timestampGET查询当前系统时间NY
账户信息GET /v1/account/accountsGET查询用户的所有账户状态YY
账户信息GET /v1/account/accounts/{account-id}/balanceGET查询指定账户余额YY
交易POST/v1/order/orders/placePOST下单YY
交易POST/v1/order/orders/{order-id}/submitcancelPOST按order-id撤销一个订单YY
交易POST /v1/order/orders/batchcancelPOST按order_id, 批量撤销订单(up to 50)YY
交易POST /v1/order/orders/batchCancelOpenOrdersPOST按订单条件批量撤销订单(up to 100)YY
用户订单信息GET /v1/order/orders/{order-id}GET根据order-id查询订单详情YY
用户订单信息GET /v1/order/orders/{order-id}/matchresultsGET根据order-id查询订单的成交明细YY
用户订单信息GET /v1/order/ordersGET查询用户当前委托、或历史委托订单 (up to 100)YY
用户订单信息GET /v1/order/matchresultsGET查询用户当前成交、历史成交YY
用户订单信息GET /v1/order/openOrdersGET查询用户当前未成交订单 (up to 500)YY
充提币POST /v1/dw/withdraw/api/createPOST申请提币YN
充提币POST /v1/dw/withdraw-virtual/{withdraw-id}/cancelPOST撤销提币申请YN
充提币GET /v1/query/deposit-withdrawGET查询充提记录YN
+

市场行情

+

在调用行情接口时,请添加get参数,key为AccessKeyId ,value为网页上申请的apikey的accesskey 。

+ +

例:

+
https://{HOST}/market/history/kline?period=1day&size=200&symbol=btcusdt&AccessKeyId=fff-xxx-ssss-kkk
+
+

GET /market/history/kline 获取K线数据

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
periodtruestringK线类型1min, 5min, 15min, 30min, 60min, 1day, 1mon, 1week, 1year
sizefalseinteger获取数量150[1,2000]
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
statustruestring请求处理结果"ok" , "error"
tstruenumber响应生成时间点,单位:毫秒
ticktrueobjectKLine 数据
chtruestring数据所属的 channel,格式: market.$symbol.kline.$period
+ +

data 说明:

+
  "data": [
+{
+    "id": K线id,
+    "amount": 成交量,
+    "count": 成交笔数,
+    "open": 开盘价,
+    "close": 收盘价,当K线为最晚的一根时,是最新成交价
+    "low": 最低价,
+    "high": 最高价,
+    "vol": 成交额, 即 sum(每一笔成交价 * 该笔的成交量)
+  }
+]
+
+

请求响应示例:

+
/* GET /market/history/kline?period=1day&size=200&symbol=btcusdt */
+{
+  "status": "ok",
+  "ch": "market.btcusdt.kline.1day",
+  "ts": 1499223904680,
+  "data": [
+{
+    "id": 1499184000,
+    "amount": 37593.0266,
+    "count": 0,
+    "open": 1935.2000,
+    "close": 1879.0000,
+    "low": 1856.0000,
+    "high": 1940.0000,
+    "vol": 71031537.97866500
+  },
+// more data here
+]
+}
+
+/* GET /market/history/kline?period=not-exist&size=200&symbol=ethusdt */
+{
+  "ts": 1490758171271,
+  "status": "error",
+  "err-code": "invalid-parameter",
+  "err-msg": "invalid period"
+}
+
+/* GET /market/history/kline?period=1day&size=not-exist&symbol=ethusdt */
+{
+  "ts": 1490758221221,
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "invalid size, valid range: [1,2000]"
+}
+
+/* GET /market/history/kline?period=1day&size=200&symbol=not-exist */
+{
+  "ts": 1490758171271,
+  "status": "error",
+  "err-code": "invalid-parameter",
+  "err-msg": "invalid symbol"
+}
+

GET /market/detail/merged 获取聚合行情(Ticker)

+

请求参数:

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
statustruestring请求处理结果"ok" , "error"
tstruenumber响应生成时间点,单位:毫秒
ticktrueobjectK线数据
chtruestring数据所属的 channel,格式: market.$symbol.detail.merged
+ +

tick 说明:

+
  "tick": {
+    "id": K线id,
+    "amount": 成交量,
+    "count": 成交笔数,
+    "open": 开盘价,
+    "close": 收盘价,当K线为最晚的一根时,是最新成交价
+    "low": 最低价,
+    "high": 最高价,
+    "vol": 成交额, 即 sum(每一笔成交价 * 该笔的成交量)
+    "bid": [买1价,买1量],
+    "ask": [卖1价,卖1量]
+  }
+
+
+

请求响应示例:

+
/* GET /market/detail/merged?symbol=ethusdt */
+{
+"status":"ok",
+"ch":"market.ethusdt.detail.merged",
+"ts":1499225276950,
+"tick":{
+  "id":1499225271,
+  "ts":1499225271000,
+  "close":1885.0000,
+  "open":1960.0000,
+  "high":1985.0000,
+  "low":1856.0000,
+  "amount":81486.2926,
+  "count":42122,
+  "vol":157052744.85708200,
+  "ask":[1885.0000,21.8804],
+  "bid":[1884.0000,1.6702]
+  }
+}
+
+/* GET /market/detail/merged?symbol=not-exist */
+{
+  "ts": 1490758171271,
+  "status": "error",
+  "err-code": "invalid-parameter",
+  "err-msg": "invalid symbol”
+}
+
+

GET /market/tickers

{  
+    "status":"ok",
+    "ts":1510885463001,
+    "data":[  
+        {  
+            "open":0.044297,      // 日K线 开盘价
+            "close":0.042178,     // 日K线 收盘价
+            "low":0.040110,       // 日K线 最低价
+            "high":0.045255,      // 日K线 最高价
+            "amount":12880.8510,  // 24小时成交量
+            "count":12838,        // 24小时成交笔数
+            "vol":563.0388715740, // 24小时成交额
+            "symbol":"ethbtc"     // 交易对
+        },
+        {  
+            "open":0.008545,
+            "close":0.008656,
+            "low":0.008088,
+            "high":0.009388,
+            "amount":88056.1860,
+            "count":16077,
+            "vol":771.7975953754,
+            "symbol":"ltcbtc"
+        }
+    ]
+}
+
+

注:当交易对尚未产生成交时,返回的数据里面 open close high low amount count vol 的值都为 null

+

GET /market/depth 获取 Market Depth 数据

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestringDepth 类型step0, step1, step2, step3, step4, step5(合并深度0-5);step0时,不合并深度
+ +
    +
  • 用户选择“合并深度”时,一定报价精度内的市场挂单将予以合并显示。合并深度仅改变显示方式,不改变实际成交价格。
  • +
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
statustruestring"ok" 或者 "error"
tstruenumber响应生成时间点,单位:毫秒
ticktrueobjectDepth 数据
chtruestring数据所属的 channel,格式: market.$symbol.depth.$type
+ +

tick 说明:

+
  "tick": {
+    "id": 消息id,
+    "ts": 消息生成时间,单位:毫秒,
+    "bids": 买盘,[price(成交价), amount(成交量)], 按price降序,
+    "asks": 卖盘,[price(成交价), amount(成交量)], 按price升序
+  }
+
+

请求响应示例:

+
/* GET /market/depth?symbol=ethusdt&type=step1 */
+{
+  "status": "ok",
+  "ch": "market.btcusdt.depth.step1",
+  "ts": 1489472598812,
+  "tick": {
+    "id": 1489464585407,
+    "ts": 1489464585407,
+    "bids": [
+      [7964, 0.0678], // [price, amount]
+      [7963, 0.9162],
+      [7961, 0.1],
+      [7960, 12.8898],
+      [7958, 1.2],
+      [7955, 2.1009],
+      [7954, 0.4708],
+      [7953, 0.0564],
+      [7951, 2.8031],
+      [7950, 13.7785],
+      [7949, 0.125],
+      [7948, 4],
+      [7942, 0.4337],
+      [7940, 6.1612],
+      [7936, 0.02],
+      [7935, 1.3575],
+      [7933, 2.002],
+      [7932, 1.3449],
+      [7930, 10.2974],
+      [7929, 3.2226]
+    ],
+    "asks": [
+      [7979, 0.0736],
+      [7980, 1.0292],
+      [7981, 5.5652],
+      [7986, 0.2416],
+      [7990, 1.9970],
+      [7995, 0.88],
+      [7996, 0.0212],
+      [8000, 9.2609],
+      [8002, 0.02],
+      [8008, 1],
+      [8010, 0.8735],
+      [8011, 2.36],
+      [8012, 0.02],
+      [8014, 0.1067],
+      [8015, 12.9118],
+      [8016, 2.5206],
+      [8017, 0.0166],
+      [8018, 1.3218],
+      [8019, 0.01],
+      [8020, 13.6584]
+    ]
+  }
+}
+
+/* GET /market/depth?symbol=ethusdt&type=not-exist */
+{
+  "ts": 1490759358099,
+  "status": "error",
+  "err-code": "invalid-parameter",
+  "err-msg": "invalid type"
+}
+

GET /market/trade 获取 Trade Detail 数据

+

请求参数:

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
statustruestring"ok" 或者 "error"
tstruenumber响应生成时间点,单位:毫秒
ticktrueobjectTrade 数据
chtruestring数据所属的 channel,格式: market.$symbol.trade.detail
+ +

tick 说明:

+
  "tick": {
+    "id": 消息id,
+    "ts": 最新成交时间,
+    "data": [
+      {
+        "id": 成交id,
+        "price": 成交价钱,
+        "amount": 成交量,
+        "direction": 主动成交方向,
+        "ts": 成交时间
+      }
+    ]
+  }
+
+

请求响应例子:

+
/* GET /market/trade?symbol=ethusdt */
+{
+  "status": "ok",
+  "ch": "market.btcusdt.trade.detail",
+  "ts": 1489473346905,
+  "tick": {
+    "id": 600848670,
+    "ts": 1489464451000,
+    "data": [
+      {
+        "id": 600848670,
+        "price": 7962.62,
+        "amount": 0.0122,
+        "direction": "buy",
+        "ts": 1489464451000
+      }
+    ]
+  }
+}
+
+/* GET /market/trade?symbol=not-exist */
+{
+  "ts": 1490759506429,
+  "status": "error",
+  "err-code": "invalid-parameter",
+  "err-msg": "invalid symbol"
+}
+

GET /market/history/trade 批量获取最近的交易记录

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
sizefalseinteger获取交易记录的数量1[1, 2000]
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
statustruestringok, error
chtruestring数据所属的 channel,格式: market.$symbol.trade.detail
tstrueinteger发送时间
datatrueobject成交记录
+ +

data 说明:

+
  "data": {
+    "id": 消息id,
+    "ts": 最新成交时间,
+    "data": [
+      {
+        "id": 成交id,
+        "price": 成交价,
+        "amount": 成交量,
+        "direction": 主动成交方向,
+        "ts": 成交时间
+      }
+    ]
+  }
+
+

请求响应例子:

+
/* GET /market/history/trade?symbol=ethusdt */
+{
+    "status": "ok",
+    "ch": "market.ethusdt.trade.detail",
+    "ts": 1502448925216,
+    "data": [
+        {
+            "id": 31459998,
+            "ts": 1502448920106,
+            "data": [
+                {
+                    "id": 17592256642623,
+                    "amount": 0.04,
+                    "price": 1997,
+                    "direction": "buy",
+                    "ts": 1502448920106
+                }
+            ]
+        }
+    ]
+}
+

公共API

GET /v1/common/symbols 查询支持的所有交易对及精度

+

请求参数: +(无)

+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
base-currencytruestring基础币种
quote-currencytruestring计价币种
price-precisiontruestring价格精度位数(0为个位)
amount-precisiontruestring数量精度位数(0为个位)
symbol-partitiontruestring交易区main主区,innovation创新区,bifurcation分叉区
+ +

请求响应例子:

+
/* GET /v1/common/symbols */
+{
+  "status": "ok",
+  "data": [
+    {
+      "base-currency": "eth",
+      "quote-currency": "usdt",
+      "symbol": "ethusdt"
+    }
+    {
+      "base-currency": "etc",
+      "quote-currency": "usdt",
+      "symbol": "etcusdt"
+    }
+  ]
+}
+

GET /v1/common/currencys 查询支持的所有币种

+

请求参数:

+ +

(无)

+ +

响应数据:

+
currency list
+
+

请求响应例子:

+
/* GET /v1/common/currencys */
+{
+  "status": "ok",
+  "data": [
+    "usdt",
+    "eth",
+    "etc"
+  ]
+}
+

GET /v1/common/timestamp 查询系统当前时间

+

请求参数:

+ +

(无)

+ +

响应数据:

+
系统时间戳
+
+

请求响应例子

+
/* GET /v1/common/timestamp */
+{
+  "status": "ok",
+  "data": 1494900087029
+}
+

用户资产API

GET /v1/account/accounts

+

请求参数:

+ +

+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
idtruelongaccount-id
statetruestring账户状态working:正常, lock:账户被锁定
typetruestring账户类型spot:现货账户
+ +

请求响应例子:

+
/* GET /v1/account/accounts */
+{
+  "status": "ok",
+  "data": [
+    {
+      "id": 100009,
+      "type": "spot",
+      "state": "working",
+      "user-id": 1000
+    }
+  ]
+}
+

GET /v1/account/accounts/{account-id}/balance 查询指定账户的余额

+

请求参数

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
account-idtruestringaccount-id,填在 path 中,可用 GET /v1/account/accounts 获取
+ +
    +
  • 如果不知道自己的账户ID,请使用 GET /v1/account/accounts 查询
  • +
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
idtruelong账户 ID
statetruestring账户状态working:正常 lock:账户被锁定
typetruestring账户类型spot:现货账户
listfalseArray子账户数组
+ +

list字段说明

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
balancetruestring余额
currencytruestring币种
typetruestring类型trade: 交易余额,frozen: 冻结余额
+ +

请求响应例子:

+
/* GET /v1/account/accounts/'account-id'/balance */
+{
+  "status": "ok",
+  "data": {
+    "id": 100009,
+    "type": "spot",
+    "state": "working",
+    "list": [
+      {
+        "currency": "usdt",
+        "type": "trade",
+        "balance": "500009195917.4362872650"
+      },
+      {
+        "currency": "usdt",
+        "type": "frozen",
+        "balance": "328048.1199920000"
+      },
+     {
+        "currency": "etc",
+        "type": "trade",
+        "balance": "499999894616.1302471000"
+      },
+      {
+        "currency": "etc",
+        "type": "frozen",
+        "balance": "9786.6783000000"
+      }
+     {
+        "currency": "eth",
+        "type": "trade",
+        "balance": "499999894616.1302471000"
+      },
+      {
+        "currency": "eth",
+        "type": "frozen",
+        "balance": "9786.6783000000"
+      }
+    ],
+    "user-id": 1000
+  }
+}
+

交易API

POST /v1/order/orders/place 下单

请求参数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
account-idtruestring账户 ID,使用accounts方法获得。币币交易使用‘spot’账户的accountid
amounttruestring限价单表示下单数量,市价买单时表示买多少钱,市价卖单时表示卖多少币
pricefalsestring下单价格,市价单不传该参数
sourcefalsestring订单来源api
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestring订单类型buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单, buy-limit-maker, sell-limit-maker(详细说明见下)
+ +

buy-limit-maker

+ +

当“下单价格”>=“市场最低卖出价”,订单提交后,系统将拒绝接受此订单;

+ +

当“下单价格”<“市场最低卖出价”,提交成功后,此订单将被系统接受。

+ +

sell-limit-maker

+ +

当“下单价格”<=“市场最高买入价”,订单提交后,系统将拒绝接受此订单;

+ +

当“下单价格”>“市场最高买入价”,提交成功后,此订单将被系统接受。

+

响应数据:

+ + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datafalsestring订单ID
+

请求响应例子:

/* POST /v1/order/orders/place */
+{
+   "account-id": "100009",
+   "amount": "10.1",
+   "price": "100.1",
+   "source": "api",
+   "symbol": "ethusdt",
+   "type": "buy-limit"
+}
+{
+  "status": "ok",
+  "data": "59378"
+}
+

GET /v1/order/openOrders 获取所有当前帐号下未成交订单

请求参数:

+

“account-id” 和 “symbol” 需同时指定或者二者都不指定。如果二者都不指定,返回最多500条尚未成交订单,按订单号降序排列。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
account-idtruestring账号ID
symboltruestring交易对单个交易对字符串,缺省将返回所有符合条件尚未成交订单
sidefalsestring主动交易方向“buy”或者“sell”,缺省将返回所有符合条件尚未成交订单
sizefalseint所需返回记录数10[0,500]
+

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
idtruelong订单号
symboltruestring交易对
pricetruestring下单价格
created-attrueint下单时间(毫秒)Unix时间戳
typetruestring订单类型buy-market, sell-market, buy-limit, sell-limit, buy-ioc, sell-ioc
filled-amounttruestring下单时间(毫秒)对于非“部分成交”订单,此字段为 0
filled-cash-amounttruestring已成交部分的订单价格(=已成交单量x下单价格)对于非“部分成交”订单,此字段为 0
filled-feestruestring已成交部分所收取手续费对于非“部分成交”订单,此字段为 0
sourcetruestring订单来源sys, web, api, app
statetruestring此订单状态submitted(已提交), partial-filled(部分成交), cancelling(正在取消)
+

响应示例:

/* GET /v1/orders/openOrders */
+{
+  "status": "ok",
+  "data": [
+    {
+      "id": 5454937,
+      "symbol": "ethusdt",
+      "account-id": 30925,
+      "amount": "1.000000000000000000",
+      "price": "0.453000000000000000",
+      "created-at": 1530604762277,
+      "type": "sell-limit",
+      "filled-amount": "0.0",
+      "filled-cash-amount": "0.0",
+      "filled-fees": "0.0",
+      "source": "web",
+      "state": "submitted"
+    }
+  ]
+}
+

POST /v1/order/orders/{order-id}/submitcancel 申请撤销一个订单请求

+

请求参数:

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
order-idtruestring订单ID,填在path中
+ +

响应数据:

+ + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datatruestring订单 ID
+ +

请求响应例子:

+
/* POST /v1/order/orders/{order-id}/submitcancel */
+{
+  "status": "ok",//注意,返回OK表示撤单请求成功。订单是否撤销成功请调用订单查询接口查询该订单状态
+  "data": "59378"
+}
+

POST /v1/order/orders/batchcancel 批量撤销订单

+

请求参数:

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
order-idstruelist撤销订单ID列表单次不超过50个订单id
+ +

响应数据:

+ + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datafalsemap撤单结果
+ +

请求响应例子:

+
/* POST /v1/order/orders/batchcancel */
+{
+  "order-ids": [
+    "1", "2", "3"
+  ]
+}
+
+
+
{
+  "status": "ok",
+  "data": {
+    "success": [
+      "1",
+      "3"
+    ],
+    "failed": [
+      {
+        "err-msg": "记录无效",
+        "order-id": "2",
+        "err-code": "base-record-invalid"
+      }
+    ]
+  }
+}
+

POST /v1/order/orders/batchCancelOpenOrders 批量取消符合条件的订单

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
account-idtruestring账户ID
symbolfalsestring交易对单个交易对字符串,缺省将返回所有符合条件尚未成交订单
sidefalsestring主动交易方向“buy”或“sell”,缺省将返回所有符合条件尚未成交订单
sizefalseint所需返回记录数100[0,100]
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
success-counttrueint成功取消的订单数
failed-counttrueint取消失败的订单数
next-idtruelong下一个符合取消条件的订单号
+

响应示例:

/* POST /v1/order/orders/batchCancelOpenOrders */
+{
+  "status": "ok",
+  "data": {
+    "success-count": 2,
+    "failed-count": 0,
+    "next-id": 5454600
+  }
+}
+

GET /v1/order/orders/{order-id} 查询某个订单详情

+

请求参数:

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
order-idtruestring订单ID,填在path中
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
account-idtruelong账户 ID
amounttruestring订单数量
canceled-atfalselong订单撤销时间
created-attruelong订单创建时间
field-amounttruestring已成交数量
field-cash-amounttruestring已成交总金额
field-feestruestring已成交手续费(买入为币,卖出为钱)
finished-atfalselong订单变为终结态的时间,不是成交时间,包含“已撤单”状态
idtruelong订单ID
pricetruestring订单价格
sourcetruestring订单来源api
statetruestring订单状态submitting , submitted 已提交, partial-filled 部分成交, partial-canceled 部分成交撤销, filled 完全成交, canceled 已撤销
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestring订单类型buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
+ +

请求响应例子:

+
/* GET /v1/order/orders/{order-id} */
+{
+  "status": "ok",
+  "data": {
+    "id": 59378,
+    "symbol": "ethusdt",
+    "account-id": 100009,
+    "amount": "10.1000000000",
+    "price": "100.1000000000",
+    "created-at": 1494901162595,
+    "type": "buy-limit",
+    "field-amount": "10.1000000000",
+    "field-cash-amount": "1011.0100000000",
+    "field-fees": "0.0202000000",
+    "finished-at": 1494901400468,
+    "user-id": 1000,
+    "source": "api",
+    "state": "filled",
+    "canceled-at": 0,
+    "exchange": "xxx",
+    "batch": ""
+  }
+}
+

GET /v1/order/orders/{order-id}/matchresults 查询某个订单的成交明细

+

请求参数:

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
order-idtruestring订单ID,填在path中
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
created-attruelong成交时间
filled-amounttruestring成交数量
filled-feestruestring成交手续费
idtruelong订单成交记录ID
match-idtruelong撮合ID
order-idtruelong订单 ID
pricetruestring成交价格
sourcetruestring订单来源api
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestring订单类型buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
+ +

请求响应例子:

+
/* GET /v1/order/orders/{order-id}/matchresults */
+{
+  "status": "ok",
+  "data": [
+    {
+      "id": 29553,
+      "order-id": 59378,
+      "match-id": 59335,
+      "symbol": "ethusdt",
+      "type": "buy-limit",
+      "source": "api",
+      "price": "100.1000000000",
+      "filled-amount": "9.1155000000",
+      "filled-fees": "0.0182310000",
+      "created-at": 1494901400435
+    }
+  ]
+}
+

GET /v1/order/orders 查询当前委托、历史委托

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typesfalsestring查询的订单类型组合,使用','分割buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
start-datefalsestring查询开始日期, 日期格式yyyy-mm-dd
end-datefalsestring查询结束日期, 日期格式yyyy-mm-dd
statestruestring查询的订单状态组合,使用','分割submitted 已提交, partial-filled 部分成交, partial-canceled 部分成交撤销, filled 完全成交, canceled 已撤销
fromfalsestring查询起始 ID
directfalsestring查询方向prev 向前,next 向后
sizefalsestring查询记录大小
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
account-idtruelong账户 ID
amounttruestring订单数量
canceled-atfalselong接到撤单申请的时间
created-attruelong订单创建时间
field-amounttruestring已成交数量
field-cash-amounttruestring已成交总金额
field-feestruestring已成交手续费(买入为币,卖出为钱)
finished-atfalselong最后成交时间
idtruelong订单ID
pricetruestring订单价格
sourcetruestring订单来源api
statetruestring订单状态submitting , submitted 已提交, partial-filled 部分成交, partial-canceled 部分成交撤销, filled 完全成交, canceled 已撤销
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestring订单类型submit-cancel:已提交撤单申请 ,buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
+ +

请求响应例子:

+
/* GET /v1/order/orders */
+{
+  "status": "ok",
+  "data": [
+    {
+      "id": 59378,
+      "symbol": "ethusdt",
+      "account-id": 100009,
+      "amount": "10.1000000000",
+      "price": "100.1000000000",
+      "created-at": 1494901162595,
+      "type": "buy-limit",
+      "field-amount": "10.1000000000",
+      "field-cash-amount": "1011.0100000000",
+      "field-fees": "0.0202000000",
+      "finished-at": 1494901400468,
+      "user-id": 1000,
+      "source": "api",
+      "state": "filled",
+      "canceled-at": 0,
+      "exchange": "xxx",
+      "batch": ""
+    }
+  ]
+}
+

GET /v1/order/matchresults 查询当前成交、历史成交

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typesfalsestring查询的订单类型组合,使用','分割buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
start-datefalsestring查询开始日期, 日期格式yyyy-mm-dd-61 days[-61day, now]
end-datefalsestring查询结束日期, 日期格式yyyy-mm-ddNow[start-date, now]
fromfalsestring查询起始 ID订单成交记录ID(最大值)
directfalsestring查询方向默认next, 成交记录ID由大到小排序prev 向前,next 向后
sizefalsestring查询记录大小100<=100
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
created-attruelong成交时间
filled-amounttruestring成交数量
filled-feestruestring成交手续费
idtruelong订单成交记录ID
match-idtruelong撮合ID
order-idtruelong订单 ID
pricetruestring成交价格
sourcetruestring订单来源api
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestring订单类型buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
+ +

请求响应例子:

+
/* GET /v1/orders/matchresults */
+{
+  "status": "ok",
+  "data": [
+    {
+      "id": 29555,
+      "order-id": 59378,
+      "match-id": 59335,
+      "symbol": "ethusdt",
+      "type": "buy-limit",
+      "source": "api",
+      "price": "100.1000000000",
+      "filled-amount": "0.9845000000",
+      "filled-fees": "0.0019690000",
+      "created-at": 1494901400487
+    }
+  ]
+}
+

虚拟币提现API

+
+

仅支持提现到【Pro站提币地址列表中的提币地址】

+
+

POST /v1/dw/withdraw/api/create 申请提现虚拟币

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
addresstruestring提现地址
amounttruestring提币数量
currencytruestring资产类型btc, ltc, bch, eth, etc ...(支持的币种)
feefalsestring转账手续费
addr-tagfalsestring虚拟币共享地址tag,适用于xrp,xem,bts,steem,eos,xmr格式, "123"类的整数字符串
+ +

响应数据:

+ + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datafalselong提现ID
+ +

请求响应例子:

+
/* POST /v1/dw/withdraw/api/create*/
+{
+  "address": "0xde709f2102306220921060314715629080e2fb77",
+  "amount": "0.05",
+  "currency": "eth",
+  "fee": "0.01"
+}
+{
+  "status": "ok",
+  "data": 700
+}
+

POST /v1/dw/withdraw-virtual/{withdraw-id}/cancel 申请取消提现虚拟币

+

请求参数:

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
withdraw-idtruelong提现ID,填在path中
+ +

响应数据:

+ + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datafalselong提现 ID
+ +

请求响应例子:

+
/* POST /v1/dw/withdraw-virtual/{withdraw-id}/cancel */
+{
+  "status": "ok",
+  "data": 700
+}
+

GET /v1/query/deposit-withdraw 查询虚拟币充提记录

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
currencytruestring币种
typetruestring'deposit' or 'withdraw'
fromfalsestring查询起始 ID
sizefalsestring查询记录大小
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
idtruelong
typetruelong类型'deposit' 'withdraw'
currencytruestring币种
tx-hashtruestring交易哈希
amounttruelong个数
addresstruestring地址
address-tagtruestring地址标签
feetruelong手续费
statetruestring状态状态参见下表
created-attruelong发起时间
updated-attruelong最后更新时间
+
虚拟币提现状态定义:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
状态描述
submitted已提交
reexamine审核中
canceled已撤销
pass审批通过
reject审批拒绝
pre-transfer处理中
wallet-transfer已汇出
wallet-reject钱包拒绝
confirmed区块已确认
confirm-error区块确认错误
repealed已撤销
+
虚拟币充值状态定义:
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
状态描述
unknown状态未知
confirming确认中
confirmed确认中
safe已完成
orphan待确认
+ +

请求响应例子:

+
/* GET /v1/query/deposit-withdraw?currency=xrp&type=deposit&from=5&size=12 */
+
+{
+
+    "status": "ok",
+    "data": [
+      {
+        "id": 1171,
+        "type": "deposit",
+        "currency": "xrp",
+        "tx-hash": "ed03094b84eafbe4bc16e7ef766ee959885ee5bcb265872baaa9c64e1cf86c2b",
+        "amount": 7.457467,
+        "address": "rae93V8d2mdoUQHwBDBdM4NHCMehRJAsbm",
+        "address-tag": "100040",
+        "fee": 0,
+        "state": "safe",
+        "created-at": 1510912472199,
+        "updated-at": 1511145876575
+      },
+     ...
+    ]
+}
+

借贷交易API (重要:如果使用借贷资产交易,请在下单接口/v1/order/orders/place请求参数source中填写‘margin-api’)

+

目前仅支持 USDT 交易区和 BTC 交易区部分交易对

+

POST /v1/dw/transfer-in/margin 现货账户划入至借贷账户

POST /v1/dw/transfer-out/margin 借贷账户划出至现货账户

+

请求参数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对
currencytruestring币种
amounttruestring金额
+ +

响应数据:

+ + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datatruelong划转ID
+ +

请求响应例子:

+
/* POST /v1/dw/transfer-in/margin
+{
+  "symbol": "ethusdt",
+  "currency": "eth",
+  "amount": "1.0"
+} */
+{
+  "status": "ok",
+  "data": 1000
+}
+

POST /v1/margin/orders 申请借贷

+

请求参数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对
currencytruestring币种
amounttruestring金额
+ +

响应数据:

+ + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datatruelong订单号
+ +

请求响应例子:

+
/* POST /v1/margin/orders {
+   "amount": "10.1",
+   "symbol": "ethusdt",
+   "currency": "eth"
+} */
+{
+  "status": "ok",
+  "data": 59378
+}
+

POST /v1/margin/orders/{order-id}/repay 归还借贷

+

请求参数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
order-idtruelong借贷订单 ID,写在path中
amounttruestring还款量
+ +

响应数据:

+ + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datatruelong订单号
+ +

请求响应例子:

+
/* POST /v1/margin/orders/59378/repay {
+   "amount": "10.1"
+}*/
+{
+  "status": "ok",
+  "data": 59378
+}
+

GET /v1/margin/loan-orders 借贷订单

+

请求参数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对
start-datefalsestring查询开始日期, 日期格式yyyy-mm-dd
end-datefalsestring查询结束日期, 日期格式yyyy-mm-dd
statesfalsestring状态
fromfalsestring查询起始 ID
directfalsestring查询方向prev 向前,next 向后
sizefalsestring查询记录大小
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
idtruelong订单号
user-idtruelong用户ID
account-idtruelong账户ID
symboltruestring交易对
currencytruestring币种
loan-amounttruestring借贷本金总额
loan-balancetruestring未还本金
interest-ratetruestring利率
interest-amounttruestring利息总额
interest-balancetruestring未还利息
created-attruelong借贷发起时间
accrued-attruelong最近一次计息时间
statetruestring订单状态created 未放款,accrual 已放款,cleared 已还清,invalid 异常
+ +

请求响应例子:

+
/* GET /v1/margin/loan-orders?symbol=btcusdt
+
+*/
+{
+  "status": "ok",
+  "data": [
+    {
+      "loan-balance": "0.100000000000000000",
+      "interest-balance": "0.000200000000000000",
+      "interest-rate": "0.002000000000000000",
+      "loan-amount": "0.100000000000000000",
+      "accrued-at": 1511169724531,
+      "interest-amount": "0.000200000000000000",
+      "symbol": "ethbtc",
+      "currency": "btc",
+      "id": 394,
+      "state": "accrual",
+      "account-id": 17747,
+      "user-id": 119913,
+      "created-at": 1511169724531
+    }
+  ]
+}
+
+

GET /v1/margin/accounts/balance 借贷账户详情

+

请求参数

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symbolfalsestring交易对,作为get参数
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
symboltruestring交易对
statetruestring账户状态working,fl-sys,fl-mgt,fl-end
risk-ratetrueobject风险率
fl-pricetruestring爆仓价
listtruearray子账户列表
+ +

请求响应例子:

+
/* GET /v1/margin/accounts/balance?symbol=btcusdt
+
+*/
+{
+    "status": "ok",
+    "data": [
+        {
+            "id": 18264,
+            "type": "margin",
+            "state": "working",
+            "symbol": "btcusdt",
+            "fl-price": "0",
+            "fl-type": "safe",
+            "risk-rate": "475.952571086994250554",
+            "list": [
+                {
+                    "currency": "btc",
+                    "type": "trade",
+                    "balance": "1168.533000000000000000"
+                },
+                {
+                    "currency": "btc",
+                    "type": "frozen",
+                    "balance": "0.000000000000000000"
+                },
+                {
+                    "currency": "btc",
+                    "type": "loan",
+                    "balance": "-2.433000000000000000"
+                },
+                {
+                    "currency": "btc",
+                    "type": "interest",
+                    "balance": "-0.000533000000000000"
+                },
+                {
+                    "currency": "usdt",
+                    "type": "trade",//借贷账户可用
+                    "balance": "1313.534000000000000000"
+                },
+                {
+                    "currency": "usdt",
+                    "type": "frozen",//借贷账户冻结
+                    "balance": "0.000000000000000000"
+                },
+                {
+                    "currency": "usdt",
+                    "type": "loan",//已借贷
+                    "balance": "-140.234099999999999920"
+                },
+                {
+                    "currency": "usdt",
+                    "type": "interest",//usdt待还利息
+                    "balance": "-0.931206660000000000"
+                },
+                {
+                    "currency": "btc",
+                    "type": "transfer-out-available",//可转btc
+                    "balance": "1163.872174670000000000"
+                },
+                { "currency": "usdt",
+                    "type": "transfer-out-available",//可转usdt
+                    "balance": "1313.534000000000000000"
+                },
+                {
+                    "currency": "btc",
+                    "type": "loan-available",//可借btc
+                    "balance": "8161.876538350676000000"
+                },
+                {
+                    "currency": "usdt",
+                    "type": "loan-available",//可借usdt
+                    "balance": "49859.765900000000000080"
+                }
+            ]
+        }
+    ]
+}
+
+

错误码

行情 API 错误码

+ + + + + + + + + + + + + + + + + + +
错误码描述
bad-request错误请求
invalid-parameter参数错
invalid-command指令错
+ +

code 的具体解释, 参考对应的 err-msg.

+

交易 API 错误码

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
错误码描述
base-symbol-error交易对不存在
base-currency-error币种不存在
base-date-error错误的日期格式
account-transfer-balance-insufficient-error余额不足无法冻结
bad-argument无效参数
api-signature-not-validAPI签名错误
gateway-internal-error系统繁忙,请稍后再试
security-require-assets-password需要输入资金密码
audit-failed下单失败
ad-ethereum-addresss请输入有效的以太坊地址
order-accountbalance-error账户余额不足
order-limitorder-price-error限价单下单价格超出限制
order-limitorder-amount-error限价单下单数量超出限制
order-orderprice-precision-error下单价格超出精度限制
order-orderamount-precision-error下单数量超过精度限制
order-marketorder-amount-error下单数量超出限制
order-queryorder-invalid查询不到此条订单
order-orderstate-error订单状态错误
order-datelimit-error查询超出时间限制
order-update-error订单更新出错
+ +


+
+
+
+

+ +
+
+
+ shell +
+
+
+ + + diff --git a/build/v1/rest/javascripts/all.js b/build/v1/rest/javascripts/all.js new file mode 100644 index 0000000..05af78b --- /dev/null +++ b/build/v1/rest/javascripts/all.js @@ -0,0 +1,131 @@ +!function(){if("ontouchstart"in window){var e,t,n,r,i,o,s={};e=function(e,t){return Math.abs(e[0]-t[0])>5||Math.abs(e[1]-t[1])>5},t=function(e){this.startXY=[e.touches[0].clientX,e.touches[0].clientY],this.threshold=!1},n=function(t){return!this.threshold&&void(this.threshold=e(this.startXY,[t.touches[0].clientX,t.touches[0].clientY]))},r=function(t){if(!this.threshold&&!e(this.startXY,[t.changedTouches[0].clientX,t.changedTouches[0].clientY])){var n=t.changedTouches[0],r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),r.simulated=!0,t.target.dispatchEvent(r)}},i=function(e){var t=Date.now(),n=t-s.time,r=e.clientX,i=e.clientY,a=[Math.abs(s.x-r),Math.abs(s.y-i)],u=o(e.target,"A")||e.target,c=u.nodeName,l="A"===c,f=window.navigator.standalone&&l&&e.target.getAttribute("href");return s.time=t,s.x=r,s.y=i,!((!e.simulated&&(n<500||n<1500&&a[0]<50&&a[1]<50)||f)&&(e.preventDefault(),e.stopPropagation(),!f))&&(f&&(window.location=u.getAttribute("href")),void(u&&u.classList&&(u.classList.add("energize-focus"),window.setTimeout(function(){u.classList.remove("energize-focus")},150))))},o=function(e,t){for(var n=e;n!==document.body;){if(!n||n.nodeName===t)return n;n=n.parentNode}return null},document.addEventListener("touchstart",t,!1),document.addEventListener("touchmove",n,!1),document.addEventListener("touchend",r,!1),document.addEventListener("click",i,!0)}}(),/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-03-20T18:59Z + */ +function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(e,t){t=t||ne;var n=t.createElement("script");n.text=e,t.head.appendChild(n).parentNode.removeChild(n)}function r(e){var t=!!e&&"length"in e&&e.length,n=ge.type(e);return"function"!==n&&!ge.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}function o(e,t,n){return ge.isFunction(t)?ge.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?ge.grep(e,function(e){return e===t!==n}):"string"!=typeof t?ge.grep(e,function(e){return ae.call(t,e)>-1!==n}):Ce.test(t)?ge.filter(t,e,n):(t=ge.filter(t,e),ge.grep(e,function(e){return ae.call(t,e)>-1!==n&&1===e.nodeType}))}function s(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function a(e){var t={};return ge.each(e.match(De)||[],function(e,n){t[n]=!0}),t}function u(e){return e}function c(e){throw e}function l(e,t,n,r){var i;try{e&&ge.isFunction(i=e.promise)?i.call(e).done(t).fail(n):e&&ge.isFunction(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}function f(){ne.removeEventListener("DOMContentLoaded",f),e.removeEventListener("load",f),ge.ready()}function d(){this.expando=ge.expando+d.uid++}function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Ie.test(e)?JSON.parse(e):e)}function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Re,"-$&").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n=p(n)}catch(e){}He.set(e,t,n)}else n=void 0;return n}function g(e,t,n,r){var i,o=1,s=20,a=r?function(){return r.cur()}:function(){return ge.css(e,t,"")},u=a(),c=n&&n[3]||(ge.cssNumber[t]?"":"px"),l=(ge.cssNumber[t]||"px"!==c&&+u)&&Me.exec(ge.css(e,t));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do o=o||".5",l/=o,ge.style(e,t,l+c);while(o!==(o=a()/u)&&1!==o&&--s)}return n&&(l=+l||+u||0,i=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=i)),i}function v(e){var t,n=e.ownerDocument,r=e.nodeName,i=Ve[r];return i?i:(t=n.body.appendChild(n.createElement(r)),i=ge.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),Ve[r]=i,i)}function m(e,t){for(var n,r,i=[],o=0,s=e.length;o-1)i&&i.push(o);else if(c=ge.contains(o.ownerDocument,o),s=y(f.appendChild(o),"script"),c&&x(s),n)for(l=0;o=s[l++];)Qe.test(o.type||"")&&n.push(o);return f}function w(){return!0}function T(){return!1}function S(){try{return ne.activeElement}catch(e){}}function E(e,t,n,r,i,o){var s,a;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(a in t)E(e,a,n,r,t[a],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=T;else if(!i)return e;return 1===o&&(s=i,i=function(e){return ge().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=ge.guid++)),e.each(function(){ge.event.add(this,t,i,r,n)})}function C(e,t){return i(e,"table")&&i(11!==t.nodeType?t:t.firstChild,"tr")?ge(">tbody",e)[0]||e:e}function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function N(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function j(e,t){var n,r,i,o,s,a,u,c;if(1===t.nodeType){if(Pe.hasData(e)&&(o=Pe.access(e),s=Pe.set(t,o),c=o.events)){delete s.handle,s.events={};for(i in c)for(n=0,r=c[i].length;n1&&"string"==typeof h&&!pe.checkClone&&rt.test(h))return e.each(function(n){var o=e.eq(n);g&&(t[0]=h.call(this,n,o.html())),L(o,t,r,i)});if(d&&(o=b(t,e[0].ownerDocument,!1,e,i),s=o.firstChild,1===o.childNodes.length&&(o=s),s||i)){for(a=ge.map(y(o,"script"),k),u=a.length;f=0&&nS.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[_]=!0,e}function i(e){var t=q.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=n.length;r--;)S.attrHandle[n[r]]=t}function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return function(t){return"form"in t?t.parentNode&&t.disabled===!1?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&Ee(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function l(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function p(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function v(e,n,r){for(var i=0,o=n.length;i-1&&(r[c]=!(s[c]=f))}}else x=m(x===s?x.splice(h,x.length):x),o?o(null,s,x,u):K.apply(s,x)})}function x(e){for(var t,n,r,i=e.length,o=S.relative[e[0].type],s=o||S.relative[" "],a=o?1:0,u=h(function(e){return e===t},s,!0),c=h(function(e){return ee(t,e)>-1},s,!0),l=[function(e,n,r){var i=!o&&(r||n!==A)||((t=n).nodeType?u(e,n,r):c(e,n,r));return t=null,i}];a1&&g(l),a>1&&p(e.slice(0,a-1).concat({value:" "===e[a-2].type?"*":""})).replace(ae,"$1"),n,a0,o=e.length>0,s=function(r,s,a,u,c){var l,f,d,p=0,h="0",g=r&&[],v=[],y=A,x=r||o&&S.find.TAG("*",c),b=W+=null==y?1:Math.random()||.1,w=x.length;for(c&&(A=s===q||s||c);h!==w&&null!=(l=x[h]);h++){if(o&&l){for(f=0,s||l.ownerDocument===q||(O(l),a=!$);d=e[f++];)if(d(l,s||q,a)){u.push(l);break}c&&(W=b)}i&&((l=!d&&l)&&p--,r&&g.push(l))}if(p+=h,i&&h!==p){for(f=0;d=n[f++];)d(g,v,s,a);if(r){if(p>0)for(;h--;)g[h]||v[h]||(v[h]=J.call(u));v=m(v)}K.apply(u,v),c&&!r&&v.length>0&&p+n.length>1&&t.uniqueSort(u)}return c&&(W=b,A=y),g};return i?r(s):s}var w,T,S,E,C,k,N,j,A,L,D,O,q,F,$,P,H,I,R,_="sizzle"+1*new Date,M=e.document,W=0,B=0,z=n(),V=n(),X=n(),U=function(e,t){return e===t&&(D=!0),0},Q={}.hasOwnProperty,Y=[],J=Y.pop,G=Y.push,K=Y.push,Z=Y.slice,ee=function(e,t){for(var n=0,r=e.length;n+~]|"+ne+")"+ne+"*"),le=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),fe=new RegExp(oe),de=new RegExp("^"+re+"$"),pe={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,ge=/^h\d$/i,ve=/^[^{]+\{\s*\[native \w/,me=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,xe=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),be=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},we=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Te=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},Se=function(){O()},Ee=h(function(e){return e.disabled===!0&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{K.apply(Y=Z.call(M.childNodes),M.childNodes),Y[M.childNodes.length].nodeType}catch(e){K={apply:Y.length?function(e,t){G.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}T=t.support={},C=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},O=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:M;return r!==q&&9===r.nodeType&&r.documentElement?(q=r,F=q.documentElement,$=!C(q),M!==q&&(n=q.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Se,!1):n.attachEvent&&n.attachEvent("onunload",Se)),T.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),T.getElementsByTagName=i(function(e){return e.appendChild(q.createComment("")),!e.getElementsByTagName("*").length}),T.getElementsByClassName=ve.test(q.getElementsByClassName),T.getById=i(function(e){return F.appendChild(e).id=_,!q.getElementsByName||!q.getElementsByName(_).length}),T.getById?(S.filter.ID=function(e){var t=e.replace(xe,be);return function(e){return e.getAttribute("id")===t}},S.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&$){var n=t.getElementById(e);return n?[n]:[]}}):(S.filter.ID=function(e){var t=e.replace(xe,be);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},S.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&$){var n,r,i,o=t.getElementById(e);if(o){if(n=o.getAttributeNode("id"),n&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if(n=o.getAttributeNode("id"),n&&n.value===e)return[o]}return[]}}),S.find.TAG=T.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):T.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},S.find.CLASS=T.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&$)return t.getElementsByClassName(e)},H=[],P=[],(T.qsa=ve.test(q.querySelectorAll))&&(i(function(e){F.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&P.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||P.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+_+"-]").length||P.push("~="),e.querySelectorAll(":checked").length||P.push(":checked"),e.querySelectorAll("a#"+_+"+*").length||P.push(".#.+[+~]")}),i(function(e){e.innerHTML="";var t=q.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&P.push("name"+ne+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&P.push(":enabled",":disabled"),F.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&P.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),P.push(",.*:")})),(T.matchesSelector=ve.test(I=F.matches||F.webkitMatchesSelector||F.mozMatchesSelector||F.oMatchesSelector||F.msMatchesSelector))&&i(function(e){T.disconnectedMatch=I.call(e,"*"),I.call(e,"[s!='']:x"),H.push("!=",oe)}),P=P.length&&new RegExp(P.join("|")),H=H.length&&new RegExp(H.join("|")),t=ve.test(F.compareDocumentPosition),R=t||ve.test(F.contains)?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)for(;t=t.parentNode;)if(t===e)return!0;return!1},U=t?function(e,t){if(e===t)return D=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!T.sortDetached&&t.compareDocumentPosition(e)===n?e===q||e.ownerDocument===M&&R(M,e)?-1:t===q||t.ownerDocument===M&&R(M,t)?1:L?ee(L,e)-ee(L,t):0:4&n?-1:1)}:function(e,t){if(e===t)return D=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],u=[t];if(!i||!o)return e===q?-1:t===q?1:i?-1:o?1:L?ee(L,e)-ee(L,t):0;if(i===o)return s(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?s(a[r],u[r]):a[r]===M?-1:u[r]===M?1:0},q):q},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==q&&O(e),n=n.replace(le,"='$1']"),T.matchesSelector&&$&&!X[n+" "]&&(!H||!H.test(n))&&(!P||!P.test(n)))try{var r=I.call(e,n);if(r||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,q,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==q&&O(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==q&&O(e);var n=S.attrHandle[t.toLowerCase()],r=n&&Q.call(S.attrHandle,t.toLowerCase())?n(e,t,!$):void 0;return void 0!==r?r:T.attributes||!$?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+"").replace(we,Te)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(D=!T.detectDuplicates,L=!T.sortStable&&e.slice(0),e.sort(U),D){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return L=null,e},E=t.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+=E(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=E(t);return n},S=t.selectors={cacheLength:50,createPseudo:r,match:pe,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(xe,be),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,be),"~="===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]||t.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]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=k(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,be).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=z[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&z(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(se," ")+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,d,p,h,g=o!==s?"nextSibling":"previousSibling",v=t.parentNode,m=a&&t.nodeName.toLowerCase(),y=!u&&!a,x=!1;if(v){if(o){for(;g;){for(d=t;d=d[g];)if(a?d.nodeName.toLowerCase()===m:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[s?v.firstChild:v.lastChild],s&&y){for(d=v,f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===W&&c[1],x=p&&c[2],d=p&&v.childNodes[p];d=++p&&d&&d[g]||(x=p=0)||h.pop();)if(1===d.nodeType&&++x&&d===t){l[e]=[W,p,x];break}}else if(y&&(d=t,f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===W&&c[1],x=p),x===!1)for(;(d=++p&&d&&d[g]||(x=p=0)||h.pop())&&((a?d.nodeName.toLowerCase()!==m:1!==d.nodeType)||!++x||(y&&(f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),l[e]=[W,x]),d!==t)););return x-=i,x===r||x%r===0&&x/r>=0}}},PSEUDO:function(e,n){var i,o=S.pseudos[e]||S.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[_]?o(n):o.length>1?(i=[e,e,"",n],S.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),s=i.length;s--;)r=ee(e,i[s]),e[r]=!(t[r]=i[s])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=N(e.replace(ae,"$1"));return i[_]?r(function(e,t,n,r){for(var o,s=i(e,null,r,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(xe,be),function(t){return(t.textContent||t.innerText||E(t)).indexOf(e)>-1}}),lang:r(function(e){return de.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(xe,be).toLowerCase(),function(t){var n;do if(n=$?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===F},focus:function(e){return e===q.activeElement&&(!q.hasFocus||q.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:c(!1),disabled:c(!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.nodeType<6)return!1;return!0},parent:function(e){return!S.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return he.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"))||"text"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:l(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(s=o[0]).type&&9===t.nodeType&&$&&S.relative[o[1].type]){if(t=(S.find.ID(s.matches[0].replace(xe,be),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(s=o[i],!S.relative[a=s.type]);)if((u=S.find[a])&&(r=u(s.matches[0].replace(xe,be),ye.test(o[0].type)&&f(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&p(o),!e)return K.apply(n,r),n;break}}return(c||N(e,l))(r,t,!$,n,!t||ye.test(e)&&f(t.parentNode)||t),n},T.sortStable=_.split("").sort(U).join("")===_,T.detectDuplicates=!!D,O(),T.sortDetached=i(function(e){return 1&e.compareDocumentPosition(q.createElement("fieldset"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),T.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);ge.find=be,ge.expr=be.selectors,ge.expr[":"]=ge.expr.pseudos,ge.uniqueSort=ge.unique=be.uniqueSort,ge.text=be.getText,ge.isXMLDoc=be.isXML,ge.contains=be.contains,ge.escapeSelector=be.escape;var we=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&ge(e).is(n))break;r.push(e)}return r},Te=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},Se=ge.expr.match.needsContext,Ee=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,Ce=/^.[^:#\[\.,]*$/;ge.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ge.find.matchesSelector(r,e)?[r]:[]:ge.find.matches(e,ge.grep(t,function(e){return 1===e.nodeType}))},ge.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ge(e).filter(function(){for(t=0;t1?ge.uniqueSort(n):n},filter:function(e){return this.pushStack(o(this,e||[],!1))},not:function(e){return this.pushStack(o(this,e||[],!0))},is:function(e){return!!o(this,"string"==typeof e&&Se.test(e)?ge(e):e||[],!1).length}});var ke,Ne=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,je=ge.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||ke,"string"==typeof e){if(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:Ne.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ge?t[0]:t,ge.merge(this,ge.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:ne,!0)),Ee.test(r[1])&&ge.isPlainObject(t))for(r in t)ge.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=ne.getElementById(r[2]),i&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):ge.isFunction(e)?void 0!==n.ready?n.ready(e):e(ge):ge.makeArray(e,this)};je.prototype=ge.fn,ke=ge(ne);var Ae=/^(?:parents|prev(?:Until|All))/,Le={children:!0,contents:!0,next:!0,prev:!0};ge.fn.extend({has:function(e){var t=ge(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&ge.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?ge.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?ae.call(ge(e),this[0]):ae.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ge.uniqueSort(ge.merge(this.get(),ge(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ge.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return we(e,"parentNode")},parentsUntil:function(e,t,n){return we(e,"parentNode",n)},next:function(e){return s(e,"nextSibling")},prev:function(e){return s(e,"previousSibling")},nextAll:function(e){return we(e,"nextSibling")},prevAll:function(e){return we(e,"previousSibling")},nextUntil:function(e,t,n){return we(e,"nextSibling",n)},prevUntil:function(e,t,n){return we(e,"previousSibling",n)},siblings:function(e){return Te((e.parentNode||{}).firstChild,e)},children:function(e){return Te(e.firstChild)},contents:function(e){return i(e,"iframe")?e.contentDocument:(i(e,"template")&&(e=e.content||e),ge.merge([],e.childNodes))}},function(e,t){ge.fn[e]=function(n,r){var i=ge.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=ge.filter(r,i)),this.length>1&&(Le[e]||ge.uniqueSort(i),Ae.test(e)&&i.reverse()),this.pushStack(i)}});var De=/[^\x20\t\r\n\f]+/g;ge.Callbacks=function(e){e="string"==typeof e?a(e):ge.extend({},e);var t,n,r,i,o=[],s=[],u=-1,c=function(){for(i=i||e.once,r=t=!0;s.length;u=-1)for(n=s.shift();++u-1;)o.splice(n,1),n<=u&&u--}),this},has:function(e){return e?ge.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=s=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},ge.extend({Deferred:function(t){var n=[["notify","progress",ge.Callbacks("memory"),ge.Callbacks("memory"),2],["resolve","done",ge.Callbacks("once memory"),ge.Callbacks("once memory"),0,"resolved"],["reject","fail",ge.Callbacks("once memory"),ge.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return ge.Deferred(function(t){ge.each(n,function(n,r){var i=ge.isFunction(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&ge.isFunction(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){function o(t,n,r,i){return function(){var a=this,l=arguments,f=function(){var e,f;if(!(t=s&&(r!==c&&(a=void 0,l=[e]),n.rejectWith(a,l))}};t?d():(ge.Deferred.getStackHook&&(d.stackTrace=ge.Deferred.getStackHook()),e.setTimeout(d))}}var s=0;return ge.Deferred(function(e){n[0][3].add(o(0,e,ge.isFunction(i)?i:u,e.notifyWith)),n[1][3].add(o(0,e,ge.isFunction(t)?t:u)),n[2][3].add(o(0,e,ge.isFunction(r)?r:c))}).promise()},promise:function(e){return null!=e?ge.extend(e,i):i}},o={};return ge.each(n,function(e,t){var s=t[2],a=t[5];i[t[1]]=s.add,a&&s.add(function(){r=a},n[3-e][2].disable,n[0][2].lock),s.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=s.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=ie.call(arguments),o=ge.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?ie.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&(l(e,o.done(s(n)).resolve,o.reject,!t),"pending"===o.state()||ge.isFunction(i[n]&&i[n].then)))return o.then();for(;n--;)l(i[n],s(n),o.reject);return o.promise()}});var Oe=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ge.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&Oe.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},ge.readyException=function(t){e.setTimeout(function(){throw t})};var qe=ge.Deferred();ge.fn.ready=function(e){return qe.then(e)["catch"](function(e){ge.readyException(e)}),this},ge.extend({isReady:!1,readyWait:1,ready:function(e){(e===!0?--ge.readyWait:ge.isReady)||(ge.isReady=!0,e!==!0&&--ge.readyWait>0||qe.resolveWith(ne,[ge]))}}),ge.ready.then=qe.then,"complete"===ne.readyState||"loading"!==ne.readyState&&!ne.documentElement.doScroll?e.setTimeout(ge.ready):(ne.addEventListener("DOMContentLoaded",f),e.addEventListener("load",f));var Fe=function(e,t,n,r,i,o,s){var a=0,u=e.length,c=null==n;if("object"===ge.type(n)){i=!0;for(a in n)Fe(e,t,a,n[a],!0,o,s)}else if(void 0!==r&&(i=!0,ge.isFunction(r)||(s=!0),c&&(s?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(ge(e),n)})),t))for(;a1,null,!0)},removeData:function(e){return this.each(function(){He.remove(this,e)})}}),ge.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Pe.get(e,t),n&&(!r||Array.isArray(n)?r=Pe.access(e,t,ge.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ge.queue(e,t),r=n.length,i=n.shift(),o=ge._queueHooks(e,t),s=function(){ge.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Pe.get(e,n)||Pe.access(e,n,{empty:ge.Callbacks("once memory").add(function(){Pe.remove(e,[t+"queue",n])})})}}),ge.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,Qe=/^$|\/(?:java|ecma)script/i,Ye={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};Ye.optgroup=Ye.option,Ye.tbody=Ye.tfoot=Ye.colgroup=Ye.caption=Ye.thead,Ye.th=Ye.td;var Je=/<|&#?\w+;/;!function(){var e=ne.createDocumentFragment(),t=e.appendChild(ne.createElement("div")),n=ne.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),pe.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Ge=ne.documentElement,Ke=/^key/,Ze=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,et=/^([^.]*)(?:\.(.+)|)/;ge.event={global:{},add:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Pe.get(e);if(v)for(n.handler&&(o=n,n=o.handler,i=o.selector),i&&ge.find.matchesSelector(Ge,i),n.guid||(n.guid=ge.guid++),(u=v.events)||(u=v.events={}), +(s=v.handle)||(s=v.handle=function(t){return"undefined"!=typeof ge&&ge.event.triggered!==t.type?ge.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(De)||[""],c=t.length;c--;)a=et.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p&&(f=ge.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=ge.event.special[p]||{},l=ge.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ge.expr.match.needsContext.test(i),namespace:h.join(".")},o),(d=u[p])||(d=u[p]=[],d.delegateCount=0,f.setup&&f.setup.call(e,r,h,s)!==!1||e.addEventListener&&e.addEventListener(p,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,l):d.push(l),ge.event.global[p]=!0)},remove:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Pe.hasData(e)&&Pe.get(e);if(v&&(u=v.events)){for(t=(t||"").match(De)||[""],c=t.length;c--;)if(a=et.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p){for(f=ge.event.special[p]||{},p=(r?f.delegateType:f.bindType)||p,d=u[p]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=d.length;o--;)l=d[o],!i&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(d.splice(o,1),l.selector&&d.delegateCount--,f.remove&&f.remove.call(e,l));s&&!d.length&&(f.teardown&&f.teardown.call(e,h,v.handle)!==!1||ge.removeEvent(e,p,v.handle),delete u[p])}else for(p in u)ge.event.remove(e,p+t[c],n,r,!0);ge.isEmptyObject(u)&&Pe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,s,a=ge.event.fix(e),u=new Array(arguments.length),c=(Pe.get(this,"events")||{})[a.type]||[],l=ge.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||c.disabled!==!0)){for(o=[],s={},n=0;n-1:ge.find(i,this,null,[c]).length),s[i]&&o.push(r);o.length&&a.push({elem:c,handlers:o})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,nt=/\s*$/g;ge.extend({htmlPrefilter:function(e){return e.replace(tt,"<$1>")},clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=ge.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ge.isXMLDoc(e)))for(s=y(a),o=y(e),r=0,i=o.length;r0&&x(s,!u&&y(e,"script")),a},cleanData:function(e){for(var t,n,r,i=ge.event.special,o=0;void 0!==(n=e[o]);o++)if($e(n)){if(t=n[Pe.expando]){if(t.events)for(r in t.events)i[r]?ge.event.remove(n,r):ge.removeEvent(n,r,t.handle);n[Pe.expando]=void 0}n[He.expando]&&(n[He.expando]=void 0)}}}),ge.fn.extend({detach:function(e){return D(this,e,!0)},remove:function(e){return D(this,e)},text:function(e){return Fe(this,function(e){return void 0===e?ge.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.appendChild(e)}})},prepend:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ge.cleanData(y(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ge.clone(this,e,t)})},html:function(e){return Fe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!nt.test(e)&&!Ye[(Ue.exec(e)||["",""])[1].toLowerCase()]){e=ge.htmlPrefilter(e);try{for(;n1)}}),ge.Tween=R,R.prototype={constructor:R,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ge.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ge.cssNumber[n]?"":"px")},cur:function(){var e=R.propHooks[this.prop];return e&&e.get?e.get(this):R.propHooks._default.get(this)},run:function(e){var t,n=R.propHooks[this.prop];return this.options.duration?this.pos=t=ge.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ge.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){ge.fx.step[e.prop]?ge.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[ge.cssProps[e.prop]]&&!ge.cssHooks[e.prop]?e.elem[e.prop]=e.now:ge.style(e.elem,e.prop,e.now+e.unit)}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ge.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ge.fx=R.prototype.init,ge.fx.step={};var gt,vt,mt=/^(?:toggle|show|hide)$/,yt=/queueHooks$/;ge.Animation=ge.extend(X,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return g(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){ge.isFunction(e)?(t=e,e=["*"]):e=e.match(De);for(var n,r=0,i=e.length;r1)},removeAttr:function(e){return this.each(function(){ge.removeAttr(this,e)})}}),ge.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ge.prop(e,t,n):(1===o&&ge.isXMLDoc(e)||(i=ge.attrHooks[t.toLowerCase()]||(ge.expr.match.bool.test(t)?xt:void 0)),void 0!==n?null===n?void ge.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:(r=ge.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&"radio"===t&&i(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(De);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),xt={set:function(e,t,n){return t===!1?ge.removeAttr(e,n):e.setAttribute(n,n),n}},ge.each(ge.expr.match.bool.source.match(/\w+/g),function(e,t){var n=bt[t]||ge.find.attr;bt[t]=function(e,t,r){var i,o,s=t.toLowerCase();return r||(o=bt[s],bt[s]=i,i=null!=n(e,t,r)?s:null,bt[s]=o),i}});var wt=/^(?:input|select|textarea|button)$/i,Tt=/^(?:a|area)$/i;ge.fn.extend({prop:function(e,t){return Fe(this,ge.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[ge.propFix[e]||e]})}}),ge.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ge.isXMLDoc(e)||(t=ge.propFix[t]||t,i=ge.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ge.find.attr(e,"tabindex");return t?parseInt(t,10):wt.test(e.nodeName)||Tt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),pe.optSelected||(ge.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ge.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ge.propFix[this.toLowerCase()]=this}),ge.fn.extend({addClass:function(e){var t,n,r,i,o,s,a,u=0;if(ge.isFunction(e))return this.each(function(t){ge(this).addClass(e.call(this,t,Q(this)))});if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,i,o,s,a,u=0;if(ge.isFunction(e))return this.each(function(t){ge(this).removeClass(e.call(this,t,Q(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):ge.isFunction(e)?this.each(function(n){ge(this).toggleClass(e.call(this,n,Q(this),t),t)}):this.each(function(){var t,r,i,o;if("string"===n)for(r=0,i=ge(this),o=e.match(De)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||(t=Q(this),t&&Pe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Pe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+U(Q(n))+" ").indexOf(t)>-1)return!0;return!1}});var St=/\r/g;ge.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=ge.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,ge(this).val()):e,null==i?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=ge.map(i,function(e){return null==e?"":e+""})),t=ge.valHooks[this.type]||ge.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return t=ge.valHooks[i.type]||ge.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:(n=i.value,"string"==typeof n?n.replace(St,""):null==n?"":n)}}}),ge.extend({valHooks:{option:{get:function(e){var t=ge.find.attr(e,"value");return null!=t?t:U(ge.text(e))}},select:{get:function(e){var t,n,r,o=e.options,s=e.selectedIndex,a="select-one"===e.type,u=a?null:[],c=a?s+1:o.length;for(r=s<0?c:a?s:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ge.each(["radio","checkbox"],function(){ge.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=ge.inArray(ge(e).val(),t)>-1}},pe.checkOn||(ge.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=/^(?:focusinfocus|focusoutblur)$/;ge.extend(ge.event,{trigger:function(t,n,r,i){var o,s,a,u,c,l,f,d=[r||ne],p=le.call(t,"type")?t.type:t,h=le.call(t,"namespace")?t.namespace.split("."):[];if(s=a=r=r||ne,3!==r.nodeType&&8!==r.nodeType&&!Et.test(p+ge.event.triggered)&&(p.indexOf(".")>-1&&(h=p.split("."),p=h.shift(),h.sort()),c=p.indexOf(":")<0&&"on"+p,t=t[ge.expando]?t:new ge.Event(p,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:ge.makeArray(n,[t]),f=ge.event.special[p]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!ge.isWindow(r)){for(u=f.delegateType||p,Et.test(u+p)||(s=s.parentNode);s;s=s.parentNode)d.push(s),a=s;a===(r.ownerDocument||ne)&&d.push(a.defaultView||a.parentWindow||e)}for(o=0;(s=d[o++])&&!t.isPropagationStopped();)t.type=o>1?u:f.bindType||p,l=(Pe.get(s,"events")||{})[t.type]&&Pe.get(s,"handle"),l&&l.apply(s,n),l=c&&s[c],l&&l.apply&&$e(s)&&(t.result=l.apply(s,n),t.result===!1&&t.preventDefault());return t.type=p,i||t.isDefaultPrevented()||f._default&&f._default.apply(d.pop(),n)!==!1||!$e(r)||c&&ge.isFunction(r[p])&&!ge.isWindow(r)&&(a=r[c],a&&(r[c]=null),ge.event.triggered=p,r[p](),ge.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=ge.extend(new ge.Event,n,{type:e,isSimulated:!0});ge.event.trigger(r,null,t)}}),ge.fn.extend({trigger:function(e,t){return this.each(function(){ge.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ge.event.trigger(e,t,n,!0)}}),ge.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){ge.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),ge.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin="onfocusin"in e,pe.focusin||ge.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){ge.event.simulate(t,e.target,ge.event.fix(e))};ge.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=Pe.access(r,t);i||r.addEventListener(e,n,!0),Pe.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=Pe.access(r,t)-1;i?Pe.access(r,t,i):(r.removeEventListener(e,n,!0),Pe.remove(r,t))}}});var Ct=e.location,kt=ge.now(),Nt=/\?/;ge.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||ge.error("Invalid XML: "+t),n};var jt=/\[\]$/,At=/\r?\n/g,Lt=/^(?:submit|button|image|reset|file)$/i,Dt=/^(?:input|select|textarea|keygen)/i;ge.param=function(e,t){var n,r=[],i=function(e,t){var n=ge.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!ge.isPlainObject(e))ge.each(e,function(){i(this.name,this.value)});else for(n in e)Y(n,e[n],t,i);return r.join("&")},ge.fn.extend({serialize:function(){return ge.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ge.prop(this,"elements");return e?ge.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ge(this).is(":disabled")&&Dt.test(this.nodeName)&&!Lt.test(e)&&(this.checked||!Xe.test(e))}).map(function(e,t){var n=ge(this).val();return null==n?null:Array.isArray(n)?ge.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}});var Ot=/%20/g,qt=/#.*$/,Ft=/([?&])_=[^&]*/,$t=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ht=/^(?:GET|HEAD)$/,It=/^\/\//,Rt={},_t={},Mt="*/".concat("*"),Wt=ne.createElement("a");Wt.href=Ct.href,ge.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Mt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ge.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?K(K(e,ge.ajaxSettings),t):K(ge.ajaxSettings,e)},ajaxPrefilter:J(Rt),ajaxTransport:J(_t),ajax:function(t,n){function r(t,n,r,a){var c,d,p,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),i=void 0,s=a||"",S.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=Z(h,S,r)),b=ee(h,b,S,c),c?(h.ifModified&&(w=S.getResponseHeader("Last-Modified"),w&&(ge.lastModified[o]=w),w=S.getResponseHeader("etag"),w&&(ge.etag[o]=w)),204===t||"HEAD"===h.type?T="nocontent":304===t?T="notmodified":(T=b.state,d=b.data,p=b.error,c=!p)):(p=T,!t&&T||(T="error",t<0&&(t=0))),S.status=t,S.statusText=(n||T)+"",c?m.resolveWith(g,[d,T,S]):m.rejectWith(g,[S,T,p]),S.statusCode(x),x=void 0,f&&v.trigger(c?"ajaxSuccess":"ajaxError",[S,h,c?d:p]),y.fireWith(g,[S,T]),f&&(v.trigger("ajaxComplete",[S,h]),--ge.active||ge.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,s,a,u,c,l,f,d,p,h=ge.ajaxSetup({},n),g=h.context||h,v=h.context&&(g.nodeType||g.jquery)?ge(g):ge.event,m=ge.Deferred(),y=ge.Callbacks("once memory"),x=h.statusCode||{},b={},w={},T="canceled",S={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=$t.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)S.always(e[S.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(m.promise(S),h.url=((t||h.url||Ct.href)+"").replace(It,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(De)||[""],null==h.crossDomain){c=ne.createElement("a");try{c.href=h.url,c.href=c.href,h.crossDomain=Wt.protocol+"//"+Wt.host!=c.protocol+"//"+c.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=ge.param(h.data,h.traditional)),G(Rt,h,n,S),l)return S;f=ge.event&&h.global,f&&0===ge.active++&&ge.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Ht.test(h.type),o=h.url.replace(qt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Ot,"+")):(p=h.url.slice(o.length),h.data&&(o+=(Nt.test(o)?"&":"?")+h.data,delete h.data),h.cache===!1&&(o=o.replace(Ft,"$1"),p=(Nt.test(o)?"&":"?")+"_="+kt++ +p),h.url=o+p),h.ifModified&&(ge.lastModified[o]&&S.setRequestHeader("If-Modified-Since",ge.lastModified[o]),ge.etag[o]&&S.setRequestHeader("If-None-Match",ge.etag[o])),(h.data&&h.hasContent&&h.contentType!==!1||n.contentType)&&S.setRequestHeader("Content-Type",h.contentType),S.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Mt+"; q=0.01":""):h.accepts["*"]);for(d in h.headers)S.setRequestHeader(d,h.headers[d]);if(h.beforeSend&&(h.beforeSend.call(g,S,h)===!1||l))return S.abort();if(T="abort",y.add(h.complete),S.done(h.success),S.fail(h.error),i=G(_t,h,n,S)){if(S.readyState=1,f&&v.trigger("ajaxSend",[S,h]),l)return S;h.async&&h.timeout>0&&(u=e.setTimeout(function(){S.abort("timeout")},h.timeout));try{l=!1,i.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return S},getJSON:function(e,t,n){return ge.get(e,t,n,"json")},getScript:function(e,t){return ge.get(e,void 0,t,"script")}}),ge.each(["get","post"],function(e,t){ge[t]=function(e,n,r,i){return ge.isFunction(n)&&(i=i||r,r=n,n=void 0),ge.ajax(ge.extend({url:e,type:t,dataType:i,data:n,success:r},ge.isPlainObject(e)&&e))}}),ge._evalUrl=function(e){return ge.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},ge.fn.extend({wrapAll:function(e){var t;return this[0]&&(ge.isFunction(e)&&(e=e.call(this[0])),t=ge(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return ge.isFunction(e)?this.each(function(t){ge(this).wrapInner(e.call(this,t))}):this.each(function(){var t=ge(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=ge.isFunction(e);return this.each(function(n){ge(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ge(this).replaceWith(this.childNodes)}),this}}),ge.expr.pseudos.hidden=function(e){return!ge.expr.pseudos.visible(e)},ge.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ge.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},zt=ge.ajaxSettings.xhr();pe.cors=!!zt&&"withCredentials"in zt,pe.ajax=zt=!!zt,ge.ajaxTransport(function(t){var n,r;if(pe.cors||zt&&!t.crossDomain)return{send:function(i,o){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(s in i)a.setRequestHeader(s,i[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?o(0,"error"):o(a.status,a.statusText):o(Bt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),ge.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ge.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){ +return ge.globalEval(e),e}}}),ge.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ge.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=ge(" + + + + + + Navbar + + +
+
+

Cloud API

+ + +
+ +
+ +
+
+
+

WebSocket API简介

+

WebSocket协议是基于TCP的一种新的网络协议。它实现了客户端与服务器之间在单个 tcp 连接上的全双工通信,由服务器主动发送信息给客户端,减少了频繁的身份验证等不必要的开销。其最大优点有两个:

+ +
    +
  • 两方请求的 header 数据很小,大概只有2 Bytes。

  • +
  • 服务器不再是被动的接到客户端的请求后才返回数据,而是有了新数据后主动推送给客户端。

  • +
+ +

以上 WebSocket 协议带来的优点使得其十分适用于数字货币行情和交易这种实时性强的接口。

+

请求与订阅说明

1. 访问地址

+
    +
  • 行情请求地址为:wss://{HOST}/ws
  • +
  • HOST常用的格式说明:
  • +
+ +

需要验签的接口:www.xxxx.com

+ +

不需要验签的接口:www.xxxx.com/api

+ + +

2. 数据压缩

+

WebSocket API 返回的所有数据都进行了 GZIP 压缩,需要 client 在收到数据之后解压,推荐使用pako。(【pako】 是一个支持压缩和解压 GZIP 的库)

+

3. WebSocket库

+

【ws】 是 Node.js 下的 WebSocket 库。

+

4. 心跳

+

WebSocket API 支持双向心跳,无论是 Server 还是 Client 都可以发起 ping message,对方返回 pong message。

+ +

WebSocket Server 发送心跳:

+
{"ping": 18212558000}
+
+

WebSocket Client 应该返回:

+
 {"pong": 18212558000}
+
+ + + +
┌────────┐                         ┌────────┐ 
+│ Client │                         │ Server │
+└───┬────┘                         └───┬────┘
+    │         {"ping": 18212558000}    │
+    │<─────────────────────────────────┤
+    │                                  │ wait 5s
+    │                                  ├───┐
+    │                                  │<──┘
+    │         {"ping": 18212558000}    │
+    │<─────────────────────────────────┤
+    │                                  │
+    │ {"pong": 18212558000}            │
+    ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄>│
+    │                                  │
+
+ +
┌────────┐                         ┌────────┐ 
+│ Client │                         │ Server │
+└───┬────┘                         └───┬────┘
+    │         {"ping": 1523778470416}  │
+    │<─────────────────────────────────┤
+    │                                  │ wait 5s
+    │                                  ├───┐
+    │                                  │<──┘
+    │         {"ping": 1523778475416}  │
+    │<─────────────────────────────────┤
+    │                                  │ wait 5s
+    │                                  ├───┐
+    │                                  │<──┘
+    │                                  │
+    │                                  │ close WebSocket connection
+    │                                  ├───┐
+    │                                  │<──┘
+    │                                  │
+
+
+ + +

WebSocket Client 发送心跳:

+
{"ping": 18212553000}
+
+ +
{
+  "ts": 1492420473027,
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "invalid ping"
+}
+
+

WebSocket Server 会返回:

+
{"pong": 18212553000}
+
+ + +

错误信息返回格式

+
{
+  "id": "id generate by client",
+  "status": "error",
+  "err-code": "err-code",
+  "err-msg": "err-message",
+  "ts": 1487152091345
+}
+
+ +

5. topic格式

+

订阅数据和请求数据都要使用 topictopic 的语法如下:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
topic 类型topic 语法sub/req描述
KLinemarket.$symbol.kline.$periodsub/reqK线 数据,包含单位时间区间的开盘价、收盘价、最高价、最低价、成交量、成交额、成交笔数等数据 $period 可选值:{ 1min, 5min, 15min, 30min, 60min, 4hour,1day, 1mon, 1week, 1year }
Market Depthmarket.$symbol.depth.$typesub/req盘口深度,按照不同 step 聚合的买一、买二、买三等和卖一、卖二、卖三等数据 $type 可选值:{ step0, step1, step2, step3, step4, step5, percent10 } (合并深度0-5);step0时,不合并深度
Trade Detailmarket.$symbol.trade.detailsub/req成交记录,包含成交价格、成交量、成交方向等信息
Market Detailmarket.$symbol.detailsub/req最近24小时成交量、成交额、开盘价、收盘价、最高价、最低价、成交笔数等
Market Tickersmarket.tickerssub所有对外公开交易对的 日K线、最近24小时成交量等信息
+ +
    +
  • $symbol 为交易对,可选值: { ethbtc, ltcbtc, etcbtc, bchbtc...... }
  • +
  • 用户选择“合并深度”时,一定报价精度内的市场挂单将予以合并显示。合并深度仅改变显示方式,不改变实际成交价格。
  • +
+

6. 请求数据(req/rep)

+

请求数据,仅返回一次数据

+

请求数据的格式

{
+  "req": "topic to req",
+  "id": "id generate by client"
+}
+
+
    +
  • "req" 的值为 topic ,请参考 "5. topic格式"topic 格式
  • +
+ +

正确请求数据的例子

+
{
+  "req": "market.btcusdt.kline.1min",
+  "id": "id10"
+}
+
+

返回数据的例子:

+
{
+  "status": "ok",
+  "rep": "market.btcusdt.kline.1min",
+  "tick": [
+    {
+      "amount": 1.6206,
+      "count":  3,
+      "id":     1494465840,
+      "open":   9887.00,
+      "close":  9885.00,
+      "low":    9885.00,
+      "high":   9887.00,
+      "vol":    16021.632026
+    },
+    {
+      "amount": 2.2124,
+      "count":  6,
+      "id":     1494465900,
+      "open":   9885.00,
+      "close":  9880.00,
+      "low":    9880.00,
+      "high":   9885.00,
+      "vol":    21859.023500
+    }
+  ]
+}
+
+

错误请求数据的例子

+
{
+  "req": "market.invalidsymbo.kline.1min",
+  "id": "id10"
+}
+
+

返回的错误信息的例子:

+
{
+  "status": "error",
+  "id": "id10",
+  "err-code": "bad-request",
+  "err-msg": "invalid topic market.invalidsymbol.trade.detail",
+  "ts": 1494483996521
+}
+

7. 订阅数据(sub)

订阅数据(sub)以及接收订阅数据的大致流程

┌────────┐                         ┌────────┐ 
+│ Client │                         │ Server │
+└───┬────┘                         └───┬────┘
+    │ {"sub": "topic"}                 │
+    ├─────────────────────────────────>│
+    │                                  │
+    │              {"subbed": "topic"} │
+    │<┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┤
+    │                                  │
+    │        {"tick": "data of topic"} │
+    │<┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┤
+    │                                  │
+    │        {"tick": "data of topic"} │
+    │<┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┤
+    │                                  │
+
+ +

订阅数据的格式

+

成功建立和 WebSocket API 的连接之后,向 Server 发送如下格式的数据来订阅数据:

+
{
+   "id": "id generate by client",
+  "sub": "topic to sub",
+  "freq-ms": 1000
+}
+
+ + + + +

正确订阅的例子

+ +

正确订阅:

+
{
+  "sub": "market.btcusdt.kline.1min",
+  "id": "id1"
+}
+
+
    +
  • "sub" 的值为 topic ,请参考 "5. topic格式"topic 格式
  • +
+ +

订阅成功返回数据的例子:

+
{
+  "id": "id1",
+  "status": "ok",
+  "subbed": "market.btcusdt.kline.1min",
+  "ts": 1489474081631
+}
+
+

之后每当 KLine 有更新时,client 会收到数据,例子:

+
{
+  "ch": "market.btcusdt.kline.1min",
+  "ts": 1489474082831,
+  "tick": {
+    "id": 1489464480,
+    "amount": 0.0,
+    "count": 0,
+    "open": 7962.62,
+    "close": 7962.62,
+    "low": 7962.62,
+    "high": 7962.62,
+    "vol": 0.0
+  }
+}
+
+

tick 说明:

+
  "tick": {
+    "id": K线id,
+    "amount": 成交量,
+    "count": 成交笔数,
+    "open": 开盘价,
+    "close": 收盘价,当K线为最晚的一根时,是最新成交价
+    "low": 最低价,
+    "high": 最高价,
+    "vol": 成交额, 即 sum(每一笔成交价 * 该笔的成交量)
+  }
+
+
+

错误订阅的例子

+ +

错误订阅(错误的 symbol):

+
{
+  "sub": "market.invalidsymbol.kline.1min",
+  "id": "id2"
+}
+
+

订阅失败返回数据的例子:

+
{
+  "id": "id2",
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "invalid topic market.invalidsymbol.kline.1min",
+  "ts": 1494301904959
+}
+
+

错误订阅(错误的 topic):

+
{
+  "sub": "market.btcusdt.kline.3min",
+  "id": "id3"
+}
+
+

订阅失败返回数据的例子:

+
{
+  "id": "id3",
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "invalid topic market.btcusdt.kline.3min",
+  "ts": 1494310283622
+}
+

8. 取消订阅(unsub)

取消订阅的格式

+

WebSocket Client 订阅数据之后,可以取消订阅,取消订阅之后 WebSocket Server 将不会再发送该 topic 的数据,取消订阅的格式如下:

+
{
+  "unsub": "topic to unsub",
+  "id": "id generate by client"
+}
+
+

正确取消订阅的例子

+ +

正确取消订阅的例子:

+
{
+  "unsub": "market.btcusdt.trade.detail",
+  "id": "id4"
+}
+
+

取消订阅成功返回信息的例子:

+
{
+  "id": "id4",
+  "status": "ok",
+  "unsubbed": "market.btcusdt.trade.detail",
+  "ts": 1494326028889
+}
+
+

错误取消订阅的例子

+ +

错误取消订阅的例子(取消订阅一个尚未订阅的 topic):

+
{
+  "unsub": "market.btcusdt.trade.detail",
+  "id": "id5"
+}
+
+

返回的错误信息的例子

+
{
+  "id": "id5",
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "unsub with not subbed topic market.btcusdt.trade.detail",
+  "ts": 1494326217428
+}
+
+

错误取消订阅的例子(取消订阅一个不存在的 topic):

+
{
+  "unsub": "not-exists-topic",
+  "id": "id5"
+}
+
+

返回的错误信息的例子:

+
{
+  "id": "id5",
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "unsub with not subbed topic not-exists-topic",
+  "ts": 1494326318809
+}
+

WebSocket API Reference

订阅 KLine 数据 market.$symbol.kline.$period

+

成功建立和 WebSocket API 的连接之后,向 Server 发送如下格式的数据来订阅数据:

+
{
+  "sub": "market.$symbol.kline.$period",
+  "id": "id generate by client"
+}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对ethbtc,btusdt...
periodtruestringK线周期1min, 5min, 15min, 30min, 60min, 1day, 1mon, 1week, 1year
+ +

正确订阅的例子

+ +

正确订阅

+
{
+  "sub": "market.btcusdt.kline.1min",
+  "id": "id1"
+}
+
+

订阅成功返回数据的例子

+
{
+  "id": "id1",
+  "status": "ok",
+  "subbed": "market.btcusdt.kline.1min",
+  "ts": 1489474081631
+}
+
+

之后每当 KLine 有更新时,client 会收到数据,例子

+
{
+  "ch": "market.btcusdt.kline.1min",
+  "ts": 1489474082831,
+  "tick": {
+    "id": 1489464480,
+    "amount": 0.0,
+    "count": 0,
+    "open": 7962.62,
+    "close": 7962.62,
+    "low": 7962.62,
+    "high": 7962.62,
+    "vol": 0.0
+  }
+}
+
+

tick 说明

+
  "tick": {
+    "id": K线id,
+    "amount": 成交量,
+    "count": 成交笔数,
+    "open": 开盘价,
+    "close": 收盘价,当K线为最晚的一根时,是最新成交价
+    "low": 最低价,
+    "high": 最高价,
+    "vol": 成交额, 即 sum(每一笔成交价 * 该笔的成交量)
+  }
+
+
+

错误订阅的例子

+ +

错误订阅(错误的 symbol)

+
{
+  "sub": "market.invalidsymbol.kline.1min",
+  "id": "id2"
+}
+
+

订阅失败返回数据的例子

+
{
+  "id": "id2",
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "invalid topic market.invalidsymbol.kline.1min",
+  "ts": 1494301904959
+}
+
+

错误订阅(错误的 topic)

+
{
+  "sub": "market.btcusdt.kline.3min",
+  "id": "id3"
+}
+
+

订阅失败返回数据的例子

+
{
+  "id": "id3",
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "invalid topic market.btcusdt.kline.3min",
+  "ts": 1494310283622
+}
+

请求 KLine 数据 market.$symbol.kline.$period

{
+  "req": "market.$symbol.kline.$period",
+  "id": "id generated by client",
+  "from": 1533536947, //optional, type: long, 2017-07-28T00:00:00+08:00  2050-01-01T00:00:00+08:00 之间的时间点,单位:秒
+  "to": 1533536947 //optional, type: long, 2017-07-28T00:00:00+08:00  2050-01-01T00:00:00+08:00 之间的时间点,单位:秒,必须比 from 
+}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, ethusdt, ltcusdt...
periodtruestringK线周期1min, 5min, 15min, 30min, 60min, 1day, 1mon, 1week, 1year
+

请求 KLine 数据的例子

{
+  "req": "market.btcusdt.kline.1min",
+  "id": "id10"
+}
+
+

返回数据的例子

+
{
+  "rep": "market.btcusdt.kline.1min",
+  "status": "ok",
+  "id": "id10",
+  "tick": [
+    {
+      "amount": 17.4805,
+      "count":  27,
+      "id":     1494478080,
+      "open":   10050.00,
+      "close":  10058.00,
+      "low":    10050.00,
+      "high":   10058.00,
+      "vol":    175798.757708
+    },
+    {
+      "amount": 15.7389,
+      "count":  28,
+      "id":     1494478140,
+      "open":   10058.00,
+      "close":  10060.00,
+      "low":    10056.00,
+      "high":   10065.00,
+      "vol":    158331.348600
+    },
+    // more KLine data here
+  ]
+}
+

订阅 Market Depth 数据 market.$symbol.depth.$type

+

成功建立和 WebSocket API 的连接之后,向 Server 发送如下格式的数据来订阅数据:

+
{
+  "sub": "market.$symbol.depth.$type",
+  "id": "id generated by client"
+}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, ethusdt, ltcusdt, etcusdt, bchusdt, ethbtc, ltcbtc, etcbtc, bchbtc...
typetruestringDepth 类型step0, step1, step2, step3, step4, step5(合并深度0-5);step0时,不合并深度
+ +
    +
  • 用户选择“合并深度”时,一定报价精度内的市场挂单将予以合并显示。合并深度仅改变显示方式,不改变实际成交价格。
  • +
+ +

正确订阅例子

+
{
+  "sub": "market.btcusdt.depth.step0",
+  "id": "id1"
+}
+
+

订阅成功返回数据的例子

+
{
+  "id": "id1",
+  "status": "ok",
+  "subbed": "market.btcusdt.depth.step0",
+  "ts": 1489474081631
+}
+
+

之后每当 depth 有更新时,client 会收到数据,例子

+
{
+  "ch": "market.btcusdt.depth.step0",
+  "ts": 1489474082831,
+  "tick": {
+    "bids": [
+    [9999.3900,0.0098], // [price, amount]
+    [9992.5947,0.0560],
+    // more Market Depth data here
+    ],
+    "asks": [
+    [10010.9800,0.0099]
+    [10011.3900,2.0000]
+    //more data here
+    ]
+  }
+}
+
+

tick 说明 + + "tick": { + "bids": [ + [买1价,买1量] + [买2价,买2量] + //more data here + ], + "asks": [ + [卖1价,卖1量] + [卖2价,卖2量] + //more data here + ] + } +

+

请求 Market Depth 数据 market.$symbol.depth.$type

{
+  "req": "market.$symbol.depth.$type",
+  "id": "id generated by client"
+}
+

请求 Market Depth 数据的例子

{
+  "req": "market.btcusdt.depth.step0",
+  "id": "id10"
+}
+
+

返回数据的例子:

+
{
+  "rep": "market.btcusdt.depth.step0",
+  "status": "ok",
+  "id": "id10",
+  "tick": {
+    "bids": [
+    [9999.3900,0.0098], // [price, amount]
+    [9992.5947,0.0560],
+    // more Market Depth data here
+    ],
+    "asks": [
+    [10010.9800,0.0099]
+    [10011.3900,2.0000]
+    //more data here
+    ]
+  }
+}
+

订阅 Trade Detail 数据 market.$symbol.trade.detail

{
+  "sub": "market.$symbol.trade.detail",
+  "id": "id generated by client"
+}
+
+ + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, ethusdt, ltcusdt, etcusdt, bchusdt, ethbtc, ltcbtc, etcbtc, bchbtc...
+ +

正确订阅例子:

+
{
+  "sub": "market.btcusdt.trade.detail",
+  "id": "id1"
+}
+
+

订阅成功返回数据的例子:

+
{
+  "id": "id1",
+  "status": "ok",
+  "subbed": "market.btcusdt.trade.detail",
+  "ts": 1489474081631
+}
+
+

之后每当 Trade Detail 有更新时,client 会收到数据,例子:

+
{
+  "ch": "market.btcusdt.trade.detail",
+  "ts": 1489474082831,
+  "tick": {
+        "id": 14650745135,
+        "ts": 1533265950234,
+        "data": [
+            {
+                "amount": 0.0099,
+                "ts": 1533265950234,
+                "id": 146507451359183894799,
+                "price": 401.74,
+                "direction": "buy"
+            },
+            // more Trade Detail data here
+        ]
+    }
+  }
+}
+
+

data 说明:

+
  "data": [
+    {
+      "id":        消息ID,
+      "price":     成交价,
+      "time":      成交时间,
+      "amount":    成交量,
+      "direction": 成交方向,
+      "tradeId":   成交ID,
+      "ts":        时间戳
+    }
+  ]
+

请求 Trade Detail 数据 market.$symbol.trade.detail

{
+  "req": "market.$symbol.trade.detail",
+  "id": "id generated by client"
+}
+
+
    +
  • 仅能获取最近 300 个 Trade Detail 数据
  • +
+

请求 Trade Detail 数据的例子

{
+  "req": "market.btcusdt.trade.detail",
+  "id": "id11"
+}
+
+

返回数据的例子:

+
{
+  "rep": "market.btcusdt.trade.detail",
+  "status": "ok",
+  "id": "id11",
+  "data": [
+    {
+      "id":        601595424,
+      "price":     10195.64,
+      "time":      1494495766,
+      "amount":    0.2943,
+      "direction": "buy",
+      "tradeId":   601595424,
+      "ts":        1494495766000
+    },
+    {
+      "id":        601595423,
+      "price":     10195.64,
+      "time":      1494495711,
+      "amount":    0.2430,
+      "direction": "buy",
+      "tradeId":   601595423,
+      "ts":        1494495711000
+    },
+    // more Trade Detail data here
+  ]
+}
+

请求 Market Detail 数据 market.$symbol.detail

{
+  "req": "market.$symbol.detail",
+  "id": "id generated by client"
+}
+
+
    +
  • 仅返回当前 Market Detail
  • +
+

请求 Market Detail 数据的例子

{
+  "req": "market.btcusdt.detail",
+  "id": "id12"
+}
+
+

返回数据的例子:

+
{
+  "rep": "market.btcusdt.detail",
+  "status": "ok",
+  "id": "id12",
+  "tick": {
+    "amount": 12224.2922,
+    "open":   9790.52,
+    "close":  10195.00,
+    "high":   10300.00,
+    "ts":     1494496390000,
+    "id":     1494496390,
+    "count":  15195,
+    "low":    9657.00,
+    "vol":    121906001.754751
+  }
+}
+
+


+
+
+
+

+ +
+
+
+ shell +
+
+
+ + + diff --git a/build/v1/ws/javascripts/all.js b/build/v1/ws/javascripts/all.js new file mode 100644 index 0000000..05af78b --- /dev/null +++ b/build/v1/ws/javascripts/all.js @@ -0,0 +1,131 @@ +!function(){if("ontouchstart"in window){var e,t,n,r,i,o,s={};e=function(e,t){return Math.abs(e[0]-t[0])>5||Math.abs(e[1]-t[1])>5},t=function(e){this.startXY=[e.touches[0].clientX,e.touches[0].clientY],this.threshold=!1},n=function(t){return!this.threshold&&void(this.threshold=e(this.startXY,[t.touches[0].clientX,t.touches[0].clientY]))},r=function(t){if(!this.threshold&&!e(this.startXY,[t.changedTouches[0].clientX,t.changedTouches[0].clientY])){var n=t.changedTouches[0],r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),r.simulated=!0,t.target.dispatchEvent(r)}},i=function(e){var t=Date.now(),n=t-s.time,r=e.clientX,i=e.clientY,a=[Math.abs(s.x-r),Math.abs(s.y-i)],u=o(e.target,"A")||e.target,c=u.nodeName,l="A"===c,f=window.navigator.standalone&&l&&e.target.getAttribute("href");return s.time=t,s.x=r,s.y=i,!((!e.simulated&&(n<500||n<1500&&a[0]<50&&a[1]<50)||f)&&(e.preventDefault(),e.stopPropagation(),!f))&&(f&&(window.location=u.getAttribute("href")),void(u&&u.classList&&(u.classList.add("energize-focus"),window.setTimeout(function(){u.classList.remove("energize-focus")},150))))},o=function(e,t){for(var n=e;n!==document.body;){if(!n||n.nodeName===t)return n;n=n.parentNode}return null},document.addEventListener("touchstart",t,!1),document.addEventListener("touchmove",n,!1),document.addEventListener("touchend",r,!1),document.addEventListener("click",i,!0)}}(),/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-03-20T18:59Z + */ +function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(e,t){t=t||ne;var n=t.createElement("script");n.text=e,t.head.appendChild(n).parentNode.removeChild(n)}function r(e){var t=!!e&&"length"in e&&e.length,n=ge.type(e);return"function"!==n&&!ge.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}function o(e,t,n){return ge.isFunction(t)?ge.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?ge.grep(e,function(e){return e===t!==n}):"string"!=typeof t?ge.grep(e,function(e){return ae.call(t,e)>-1!==n}):Ce.test(t)?ge.filter(t,e,n):(t=ge.filter(t,e),ge.grep(e,function(e){return ae.call(t,e)>-1!==n&&1===e.nodeType}))}function s(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function a(e){var t={};return ge.each(e.match(De)||[],function(e,n){t[n]=!0}),t}function u(e){return e}function c(e){throw e}function l(e,t,n,r){var i;try{e&&ge.isFunction(i=e.promise)?i.call(e).done(t).fail(n):e&&ge.isFunction(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}function f(){ne.removeEventListener("DOMContentLoaded",f),e.removeEventListener("load",f),ge.ready()}function d(){this.expando=ge.expando+d.uid++}function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Ie.test(e)?JSON.parse(e):e)}function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Re,"-$&").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n=p(n)}catch(e){}He.set(e,t,n)}else n=void 0;return n}function g(e,t,n,r){var i,o=1,s=20,a=r?function(){return r.cur()}:function(){return ge.css(e,t,"")},u=a(),c=n&&n[3]||(ge.cssNumber[t]?"":"px"),l=(ge.cssNumber[t]||"px"!==c&&+u)&&Me.exec(ge.css(e,t));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do o=o||".5",l/=o,ge.style(e,t,l+c);while(o!==(o=a()/u)&&1!==o&&--s)}return n&&(l=+l||+u||0,i=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=i)),i}function v(e){var t,n=e.ownerDocument,r=e.nodeName,i=Ve[r];return i?i:(t=n.body.appendChild(n.createElement(r)),i=ge.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),Ve[r]=i,i)}function m(e,t){for(var n,r,i=[],o=0,s=e.length;o-1)i&&i.push(o);else if(c=ge.contains(o.ownerDocument,o),s=y(f.appendChild(o),"script"),c&&x(s),n)for(l=0;o=s[l++];)Qe.test(o.type||"")&&n.push(o);return f}function w(){return!0}function T(){return!1}function S(){try{return ne.activeElement}catch(e){}}function E(e,t,n,r,i,o){var s,a;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(a in t)E(e,a,n,r,t[a],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=T;else if(!i)return e;return 1===o&&(s=i,i=function(e){return ge().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=ge.guid++)),e.each(function(){ge.event.add(this,t,i,r,n)})}function C(e,t){return i(e,"table")&&i(11!==t.nodeType?t:t.firstChild,"tr")?ge(">tbody",e)[0]||e:e}function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function N(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function j(e,t){var n,r,i,o,s,a,u,c;if(1===t.nodeType){if(Pe.hasData(e)&&(o=Pe.access(e),s=Pe.set(t,o),c=o.events)){delete s.handle,s.events={};for(i in c)for(n=0,r=c[i].length;n1&&"string"==typeof h&&!pe.checkClone&&rt.test(h))return e.each(function(n){var o=e.eq(n);g&&(t[0]=h.call(this,n,o.html())),L(o,t,r,i)});if(d&&(o=b(t,e[0].ownerDocument,!1,e,i),s=o.firstChild,1===o.childNodes.length&&(o=s),s||i)){for(a=ge.map(y(o,"script"),k),u=a.length;f=0&&nS.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[_]=!0,e}function i(e){var t=q.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=n.length;r--;)S.attrHandle[n[r]]=t}function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return function(t){return"form"in t?t.parentNode&&t.disabled===!1?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&Ee(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function l(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function p(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function v(e,n,r){for(var i=0,o=n.length;i-1&&(r[c]=!(s[c]=f))}}else x=m(x===s?x.splice(h,x.length):x),o?o(null,s,x,u):K.apply(s,x)})}function x(e){for(var t,n,r,i=e.length,o=S.relative[e[0].type],s=o||S.relative[" "],a=o?1:0,u=h(function(e){return e===t},s,!0),c=h(function(e){return ee(t,e)>-1},s,!0),l=[function(e,n,r){var i=!o&&(r||n!==A)||((t=n).nodeType?u(e,n,r):c(e,n,r));return t=null,i}];a1&&g(l),a>1&&p(e.slice(0,a-1).concat({value:" "===e[a-2].type?"*":""})).replace(ae,"$1"),n,a0,o=e.length>0,s=function(r,s,a,u,c){var l,f,d,p=0,h="0",g=r&&[],v=[],y=A,x=r||o&&S.find.TAG("*",c),b=W+=null==y?1:Math.random()||.1,w=x.length;for(c&&(A=s===q||s||c);h!==w&&null!=(l=x[h]);h++){if(o&&l){for(f=0,s||l.ownerDocument===q||(O(l),a=!$);d=e[f++];)if(d(l,s||q,a)){u.push(l);break}c&&(W=b)}i&&((l=!d&&l)&&p--,r&&g.push(l))}if(p+=h,i&&h!==p){for(f=0;d=n[f++];)d(g,v,s,a);if(r){if(p>0)for(;h--;)g[h]||v[h]||(v[h]=J.call(u));v=m(v)}K.apply(u,v),c&&!r&&v.length>0&&p+n.length>1&&t.uniqueSort(u)}return c&&(W=b,A=y),g};return i?r(s):s}var w,T,S,E,C,k,N,j,A,L,D,O,q,F,$,P,H,I,R,_="sizzle"+1*new Date,M=e.document,W=0,B=0,z=n(),V=n(),X=n(),U=function(e,t){return e===t&&(D=!0),0},Q={}.hasOwnProperty,Y=[],J=Y.pop,G=Y.push,K=Y.push,Z=Y.slice,ee=function(e,t){for(var n=0,r=e.length;n+~]|"+ne+")"+ne+"*"),le=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),fe=new RegExp(oe),de=new RegExp("^"+re+"$"),pe={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,ge=/^h\d$/i,ve=/^[^{]+\{\s*\[native \w/,me=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,xe=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),be=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},we=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Te=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},Se=function(){O()},Ee=h(function(e){return e.disabled===!0&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{K.apply(Y=Z.call(M.childNodes),M.childNodes),Y[M.childNodes.length].nodeType}catch(e){K={apply:Y.length?function(e,t){G.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}T=t.support={},C=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},O=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:M;return r!==q&&9===r.nodeType&&r.documentElement?(q=r,F=q.documentElement,$=!C(q),M!==q&&(n=q.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Se,!1):n.attachEvent&&n.attachEvent("onunload",Se)),T.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),T.getElementsByTagName=i(function(e){return e.appendChild(q.createComment("")),!e.getElementsByTagName("*").length}),T.getElementsByClassName=ve.test(q.getElementsByClassName),T.getById=i(function(e){return F.appendChild(e).id=_,!q.getElementsByName||!q.getElementsByName(_).length}),T.getById?(S.filter.ID=function(e){var t=e.replace(xe,be);return function(e){return e.getAttribute("id")===t}},S.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&$){var n=t.getElementById(e);return n?[n]:[]}}):(S.filter.ID=function(e){var t=e.replace(xe,be);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},S.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&$){var n,r,i,o=t.getElementById(e);if(o){if(n=o.getAttributeNode("id"),n&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if(n=o.getAttributeNode("id"),n&&n.value===e)return[o]}return[]}}),S.find.TAG=T.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):T.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},S.find.CLASS=T.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&$)return t.getElementsByClassName(e)},H=[],P=[],(T.qsa=ve.test(q.querySelectorAll))&&(i(function(e){F.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&P.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||P.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+_+"-]").length||P.push("~="),e.querySelectorAll(":checked").length||P.push(":checked"),e.querySelectorAll("a#"+_+"+*").length||P.push(".#.+[+~]")}),i(function(e){e.innerHTML="";var t=q.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&P.push("name"+ne+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&P.push(":enabled",":disabled"),F.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&P.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),P.push(",.*:")})),(T.matchesSelector=ve.test(I=F.matches||F.webkitMatchesSelector||F.mozMatchesSelector||F.oMatchesSelector||F.msMatchesSelector))&&i(function(e){T.disconnectedMatch=I.call(e,"*"),I.call(e,"[s!='']:x"),H.push("!=",oe)}),P=P.length&&new RegExp(P.join("|")),H=H.length&&new RegExp(H.join("|")),t=ve.test(F.compareDocumentPosition),R=t||ve.test(F.contains)?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)for(;t=t.parentNode;)if(t===e)return!0;return!1},U=t?function(e,t){if(e===t)return D=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!T.sortDetached&&t.compareDocumentPosition(e)===n?e===q||e.ownerDocument===M&&R(M,e)?-1:t===q||t.ownerDocument===M&&R(M,t)?1:L?ee(L,e)-ee(L,t):0:4&n?-1:1)}:function(e,t){if(e===t)return D=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],u=[t];if(!i||!o)return e===q?-1:t===q?1:i?-1:o?1:L?ee(L,e)-ee(L,t):0;if(i===o)return s(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?s(a[r],u[r]):a[r]===M?-1:u[r]===M?1:0},q):q},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==q&&O(e),n=n.replace(le,"='$1']"),T.matchesSelector&&$&&!X[n+" "]&&(!H||!H.test(n))&&(!P||!P.test(n)))try{var r=I.call(e,n);if(r||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,q,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==q&&O(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==q&&O(e);var n=S.attrHandle[t.toLowerCase()],r=n&&Q.call(S.attrHandle,t.toLowerCase())?n(e,t,!$):void 0;return void 0!==r?r:T.attributes||!$?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+"").replace(we,Te)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(D=!T.detectDuplicates,L=!T.sortStable&&e.slice(0),e.sort(U),D){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return L=null,e},E=t.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+=E(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=E(t);return n},S=t.selectors={cacheLength:50,createPseudo:r,match:pe,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(xe,be),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,be),"~="===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]||t.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]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=k(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,be).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=z[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&z(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(se," ")+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,d,p,h,g=o!==s?"nextSibling":"previousSibling",v=t.parentNode,m=a&&t.nodeName.toLowerCase(),y=!u&&!a,x=!1;if(v){if(o){for(;g;){for(d=t;d=d[g];)if(a?d.nodeName.toLowerCase()===m:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[s?v.firstChild:v.lastChild],s&&y){for(d=v,f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===W&&c[1],x=p&&c[2],d=p&&v.childNodes[p];d=++p&&d&&d[g]||(x=p=0)||h.pop();)if(1===d.nodeType&&++x&&d===t){l[e]=[W,p,x];break}}else if(y&&(d=t,f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===W&&c[1],x=p),x===!1)for(;(d=++p&&d&&d[g]||(x=p=0)||h.pop())&&((a?d.nodeName.toLowerCase()!==m:1!==d.nodeType)||!++x||(y&&(f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),l[e]=[W,x]),d!==t)););return x-=i,x===r||x%r===0&&x/r>=0}}},PSEUDO:function(e,n){var i,o=S.pseudos[e]||S.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[_]?o(n):o.length>1?(i=[e,e,"",n],S.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),s=i.length;s--;)r=ee(e,i[s]),e[r]=!(t[r]=i[s])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=N(e.replace(ae,"$1"));return i[_]?r(function(e,t,n,r){for(var o,s=i(e,null,r,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(xe,be),function(t){return(t.textContent||t.innerText||E(t)).indexOf(e)>-1}}),lang:r(function(e){return de.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(xe,be).toLowerCase(),function(t){var n;do if(n=$?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===F},focus:function(e){return e===q.activeElement&&(!q.hasFocus||q.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:c(!1),disabled:c(!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.nodeType<6)return!1;return!0},parent:function(e){return!S.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return he.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"))||"text"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:l(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(s=o[0]).type&&9===t.nodeType&&$&&S.relative[o[1].type]){if(t=(S.find.ID(s.matches[0].replace(xe,be),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(s=o[i],!S.relative[a=s.type]);)if((u=S.find[a])&&(r=u(s.matches[0].replace(xe,be),ye.test(o[0].type)&&f(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&p(o),!e)return K.apply(n,r),n;break}}return(c||N(e,l))(r,t,!$,n,!t||ye.test(e)&&f(t.parentNode)||t),n},T.sortStable=_.split("").sort(U).join("")===_,T.detectDuplicates=!!D,O(),T.sortDetached=i(function(e){return 1&e.compareDocumentPosition(q.createElement("fieldset"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),T.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);ge.find=be,ge.expr=be.selectors,ge.expr[":"]=ge.expr.pseudos,ge.uniqueSort=ge.unique=be.uniqueSort,ge.text=be.getText,ge.isXMLDoc=be.isXML,ge.contains=be.contains,ge.escapeSelector=be.escape;var we=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&ge(e).is(n))break;r.push(e)}return r},Te=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},Se=ge.expr.match.needsContext,Ee=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,Ce=/^.[^:#\[\.,]*$/;ge.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ge.find.matchesSelector(r,e)?[r]:[]:ge.find.matches(e,ge.grep(t,function(e){return 1===e.nodeType}))},ge.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ge(e).filter(function(){for(t=0;t1?ge.uniqueSort(n):n},filter:function(e){return this.pushStack(o(this,e||[],!1))},not:function(e){return this.pushStack(o(this,e||[],!0))},is:function(e){return!!o(this,"string"==typeof e&&Se.test(e)?ge(e):e||[],!1).length}});var ke,Ne=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,je=ge.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||ke,"string"==typeof e){if(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:Ne.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ge?t[0]:t,ge.merge(this,ge.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:ne,!0)),Ee.test(r[1])&&ge.isPlainObject(t))for(r in t)ge.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=ne.getElementById(r[2]),i&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):ge.isFunction(e)?void 0!==n.ready?n.ready(e):e(ge):ge.makeArray(e,this)};je.prototype=ge.fn,ke=ge(ne);var Ae=/^(?:parents|prev(?:Until|All))/,Le={children:!0,contents:!0,next:!0,prev:!0};ge.fn.extend({has:function(e){var t=ge(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&ge.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?ge.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?ae.call(ge(e),this[0]):ae.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ge.uniqueSort(ge.merge(this.get(),ge(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ge.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return we(e,"parentNode")},parentsUntil:function(e,t,n){return we(e,"parentNode",n)},next:function(e){return s(e,"nextSibling")},prev:function(e){return s(e,"previousSibling")},nextAll:function(e){return we(e,"nextSibling")},prevAll:function(e){return we(e,"previousSibling")},nextUntil:function(e,t,n){return we(e,"nextSibling",n)},prevUntil:function(e,t,n){return we(e,"previousSibling",n)},siblings:function(e){return Te((e.parentNode||{}).firstChild,e)},children:function(e){return Te(e.firstChild)},contents:function(e){return i(e,"iframe")?e.contentDocument:(i(e,"template")&&(e=e.content||e),ge.merge([],e.childNodes))}},function(e,t){ge.fn[e]=function(n,r){var i=ge.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=ge.filter(r,i)),this.length>1&&(Le[e]||ge.uniqueSort(i),Ae.test(e)&&i.reverse()),this.pushStack(i)}});var De=/[^\x20\t\r\n\f]+/g;ge.Callbacks=function(e){e="string"==typeof e?a(e):ge.extend({},e);var t,n,r,i,o=[],s=[],u=-1,c=function(){for(i=i||e.once,r=t=!0;s.length;u=-1)for(n=s.shift();++u-1;)o.splice(n,1),n<=u&&u--}),this},has:function(e){return e?ge.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=s=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},ge.extend({Deferred:function(t){var n=[["notify","progress",ge.Callbacks("memory"),ge.Callbacks("memory"),2],["resolve","done",ge.Callbacks("once memory"),ge.Callbacks("once memory"),0,"resolved"],["reject","fail",ge.Callbacks("once memory"),ge.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return ge.Deferred(function(t){ge.each(n,function(n,r){var i=ge.isFunction(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&ge.isFunction(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){function o(t,n,r,i){return function(){var a=this,l=arguments,f=function(){var e,f;if(!(t=s&&(r!==c&&(a=void 0,l=[e]),n.rejectWith(a,l))}};t?d():(ge.Deferred.getStackHook&&(d.stackTrace=ge.Deferred.getStackHook()),e.setTimeout(d))}}var s=0;return ge.Deferred(function(e){n[0][3].add(o(0,e,ge.isFunction(i)?i:u,e.notifyWith)),n[1][3].add(o(0,e,ge.isFunction(t)?t:u)),n[2][3].add(o(0,e,ge.isFunction(r)?r:c))}).promise()},promise:function(e){return null!=e?ge.extend(e,i):i}},o={};return ge.each(n,function(e,t){var s=t[2],a=t[5];i[t[1]]=s.add,a&&s.add(function(){r=a},n[3-e][2].disable,n[0][2].lock),s.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=s.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=ie.call(arguments),o=ge.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?ie.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&(l(e,o.done(s(n)).resolve,o.reject,!t),"pending"===o.state()||ge.isFunction(i[n]&&i[n].then)))return o.then();for(;n--;)l(i[n],s(n),o.reject);return o.promise()}});var Oe=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ge.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&Oe.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},ge.readyException=function(t){e.setTimeout(function(){throw t})};var qe=ge.Deferred();ge.fn.ready=function(e){return qe.then(e)["catch"](function(e){ge.readyException(e)}),this},ge.extend({isReady:!1,readyWait:1,ready:function(e){(e===!0?--ge.readyWait:ge.isReady)||(ge.isReady=!0,e!==!0&&--ge.readyWait>0||qe.resolveWith(ne,[ge]))}}),ge.ready.then=qe.then,"complete"===ne.readyState||"loading"!==ne.readyState&&!ne.documentElement.doScroll?e.setTimeout(ge.ready):(ne.addEventListener("DOMContentLoaded",f),e.addEventListener("load",f));var Fe=function(e,t,n,r,i,o,s){var a=0,u=e.length,c=null==n;if("object"===ge.type(n)){i=!0;for(a in n)Fe(e,t,a,n[a],!0,o,s)}else if(void 0!==r&&(i=!0,ge.isFunction(r)||(s=!0),c&&(s?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(ge(e),n)})),t))for(;a1,null,!0)},removeData:function(e){return this.each(function(){He.remove(this,e)})}}),ge.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Pe.get(e,t),n&&(!r||Array.isArray(n)?r=Pe.access(e,t,ge.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ge.queue(e,t),r=n.length,i=n.shift(),o=ge._queueHooks(e,t),s=function(){ge.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Pe.get(e,n)||Pe.access(e,n,{empty:ge.Callbacks("once memory").add(function(){Pe.remove(e,[t+"queue",n])})})}}),ge.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,Qe=/^$|\/(?:java|ecma)script/i,Ye={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};Ye.optgroup=Ye.option,Ye.tbody=Ye.tfoot=Ye.colgroup=Ye.caption=Ye.thead,Ye.th=Ye.td;var Je=/<|&#?\w+;/;!function(){var e=ne.createDocumentFragment(),t=e.appendChild(ne.createElement("div")),n=ne.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),pe.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Ge=ne.documentElement,Ke=/^key/,Ze=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,et=/^([^.]*)(?:\.(.+)|)/;ge.event={global:{},add:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Pe.get(e);if(v)for(n.handler&&(o=n,n=o.handler,i=o.selector),i&&ge.find.matchesSelector(Ge,i),n.guid||(n.guid=ge.guid++),(u=v.events)||(u=v.events={}), +(s=v.handle)||(s=v.handle=function(t){return"undefined"!=typeof ge&&ge.event.triggered!==t.type?ge.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(De)||[""],c=t.length;c--;)a=et.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p&&(f=ge.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=ge.event.special[p]||{},l=ge.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ge.expr.match.needsContext.test(i),namespace:h.join(".")},o),(d=u[p])||(d=u[p]=[],d.delegateCount=0,f.setup&&f.setup.call(e,r,h,s)!==!1||e.addEventListener&&e.addEventListener(p,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,l):d.push(l),ge.event.global[p]=!0)},remove:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Pe.hasData(e)&&Pe.get(e);if(v&&(u=v.events)){for(t=(t||"").match(De)||[""],c=t.length;c--;)if(a=et.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p){for(f=ge.event.special[p]||{},p=(r?f.delegateType:f.bindType)||p,d=u[p]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=d.length;o--;)l=d[o],!i&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(d.splice(o,1),l.selector&&d.delegateCount--,f.remove&&f.remove.call(e,l));s&&!d.length&&(f.teardown&&f.teardown.call(e,h,v.handle)!==!1||ge.removeEvent(e,p,v.handle),delete u[p])}else for(p in u)ge.event.remove(e,p+t[c],n,r,!0);ge.isEmptyObject(u)&&Pe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,s,a=ge.event.fix(e),u=new Array(arguments.length),c=(Pe.get(this,"events")||{})[a.type]||[],l=ge.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||c.disabled!==!0)){for(o=[],s={},n=0;n-1:ge.find(i,this,null,[c]).length),s[i]&&o.push(r);o.length&&a.push({elem:c,handlers:o})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,nt=/\s*$/g;ge.extend({htmlPrefilter:function(e){return e.replace(tt,"<$1>")},clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=ge.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ge.isXMLDoc(e)))for(s=y(a),o=y(e),r=0,i=o.length;r0&&x(s,!u&&y(e,"script")),a},cleanData:function(e){for(var t,n,r,i=ge.event.special,o=0;void 0!==(n=e[o]);o++)if($e(n)){if(t=n[Pe.expando]){if(t.events)for(r in t.events)i[r]?ge.event.remove(n,r):ge.removeEvent(n,r,t.handle);n[Pe.expando]=void 0}n[He.expando]&&(n[He.expando]=void 0)}}}),ge.fn.extend({detach:function(e){return D(this,e,!0)},remove:function(e){return D(this,e)},text:function(e){return Fe(this,function(e){return void 0===e?ge.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.appendChild(e)}})},prepend:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ge.cleanData(y(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ge.clone(this,e,t)})},html:function(e){return Fe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!nt.test(e)&&!Ye[(Ue.exec(e)||["",""])[1].toLowerCase()]){e=ge.htmlPrefilter(e);try{for(;n1)}}),ge.Tween=R,R.prototype={constructor:R,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ge.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ge.cssNumber[n]?"":"px")},cur:function(){var e=R.propHooks[this.prop];return e&&e.get?e.get(this):R.propHooks._default.get(this)},run:function(e){var t,n=R.propHooks[this.prop];return this.options.duration?this.pos=t=ge.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ge.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){ge.fx.step[e.prop]?ge.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[ge.cssProps[e.prop]]&&!ge.cssHooks[e.prop]?e.elem[e.prop]=e.now:ge.style(e.elem,e.prop,e.now+e.unit)}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ge.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ge.fx=R.prototype.init,ge.fx.step={};var gt,vt,mt=/^(?:toggle|show|hide)$/,yt=/queueHooks$/;ge.Animation=ge.extend(X,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return g(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){ge.isFunction(e)?(t=e,e=["*"]):e=e.match(De);for(var n,r=0,i=e.length;r1)},removeAttr:function(e){return this.each(function(){ge.removeAttr(this,e)})}}),ge.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ge.prop(e,t,n):(1===o&&ge.isXMLDoc(e)||(i=ge.attrHooks[t.toLowerCase()]||(ge.expr.match.bool.test(t)?xt:void 0)),void 0!==n?null===n?void ge.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:(r=ge.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&"radio"===t&&i(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(De);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),xt={set:function(e,t,n){return t===!1?ge.removeAttr(e,n):e.setAttribute(n,n),n}},ge.each(ge.expr.match.bool.source.match(/\w+/g),function(e,t){var n=bt[t]||ge.find.attr;bt[t]=function(e,t,r){var i,o,s=t.toLowerCase();return r||(o=bt[s],bt[s]=i,i=null!=n(e,t,r)?s:null,bt[s]=o),i}});var wt=/^(?:input|select|textarea|button)$/i,Tt=/^(?:a|area)$/i;ge.fn.extend({prop:function(e,t){return Fe(this,ge.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[ge.propFix[e]||e]})}}),ge.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ge.isXMLDoc(e)||(t=ge.propFix[t]||t,i=ge.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ge.find.attr(e,"tabindex");return t?parseInt(t,10):wt.test(e.nodeName)||Tt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),pe.optSelected||(ge.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ge.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ge.propFix[this.toLowerCase()]=this}),ge.fn.extend({addClass:function(e){var t,n,r,i,o,s,a,u=0;if(ge.isFunction(e))return this.each(function(t){ge(this).addClass(e.call(this,t,Q(this)))});if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,i,o,s,a,u=0;if(ge.isFunction(e))return this.each(function(t){ge(this).removeClass(e.call(this,t,Q(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):ge.isFunction(e)?this.each(function(n){ge(this).toggleClass(e.call(this,n,Q(this),t),t)}):this.each(function(){var t,r,i,o;if("string"===n)for(r=0,i=ge(this),o=e.match(De)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||(t=Q(this),t&&Pe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Pe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+U(Q(n))+" ").indexOf(t)>-1)return!0;return!1}});var St=/\r/g;ge.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=ge.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,ge(this).val()):e,null==i?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=ge.map(i,function(e){return null==e?"":e+""})),t=ge.valHooks[this.type]||ge.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return t=ge.valHooks[i.type]||ge.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:(n=i.value,"string"==typeof n?n.replace(St,""):null==n?"":n)}}}),ge.extend({valHooks:{option:{get:function(e){var t=ge.find.attr(e,"value");return null!=t?t:U(ge.text(e))}},select:{get:function(e){var t,n,r,o=e.options,s=e.selectedIndex,a="select-one"===e.type,u=a?null:[],c=a?s+1:o.length;for(r=s<0?c:a?s:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ge.each(["radio","checkbox"],function(){ge.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=ge.inArray(ge(e).val(),t)>-1}},pe.checkOn||(ge.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=/^(?:focusinfocus|focusoutblur)$/;ge.extend(ge.event,{trigger:function(t,n,r,i){var o,s,a,u,c,l,f,d=[r||ne],p=le.call(t,"type")?t.type:t,h=le.call(t,"namespace")?t.namespace.split("."):[];if(s=a=r=r||ne,3!==r.nodeType&&8!==r.nodeType&&!Et.test(p+ge.event.triggered)&&(p.indexOf(".")>-1&&(h=p.split("."),p=h.shift(),h.sort()),c=p.indexOf(":")<0&&"on"+p,t=t[ge.expando]?t:new ge.Event(p,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:ge.makeArray(n,[t]),f=ge.event.special[p]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!ge.isWindow(r)){for(u=f.delegateType||p,Et.test(u+p)||(s=s.parentNode);s;s=s.parentNode)d.push(s),a=s;a===(r.ownerDocument||ne)&&d.push(a.defaultView||a.parentWindow||e)}for(o=0;(s=d[o++])&&!t.isPropagationStopped();)t.type=o>1?u:f.bindType||p,l=(Pe.get(s,"events")||{})[t.type]&&Pe.get(s,"handle"),l&&l.apply(s,n),l=c&&s[c],l&&l.apply&&$e(s)&&(t.result=l.apply(s,n),t.result===!1&&t.preventDefault());return t.type=p,i||t.isDefaultPrevented()||f._default&&f._default.apply(d.pop(),n)!==!1||!$e(r)||c&&ge.isFunction(r[p])&&!ge.isWindow(r)&&(a=r[c],a&&(r[c]=null),ge.event.triggered=p,r[p](),ge.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=ge.extend(new ge.Event,n,{type:e,isSimulated:!0});ge.event.trigger(r,null,t)}}),ge.fn.extend({trigger:function(e,t){return this.each(function(){ge.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ge.event.trigger(e,t,n,!0)}}),ge.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){ge.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),ge.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin="onfocusin"in e,pe.focusin||ge.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){ge.event.simulate(t,e.target,ge.event.fix(e))};ge.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=Pe.access(r,t);i||r.addEventListener(e,n,!0),Pe.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=Pe.access(r,t)-1;i?Pe.access(r,t,i):(r.removeEventListener(e,n,!0),Pe.remove(r,t))}}});var Ct=e.location,kt=ge.now(),Nt=/\?/;ge.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||ge.error("Invalid XML: "+t),n};var jt=/\[\]$/,At=/\r?\n/g,Lt=/^(?:submit|button|image|reset|file)$/i,Dt=/^(?:input|select|textarea|keygen)/i;ge.param=function(e,t){var n,r=[],i=function(e,t){var n=ge.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!ge.isPlainObject(e))ge.each(e,function(){i(this.name,this.value)});else for(n in e)Y(n,e[n],t,i);return r.join("&")},ge.fn.extend({serialize:function(){return ge.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ge.prop(this,"elements");return e?ge.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ge(this).is(":disabled")&&Dt.test(this.nodeName)&&!Lt.test(e)&&(this.checked||!Xe.test(e))}).map(function(e,t){var n=ge(this).val();return null==n?null:Array.isArray(n)?ge.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}});var Ot=/%20/g,qt=/#.*$/,Ft=/([?&])_=[^&]*/,$t=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ht=/^(?:GET|HEAD)$/,It=/^\/\//,Rt={},_t={},Mt="*/".concat("*"),Wt=ne.createElement("a");Wt.href=Ct.href,ge.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Mt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ge.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?K(K(e,ge.ajaxSettings),t):K(ge.ajaxSettings,e)},ajaxPrefilter:J(Rt),ajaxTransport:J(_t),ajax:function(t,n){function r(t,n,r,a){var c,d,p,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),i=void 0,s=a||"",S.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=Z(h,S,r)),b=ee(h,b,S,c),c?(h.ifModified&&(w=S.getResponseHeader("Last-Modified"),w&&(ge.lastModified[o]=w),w=S.getResponseHeader("etag"),w&&(ge.etag[o]=w)),204===t||"HEAD"===h.type?T="nocontent":304===t?T="notmodified":(T=b.state,d=b.data,p=b.error,c=!p)):(p=T,!t&&T||(T="error",t<0&&(t=0))),S.status=t,S.statusText=(n||T)+"",c?m.resolveWith(g,[d,T,S]):m.rejectWith(g,[S,T,p]),S.statusCode(x),x=void 0,f&&v.trigger(c?"ajaxSuccess":"ajaxError",[S,h,c?d:p]),y.fireWith(g,[S,T]),f&&(v.trigger("ajaxComplete",[S,h]),--ge.active||ge.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,s,a,u,c,l,f,d,p,h=ge.ajaxSetup({},n),g=h.context||h,v=h.context&&(g.nodeType||g.jquery)?ge(g):ge.event,m=ge.Deferred(),y=ge.Callbacks("once memory"),x=h.statusCode||{},b={},w={},T="canceled",S={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=$t.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)S.always(e[S.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(m.promise(S),h.url=((t||h.url||Ct.href)+"").replace(It,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(De)||[""],null==h.crossDomain){c=ne.createElement("a");try{c.href=h.url,c.href=c.href,h.crossDomain=Wt.protocol+"//"+Wt.host!=c.protocol+"//"+c.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=ge.param(h.data,h.traditional)),G(Rt,h,n,S),l)return S;f=ge.event&&h.global,f&&0===ge.active++&&ge.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Ht.test(h.type),o=h.url.replace(qt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Ot,"+")):(p=h.url.slice(o.length),h.data&&(o+=(Nt.test(o)?"&":"?")+h.data,delete h.data),h.cache===!1&&(o=o.replace(Ft,"$1"),p=(Nt.test(o)?"&":"?")+"_="+kt++ +p),h.url=o+p),h.ifModified&&(ge.lastModified[o]&&S.setRequestHeader("If-Modified-Since",ge.lastModified[o]),ge.etag[o]&&S.setRequestHeader("If-None-Match",ge.etag[o])),(h.data&&h.hasContent&&h.contentType!==!1||n.contentType)&&S.setRequestHeader("Content-Type",h.contentType),S.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Mt+"; q=0.01":""):h.accepts["*"]);for(d in h.headers)S.setRequestHeader(d,h.headers[d]);if(h.beforeSend&&(h.beforeSend.call(g,S,h)===!1||l))return S.abort();if(T="abort",y.add(h.complete),S.done(h.success),S.fail(h.error),i=G(_t,h,n,S)){if(S.readyState=1,f&&v.trigger("ajaxSend",[S,h]),l)return S;h.async&&h.timeout>0&&(u=e.setTimeout(function(){S.abort("timeout")},h.timeout));try{l=!1,i.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return S},getJSON:function(e,t,n){return ge.get(e,t,n,"json")},getScript:function(e,t){return ge.get(e,void 0,t,"script")}}),ge.each(["get","post"],function(e,t){ge[t]=function(e,n,r,i){return ge.isFunction(n)&&(i=i||r,r=n,n=void 0),ge.ajax(ge.extend({url:e,type:t,dataType:i,data:n,success:r},ge.isPlainObject(e)&&e))}}),ge._evalUrl=function(e){return ge.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},ge.fn.extend({wrapAll:function(e){var t;return this[0]&&(ge.isFunction(e)&&(e=e.call(this[0])),t=ge(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return ge.isFunction(e)?this.each(function(t){ge(this).wrapInner(e.call(this,t))}):this.each(function(){var t=ge(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=ge.isFunction(e);return this.each(function(n){ge(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ge(this).replaceWith(this.childNodes)}),this}}),ge.expr.pseudos.hidden=function(e){return!ge.expr.pseudos.visible(e)},ge.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ge.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},zt=ge.ajaxSettings.xhr();pe.cors=!!zt&&"withCredentials"in zt,pe.ajax=zt=!!zt,ge.ajaxTransport(function(t){var n,r;if(pe.cors||zt&&!t.crossDomain)return{send:function(i,o){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(s in i)a.setRequestHeader(s,i[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?o(0,"error"):o(a.status,a.statusText):o(Bt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),ge.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ge.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){ +return ge.globalEval(e),e}}}),ge.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ge.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=ge(" + + + + + + Navbar + + +
+
+

Cloud API

+ + +
+ +
+ +
+
+
+

REST API 简介

+

API实现程序化交易。

+ +

通过API可以实现以下功能:

+ +
    +
  • 市场行情信息查询(K线、深度、实时成交、24小时行情)
  • +
  • 账户资产信息查询
  • +
  • 下单、撤单操作
  • +
  • 订单信息查询
  • +
+

安全认证

+

目前关于apikey申请和修改,请在“账户 - API管理”页面进行相关操作。其中AccessKey为API 访问密钥,SecretKey为用户对请求进行签名的密钥(仅申请时可见)。

+ +

重要提示:这两个密钥与账号安全紧密相关,无论何时都请勿向其它人透露。

+

合法请求结构

+

基于安全考虑,除行情API 外的 API 请求都必须进行签名运算。一个合法的请求由以下几部分组成:

+ +
    +
  • 方法请求地址 即访问服务器地址:HOST+/api+方法名,比如{HOST}/api/v1/order/orders。

  • +
  • Host的常用格式:www.xxxx.com 如果有host格式相关问题,请咨询Host提供方)

  • +
  • API 访问密钥(AccessKeyId) 您申请的 APIKEY 中的AccessKey。

  • +
  • 签名方法(SignatureMethod) 用户计算签名的基于哈希的协议,此处使用 HmacSHA256。

  • +
  • 签名版本(SignatureVersion) 签名协议的版本,此处使用2。

  • +
  • 时间戳(Timestamp) 您发出请求的时间 (UTC 时区) (UTC 时区) (UTC 时区) 。在查询请求中包含此值有助于防止第三方截取您的请求。如:2017-05-11T16:22:06。再次强调是 (UTC 时区) 。

  • +
  • 必选和可选参数 每个方法都有一组用于定义 API 调用的必需参数和可选参数。可以在每个方法的说明中查看这些参数及其含义。 请一定注意:对于GET请求,每个方法自带的参数都需要进行签名运算; 对于POST请求,每个方法自带的参数不进行签名认证,即POST请求中需要进行签名运算的只有AccessKeyId、SignatureMethod、SignatureVersion、Timestamp四个参数,其它参数放在body中。

  • +
  • 签名 签名计算得出的值,用于确保签名有效和未被篡改。

  • +
+ +

例:

+
https://{HOST}/api/v1/order/orders?
+AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx
+&SignatureMethod=HmacSHA256
+&SignatureVersion=2
+&Timestamp=2017-05-11T15%3A19%3A30
+&order-id=1234567890
+&Signature=calculated value
+

签名运算

+

API 请求在通过 Internet 发送的过程中极有可能被篡改。为了确保请求未被更改,我们会要求用户在每个请求中带上签名(行情 API 除外),来校验参数或参数值在传输途中是否发生了更改。

+

计算签名所需的步骤:

+
    +
  1. 规范要计算签名的请求 +因为使用 HMAC 进行签名计算时,使用不同内容计算得到的结果会完全不同。所以在进行签名计算前,请先对请求进行规范化处理。下面以查询某订单详情请求为例进行说明
  2. +
+
https://{HOST}/api/v1/order/orders?
+AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx
+&SignatureMethod=HmacSHA256
+&SignatureVersion=2
+&Timestamp=2017-05-11T15:19:30
+&order-id=1234567890
+
+
    +
  1. 请求方法(GET 或 POST),后面添加换行符\n。
  2. +
+
GET\n
+
+
    +
  1. 添加小写的访问地址,后面添加换行符\n。
  2. +
+
{host}\n
+
+
    +
  1. 访问方法的路径,后面添加换行符\n。
  2. +
+
/v1/order/orders\n
+
+
    +
  1. 按照ASCII码的顺序对参数名进行排序(使用 UTF-8 编码,且进行了 URI 编码,十六进制字符必须大写,如‘:’会被编码为'%3A',空格被编码为'%20')。 +例如,下面是请求参数的原始顺序,进行过编码后。
  2. +
+
AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx
+order-id=1234567890
+SignatureMethod=HmacSHA256
+SignatureVersion=2
+Timestamp=2017-05-11T15%3A19%3A30
+
+

这些参数会被排序为:

+
AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx
+SignatureMethod=HmacSHA256
+SignatureVersion=2
+Timestamp=2017-05-11T15%3A19%3A30
+order-id=1234567890
+
+
+

按照以上顺序,将各参数使用字符’&’连接。

+
AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2017-05-11T15%3A19%3A30&order-id=1234567890
+
+

组成最终的要进行签名计算的字符串如下:

+
GET\n
+{host}\n
+/v1/order/orders\n
+AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2017-05-11T15%3A19%3A30&order-id=1234567890
+
+

计算签名,将以下两个参数传入加密哈希函数: +要进行签名计算的字符串

+
GET\n
+{host}\n
+/v1/order/orders\n
+AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2017-05-11T15%3A19%3A30&order-id=1234567890
+
+

进行签名的密钥(SecretKey)

+
b0xxxxxx-c6xxxxxx-94xxxxxx-dxxxx
+
+

得到签名计算结果并进行 Base64编码

+
4F65x5A2bLyMWVQj3Aqp+B4w+ivaA7n5Oi2SuYtCJ9o=
+
+

将上述值作为参数Signature的取值添加到 API 请求中。 将此参数添加到请求时,必须将该值进行 URI 编码。

+ +

最终,发送到服务器的 API 请求应该为:

+
https://{host}/v1/order/orders?AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&order-id=1234567890&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2017-05-11T15%3A19%3A30&Signature=4F65x5A2bLyMWVQj3Aqp%2BB4w%2BivaA7n5Oi2SuYtCJ9o%3D
+

请求说明

+
    +
  1. 访问地址:将文档中的{HOST}替换为服务商的host
  2. +
  3. POST请求头信息中必须声明 Content-Type:application/json;GET请求头信息中必须声明 Content-Type:application/x-www-form-urlencoded。(汉语用户建议设置 Accept-Language:zh-cn)
  4. +
  5. 所有请求参数请按照 API 说明进行参数封装。
  6. +
  7. 将封装好参数的 API 请求通过 POST 或 GET 的方式提交到服务器。
  8. +
  9. 服务端处理请求,并返回相应的 JSON 格式结果。
  10. +
  11. 请使用 https 请求。
  12. +
  13. 限制频率(每个接口,只针对交易api,行情api不限制)为10秒100次。
  14. +
  15. 查询资产详情方法调用顺序:查询当前用户的所有账户->查询指定账户的余额
  16. +
+

API Reference

+ + + +

接口列表

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
接口数据类型请求方法类型描述需要验签子账号可用
市场行情GET /market/history/klineGETK线NY
市场行情GET /market/detail/mergedGET滚动24小时交易和最优报价聚合行情(单个symbol)NY
市场行情GET /market/tickersGET全部symbol的交易行情NY
市场行情GET /market/depthGET市场深度行情(单个symbol)NY
市场行情GET /market/tradeGET单个symbol最新成交记录NY
市场行情GET /market/history/tradeGET单个symbol批量成交记录NY
交易品种信息GET /v1/common/symbolsGET交易品种的计价货币和报价精度NY
交易品种信息GET /v1/common/currencysGET交易币种列表NY
系统信息GET /v1/common/timestampGET查询当前系统时间NY
账户信息GET /v1/account/accountsGET查询用户的所有账户状态YY
账户信息GET /v1/account/accounts/{account-id}/balanceGET查询指定账户余额YY
交易POST/v1/order/orders/placePOST下单YY
交易POST/v1/order/orders/{order-id}/submitcancelPOST按order-id撤销一个订单YY
交易POST /v1/order/orders/batchcancelPOST按order_id, 批量撤销订单(up to 50)YY
交易POST /v1/order/orders/batchCancelOpenOrdersPOST按订单条件批量撤销订单(up to 100)YY
用户订单信息GET /v1/order/orders/{order-id}GET根据order-id查询订单详情YY
用户订单信息GET /v1/order/orders/{order-id}/matchresultsGET根据order-id查询订单的成交明细YY
用户订单信息GET /v1/order/ordersGET查询用户当前委托、或历史委托订单 (up to 100)YY
用户订单信息GET /v1/order/matchresultsGET查询用户当前成交、历史成交YY
用户订单信息GET /v1/order/openOrdersGET查询用户当前未成交订单 (up to 500)YY
充提币POST /v1/dw/withdraw/api/createPOST申请提币YN
充提币POST /v1/dw/withdraw-virtual/{withdraw-id}/cancelPOST撤销提币申请YN
充提币GET /v1/query/deposit-withdrawGET查询充提记录YN
+

市场行情

+

在调用行情接口时,请添加get参数,key为AccessKeyId ,value为网页上申请的apikey的accesskey 。

+ +

例:

+
https://{HOST}/market/history/kline?period=1day&size=200&symbol=btcusdt&AccessKeyId=fff-xxx-ssss-kkk
+
+

GET /market/history/kline 获取K线数据

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
periodtruestringK线类型1min, 5min, 15min, 30min, 60min, 1day, 1mon, 1week, 1year
sizefalseinteger获取数量150[1,2000]
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
statustruestring请求处理结果"ok" , "error"
tstruenumber响应生成时间点,单位:毫秒
ticktrueobjectKLine 数据
chtruestring数据所属的 channel,格式: market.$symbol.kline.$period
+ +

data 说明:

+
  "data": [
+{
+    "id": K线id,
+    "amount": 成交量,
+    "count": 成交笔数,
+    "open": 开盘价,
+    "close": 收盘价,当K线为最晚的一根时,是最新成交价
+    "low": 最低价,
+    "high": 最高价,
+    "vol": 成交额, 即 sum(每一笔成交价 * 该笔的成交量)
+  }
+]
+
+

请求响应示例:

+
/* GET /market/history/kline?period=1day&size=200&symbol=btcusdt */
+{
+  "status": "ok",
+  "ch": "market.btcusdt.kline.1day",
+  "ts": 1499223904680,
+  "data": [
+{
+    "id": 1499184000,
+    "amount": 37593.0266,
+    "count": 0,
+    "open": 1935.2000,
+    "close": 1879.0000,
+    "low": 1856.0000,
+    "high": 1940.0000,
+    "vol": 71031537.97866500
+  },
+// more data here
+]
+}
+
+/* GET /market/history/kline?period=not-exist&size=200&symbol=ethusdt */
+{
+  "ts": 1490758171271,
+  "status": "error",
+  "err-code": "invalid-parameter",
+  "err-msg": "invalid period"
+}
+
+/* GET /market/history/kline?period=1day&size=not-exist&symbol=ethusdt */
+{
+  "ts": 1490758221221,
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "invalid size, valid range: [1,2000]"
+}
+
+/* GET /market/history/kline?period=1day&size=200&symbol=not-exist */
+{
+  "ts": 1490758171271,
+  "status": "error",
+  "err-code": "invalid-parameter",
+  "err-msg": "invalid symbol"
+}
+

GET /market/detail/merged 获取聚合行情(Ticker)

+

请求参数:

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
statustruestring请求处理结果"ok" , "error"
tstruenumber响应生成时间点,单位:毫秒
ticktrueobjectK线数据
chtruestring数据所属的 channel,格式: market.$symbol.detail.merged
+ +

tick 说明:

+
  "tick": {
+    "id": K线id,
+    "amount": 成交量,
+    "count": 成交笔数,
+    "open": 开盘价,
+    "close": 收盘价,当K线为最晚的一根时,是最新成交价
+    "low": 最低价,
+    "high": 最高价,
+    "vol": 成交额, 即 sum(每一笔成交价 * 该笔的成交量)
+    "bid": [买1价,买1量],
+    "ask": [卖1价,卖1量]
+  }
+
+
+

请求响应示例:

+
/* GET /market/detail/merged?symbol=ethusdt */
+{
+"status":"ok",
+"ch":"market.ethusdt.detail.merged",
+"ts":1499225276950,
+"tick":{
+  "id":1499225271,
+  "ts":1499225271000,
+  "close":1885.0000,
+  "open":1960.0000,
+  "high":1985.0000,
+  "low":1856.0000,
+  "amount":81486.2926,
+  "count":42122,
+  "vol":157052744.85708200,
+  "ask":[1885.0000,21.8804],
+  "bid":[1884.0000,1.6702]
+  }
+}
+
+/* GET /market/detail/merged?symbol=not-exist */
+{
+  "ts": 1490758171271,
+  "status": "error",
+  "err-code": "invalid-parameter",
+  "err-msg": "invalid symbol”
+}
+
+

GET /market/tickers

{  
+    "status":"ok",
+    "ts":1510885463001,
+    "data":[  
+        {  
+            "open":0.044297,      // 日K线 开盘价
+            "close":0.042178,     // 日K线 收盘价
+            "low":0.040110,       // 日K线 最低价
+            "high":0.045255,      // 日K线 最高价
+            "amount":12880.8510,  // 24小时成交量
+            "count":12838,        // 24小时成交笔数
+            "vol":563.0388715740, // 24小时成交额
+            "symbol":"ethbtc"     // 交易对
+        },
+        {  
+            "open":0.008545,
+            "close":0.008656,
+            "low":0.008088,
+            "high":0.009388,
+            "amount":88056.1860,
+            "count":16077,
+            "vol":771.7975953754,
+            "symbol":"ltcbtc"
+        }
+    ]
+}
+
+

注:当交易对尚未产生成交时,返回的数据里面 open close high low amount count vol 的值都为 null

+

GET /market/depth 获取 Market Depth 数据

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestringDepth 类型step0, step1, step2, step3, step4, step5(合并深度0-5);step0时,不合并深度
+ +
    +
  • 用户选择“合并深度”时,一定报价精度内的市场挂单将予以合并显示。合并深度仅改变显示方式,不改变实际成交价格。
  • +
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
statustruestring"ok" 或者 "error"
tstruenumber响应生成时间点,单位:毫秒
ticktrueobjectDepth 数据
chtruestring数据所属的 channel,格式: market.$symbol.depth.$type
+ +

tick 说明:

+
  "tick": {
+    "id": 消息id,
+    "ts": 消息生成时间,单位:毫秒,
+    "bids": 买盘,[price(成交价), amount(成交量)], 按price降序,
+    "asks": 卖盘,[price(成交价), amount(成交量)], 按price升序
+  }
+
+

请求响应示例:

+
/* GET /market/depth?symbol=ethusdt&type=step1 */
+{
+  "status": "ok",
+  "ch": "market.btcusdt.depth.step1",
+  "ts": 1489472598812,
+  "tick": {
+    "id": 1489464585407,
+    "ts": 1489464585407,
+    "bids": [
+      [7964, 0.0678], // [price, amount]
+      [7963, 0.9162],
+      [7961, 0.1],
+      [7960, 12.8898],
+      [7958, 1.2],
+      [7955, 2.1009],
+      [7954, 0.4708],
+      [7953, 0.0564],
+      [7951, 2.8031],
+      [7950, 13.7785],
+      [7949, 0.125],
+      [7948, 4],
+      [7942, 0.4337],
+      [7940, 6.1612],
+      [7936, 0.02],
+      [7935, 1.3575],
+      [7933, 2.002],
+      [7932, 1.3449],
+      [7930, 10.2974],
+      [7929, 3.2226]
+    ],
+    "asks": [
+      [7979, 0.0736],
+      [7980, 1.0292],
+      [7981, 5.5652],
+      [7986, 0.2416],
+      [7990, 1.9970],
+      [7995, 0.88],
+      [7996, 0.0212],
+      [8000, 9.2609],
+      [8002, 0.02],
+      [8008, 1],
+      [8010, 0.8735],
+      [8011, 2.36],
+      [8012, 0.02],
+      [8014, 0.1067],
+      [8015, 12.9118],
+      [8016, 2.5206],
+      [8017, 0.0166],
+      [8018, 1.3218],
+      [8019, 0.01],
+      [8020, 13.6584]
+    ]
+  }
+}
+
+/* GET /market/depth?symbol=ethusdt&type=not-exist */
+{
+  "ts": 1490759358099,
+  "status": "error",
+  "err-code": "invalid-parameter",
+  "err-msg": "invalid type"
+}
+

GET /market/trade 获取 Trade Detail 数据

+

请求参数:

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
statustruestring"ok" 或者 "error"
tstruenumber响应生成时间点,单位:毫秒
ticktrueobjectTrade 数据
chtruestring数据所属的 channel,格式: market.$symbol.trade.detail
+ +

tick 说明:

+
  "tick": {
+    "id": 消息id,
+    "ts": 最新成交时间,
+    "data": [
+      {
+        "id": 成交id,
+        "price": 成交价钱,
+        "amount": 成交量,
+        "direction": 主动成交方向,
+        "ts": 成交时间
+      }
+    ]
+  }
+
+

请求响应例子:

+
/* GET /market/trade?symbol=ethusdt */
+{
+  "status": "ok",
+  "ch": "market.btcusdt.trade.detail",
+  "ts": 1489473346905,
+  "tick": {
+    "id": 600848670,
+    "ts": 1489464451000,
+    "data": [
+      {
+        "id": 600848670,
+        "price": 7962.62,
+        "amount": 0.0122,
+        "direction": "buy",
+        "ts": 1489464451000
+      }
+    ]
+  }
+}
+
+/* GET /market/trade?symbol=not-exist */
+{
+  "ts": 1490759506429,
+  "status": "error",
+  "err-code": "invalid-parameter",
+  "err-msg": "invalid symbol"
+}
+

GET /market/history/trade 批量获取最近的交易记录

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
sizefalseinteger获取交易记录的数量1[1, 2000]
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
statustruestringok, error
chtruestring数据所属的 channel,格式: market.$symbol.trade.detail
tstrueinteger发送时间
datatrueobject成交记录
+ +

data 说明:

+
  "data": {
+    "id": 消息id,
+    "ts": 最新成交时间,
+    "data": [
+      {
+        "id": 成交id,
+        "price": 成交价,
+        "amount": 成交量,
+        "direction": 主动成交方向,
+        "ts": 成交时间
+      }
+    ]
+  }
+
+

请求响应例子:

+
/* GET /market/history/trade?symbol=ethusdt */
+{
+    "status": "ok",
+    "ch": "market.ethusdt.trade.detail",
+    "ts": 1502448925216,
+    "data": [
+        {
+            "id": 31459998,
+            "ts": 1502448920106,
+            "data": [
+                {
+                    "id": 17592256642623,
+                    "amount": 0.04,
+                    "price": 1997,
+                    "direction": "buy",
+                    "ts": 1502448920106
+                }
+            ]
+        }
+    ]
+}
+

公共API

GET /v1/common/symbols 查询支持的所有交易对及精度

+

请求参数: +(无)

+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
base-currencytruestring基础币种
quote-currencytruestring计价币种
price-precisiontruestring价格精度位数(0为个位)
amount-precisiontruestring数量精度位数(0为个位)
symbol-partitiontruestring交易区main主区,innovation创新区,bifurcation分叉区
+ +

请求响应例子:

+
/* GET /v1/common/symbols */
+{
+  "status": "ok",
+  "data": [
+    {
+      "base-currency": "eth",
+      "quote-currency": "usdt",
+      "symbol": "ethusdt"
+    }
+    {
+      "base-currency": "etc",
+      "quote-currency": "usdt",
+      "symbol": "etcusdt"
+    }
+  ]
+}
+

GET /v1/common/currencys 查询支持的所有币种

+

请求参数:

+ +

(无)

+ +

响应数据:

+
currency list
+
+

请求响应例子:

+
/* GET /v1/common/currencys */
+{
+  "status": "ok",
+  "data": [
+    "usdt",
+    "eth",
+    "etc"
+  ]
+}
+

GET /v1/common/timestamp 查询系统当前时间

+

请求参数:

+ +

(无)

+ +

响应数据:

+
系统时间戳
+
+

请求响应例子

+
/* GET /v1/common/timestamp */
+{
+  "status": "ok",
+  "data": 1494900087029
+}
+

用户资产API

GET /v1/account/accounts

+

请求参数:

+ +

+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
idtruelongaccount-id
statetruestring账户状态working:正常, lock:账户被锁定
typetruestring账户类型spot:现货账户
+ +

请求响应例子:

+
/* GET /v1/account/accounts */
+{
+  "status": "ok",
+  "data": [
+    {
+      "id": 100009,
+      "type": "spot",
+      "state": "working",
+      "user-id": 1000
+    }
+  ]
+}
+

GET /v1/account/accounts/{account-id}/balance 查询指定账户的余额

+

请求参数

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
account-idtruestringaccount-id,填在 path 中,可用 GET /v1/account/accounts 获取
+ +
    +
  • 如果不知道自己的账户ID,请使用 GET /v1/account/accounts 查询
  • +
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
idtruelong账户 ID
statetruestring账户状态working:正常 lock:账户被锁定
typetruestring账户类型spot:现货账户
listfalseArray子账户数组
+ +

list字段说明

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
balancetruestring余额
currencytruestring币种
typetruestring类型trade: 交易余额,frozen: 冻结余额
+ +

请求响应例子:

+
/* GET /v1/account/accounts/'account-id'/balance */
+{
+  "status": "ok",
+  "data": {
+    "id": 100009,
+    "type": "spot",
+    "state": "working",
+    "list": [
+      {
+        "currency": "usdt",
+        "type": "trade",
+        "balance": "500009195917.4362872650"
+      },
+      {
+        "currency": "usdt",
+        "type": "frozen",
+        "balance": "328048.1199920000"
+      },
+     {
+        "currency": "etc",
+        "type": "trade",
+        "balance": "499999894616.1302471000"
+      },
+      {
+        "currency": "etc",
+        "type": "frozen",
+        "balance": "9786.6783000000"
+      }
+     {
+        "currency": "eth",
+        "type": "trade",
+        "balance": "499999894616.1302471000"
+      },
+      {
+        "currency": "eth",
+        "type": "frozen",
+        "balance": "9786.6783000000"
+      }
+    ],
+    "user-id": 1000
+  }
+}
+

交易API

POST /v1/order/orders/place 下单

请求参数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
account-idtruestring账户 ID,使用accounts方法获得。币币交易使用‘spot’账户的accountid
amounttruestring限价单表示下单数量,市价买单时表示买多少钱,市价卖单时表示卖多少币
pricefalsestring下单价格,市价单不传该参数
sourcefalsestring订单来源api
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestring订单类型buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单, buy-limit-maker, sell-limit-maker(详细说明见下)
+ +

buy-limit-maker

+ +

当“下单价格”>=“市场最低卖出价”,订单提交后,系统将拒绝接受此订单;

+ +

当“下单价格”<“市场最低卖出价”,提交成功后,此订单将被系统接受。

+ +

sell-limit-maker

+ +

当“下单价格”<=“市场最高买入价”,订单提交后,系统将拒绝接受此订单;

+ +

当“下单价格”>“市场最高买入价”,提交成功后,此订单将被系统接受。

+

响应数据:

+ + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datafalsestring订单ID
+

请求响应例子:

/* POST /v1/order/orders/place */
+{
+   "account-id": "100009",
+   "amount": "10.1",
+   "price": "100.1",
+   "source": "api",
+   "symbol": "ethusdt",
+   "type": "buy-limit"
+}
+{
+  "status": "ok",
+  "data": "59378"
+}
+

GET /v1/order/openOrders 获取所有当前帐号下未成交订单

请求参数:

+

“account-id” 和 “symbol” 需同时指定或者二者都不指定。如果二者都不指定,返回最多500条尚未成交订单,按订单号降序排列。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
account-idtruestring账号ID
symboltruestring交易对单个交易对字符串,缺省将返回所有符合条件尚未成交订单
sidefalsestring主动交易方向“buy”或者“sell”,缺省将返回所有符合条件尚未成交订单
sizefalseint所需返回记录数10[0,500]
+

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
idtruelong订单号
symboltruestring交易对
pricetruestring下单价格
created-attrueint下单时间(毫秒)Unix时间戳
typetruestring订单类型buy-market, sell-market, buy-limit, sell-limit, buy-ioc, sell-ioc
filled-amounttruestring下单时间(毫秒)对于非“部分成交”订单,此字段为 0
filled-cash-amounttruestring已成交部分的订单价格(=已成交单量x下单价格)对于非“部分成交”订单,此字段为 0
filled-feestruestring已成交部分所收取手续费对于非“部分成交”订单,此字段为 0
sourcetruestring订单来源sys, web, api, app
statetruestring此订单状态submitted(已提交), partial-filled(部分成交), cancelling(正在取消)
+

响应示例:

/* GET /v1/orders/openOrders */
+{
+  "status": "ok",
+  "data": [
+    {
+      "id": 5454937,
+      "symbol": "ethusdt",
+      "account-id": 30925,
+      "amount": "1.000000000000000000",
+      "price": "0.453000000000000000",
+      "created-at": 1530604762277,
+      "type": "sell-limit",
+      "filled-amount": "0.0",
+      "filled-cash-amount": "0.0",
+      "filled-fees": "0.0",
+      "source": "web",
+      "state": "submitted"
+    }
+  ]
+}
+

POST /v1/order/orders/{order-id}/submitcancel 申请撤销一个订单请求

+

请求参数:

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
order-idtruestring订单ID,填在path中
+ +

响应数据:

+ + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datatruestring订单 ID
+ +

请求响应例子:

+
/* POST /v1/order/orders/{order-id}/submitcancel */
+{
+  "status": "ok",//注意,返回OK表示撤单请求成功。订单是否撤销成功请调用订单查询接口查询该订单状态
+  "data": "59378"
+}
+

POST /v1/order/orders/batchcancel 批量撤销订单

+

请求参数:

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
order-idstruelist撤销订单ID列表单次不超过50个订单id
+ +

响应数据:

+ + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datafalsemap撤单结果
+ +

请求响应例子:

+
/* POST /v1/order/orders/batchcancel */
+{
+  "order-ids": [
+    "1", "2", "3"
+  ]
+}
+
+
+
{
+  "status": "ok",
+  "data": {
+    "success": [
+      "1",
+      "3"
+    ],
+    "failed": [
+      {
+        "err-msg": "记录无效",
+        "order-id": "2",
+        "err-code": "base-record-invalid"
+      }
+    ]
+  }
+}
+

POST /v1/order/orders/batchCancelOpenOrders 批量取消符合条件的订单

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
account-idtruestring账户ID
symbolfalsestring交易对单个交易对字符串,缺省将返回所有符合条件尚未成交订单
sidefalsestring主动交易方向“buy”或“sell”,缺省将返回所有符合条件尚未成交订单
sizefalseint所需返回记录数100[0,100]
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
success-counttrueint成功取消的订单数
failed-counttrueint取消失败的订单数
next-idtruelong下一个符合取消条件的订单号
+

响应示例:

/* POST /v1/order/orders/batchCancelOpenOrders */
+{
+  "status": "ok",
+  "data": {
+    "success-count": 2,
+    "failed-count": 0,
+    "next-id": 5454600
+  }
+}
+

GET /v1/order/orders/{order-id} 查询某个订单详情

+

请求参数:

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
order-idtruestring订单ID,填在path中
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
account-idtruelong账户 ID
amounttruestring订单数量
canceled-atfalselong订单撤销时间
created-attruelong订单创建时间
field-amounttruestring已成交数量
field-cash-amounttruestring已成交总金额
field-feestruestring已成交手续费(买入为币,卖出为钱)
finished-atfalselong订单变为终结态的时间,不是成交时间,包含“已撤单”状态
idtruelong订单ID
pricetruestring订单价格
sourcetruestring订单来源api
statetruestring订单状态submitting , submitted 已提交, partial-filled 部分成交, partial-canceled 部分成交撤销, filled 完全成交, canceled 已撤销
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestring订单类型buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
+ +

请求响应例子:

+
/* GET /v1/order/orders/{order-id} */
+{
+  "status": "ok",
+  "data": {
+    "id": 59378,
+    "symbol": "ethusdt",
+    "account-id": 100009,
+    "amount": "10.1000000000",
+    "price": "100.1000000000",
+    "created-at": 1494901162595,
+    "type": "buy-limit",
+    "field-amount": "10.1000000000",
+    "field-cash-amount": "1011.0100000000",
+    "field-fees": "0.0202000000",
+    "finished-at": 1494901400468,
+    "user-id": 1000,
+    "source": "api",
+    "state": "filled",
+    "canceled-at": 0,
+    "exchange": "xxx",
+    "batch": ""
+  }
+}
+

GET /v1/order/orders/{order-id}/matchresults 查询某个订单的成交明细

+

请求参数:

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
order-idtruestring订单ID,填在path中
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
created-attruelong成交时间
filled-amounttruestring成交数量
filled-feestruestring成交手续费
idtruelong订单成交记录ID
match-idtruelong撮合ID
order-idtruelong订单 ID
pricetruestring成交价格
sourcetruestring订单来源api
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestring订单类型buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
+ +

请求响应例子:

+
/* GET /v1/order/orders/{order-id}/matchresults */
+{
+  "status": "ok",
+  "data": [
+    {
+      "id": 29553,
+      "order-id": 59378,
+      "match-id": 59335,
+      "symbol": "ethusdt",
+      "type": "buy-limit",
+      "source": "api",
+      "price": "100.1000000000",
+      "filled-amount": "9.1155000000",
+      "filled-fees": "0.0182310000",
+      "created-at": 1494901400435
+    }
+  ]
+}
+

GET /v1/order/orders 查询当前委托、历史委托

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typesfalsestring查询的订单类型组合,使用','分割buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
start-datefalsestring查询开始日期, 日期格式yyyy-mm-dd
end-datefalsestring查询结束日期, 日期格式yyyy-mm-dd
statestruestring查询的订单状态组合,使用','分割submitted 已提交, partial-filled 部分成交, partial-canceled 部分成交撤销, filled 完全成交, canceled 已撤销
fromfalsestring查询起始 ID
directfalsestring查询方向prev 向前,next 向后
sizefalsestring查询记录大小
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
account-idtruelong账户 ID
amounttruestring订单数量
canceled-atfalselong接到撤单申请的时间
created-attruelong订单创建时间
field-amounttruestring已成交数量
field-cash-amounttruestring已成交总金额
field-feestruestring已成交手续费(买入为币,卖出为钱)
finished-atfalselong最后成交时间
idtruelong订单ID
pricetruestring订单价格
sourcetruestring订单来源api
statetruestring订单状态submitting , submitted 已提交, partial-filled 部分成交, partial-canceled 部分成交撤销, filled 完全成交, canceled 已撤销
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestring订单类型submit-cancel:已提交撤单申请 ,buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
+ +

请求响应例子:

+
/* GET /v1/order/orders */
+{
+  "status": "ok",
+  "data": [
+    {
+      "id": 59378,
+      "symbol": "ethusdt",
+      "account-id": 100009,
+      "amount": "10.1000000000",
+      "price": "100.1000000000",
+      "created-at": 1494901162595,
+      "type": "buy-limit",
+      "field-amount": "10.1000000000",
+      "field-cash-amount": "1011.0100000000",
+      "field-fees": "0.0202000000",
+      "finished-at": 1494901400468,
+      "user-id": 1000,
+      "source": "api",
+      "state": "filled",
+      "canceled-at": 0,
+      "exchange": "xxx",
+      "batch": ""
+    }
+  ]
+}
+

GET /v1/order/matchresults 查询当前成交、历史成交

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typesfalsestring查询的订单类型组合,使用','分割buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
start-datefalsestring查询开始日期, 日期格式yyyy-mm-dd-61 days[-61day, now]
end-datefalsestring查询结束日期, 日期格式yyyy-mm-ddNow[start-date, now]
fromfalsestring查询起始 ID订单成交记录ID(最大值)
directfalsestring查询方向默认next, 成交记录ID由大到小排序prev 向前,next 向后
sizefalsestring查询记录大小100<=100
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
created-attruelong成交时间
filled-amounttruestring成交数量
filled-feestruestring成交手续费
idtruelong订单成交记录ID
match-idtruelong撮合ID
order-idtruelong订单 ID
pricetruestring成交价格
sourcetruestring订单来源api
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestring订单类型buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
+ +

请求响应例子:

+
/* GET /v1/orders/matchresults */
+{
+  "status": "ok",
+  "data": [
+    {
+      "id": 29555,
+      "order-id": 59378,
+      "match-id": 59335,
+      "symbol": "ethusdt",
+      "type": "buy-limit",
+      "source": "api",
+      "price": "100.1000000000",
+      "filled-amount": "0.9845000000",
+      "filled-fees": "0.0019690000",
+      "created-at": 1494901400487
+    }
+  ]
+}
+

虚拟币提现API

+
+

仅支持提现到【Pro站提币地址列表中的提币地址】

+
+

POST /v1/dw/withdraw/api/create 申请提现虚拟币

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
addresstruestring提现地址
amounttruestring提币数量
currencytruestring资产类型btc, ltc, bch, eth, etc ...(支持的币种)
feefalsestring转账手续费
addr-tagfalsestring虚拟币共享地址tag,适用于xrp,xem,bts,steem,eos,xmr格式, "123"类的整数字符串
+ +

响应数据:

+ + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datafalselong提现ID
+ +

请求响应例子:

+
/* POST /v1/dw/withdraw/api/create*/
+{
+  "address": "0xde709f2102306220921060314715629080e2fb77",
+  "amount": "0.05",
+  "currency": "eth",
+  "fee": "0.01"
+}
+{
+  "status": "ok",
+  "data": 700
+}
+

POST /v1/dw/withdraw-virtual/{withdraw-id}/cancel 申请取消提现虚拟币

+

请求参数:

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
withdraw-idtruelong提现ID,填在path中
+ +

响应数据:

+ + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datafalselong提现 ID
+ +

请求响应例子:

+
/* POST /v1/dw/withdraw-virtual/{withdraw-id}/cancel */
+{
+  "status": "ok",
+  "data": 700
+}
+

GET /v1/query/deposit-withdraw 查询虚拟币充提记录

+

请求参数:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
currencytruestring币种
typetruestring'deposit' or 'withdraw'
fromfalsestring查询起始 ID
sizefalsestring查询记录大小
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
idtruelong
typetruelong类型'deposit' 'withdraw'
currencytruestring币种
tx-hashtruestring交易哈希
amounttruelong个数
addresstruestring地址
address-tagtruestring地址标签
feetruelong手续费
statetruestring状态状态参见下表
created-attruelong发起时间
updated-attruelong最后更新时间
+
虚拟币提现状态定义:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
状态描述
submitted已提交
reexamine审核中
canceled已撤销
pass审批通过
reject审批拒绝
pre-transfer处理中
wallet-transfer已汇出
wallet-reject钱包拒绝
confirmed区块已确认
confirm-error区块确认错误
repealed已撤销
+
虚拟币充值状态定义:
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
状态描述
unknown状态未知
confirming确认中
confirmed确认中
safe已完成
orphan待确认
+ +

请求响应例子:

+
/* GET /v1/query/deposit-withdraw?currency=xrp&type=deposit&from=5&size=12 */
+
+{
+
+    "status": "ok",
+    "data": [
+      {
+        "id": 1171,
+        "type": "deposit",
+        "currency": "xrp",
+        "tx-hash": "ed03094b84eafbe4bc16e7ef766ee959885ee5bcb265872baaa9c64e1cf86c2b",
+        "amount": 7.457467,
+        "address": "rae93V8d2mdoUQHwBDBdM4NHCMehRJAsbm",
+        "address-tag": "100040",
+        "fee": 0,
+        "state": "safe",
+        "created-at": 1510912472199,
+        "updated-at": 1511145876575
+      },
+     ...
+    ]
+}
+

借贷交易API (重要:如果使用借贷资产交易,请在下单接口/v1/order/orders/place请求参数source中填写‘margin-api’)

+

目前仅支持 USDT 交易区和 BTC 交易区部分交易对

+

POST /v1/dw/transfer-in/margin 现货账户划入至借贷账户

POST /v1/dw/transfer-out/margin 借贷账户划出至现货账户

+

请求参数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对
currencytruestring币种
amounttruestring金额
+ +

响应数据:

+ + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datatruelong划转ID
+ +

请求响应例子:

+
/* POST /v1/dw/transfer-in/margin
+{
+  "symbol": "ethusdt",
+  "currency": "eth",
+  "amount": "1.0"
+} */
+{
+  "status": "ok",
+  "data": 1000
+}
+

POST /v1/margin/orders 申请借贷

+

请求参数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对
currencytruestring币种
amounttruestring金额
+ +

响应数据:

+ + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datatruelong订单号
+ +

请求响应例子:

+
/* POST /v1/margin/orders {
+   "amount": "10.1",
+   "symbol": "ethusdt",
+   "currency": "eth"
+} */
+{
+  "status": "ok",
+  "data": 59378
+}
+

POST /v1/margin/orders/{order-id}/repay 归还借贷

+

请求参数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
order-idtruelong借贷订单 ID,写在path中
amounttruestring还款量
+ +

响应数据:

+ + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
datatruelong订单号
+ +

请求响应例子:

+
/* POST /v1/margin/orders/59378/repay {
+   "amount": "10.1"
+}*/
+{
+  "status": "ok",
+  "data": 59378
+}
+

GET /v1/margin/loan-orders 借贷订单

+

请求参数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对
start-datefalsestring查询开始日期, 日期格式yyyy-mm-dd
end-datefalsestring查询结束日期, 日期格式yyyy-mm-dd
statesfalsestring状态
fromfalsestring查询起始 ID
directfalsestring查询方向prev 向前,next 向后
sizefalsestring查询记录大小
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
idtruelong订单号
user-idtruelong用户ID
account-idtruelong账户ID
symboltruestring交易对
currencytruestring币种
loan-amounttruestring借贷本金总额
loan-balancetruestring未还本金
interest-ratetruestring利率
interest-amounttruestring利息总额
interest-balancetruestring未还利息
created-attruelong借贷发起时间
accrued-attruelong最近一次计息时间
statetruestring订单状态created 未放款,accrual 已放款,cleared 已还清,invalid 异常
+ +

请求响应例子:

+
/* GET /v1/margin/loan-orders?symbol=btcusdt
+
+*/
+{
+  "status": "ok",
+  "data": [
+    {
+      "loan-balance": "0.100000000000000000",
+      "interest-balance": "0.000200000000000000",
+      "interest-rate": "0.002000000000000000",
+      "loan-amount": "0.100000000000000000",
+      "accrued-at": 1511169724531,
+      "interest-amount": "0.000200000000000000",
+      "symbol": "ethbtc",
+      "currency": "btc",
+      "id": 394,
+      "state": "accrual",
+      "account-id": 17747,
+      "user-id": 119913,
+      "created-at": 1511169724531
+    }
+  ]
+}
+
+

GET /v1/margin/accounts/balance 借贷账户详情

+

请求参数

+ + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symbolfalsestring交易对,作为get参数
+ +

响应数据:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须数据类型描述取值范围
symboltruestring交易对
statetruestring账户状态working,fl-sys,fl-mgt,fl-end
risk-ratetrueobject风险率
fl-pricetruestring爆仓价
listtruearray子账户列表
+ +

请求响应例子:

+
/* GET /v1/margin/accounts/balance?symbol=btcusdt
+
+*/
+{
+    "status": "ok",
+    "data": [
+        {
+            "id": 18264,
+            "type": "margin",
+            "state": "working",
+            "symbol": "btcusdt",
+            "fl-price": "0",
+            "fl-type": "safe",
+            "risk-rate": "475.952571086994250554",
+            "list": [
+                {
+                    "currency": "btc",
+                    "type": "trade",
+                    "balance": "1168.533000000000000000"
+                },
+                {
+                    "currency": "btc",
+                    "type": "frozen",
+                    "balance": "0.000000000000000000"
+                },
+                {
+                    "currency": "btc",
+                    "type": "loan",
+                    "balance": "-2.433000000000000000"
+                },
+                {
+                    "currency": "btc",
+                    "type": "interest",
+                    "balance": "-0.000533000000000000"
+                },
+                {
+                    "currency": "usdt",
+                    "type": "trade",//借贷账户可用
+                    "balance": "1313.534000000000000000"
+                },
+                {
+                    "currency": "usdt",
+                    "type": "frozen",//借贷账户冻结
+                    "balance": "0.000000000000000000"
+                },
+                {
+                    "currency": "usdt",
+                    "type": "loan",//已借贷
+                    "balance": "-140.234099999999999920"
+                },
+                {
+                    "currency": "usdt",
+                    "type": "interest",//usdt待还利息
+                    "balance": "-0.931206660000000000"
+                },
+                {
+                    "currency": "btc",
+                    "type": "transfer-out-available",//可转btc
+                    "balance": "1163.872174670000000000"
+                },
+                { "currency": "usdt",
+                    "type": "transfer-out-available",//可转usdt
+                    "balance": "1313.534000000000000000"
+                },
+                {
+                    "currency": "btc",
+                    "type": "loan-available",//可借btc
+                    "balance": "8161.876538350676000000"
+                },
+                {
+                    "currency": "usdt",
+                    "type": "loan-available",//可借usdt
+                    "balance": "49859.765900000000000080"
+                }
+            ]
+        }
+    ]
+}
+
+

错误码

行情 API 错误码

+ + + + + + + + + + + + + + + + + + +
错误码描述
bad-request错误请求
invalid-parameter参数错
invalid-command指令错
+ +

code 的具体解释, 参考对应的 err-msg.

+

交易 API 错误码

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
错误码描述
base-symbol-error交易对不存在
base-currency-error币种不存在
base-date-error错误的日期格式
account-transfer-balance-insufficient-error余额不足无法冻结
bad-argument无效参数
api-signature-not-validAPI签名错误
gateway-internal-error系统繁忙,请稍后再试
security-require-assets-password需要输入资金密码
audit-failed下单失败
ad-ethereum-addresss请输入有效的以太坊地址
order-accountbalance-error账户余额不足
order-limitorder-price-error限价单下单价格超出限制
order-limitorder-amount-error限价单下单数量超出限制
order-orderprice-precision-error下单价格超出精度限制
order-orderamount-precision-error下单数量超过精度限制
order-marketorder-amount-error下单数量超出限制
order-queryorder-invalid查询不到此条订单
order-orderstate-error订单状态错误
order-datelimit-error查询超出时间限制
order-update-error订单更新出错
+ +


+
+
+
+

+ +
+
+
+ shell +
+
+
+ + + diff --git a/gh-pages/v1/rest/javascripts/all.js b/gh-pages/v1/rest/javascripts/all.js new file mode 100644 index 0000000..05af78b --- /dev/null +++ b/gh-pages/v1/rest/javascripts/all.js @@ -0,0 +1,131 @@ +!function(){if("ontouchstart"in window){var e,t,n,r,i,o,s={};e=function(e,t){return Math.abs(e[0]-t[0])>5||Math.abs(e[1]-t[1])>5},t=function(e){this.startXY=[e.touches[0].clientX,e.touches[0].clientY],this.threshold=!1},n=function(t){return!this.threshold&&void(this.threshold=e(this.startXY,[t.touches[0].clientX,t.touches[0].clientY]))},r=function(t){if(!this.threshold&&!e(this.startXY,[t.changedTouches[0].clientX,t.changedTouches[0].clientY])){var n=t.changedTouches[0],r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),r.simulated=!0,t.target.dispatchEvent(r)}},i=function(e){var t=Date.now(),n=t-s.time,r=e.clientX,i=e.clientY,a=[Math.abs(s.x-r),Math.abs(s.y-i)],u=o(e.target,"A")||e.target,c=u.nodeName,l="A"===c,f=window.navigator.standalone&&l&&e.target.getAttribute("href");return s.time=t,s.x=r,s.y=i,!((!e.simulated&&(n<500||n<1500&&a[0]<50&&a[1]<50)||f)&&(e.preventDefault(),e.stopPropagation(),!f))&&(f&&(window.location=u.getAttribute("href")),void(u&&u.classList&&(u.classList.add("energize-focus"),window.setTimeout(function(){u.classList.remove("energize-focus")},150))))},o=function(e,t){for(var n=e;n!==document.body;){if(!n||n.nodeName===t)return n;n=n.parentNode}return null},document.addEventListener("touchstart",t,!1),document.addEventListener("touchmove",n,!1),document.addEventListener("touchend",r,!1),document.addEventListener("click",i,!0)}}(),/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-03-20T18:59Z + */ +function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(e,t){t=t||ne;var n=t.createElement("script");n.text=e,t.head.appendChild(n).parentNode.removeChild(n)}function r(e){var t=!!e&&"length"in e&&e.length,n=ge.type(e);return"function"!==n&&!ge.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}function o(e,t,n){return ge.isFunction(t)?ge.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?ge.grep(e,function(e){return e===t!==n}):"string"!=typeof t?ge.grep(e,function(e){return ae.call(t,e)>-1!==n}):Ce.test(t)?ge.filter(t,e,n):(t=ge.filter(t,e),ge.grep(e,function(e){return ae.call(t,e)>-1!==n&&1===e.nodeType}))}function s(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function a(e){var t={};return ge.each(e.match(De)||[],function(e,n){t[n]=!0}),t}function u(e){return e}function c(e){throw e}function l(e,t,n,r){var i;try{e&&ge.isFunction(i=e.promise)?i.call(e).done(t).fail(n):e&&ge.isFunction(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}function f(){ne.removeEventListener("DOMContentLoaded",f),e.removeEventListener("load",f),ge.ready()}function d(){this.expando=ge.expando+d.uid++}function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Ie.test(e)?JSON.parse(e):e)}function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Re,"-$&").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n=p(n)}catch(e){}He.set(e,t,n)}else n=void 0;return n}function g(e,t,n,r){var i,o=1,s=20,a=r?function(){return r.cur()}:function(){return ge.css(e,t,"")},u=a(),c=n&&n[3]||(ge.cssNumber[t]?"":"px"),l=(ge.cssNumber[t]||"px"!==c&&+u)&&Me.exec(ge.css(e,t));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do o=o||".5",l/=o,ge.style(e,t,l+c);while(o!==(o=a()/u)&&1!==o&&--s)}return n&&(l=+l||+u||0,i=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=i)),i}function v(e){var t,n=e.ownerDocument,r=e.nodeName,i=Ve[r];return i?i:(t=n.body.appendChild(n.createElement(r)),i=ge.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),Ve[r]=i,i)}function m(e,t){for(var n,r,i=[],o=0,s=e.length;o-1)i&&i.push(o);else if(c=ge.contains(o.ownerDocument,o),s=y(f.appendChild(o),"script"),c&&x(s),n)for(l=0;o=s[l++];)Qe.test(o.type||"")&&n.push(o);return f}function w(){return!0}function T(){return!1}function S(){try{return ne.activeElement}catch(e){}}function E(e,t,n,r,i,o){var s,a;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(a in t)E(e,a,n,r,t[a],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=T;else if(!i)return e;return 1===o&&(s=i,i=function(e){return ge().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=ge.guid++)),e.each(function(){ge.event.add(this,t,i,r,n)})}function C(e,t){return i(e,"table")&&i(11!==t.nodeType?t:t.firstChild,"tr")?ge(">tbody",e)[0]||e:e}function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function N(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function j(e,t){var n,r,i,o,s,a,u,c;if(1===t.nodeType){if(Pe.hasData(e)&&(o=Pe.access(e),s=Pe.set(t,o),c=o.events)){delete s.handle,s.events={};for(i in c)for(n=0,r=c[i].length;n1&&"string"==typeof h&&!pe.checkClone&&rt.test(h))return e.each(function(n){var o=e.eq(n);g&&(t[0]=h.call(this,n,o.html())),L(o,t,r,i)});if(d&&(o=b(t,e[0].ownerDocument,!1,e,i),s=o.firstChild,1===o.childNodes.length&&(o=s),s||i)){for(a=ge.map(y(o,"script"),k),u=a.length;f=0&&nS.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[_]=!0,e}function i(e){var t=q.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=n.length;r--;)S.attrHandle[n[r]]=t}function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return function(t){return"form"in t?t.parentNode&&t.disabled===!1?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&Ee(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function l(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function p(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function v(e,n,r){for(var i=0,o=n.length;i-1&&(r[c]=!(s[c]=f))}}else x=m(x===s?x.splice(h,x.length):x),o?o(null,s,x,u):K.apply(s,x)})}function x(e){for(var t,n,r,i=e.length,o=S.relative[e[0].type],s=o||S.relative[" "],a=o?1:0,u=h(function(e){return e===t},s,!0),c=h(function(e){return ee(t,e)>-1},s,!0),l=[function(e,n,r){var i=!o&&(r||n!==A)||((t=n).nodeType?u(e,n,r):c(e,n,r));return t=null,i}];a1&&g(l),a>1&&p(e.slice(0,a-1).concat({value:" "===e[a-2].type?"*":""})).replace(ae,"$1"),n,a0,o=e.length>0,s=function(r,s,a,u,c){var l,f,d,p=0,h="0",g=r&&[],v=[],y=A,x=r||o&&S.find.TAG("*",c),b=W+=null==y?1:Math.random()||.1,w=x.length;for(c&&(A=s===q||s||c);h!==w&&null!=(l=x[h]);h++){if(o&&l){for(f=0,s||l.ownerDocument===q||(O(l),a=!$);d=e[f++];)if(d(l,s||q,a)){u.push(l);break}c&&(W=b)}i&&((l=!d&&l)&&p--,r&&g.push(l))}if(p+=h,i&&h!==p){for(f=0;d=n[f++];)d(g,v,s,a);if(r){if(p>0)for(;h--;)g[h]||v[h]||(v[h]=J.call(u));v=m(v)}K.apply(u,v),c&&!r&&v.length>0&&p+n.length>1&&t.uniqueSort(u)}return c&&(W=b,A=y),g};return i?r(s):s}var w,T,S,E,C,k,N,j,A,L,D,O,q,F,$,P,H,I,R,_="sizzle"+1*new Date,M=e.document,W=0,B=0,z=n(),V=n(),X=n(),U=function(e,t){return e===t&&(D=!0),0},Q={}.hasOwnProperty,Y=[],J=Y.pop,G=Y.push,K=Y.push,Z=Y.slice,ee=function(e,t){for(var n=0,r=e.length;n+~]|"+ne+")"+ne+"*"),le=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),fe=new RegExp(oe),de=new RegExp("^"+re+"$"),pe={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,ge=/^h\d$/i,ve=/^[^{]+\{\s*\[native \w/,me=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,xe=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),be=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},we=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Te=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},Se=function(){O()},Ee=h(function(e){return e.disabled===!0&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{K.apply(Y=Z.call(M.childNodes),M.childNodes),Y[M.childNodes.length].nodeType}catch(e){K={apply:Y.length?function(e,t){G.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}T=t.support={},C=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},O=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:M;return r!==q&&9===r.nodeType&&r.documentElement?(q=r,F=q.documentElement,$=!C(q),M!==q&&(n=q.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Se,!1):n.attachEvent&&n.attachEvent("onunload",Se)),T.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),T.getElementsByTagName=i(function(e){return e.appendChild(q.createComment("")),!e.getElementsByTagName("*").length}),T.getElementsByClassName=ve.test(q.getElementsByClassName),T.getById=i(function(e){return F.appendChild(e).id=_,!q.getElementsByName||!q.getElementsByName(_).length}),T.getById?(S.filter.ID=function(e){var t=e.replace(xe,be);return function(e){return e.getAttribute("id")===t}},S.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&$){var n=t.getElementById(e);return n?[n]:[]}}):(S.filter.ID=function(e){var t=e.replace(xe,be);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},S.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&$){var n,r,i,o=t.getElementById(e);if(o){if(n=o.getAttributeNode("id"),n&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if(n=o.getAttributeNode("id"),n&&n.value===e)return[o]}return[]}}),S.find.TAG=T.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):T.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},S.find.CLASS=T.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&$)return t.getElementsByClassName(e)},H=[],P=[],(T.qsa=ve.test(q.querySelectorAll))&&(i(function(e){F.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&P.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||P.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+_+"-]").length||P.push("~="),e.querySelectorAll(":checked").length||P.push(":checked"),e.querySelectorAll("a#"+_+"+*").length||P.push(".#.+[+~]")}),i(function(e){e.innerHTML="";var t=q.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&P.push("name"+ne+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&P.push(":enabled",":disabled"),F.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&P.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),P.push(",.*:")})),(T.matchesSelector=ve.test(I=F.matches||F.webkitMatchesSelector||F.mozMatchesSelector||F.oMatchesSelector||F.msMatchesSelector))&&i(function(e){T.disconnectedMatch=I.call(e,"*"),I.call(e,"[s!='']:x"),H.push("!=",oe)}),P=P.length&&new RegExp(P.join("|")),H=H.length&&new RegExp(H.join("|")),t=ve.test(F.compareDocumentPosition),R=t||ve.test(F.contains)?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)for(;t=t.parentNode;)if(t===e)return!0;return!1},U=t?function(e,t){if(e===t)return D=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!T.sortDetached&&t.compareDocumentPosition(e)===n?e===q||e.ownerDocument===M&&R(M,e)?-1:t===q||t.ownerDocument===M&&R(M,t)?1:L?ee(L,e)-ee(L,t):0:4&n?-1:1)}:function(e,t){if(e===t)return D=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],u=[t];if(!i||!o)return e===q?-1:t===q?1:i?-1:o?1:L?ee(L,e)-ee(L,t):0;if(i===o)return s(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?s(a[r],u[r]):a[r]===M?-1:u[r]===M?1:0},q):q},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==q&&O(e),n=n.replace(le,"='$1']"),T.matchesSelector&&$&&!X[n+" "]&&(!H||!H.test(n))&&(!P||!P.test(n)))try{var r=I.call(e,n);if(r||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,q,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==q&&O(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==q&&O(e);var n=S.attrHandle[t.toLowerCase()],r=n&&Q.call(S.attrHandle,t.toLowerCase())?n(e,t,!$):void 0;return void 0!==r?r:T.attributes||!$?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+"").replace(we,Te)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(D=!T.detectDuplicates,L=!T.sortStable&&e.slice(0),e.sort(U),D){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return L=null,e},E=t.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+=E(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=E(t);return n},S=t.selectors={cacheLength:50,createPseudo:r,match:pe,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(xe,be),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,be),"~="===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]||t.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]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=k(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,be).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=z[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&z(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(se," ")+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,d,p,h,g=o!==s?"nextSibling":"previousSibling",v=t.parentNode,m=a&&t.nodeName.toLowerCase(),y=!u&&!a,x=!1;if(v){if(o){for(;g;){for(d=t;d=d[g];)if(a?d.nodeName.toLowerCase()===m:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[s?v.firstChild:v.lastChild],s&&y){for(d=v,f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===W&&c[1],x=p&&c[2],d=p&&v.childNodes[p];d=++p&&d&&d[g]||(x=p=0)||h.pop();)if(1===d.nodeType&&++x&&d===t){l[e]=[W,p,x];break}}else if(y&&(d=t,f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===W&&c[1],x=p),x===!1)for(;(d=++p&&d&&d[g]||(x=p=0)||h.pop())&&((a?d.nodeName.toLowerCase()!==m:1!==d.nodeType)||!++x||(y&&(f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),l[e]=[W,x]),d!==t)););return x-=i,x===r||x%r===0&&x/r>=0}}},PSEUDO:function(e,n){var i,o=S.pseudos[e]||S.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[_]?o(n):o.length>1?(i=[e,e,"",n],S.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),s=i.length;s--;)r=ee(e,i[s]),e[r]=!(t[r]=i[s])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=N(e.replace(ae,"$1"));return i[_]?r(function(e,t,n,r){for(var o,s=i(e,null,r,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(xe,be),function(t){return(t.textContent||t.innerText||E(t)).indexOf(e)>-1}}),lang:r(function(e){return de.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(xe,be).toLowerCase(),function(t){var n;do if(n=$?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===F},focus:function(e){return e===q.activeElement&&(!q.hasFocus||q.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:c(!1),disabled:c(!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.nodeType<6)return!1;return!0},parent:function(e){return!S.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return he.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"))||"text"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:l(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(s=o[0]).type&&9===t.nodeType&&$&&S.relative[o[1].type]){if(t=(S.find.ID(s.matches[0].replace(xe,be),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(s=o[i],!S.relative[a=s.type]);)if((u=S.find[a])&&(r=u(s.matches[0].replace(xe,be),ye.test(o[0].type)&&f(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&p(o),!e)return K.apply(n,r),n;break}}return(c||N(e,l))(r,t,!$,n,!t||ye.test(e)&&f(t.parentNode)||t),n},T.sortStable=_.split("").sort(U).join("")===_,T.detectDuplicates=!!D,O(),T.sortDetached=i(function(e){return 1&e.compareDocumentPosition(q.createElement("fieldset"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),T.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);ge.find=be,ge.expr=be.selectors,ge.expr[":"]=ge.expr.pseudos,ge.uniqueSort=ge.unique=be.uniqueSort,ge.text=be.getText,ge.isXMLDoc=be.isXML,ge.contains=be.contains,ge.escapeSelector=be.escape;var we=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&ge(e).is(n))break;r.push(e)}return r},Te=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},Se=ge.expr.match.needsContext,Ee=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,Ce=/^.[^:#\[\.,]*$/;ge.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ge.find.matchesSelector(r,e)?[r]:[]:ge.find.matches(e,ge.grep(t,function(e){return 1===e.nodeType}))},ge.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ge(e).filter(function(){for(t=0;t1?ge.uniqueSort(n):n},filter:function(e){return this.pushStack(o(this,e||[],!1))},not:function(e){return this.pushStack(o(this,e||[],!0))},is:function(e){return!!o(this,"string"==typeof e&&Se.test(e)?ge(e):e||[],!1).length}});var ke,Ne=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,je=ge.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||ke,"string"==typeof e){if(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:Ne.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ge?t[0]:t,ge.merge(this,ge.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:ne,!0)),Ee.test(r[1])&&ge.isPlainObject(t))for(r in t)ge.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=ne.getElementById(r[2]),i&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):ge.isFunction(e)?void 0!==n.ready?n.ready(e):e(ge):ge.makeArray(e,this)};je.prototype=ge.fn,ke=ge(ne);var Ae=/^(?:parents|prev(?:Until|All))/,Le={children:!0,contents:!0,next:!0,prev:!0};ge.fn.extend({has:function(e){var t=ge(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&ge.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?ge.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?ae.call(ge(e),this[0]):ae.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ge.uniqueSort(ge.merge(this.get(),ge(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ge.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return we(e,"parentNode")},parentsUntil:function(e,t,n){return we(e,"parentNode",n)},next:function(e){return s(e,"nextSibling")},prev:function(e){return s(e,"previousSibling")},nextAll:function(e){return we(e,"nextSibling")},prevAll:function(e){return we(e,"previousSibling")},nextUntil:function(e,t,n){return we(e,"nextSibling",n)},prevUntil:function(e,t,n){return we(e,"previousSibling",n)},siblings:function(e){return Te((e.parentNode||{}).firstChild,e)},children:function(e){return Te(e.firstChild)},contents:function(e){return i(e,"iframe")?e.contentDocument:(i(e,"template")&&(e=e.content||e),ge.merge([],e.childNodes))}},function(e,t){ge.fn[e]=function(n,r){var i=ge.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=ge.filter(r,i)),this.length>1&&(Le[e]||ge.uniqueSort(i),Ae.test(e)&&i.reverse()),this.pushStack(i)}});var De=/[^\x20\t\r\n\f]+/g;ge.Callbacks=function(e){e="string"==typeof e?a(e):ge.extend({},e);var t,n,r,i,o=[],s=[],u=-1,c=function(){for(i=i||e.once,r=t=!0;s.length;u=-1)for(n=s.shift();++u-1;)o.splice(n,1),n<=u&&u--}),this},has:function(e){return e?ge.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=s=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},ge.extend({Deferred:function(t){var n=[["notify","progress",ge.Callbacks("memory"),ge.Callbacks("memory"),2],["resolve","done",ge.Callbacks("once memory"),ge.Callbacks("once memory"),0,"resolved"],["reject","fail",ge.Callbacks("once memory"),ge.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return ge.Deferred(function(t){ge.each(n,function(n,r){var i=ge.isFunction(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&ge.isFunction(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){function o(t,n,r,i){return function(){var a=this,l=arguments,f=function(){var e,f;if(!(t=s&&(r!==c&&(a=void 0,l=[e]),n.rejectWith(a,l))}};t?d():(ge.Deferred.getStackHook&&(d.stackTrace=ge.Deferred.getStackHook()),e.setTimeout(d))}}var s=0;return ge.Deferred(function(e){n[0][3].add(o(0,e,ge.isFunction(i)?i:u,e.notifyWith)),n[1][3].add(o(0,e,ge.isFunction(t)?t:u)),n[2][3].add(o(0,e,ge.isFunction(r)?r:c))}).promise()},promise:function(e){return null!=e?ge.extend(e,i):i}},o={};return ge.each(n,function(e,t){var s=t[2],a=t[5];i[t[1]]=s.add,a&&s.add(function(){r=a},n[3-e][2].disable,n[0][2].lock),s.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=s.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=ie.call(arguments),o=ge.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?ie.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&(l(e,o.done(s(n)).resolve,o.reject,!t),"pending"===o.state()||ge.isFunction(i[n]&&i[n].then)))return o.then();for(;n--;)l(i[n],s(n),o.reject);return o.promise()}});var Oe=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ge.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&Oe.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},ge.readyException=function(t){e.setTimeout(function(){throw t})};var qe=ge.Deferred();ge.fn.ready=function(e){return qe.then(e)["catch"](function(e){ge.readyException(e)}),this},ge.extend({isReady:!1,readyWait:1,ready:function(e){(e===!0?--ge.readyWait:ge.isReady)||(ge.isReady=!0,e!==!0&&--ge.readyWait>0||qe.resolveWith(ne,[ge]))}}),ge.ready.then=qe.then,"complete"===ne.readyState||"loading"!==ne.readyState&&!ne.documentElement.doScroll?e.setTimeout(ge.ready):(ne.addEventListener("DOMContentLoaded",f),e.addEventListener("load",f));var Fe=function(e,t,n,r,i,o,s){var a=0,u=e.length,c=null==n;if("object"===ge.type(n)){i=!0;for(a in n)Fe(e,t,a,n[a],!0,o,s)}else if(void 0!==r&&(i=!0,ge.isFunction(r)||(s=!0),c&&(s?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(ge(e),n)})),t))for(;a1,null,!0)},removeData:function(e){return this.each(function(){He.remove(this,e)})}}),ge.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Pe.get(e,t),n&&(!r||Array.isArray(n)?r=Pe.access(e,t,ge.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ge.queue(e,t),r=n.length,i=n.shift(),o=ge._queueHooks(e,t),s=function(){ge.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Pe.get(e,n)||Pe.access(e,n,{empty:ge.Callbacks("once memory").add(function(){Pe.remove(e,[t+"queue",n])})})}}),ge.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,Qe=/^$|\/(?:java|ecma)script/i,Ye={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};Ye.optgroup=Ye.option,Ye.tbody=Ye.tfoot=Ye.colgroup=Ye.caption=Ye.thead,Ye.th=Ye.td;var Je=/<|&#?\w+;/;!function(){var e=ne.createDocumentFragment(),t=e.appendChild(ne.createElement("div")),n=ne.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),pe.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Ge=ne.documentElement,Ke=/^key/,Ze=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,et=/^([^.]*)(?:\.(.+)|)/;ge.event={global:{},add:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Pe.get(e);if(v)for(n.handler&&(o=n,n=o.handler,i=o.selector),i&&ge.find.matchesSelector(Ge,i),n.guid||(n.guid=ge.guid++),(u=v.events)||(u=v.events={}), +(s=v.handle)||(s=v.handle=function(t){return"undefined"!=typeof ge&&ge.event.triggered!==t.type?ge.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(De)||[""],c=t.length;c--;)a=et.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p&&(f=ge.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=ge.event.special[p]||{},l=ge.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ge.expr.match.needsContext.test(i),namespace:h.join(".")},o),(d=u[p])||(d=u[p]=[],d.delegateCount=0,f.setup&&f.setup.call(e,r,h,s)!==!1||e.addEventListener&&e.addEventListener(p,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,l):d.push(l),ge.event.global[p]=!0)},remove:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Pe.hasData(e)&&Pe.get(e);if(v&&(u=v.events)){for(t=(t||"").match(De)||[""],c=t.length;c--;)if(a=et.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p){for(f=ge.event.special[p]||{},p=(r?f.delegateType:f.bindType)||p,d=u[p]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=d.length;o--;)l=d[o],!i&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(d.splice(o,1),l.selector&&d.delegateCount--,f.remove&&f.remove.call(e,l));s&&!d.length&&(f.teardown&&f.teardown.call(e,h,v.handle)!==!1||ge.removeEvent(e,p,v.handle),delete u[p])}else for(p in u)ge.event.remove(e,p+t[c],n,r,!0);ge.isEmptyObject(u)&&Pe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,s,a=ge.event.fix(e),u=new Array(arguments.length),c=(Pe.get(this,"events")||{})[a.type]||[],l=ge.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||c.disabled!==!0)){for(o=[],s={},n=0;n-1:ge.find(i,this,null,[c]).length),s[i]&&o.push(r);o.length&&a.push({elem:c,handlers:o})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,nt=/\s*$/g;ge.extend({htmlPrefilter:function(e){return e.replace(tt,"<$1>")},clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=ge.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ge.isXMLDoc(e)))for(s=y(a),o=y(e),r=0,i=o.length;r0&&x(s,!u&&y(e,"script")),a},cleanData:function(e){for(var t,n,r,i=ge.event.special,o=0;void 0!==(n=e[o]);o++)if($e(n)){if(t=n[Pe.expando]){if(t.events)for(r in t.events)i[r]?ge.event.remove(n,r):ge.removeEvent(n,r,t.handle);n[Pe.expando]=void 0}n[He.expando]&&(n[He.expando]=void 0)}}}),ge.fn.extend({detach:function(e){return D(this,e,!0)},remove:function(e){return D(this,e)},text:function(e){return Fe(this,function(e){return void 0===e?ge.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.appendChild(e)}})},prepend:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ge.cleanData(y(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ge.clone(this,e,t)})},html:function(e){return Fe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!nt.test(e)&&!Ye[(Ue.exec(e)||["",""])[1].toLowerCase()]){e=ge.htmlPrefilter(e);try{for(;n1)}}),ge.Tween=R,R.prototype={constructor:R,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ge.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ge.cssNumber[n]?"":"px")},cur:function(){var e=R.propHooks[this.prop];return e&&e.get?e.get(this):R.propHooks._default.get(this)},run:function(e){var t,n=R.propHooks[this.prop];return this.options.duration?this.pos=t=ge.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ge.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){ge.fx.step[e.prop]?ge.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[ge.cssProps[e.prop]]&&!ge.cssHooks[e.prop]?e.elem[e.prop]=e.now:ge.style(e.elem,e.prop,e.now+e.unit)}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ge.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ge.fx=R.prototype.init,ge.fx.step={};var gt,vt,mt=/^(?:toggle|show|hide)$/,yt=/queueHooks$/;ge.Animation=ge.extend(X,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return g(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){ge.isFunction(e)?(t=e,e=["*"]):e=e.match(De);for(var n,r=0,i=e.length;r1)},removeAttr:function(e){return this.each(function(){ge.removeAttr(this,e)})}}),ge.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ge.prop(e,t,n):(1===o&&ge.isXMLDoc(e)||(i=ge.attrHooks[t.toLowerCase()]||(ge.expr.match.bool.test(t)?xt:void 0)),void 0!==n?null===n?void ge.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:(r=ge.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&"radio"===t&&i(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(De);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),xt={set:function(e,t,n){return t===!1?ge.removeAttr(e,n):e.setAttribute(n,n),n}},ge.each(ge.expr.match.bool.source.match(/\w+/g),function(e,t){var n=bt[t]||ge.find.attr;bt[t]=function(e,t,r){var i,o,s=t.toLowerCase();return r||(o=bt[s],bt[s]=i,i=null!=n(e,t,r)?s:null,bt[s]=o),i}});var wt=/^(?:input|select|textarea|button)$/i,Tt=/^(?:a|area)$/i;ge.fn.extend({prop:function(e,t){return Fe(this,ge.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[ge.propFix[e]||e]})}}),ge.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ge.isXMLDoc(e)||(t=ge.propFix[t]||t,i=ge.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ge.find.attr(e,"tabindex");return t?parseInt(t,10):wt.test(e.nodeName)||Tt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),pe.optSelected||(ge.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ge.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ge.propFix[this.toLowerCase()]=this}),ge.fn.extend({addClass:function(e){var t,n,r,i,o,s,a,u=0;if(ge.isFunction(e))return this.each(function(t){ge(this).addClass(e.call(this,t,Q(this)))});if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,i,o,s,a,u=0;if(ge.isFunction(e))return this.each(function(t){ge(this).removeClass(e.call(this,t,Q(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):ge.isFunction(e)?this.each(function(n){ge(this).toggleClass(e.call(this,n,Q(this),t),t)}):this.each(function(){var t,r,i,o;if("string"===n)for(r=0,i=ge(this),o=e.match(De)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||(t=Q(this),t&&Pe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Pe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+U(Q(n))+" ").indexOf(t)>-1)return!0;return!1}});var St=/\r/g;ge.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=ge.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,ge(this).val()):e,null==i?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=ge.map(i,function(e){return null==e?"":e+""})),t=ge.valHooks[this.type]||ge.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return t=ge.valHooks[i.type]||ge.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:(n=i.value,"string"==typeof n?n.replace(St,""):null==n?"":n)}}}),ge.extend({valHooks:{option:{get:function(e){var t=ge.find.attr(e,"value");return null!=t?t:U(ge.text(e))}},select:{get:function(e){var t,n,r,o=e.options,s=e.selectedIndex,a="select-one"===e.type,u=a?null:[],c=a?s+1:o.length;for(r=s<0?c:a?s:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ge.each(["radio","checkbox"],function(){ge.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=ge.inArray(ge(e).val(),t)>-1}},pe.checkOn||(ge.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=/^(?:focusinfocus|focusoutblur)$/;ge.extend(ge.event,{trigger:function(t,n,r,i){var o,s,a,u,c,l,f,d=[r||ne],p=le.call(t,"type")?t.type:t,h=le.call(t,"namespace")?t.namespace.split("."):[];if(s=a=r=r||ne,3!==r.nodeType&&8!==r.nodeType&&!Et.test(p+ge.event.triggered)&&(p.indexOf(".")>-1&&(h=p.split("."),p=h.shift(),h.sort()),c=p.indexOf(":")<0&&"on"+p,t=t[ge.expando]?t:new ge.Event(p,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:ge.makeArray(n,[t]),f=ge.event.special[p]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!ge.isWindow(r)){for(u=f.delegateType||p,Et.test(u+p)||(s=s.parentNode);s;s=s.parentNode)d.push(s),a=s;a===(r.ownerDocument||ne)&&d.push(a.defaultView||a.parentWindow||e)}for(o=0;(s=d[o++])&&!t.isPropagationStopped();)t.type=o>1?u:f.bindType||p,l=(Pe.get(s,"events")||{})[t.type]&&Pe.get(s,"handle"),l&&l.apply(s,n),l=c&&s[c],l&&l.apply&&$e(s)&&(t.result=l.apply(s,n),t.result===!1&&t.preventDefault());return t.type=p,i||t.isDefaultPrevented()||f._default&&f._default.apply(d.pop(),n)!==!1||!$e(r)||c&&ge.isFunction(r[p])&&!ge.isWindow(r)&&(a=r[c],a&&(r[c]=null),ge.event.triggered=p,r[p](),ge.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=ge.extend(new ge.Event,n,{type:e,isSimulated:!0});ge.event.trigger(r,null,t)}}),ge.fn.extend({trigger:function(e,t){return this.each(function(){ge.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ge.event.trigger(e,t,n,!0)}}),ge.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){ge.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),ge.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin="onfocusin"in e,pe.focusin||ge.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){ge.event.simulate(t,e.target,ge.event.fix(e))};ge.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=Pe.access(r,t);i||r.addEventListener(e,n,!0),Pe.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=Pe.access(r,t)-1;i?Pe.access(r,t,i):(r.removeEventListener(e,n,!0),Pe.remove(r,t))}}});var Ct=e.location,kt=ge.now(),Nt=/\?/;ge.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||ge.error("Invalid XML: "+t),n};var jt=/\[\]$/,At=/\r?\n/g,Lt=/^(?:submit|button|image|reset|file)$/i,Dt=/^(?:input|select|textarea|keygen)/i;ge.param=function(e,t){var n,r=[],i=function(e,t){var n=ge.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!ge.isPlainObject(e))ge.each(e,function(){i(this.name,this.value)});else for(n in e)Y(n,e[n],t,i);return r.join("&")},ge.fn.extend({serialize:function(){return ge.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ge.prop(this,"elements");return e?ge.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ge(this).is(":disabled")&&Dt.test(this.nodeName)&&!Lt.test(e)&&(this.checked||!Xe.test(e))}).map(function(e,t){var n=ge(this).val();return null==n?null:Array.isArray(n)?ge.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}});var Ot=/%20/g,qt=/#.*$/,Ft=/([?&])_=[^&]*/,$t=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ht=/^(?:GET|HEAD)$/,It=/^\/\//,Rt={},_t={},Mt="*/".concat("*"),Wt=ne.createElement("a");Wt.href=Ct.href,ge.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Mt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ge.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?K(K(e,ge.ajaxSettings),t):K(ge.ajaxSettings,e)},ajaxPrefilter:J(Rt),ajaxTransport:J(_t),ajax:function(t,n){function r(t,n,r,a){var c,d,p,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),i=void 0,s=a||"",S.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=Z(h,S,r)),b=ee(h,b,S,c),c?(h.ifModified&&(w=S.getResponseHeader("Last-Modified"),w&&(ge.lastModified[o]=w),w=S.getResponseHeader("etag"),w&&(ge.etag[o]=w)),204===t||"HEAD"===h.type?T="nocontent":304===t?T="notmodified":(T=b.state,d=b.data,p=b.error,c=!p)):(p=T,!t&&T||(T="error",t<0&&(t=0))),S.status=t,S.statusText=(n||T)+"",c?m.resolveWith(g,[d,T,S]):m.rejectWith(g,[S,T,p]),S.statusCode(x),x=void 0,f&&v.trigger(c?"ajaxSuccess":"ajaxError",[S,h,c?d:p]),y.fireWith(g,[S,T]),f&&(v.trigger("ajaxComplete",[S,h]),--ge.active||ge.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,s,a,u,c,l,f,d,p,h=ge.ajaxSetup({},n),g=h.context||h,v=h.context&&(g.nodeType||g.jquery)?ge(g):ge.event,m=ge.Deferred(),y=ge.Callbacks("once memory"),x=h.statusCode||{},b={},w={},T="canceled",S={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=$t.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)S.always(e[S.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(m.promise(S),h.url=((t||h.url||Ct.href)+"").replace(It,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(De)||[""],null==h.crossDomain){c=ne.createElement("a");try{c.href=h.url,c.href=c.href,h.crossDomain=Wt.protocol+"//"+Wt.host!=c.protocol+"//"+c.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=ge.param(h.data,h.traditional)),G(Rt,h,n,S),l)return S;f=ge.event&&h.global,f&&0===ge.active++&&ge.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Ht.test(h.type),o=h.url.replace(qt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Ot,"+")):(p=h.url.slice(o.length),h.data&&(o+=(Nt.test(o)?"&":"?")+h.data,delete h.data),h.cache===!1&&(o=o.replace(Ft,"$1"),p=(Nt.test(o)?"&":"?")+"_="+kt++ +p),h.url=o+p),h.ifModified&&(ge.lastModified[o]&&S.setRequestHeader("If-Modified-Since",ge.lastModified[o]),ge.etag[o]&&S.setRequestHeader("If-None-Match",ge.etag[o])),(h.data&&h.hasContent&&h.contentType!==!1||n.contentType)&&S.setRequestHeader("Content-Type",h.contentType),S.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Mt+"; q=0.01":""):h.accepts["*"]);for(d in h.headers)S.setRequestHeader(d,h.headers[d]);if(h.beforeSend&&(h.beforeSend.call(g,S,h)===!1||l))return S.abort();if(T="abort",y.add(h.complete),S.done(h.success),S.fail(h.error),i=G(_t,h,n,S)){if(S.readyState=1,f&&v.trigger("ajaxSend",[S,h]),l)return S;h.async&&h.timeout>0&&(u=e.setTimeout(function(){S.abort("timeout")},h.timeout));try{l=!1,i.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return S},getJSON:function(e,t,n){return ge.get(e,t,n,"json")},getScript:function(e,t){return ge.get(e,void 0,t,"script")}}),ge.each(["get","post"],function(e,t){ge[t]=function(e,n,r,i){return ge.isFunction(n)&&(i=i||r,r=n,n=void 0),ge.ajax(ge.extend({url:e,type:t,dataType:i,data:n,success:r},ge.isPlainObject(e)&&e))}}),ge._evalUrl=function(e){return ge.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},ge.fn.extend({wrapAll:function(e){var t;return this[0]&&(ge.isFunction(e)&&(e=e.call(this[0])),t=ge(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return ge.isFunction(e)?this.each(function(t){ge(this).wrapInner(e.call(this,t))}):this.each(function(){var t=ge(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=ge.isFunction(e);return this.each(function(n){ge(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ge(this).replaceWith(this.childNodes)}),this}}),ge.expr.pseudos.hidden=function(e){return!ge.expr.pseudos.visible(e)},ge.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ge.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},zt=ge.ajaxSettings.xhr();pe.cors=!!zt&&"withCredentials"in zt,pe.ajax=zt=!!zt,ge.ajaxTransport(function(t){var n,r;if(pe.cors||zt&&!t.crossDomain)return{send:function(i,o){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(s in i)a.setRequestHeader(s,i[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?o(0,"error"):o(a.status,a.statusText):o(Bt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),ge.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ge.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){ +return ge.globalEval(e),e}}}),ge.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ge.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=ge(" + + + + + + Navbar + + +
+
+

Cloud API

+ + +
+ +
+ +
+
+
+

WebSocket API简介

+

WebSocket协议是基于TCP的一种新的网络协议。它实现了客户端与服务器之间在单个 tcp 连接上的全双工通信,由服务器主动发送信息给客户端,减少了频繁的身份验证等不必要的开销。其最大优点有两个:

+ +
    +
  • 两方请求的 header 数据很小,大概只有2 Bytes。

  • +
  • 服务器不再是被动的接到客户端的请求后才返回数据,而是有了新数据后主动推送给客户端。

  • +
+ +

以上 WebSocket 协议带来的优点使得其十分适用于数字货币行情和交易这种实时性强的接口。

+

请求与订阅说明

1. 访问地址

+
    +
  • 行情请求地址为:wss://{HOST}/ws
  • +
  • HOST常用的格式说明:
  • +
+ +

需要验签的接口:www.xxxx.com

+ +

不需要验签的接口:www.xxxx.com/api

+ + +

2. 数据压缩

+

WebSocket API 返回的所有数据都进行了 GZIP 压缩,需要 client 在收到数据之后解压,推荐使用pako。(【pako】 是一个支持压缩和解压 GZIP 的库)

+

3. WebSocket库

+

【ws】 是 Node.js 下的 WebSocket 库。

+

4. 心跳

+

WebSocket API 支持双向心跳,无论是 Server 还是 Client 都可以发起 ping message,对方返回 pong message。

+ +

WebSocket Server 发送心跳:

+
{"ping": 18212558000}
+
+

WebSocket Client 应该返回:

+
 {"pong": 18212558000}
+
+ + + +
┌────────┐                         ┌────────┐ 
+│ Client │                         │ Server │
+└───┬────┘                         └───┬────┘
+    │         {"ping": 18212558000}    │
+    │<─────────────────────────────────┤
+    │                                  │ wait 5s
+    │                                  ├───┐
+    │                                  │<──┘
+    │         {"ping": 18212558000}    │
+    │<─────────────────────────────────┤
+    │                                  │
+    │ {"pong": 18212558000}            │
+    ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄>│
+    │                                  │
+
+ +
┌────────┐                         ┌────────┐ 
+│ Client │                         │ Server │
+└───┬────┘                         └───┬────┘
+    │         {"ping": 1523778470416}  │
+    │<─────────────────────────────────┤
+    │                                  │ wait 5s
+    │                                  ├───┐
+    │                                  │<──┘
+    │         {"ping": 1523778475416}  │
+    │<─────────────────────────────────┤
+    │                                  │ wait 5s
+    │                                  ├───┐
+    │                                  │<──┘
+    │                                  │
+    │                                  │ close WebSocket connection
+    │                                  ├───┐
+    │                                  │<──┘
+    │                                  │
+
+
+ + +

WebSocket Client 发送心跳:

+
{"ping": 18212553000}
+
+ +
{
+  "ts": 1492420473027,
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "invalid ping"
+}
+
+

WebSocket Server 会返回:

+
{"pong": 18212553000}
+
+ + +

错误信息返回格式

+
{
+  "id": "id generate by client",
+  "status": "error",
+  "err-code": "err-code",
+  "err-msg": "err-message",
+  "ts": 1487152091345
+}
+
+ +

5. topic格式

+

订阅数据和请求数据都要使用 topictopic 的语法如下:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
topic 类型topic 语法sub/req描述
KLinemarket.$symbol.kline.$periodsub/reqK线 数据,包含单位时间区间的开盘价、收盘价、最高价、最低价、成交量、成交额、成交笔数等数据 $period 可选值:{ 1min, 5min, 15min, 30min, 60min, 4hour,1day, 1mon, 1week, 1year }
Market Depthmarket.$symbol.depth.$typesub/req盘口深度,按照不同 step 聚合的买一、买二、买三等和卖一、卖二、卖三等数据 $type 可选值:{ step0, step1, step2, step3, step4, step5, percent10 } (合并深度0-5);step0时,不合并深度
Trade Detailmarket.$symbol.trade.detailsub/req成交记录,包含成交价格、成交量、成交方向等信息
Market Detailmarket.$symbol.detailsub/req最近24小时成交量、成交额、开盘价、收盘价、最高价、最低价、成交笔数等
Market Tickersmarket.tickerssub所有对外公开交易对的 日K线、最近24小时成交量等信息
+ +
    +
  • $symbol 为交易对,可选值: { ethbtc, ltcbtc, etcbtc, bchbtc...... }
  • +
  • 用户选择“合并深度”时,一定报价精度内的市场挂单将予以合并显示。合并深度仅改变显示方式,不改变实际成交价格。
  • +
+

6. 请求数据(req/rep)

+

请求数据,仅返回一次数据

+

请求数据的格式

{
+  "req": "topic to req",
+  "id": "id generate by client"
+}
+
+
    +
  • "req" 的值为 topic ,请参考 "5. topic格式"topic 格式
  • +
+ +

正确请求数据的例子

+
{
+  "req": "market.btcusdt.kline.1min",
+  "id": "id10"
+}
+
+

返回数据的例子:

+
{
+  "status": "ok",
+  "rep": "market.btcusdt.kline.1min",
+  "tick": [
+    {
+      "amount": 1.6206,
+      "count":  3,
+      "id":     1494465840,
+      "open":   9887.00,
+      "close":  9885.00,
+      "low":    9885.00,
+      "high":   9887.00,
+      "vol":    16021.632026
+    },
+    {
+      "amount": 2.2124,
+      "count":  6,
+      "id":     1494465900,
+      "open":   9885.00,
+      "close":  9880.00,
+      "low":    9880.00,
+      "high":   9885.00,
+      "vol":    21859.023500
+    }
+  ]
+}
+
+

错误请求数据的例子

+
{
+  "req": "market.invalidsymbo.kline.1min",
+  "id": "id10"
+}
+
+

返回的错误信息的例子:

+
{
+  "status": "error",
+  "id": "id10",
+  "err-code": "bad-request",
+  "err-msg": "invalid topic market.invalidsymbol.trade.detail",
+  "ts": 1494483996521
+}
+

7. 订阅数据(sub)

订阅数据(sub)以及接收订阅数据的大致流程

┌────────┐                         ┌────────┐ 
+│ Client │                         │ Server │
+└───┬────┘                         └───┬────┘
+    │ {"sub": "topic"}                 │
+    ├─────────────────────────────────>│
+    │                                  │
+    │              {"subbed": "topic"} │
+    │<┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┤
+    │                                  │
+    │        {"tick": "data of topic"} │
+    │<┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┤
+    │                                  │
+    │        {"tick": "data of topic"} │
+    │<┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┤
+    │                                  │
+
+ +

订阅数据的格式

+

成功建立和 WebSocket API 的连接之后,向 Server 发送如下格式的数据来订阅数据:

+
{
+   "id": "id generate by client",
+  "sub": "topic to sub",
+  "freq-ms": 1000
+}
+
+ + + + +

正确订阅的例子

+ +

正确订阅:

+
{
+  "sub": "market.btcusdt.kline.1min",
+  "id": "id1"
+}
+
+
    +
  • "sub" 的值为 topic ,请参考 "5. topic格式"topic 格式
  • +
+ +

订阅成功返回数据的例子:

+
{
+  "id": "id1",
+  "status": "ok",
+  "subbed": "market.btcusdt.kline.1min",
+  "ts": 1489474081631
+}
+
+

之后每当 KLine 有更新时,client 会收到数据,例子:

+
{
+  "ch": "market.btcusdt.kline.1min",
+  "ts": 1489474082831,
+  "tick": {
+    "id": 1489464480,
+    "amount": 0.0,
+    "count": 0,
+    "open": 7962.62,
+    "close": 7962.62,
+    "low": 7962.62,
+    "high": 7962.62,
+    "vol": 0.0
+  }
+}
+
+

tick 说明:

+
  "tick": {
+    "id": K线id,
+    "amount": 成交量,
+    "count": 成交笔数,
+    "open": 开盘价,
+    "close": 收盘价,当K线为最晚的一根时,是最新成交价
+    "low": 最低价,
+    "high": 最高价,
+    "vol": 成交额, 即 sum(每一笔成交价 * 该笔的成交量)
+  }
+
+
+

错误订阅的例子

+ +

错误订阅(错误的 symbol):

+
{
+  "sub": "market.invalidsymbol.kline.1min",
+  "id": "id2"
+}
+
+

订阅失败返回数据的例子:

+
{
+  "id": "id2",
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "invalid topic market.invalidsymbol.kline.1min",
+  "ts": 1494301904959
+}
+
+

错误订阅(错误的 topic):

+
{
+  "sub": "market.btcusdt.kline.3min",
+  "id": "id3"
+}
+
+

订阅失败返回数据的例子:

+
{
+  "id": "id3",
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "invalid topic market.btcusdt.kline.3min",
+  "ts": 1494310283622
+}
+

8. 取消订阅(unsub)

取消订阅的格式

+

WebSocket Client 订阅数据之后,可以取消订阅,取消订阅之后 WebSocket Server 将不会再发送该 topic 的数据,取消订阅的格式如下:

+
{
+  "unsub": "topic to unsub",
+  "id": "id generate by client"
+}
+
+

正确取消订阅的例子

+ +

正确取消订阅的例子:

+
{
+  "unsub": "market.btcusdt.trade.detail",
+  "id": "id4"
+}
+
+

取消订阅成功返回信息的例子:

+
{
+  "id": "id4",
+  "status": "ok",
+  "unsubbed": "market.btcusdt.trade.detail",
+  "ts": 1494326028889
+}
+
+

错误取消订阅的例子

+ +

错误取消订阅的例子(取消订阅一个尚未订阅的 topic):

+
{
+  "unsub": "market.btcusdt.trade.detail",
+  "id": "id5"
+}
+
+

返回的错误信息的例子

+
{
+  "id": "id5",
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "unsub with not subbed topic market.btcusdt.trade.detail",
+  "ts": 1494326217428
+}
+
+

错误取消订阅的例子(取消订阅一个不存在的 topic):

+
{
+  "unsub": "not-exists-topic",
+  "id": "id5"
+}
+
+

返回的错误信息的例子:

+
{
+  "id": "id5",
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "unsub with not subbed topic not-exists-topic",
+  "ts": 1494326318809
+}
+

WebSocket API Reference

订阅 KLine 数据 market.$symbol.kline.$period

+

成功建立和 WebSocket API 的连接之后,向 Server 发送如下格式的数据来订阅数据:

+
{
+  "sub": "market.$symbol.kline.$period",
+  "id": "id generate by client"
+}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对ethbtc,btusdt...
periodtruestringK线周期1min, 5min, 15min, 30min, 60min, 1day, 1mon, 1week, 1year
+ +

正确订阅的例子

+ +

正确订阅

+
{
+  "sub": "market.btcusdt.kline.1min",
+  "id": "id1"
+}
+
+

订阅成功返回数据的例子

+
{
+  "id": "id1",
+  "status": "ok",
+  "subbed": "market.btcusdt.kline.1min",
+  "ts": 1489474081631
+}
+
+

之后每当 KLine 有更新时,client 会收到数据,例子

+
{
+  "ch": "market.btcusdt.kline.1min",
+  "ts": 1489474082831,
+  "tick": {
+    "id": 1489464480,
+    "amount": 0.0,
+    "count": 0,
+    "open": 7962.62,
+    "close": 7962.62,
+    "low": 7962.62,
+    "high": 7962.62,
+    "vol": 0.0
+  }
+}
+
+

tick 说明

+
  "tick": {
+    "id": K线id,
+    "amount": 成交量,
+    "count": 成交笔数,
+    "open": 开盘价,
+    "close": 收盘价,当K线为最晚的一根时,是最新成交价
+    "low": 最低价,
+    "high": 最高价,
+    "vol": 成交额, 即 sum(每一笔成交价 * 该笔的成交量)
+  }
+
+
+

错误订阅的例子

+ +

错误订阅(错误的 symbol)

+
{
+  "sub": "market.invalidsymbol.kline.1min",
+  "id": "id2"
+}
+
+

订阅失败返回数据的例子

+
{
+  "id": "id2",
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "invalid topic market.invalidsymbol.kline.1min",
+  "ts": 1494301904959
+}
+
+

错误订阅(错误的 topic)

+
{
+  "sub": "market.btcusdt.kline.3min",
+  "id": "id3"
+}
+
+

订阅失败返回数据的例子

+
{
+  "id": "id3",
+  "status": "error",
+  "err-code": "bad-request",
+  "err-msg": "invalid topic market.btcusdt.kline.3min",
+  "ts": 1494310283622
+}
+

请求 KLine 数据 market.$symbol.kline.$period

{
+  "req": "market.$symbol.kline.$period",
+  "id": "id generated by client",
+  "from": 1533536947, //optional, type: long, 2017-07-28T00:00:00+08:00  2050-01-01T00:00:00+08:00 之间的时间点,单位:秒
+  "to": 1533536947 //optional, type: long, 2017-07-28T00:00:00+08:00  2050-01-01T00:00:00+08:00 之间的时间点,单位:秒,必须比 from 
+}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, ethusdt, ltcusdt...
periodtruestringK线周期1min, 5min, 15min, 30min, 60min, 1day, 1mon, 1week, 1year
+

请求 KLine 数据的例子

{
+  "req": "market.btcusdt.kline.1min",
+  "id": "id10"
+}
+
+

返回数据的例子

+
{
+  "rep": "market.btcusdt.kline.1min",
+  "status": "ok",
+  "id": "id10",
+  "tick": [
+    {
+      "amount": 17.4805,
+      "count":  27,
+      "id":     1494478080,
+      "open":   10050.00,
+      "close":  10058.00,
+      "low":    10050.00,
+      "high":   10058.00,
+      "vol":    175798.757708
+    },
+    {
+      "amount": 15.7389,
+      "count":  28,
+      "id":     1494478140,
+      "open":   10058.00,
+      "close":  10060.00,
+      "low":    10056.00,
+      "high":   10065.00,
+      "vol":    158331.348600
+    },
+    // more KLine data here
+  ]
+}
+

订阅 Market Depth 数据 market.$symbol.depth.$type

+

成功建立和 WebSocket API 的连接之后,向 Server 发送如下格式的数据来订阅数据:

+
{
+  "sub": "market.$symbol.depth.$type",
+  "id": "id generated by client"
+}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, ethusdt, ltcusdt, etcusdt, bchusdt, ethbtc, ltcbtc, etcbtc, bchbtc...
typetruestringDepth 类型step0, step1, step2, step3, step4, step5(合并深度0-5);step0时,不合并深度
+ +
    +
  • 用户选择“合并深度”时,一定报价精度内的市场挂单将予以合并显示。合并深度仅改变显示方式,不改变实际成交价格。
  • +
+ +

正确订阅例子

+
{
+  "sub": "market.btcusdt.depth.step0",
+  "id": "id1"
+}
+
+

订阅成功返回数据的例子

+
{
+  "id": "id1",
+  "status": "ok",
+  "subbed": "market.btcusdt.depth.step0",
+  "ts": 1489474081631
+}
+
+

之后每当 depth 有更新时,client 会收到数据,例子

+
{
+  "ch": "market.btcusdt.depth.step0",
+  "ts": 1489474082831,
+  "tick": {
+    "bids": [
+    [9999.3900,0.0098], // [price, amount]
+    [9992.5947,0.0560],
+    // more Market Depth data here
+    ],
+    "asks": [
+    [10010.9800,0.0099]
+    [10011.3900,2.0000]
+    //more data here
+    ]
+  }
+}
+
+

tick 说明 + + "tick": { + "bids": [ + [买1价,买1量] + [买2价,买2量] + //more data here + ], + "asks": [ + [卖1价,卖1量] + [卖2价,卖2量] + //more data here + ] + } +

+

请求 Market Depth 数据 market.$symbol.depth.$type

{
+  "req": "market.$symbol.depth.$type",
+  "id": "id generated by client"
+}
+

请求 Market Depth 数据的例子

{
+  "req": "market.btcusdt.depth.step0",
+  "id": "id10"
+}
+
+

返回数据的例子:

+
{
+  "rep": "market.btcusdt.depth.step0",
+  "status": "ok",
+  "id": "id10",
+  "tick": {
+    "bids": [
+    [9999.3900,0.0098], // [price, amount]
+    [9992.5947,0.0560],
+    // more Market Depth data here
+    ],
+    "asks": [
+    [10010.9800,0.0099]
+    [10011.3900,2.0000]
+    //more data here
+    ]
+  }
+}
+

订阅 Trade Detail 数据 market.$symbol.trade.detail

{
+  "sub": "market.$symbol.trade.detail",
+  "id": "id generated by client"
+}
+
+ + + + + + + + + + + + + + + + + + +
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, ethusdt, ltcusdt, etcusdt, bchusdt, ethbtc, ltcbtc, etcbtc, bchbtc...
+ +

正确订阅例子:

+
{
+  "sub": "market.btcusdt.trade.detail",
+  "id": "id1"
+}
+
+

订阅成功返回数据的例子:

+
{
+  "id": "id1",
+  "status": "ok",
+  "subbed": "market.btcusdt.trade.detail",
+  "ts": 1489474081631
+}
+
+

之后每当 Trade Detail 有更新时,client 会收到数据,例子:

+
{
+  "ch": "market.btcusdt.trade.detail",
+  "ts": 1489474082831,
+  "tick": {
+        "id": 14650745135,
+        "ts": 1533265950234,
+        "data": [
+            {
+                "amount": 0.0099,
+                "ts": 1533265950234,
+                "id": 146507451359183894799,
+                "price": 401.74,
+                "direction": "buy"
+            },
+            // more Trade Detail data here
+        ]
+    }
+  }
+}
+
+

data 说明:

+
  "data": [
+    {
+      "id":        消息ID,
+      "price":     成交价,
+      "time":      成交时间,
+      "amount":    成交量,
+      "direction": 成交方向,
+      "tradeId":   成交ID,
+      "ts":        时间戳
+    }
+  ]
+

请求 Trade Detail 数据 market.$symbol.trade.detail

{
+  "req": "market.$symbol.trade.detail",
+  "id": "id generated by client"
+}
+
+
    +
  • 仅能获取最近 300 个 Trade Detail 数据
  • +
+

请求 Trade Detail 数据的例子

{
+  "req": "market.btcusdt.trade.detail",
+  "id": "id11"
+}
+
+

返回数据的例子:

+
{
+  "rep": "market.btcusdt.trade.detail",
+  "status": "ok",
+  "id": "id11",
+  "data": [
+    {
+      "id":        601595424,
+      "price":     10195.64,
+      "time":      1494495766,
+      "amount":    0.2943,
+      "direction": "buy",
+      "tradeId":   601595424,
+      "ts":        1494495766000
+    },
+    {
+      "id":        601595423,
+      "price":     10195.64,
+      "time":      1494495711,
+      "amount":    0.2430,
+      "direction": "buy",
+      "tradeId":   601595423,
+      "ts":        1494495711000
+    },
+    // more Trade Detail data here
+  ]
+}
+

请求 Market Detail 数据 market.$symbol.detail

{
+  "req": "market.$symbol.detail",
+  "id": "id generated by client"
+}
+
+
    +
  • 仅返回当前 Market Detail
  • +
+

请求 Market Detail 数据的例子

{
+  "req": "market.btcusdt.detail",
+  "id": "id12"
+}
+
+

返回数据的例子:

+
{
+  "rep": "market.btcusdt.detail",
+  "status": "ok",
+  "id": "id12",
+  "tick": {
+    "amount": 12224.2922,
+    "open":   9790.52,
+    "close":  10195.00,
+    "high":   10300.00,
+    "ts":     1494496390000,
+    "id":     1494496390,
+    "count":  15195,
+    "low":    9657.00,
+    "vol":    121906001.754751
+  }
+}
+
+


+
+
+
+

+ +
+
+
+ shell +
+
+
+ + + diff --git a/gh-pages/v1/ws/javascripts/all.js b/gh-pages/v1/ws/javascripts/all.js new file mode 100644 index 0000000..05af78b --- /dev/null +++ b/gh-pages/v1/ws/javascripts/all.js @@ -0,0 +1,131 @@ +!function(){if("ontouchstart"in window){var e,t,n,r,i,o,s={};e=function(e,t){return Math.abs(e[0]-t[0])>5||Math.abs(e[1]-t[1])>5},t=function(e){this.startXY=[e.touches[0].clientX,e.touches[0].clientY],this.threshold=!1},n=function(t){return!this.threshold&&void(this.threshold=e(this.startXY,[t.touches[0].clientX,t.touches[0].clientY]))},r=function(t){if(!this.threshold&&!e(this.startXY,[t.changedTouches[0].clientX,t.changedTouches[0].clientY])){var n=t.changedTouches[0],r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),r.simulated=!0,t.target.dispatchEvent(r)}},i=function(e){var t=Date.now(),n=t-s.time,r=e.clientX,i=e.clientY,a=[Math.abs(s.x-r),Math.abs(s.y-i)],u=o(e.target,"A")||e.target,c=u.nodeName,l="A"===c,f=window.navigator.standalone&&l&&e.target.getAttribute("href");return s.time=t,s.x=r,s.y=i,!((!e.simulated&&(n<500||n<1500&&a[0]<50&&a[1]<50)||f)&&(e.preventDefault(),e.stopPropagation(),!f))&&(f&&(window.location=u.getAttribute("href")),void(u&&u.classList&&(u.classList.add("energize-focus"),window.setTimeout(function(){u.classList.remove("energize-focus")},150))))},o=function(e,t){for(var n=e;n!==document.body;){if(!n||n.nodeName===t)return n;n=n.parentNode}return null},document.addEventListener("touchstart",t,!1),document.addEventListener("touchmove",n,!1),document.addEventListener("touchend",r,!1),document.addEventListener("click",i,!0)}}(),/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-03-20T18:59Z + */ +function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(e,t){t=t||ne;var n=t.createElement("script");n.text=e,t.head.appendChild(n).parentNode.removeChild(n)}function r(e){var t=!!e&&"length"in e&&e.length,n=ge.type(e);return"function"!==n&&!ge.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}function o(e,t,n){return ge.isFunction(t)?ge.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?ge.grep(e,function(e){return e===t!==n}):"string"!=typeof t?ge.grep(e,function(e){return ae.call(t,e)>-1!==n}):Ce.test(t)?ge.filter(t,e,n):(t=ge.filter(t,e),ge.grep(e,function(e){return ae.call(t,e)>-1!==n&&1===e.nodeType}))}function s(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function a(e){var t={};return ge.each(e.match(De)||[],function(e,n){t[n]=!0}),t}function u(e){return e}function c(e){throw e}function l(e,t,n,r){var i;try{e&&ge.isFunction(i=e.promise)?i.call(e).done(t).fail(n):e&&ge.isFunction(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}function f(){ne.removeEventListener("DOMContentLoaded",f),e.removeEventListener("load",f),ge.ready()}function d(){this.expando=ge.expando+d.uid++}function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Ie.test(e)?JSON.parse(e):e)}function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Re,"-$&").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n=p(n)}catch(e){}He.set(e,t,n)}else n=void 0;return n}function g(e,t,n,r){var i,o=1,s=20,a=r?function(){return r.cur()}:function(){return ge.css(e,t,"")},u=a(),c=n&&n[3]||(ge.cssNumber[t]?"":"px"),l=(ge.cssNumber[t]||"px"!==c&&+u)&&Me.exec(ge.css(e,t));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do o=o||".5",l/=o,ge.style(e,t,l+c);while(o!==(o=a()/u)&&1!==o&&--s)}return n&&(l=+l||+u||0,i=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=i)),i}function v(e){var t,n=e.ownerDocument,r=e.nodeName,i=Ve[r];return i?i:(t=n.body.appendChild(n.createElement(r)),i=ge.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),Ve[r]=i,i)}function m(e,t){for(var n,r,i=[],o=0,s=e.length;o-1)i&&i.push(o);else if(c=ge.contains(o.ownerDocument,o),s=y(f.appendChild(o),"script"),c&&x(s),n)for(l=0;o=s[l++];)Qe.test(o.type||"")&&n.push(o);return f}function w(){return!0}function T(){return!1}function S(){try{return ne.activeElement}catch(e){}}function E(e,t,n,r,i,o){var s,a;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(a in t)E(e,a,n,r,t[a],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=T;else if(!i)return e;return 1===o&&(s=i,i=function(e){return ge().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=ge.guid++)),e.each(function(){ge.event.add(this,t,i,r,n)})}function C(e,t){return i(e,"table")&&i(11!==t.nodeType?t:t.firstChild,"tr")?ge(">tbody",e)[0]||e:e}function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function N(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function j(e,t){var n,r,i,o,s,a,u,c;if(1===t.nodeType){if(Pe.hasData(e)&&(o=Pe.access(e),s=Pe.set(t,o),c=o.events)){delete s.handle,s.events={};for(i in c)for(n=0,r=c[i].length;n1&&"string"==typeof h&&!pe.checkClone&&rt.test(h))return e.each(function(n){var o=e.eq(n);g&&(t[0]=h.call(this,n,o.html())),L(o,t,r,i)});if(d&&(o=b(t,e[0].ownerDocument,!1,e,i),s=o.firstChild,1===o.childNodes.length&&(o=s),s||i)){for(a=ge.map(y(o,"script"),k),u=a.length;f=0&&nS.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[_]=!0,e}function i(e){var t=q.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=n.length;r--;)S.attrHandle[n[r]]=t}function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return function(t){return"form"in t?t.parentNode&&t.disabled===!1?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&Ee(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function l(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function p(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function v(e,n,r){for(var i=0,o=n.length;i-1&&(r[c]=!(s[c]=f))}}else x=m(x===s?x.splice(h,x.length):x),o?o(null,s,x,u):K.apply(s,x)})}function x(e){for(var t,n,r,i=e.length,o=S.relative[e[0].type],s=o||S.relative[" "],a=o?1:0,u=h(function(e){return e===t},s,!0),c=h(function(e){return ee(t,e)>-1},s,!0),l=[function(e,n,r){var i=!o&&(r||n!==A)||((t=n).nodeType?u(e,n,r):c(e,n,r));return t=null,i}];a1&&g(l),a>1&&p(e.slice(0,a-1).concat({value:" "===e[a-2].type?"*":""})).replace(ae,"$1"),n,a0,o=e.length>0,s=function(r,s,a,u,c){var l,f,d,p=0,h="0",g=r&&[],v=[],y=A,x=r||o&&S.find.TAG("*",c),b=W+=null==y?1:Math.random()||.1,w=x.length;for(c&&(A=s===q||s||c);h!==w&&null!=(l=x[h]);h++){if(o&&l){for(f=0,s||l.ownerDocument===q||(O(l),a=!$);d=e[f++];)if(d(l,s||q,a)){u.push(l);break}c&&(W=b)}i&&((l=!d&&l)&&p--,r&&g.push(l))}if(p+=h,i&&h!==p){for(f=0;d=n[f++];)d(g,v,s,a);if(r){if(p>0)for(;h--;)g[h]||v[h]||(v[h]=J.call(u));v=m(v)}K.apply(u,v),c&&!r&&v.length>0&&p+n.length>1&&t.uniqueSort(u)}return c&&(W=b,A=y),g};return i?r(s):s}var w,T,S,E,C,k,N,j,A,L,D,O,q,F,$,P,H,I,R,_="sizzle"+1*new Date,M=e.document,W=0,B=0,z=n(),V=n(),X=n(),U=function(e,t){return e===t&&(D=!0),0},Q={}.hasOwnProperty,Y=[],J=Y.pop,G=Y.push,K=Y.push,Z=Y.slice,ee=function(e,t){for(var n=0,r=e.length;n+~]|"+ne+")"+ne+"*"),le=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),fe=new RegExp(oe),de=new RegExp("^"+re+"$"),pe={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,ge=/^h\d$/i,ve=/^[^{]+\{\s*\[native \w/,me=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,xe=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),be=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},we=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Te=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},Se=function(){O()},Ee=h(function(e){return e.disabled===!0&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{K.apply(Y=Z.call(M.childNodes),M.childNodes),Y[M.childNodes.length].nodeType}catch(e){K={apply:Y.length?function(e,t){G.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}T=t.support={},C=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},O=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:M;return r!==q&&9===r.nodeType&&r.documentElement?(q=r,F=q.documentElement,$=!C(q),M!==q&&(n=q.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Se,!1):n.attachEvent&&n.attachEvent("onunload",Se)),T.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),T.getElementsByTagName=i(function(e){return e.appendChild(q.createComment("")),!e.getElementsByTagName("*").length}),T.getElementsByClassName=ve.test(q.getElementsByClassName),T.getById=i(function(e){return F.appendChild(e).id=_,!q.getElementsByName||!q.getElementsByName(_).length}),T.getById?(S.filter.ID=function(e){var t=e.replace(xe,be);return function(e){return e.getAttribute("id")===t}},S.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&$){var n=t.getElementById(e);return n?[n]:[]}}):(S.filter.ID=function(e){var t=e.replace(xe,be);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},S.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&$){var n,r,i,o=t.getElementById(e);if(o){if(n=o.getAttributeNode("id"),n&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if(n=o.getAttributeNode("id"),n&&n.value===e)return[o]}return[]}}),S.find.TAG=T.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):T.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},S.find.CLASS=T.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&$)return t.getElementsByClassName(e)},H=[],P=[],(T.qsa=ve.test(q.querySelectorAll))&&(i(function(e){F.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&P.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||P.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+_+"-]").length||P.push("~="),e.querySelectorAll(":checked").length||P.push(":checked"),e.querySelectorAll("a#"+_+"+*").length||P.push(".#.+[+~]")}),i(function(e){e.innerHTML="";var t=q.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&P.push("name"+ne+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&P.push(":enabled",":disabled"),F.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&P.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),P.push(",.*:")})),(T.matchesSelector=ve.test(I=F.matches||F.webkitMatchesSelector||F.mozMatchesSelector||F.oMatchesSelector||F.msMatchesSelector))&&i(function(e){T.disconnectedMatch=I.call(e,"*"),I.call(e,"[s!='']:x"),H.push("!=",oe)}),P=P.length&&new RegExp(P.join("|")),H=H.length&&new RegExp(H.join("|")),t=ve.test(F.compareDocumentPosition),R=t||ve.test(F.contains)?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)for(;t=t.parentNode;)if(t===e)return!0;return!1},U=t?function(e,t){if(e===t)return D=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!T.sortDetached&&t.compareDocumentPosition(e)===n?e===q||e.ownerDocument===M&&R(M,e)?-1:t===q||t.ownerDocument===M&&R(M,t)?1:L?ee(L,e)-ee(L,t):0:4&n?-1:1)}:function(e,t){if(e===t)return D=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],u=[t];if(!i||!o)return e===q?-1:t===q?1:i?-1:o?1:L?ee(L,e)-ee(L,t):0;if(i===o)return s(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?s(a[r],u[r]):a[r]===M?-1:u[r]===M?1:0},q):q},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==q&&O(e),n=n.replace(le,"='$1']"),T.matchesSelector&&$&&!X[n+" "]&&(!H||!H.test(n))&&(!P||!P.test(n)))try{var r=I.call(e,n);if(r||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,q,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==q&&O(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==q&&O(e);var n=S.attrHandle[t.toLowerCase()],r=n&&Q.call(S.attrHandle,t.toLowerCase())?n(e,t,!$):void 0;return void 0!==r?r:T.attributes||!$?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+"").replace(we,Te)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(D=!T.detectDuplicates,L=!T.sortStable&&e.slice(0),e.sort(U),D){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return L=null,e},E=t.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+=E(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=E(t);return n},S=t.selectors={cacheLength:50,createPseudo:r,match:pe,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(xe,be),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,be),"~="===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]||t.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]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=k(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,be).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=z[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&z(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(se," ")+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,d,p,h,g=o!==s?"nextSibling":"previousSibling",v=t.parentNode,m=a&&t.nodeName.toLowerCase(),y=!u&&!a,x=!1;if(v){if(o){for(;g;){for(d=t;d=d[g];)if(a?d.nodeName.toLowerCase()===m:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[s?v.firstChild:v.lastChild],s&&y){for(d=v,f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===W&&c[1],x=p&&c[2],d=p&&v.childNodes[p];d=++p&&d&&d[g]||(x=p=0)||h.pop();)if(1===d.nodeType&&++x&&d===t){l[e]=[W,p,x];break}}else if(y&&(d=t,f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===W&&c[1],x=p),x===!1)for(;(d=++p&&d&&d[g]||(x=p=0)||h.pop())&&((a?d.nodeName.toLowerCase()!==m:1!==d.nodeType)||!++x||(y&&(f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),l[e]=[W,x]),d!==t)););return x-=i,x===r||x%r===0&&x/r>=0}}},PSEUDO:function(e,n){var i,o=S.pseudos[e]||S.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[_]?o(n):o.length>1?(i=[e,e,"",n],S.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),s=i.length;s--;)r=ee(e,i[s]),e[r]=!(t[r]=i[s])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=N(e.replace(ae,"$1"));return i[_]?r(function(e,t,n,r){for(var o,s=i(e,null,r,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(xe,be),function(t){return(t.textContent||t.innerText||E(t)).indexOf(e)>-1}}),lang:r(function(e){return de.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(xe,be).toLowerCase(),function(t){var n;do if(n=$?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===F},focus:function(e){return e===q.activeElement&&(!q.hasFocus||q.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:c(!1),disabled:c(!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.nodeType<6)return!1;return!0},parent:function(e){return!S.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return he.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"))||"text"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:l(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(s=o[0]).type&&9===t.nodeType&&$&&S.relative[o[1].type]){if(t=(S.find.ID(s.matches[0].replace(xe,be),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(s=o[i],!S.relative[a=s.type]);)if((u=S.find[a])&&(r=u(s.matches[0].replace(xe,be),ye.test(o[0].type)&&f(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&p(o),!e)return K.apply(n,r),n;break}}return(c||N(e,l))(r,t,!$,n,!t||ye.test(e)&&f(t.parentNode)||t),n},T.sortStable=_.split("").sort(U).join("")===_,T.detectDuplicates=!!D,O(),T.sortDetached=i(function(e){return 1&e.compareDocumentPosition(q.createElement("fieldset"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),T.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);ge.find=be,ge.expr=be.selectors,ge.expr[":"]=ge.expr.pseudos,ge.uniqueSort=ge.unique=be.uniqueSort,ge.text=be.getText,ge.isXMLDoc=be.isXML,ge.contains=be.contains,ge.escapeSelector=be.escape;var we=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&ge(e).is(n))break;r.push(e)}return r},Te=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},Se=ge.expr.match.needsContext,Ee=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,Ce=/^.[^:#\[\.,]*$/;ge.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ge.find.matchesSelector(r,e)?[r]:[]:ge.find.matches(e,ge.grep(t,function(e){return 1===e.nodeType}))},ge.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ge(e).filter(function(){for(t=0;t1?ge.uniqueSort(n):n},filter:function(e){return this.pushStack(o(this,e||[],!1))},not:function(e){return this.pushStack(o(this,e||[],!0))},is:function(e){return!!o(this,"string"==typeof e&&Se.test(e)?ge(e):e||[],!1).length}});var ke,Ne=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,je=ge.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||ke,"string"==typeof e){if(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:Ne.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ge?t[0]:t,ge.merge(this,ge.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:ne,!0)),Ee.test(r[1])&&ge.isPlainObject(t))for(r in t)ge.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=ne.getElementById(r[2]),i&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):ge.isFunction(e)?void 0!==n.ready?n.ready(e):e(ge):ge.makeArray(e,this)};je.prototype=ge.fn,ke=ge(ne);var Ae=/^(?:parents|prev(?:Until|All))/,Le={children:!0,contents:!0,next:!0,prev:!0};ge.fn.extend({has:function(e){var t=ge(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&ge.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?ge.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?ae.call(ge(e),this[0]):ae.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ge.uniqueSort(ge.merge(this.get(),ge(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ge.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return we(e,"parentNode")},parentsUntil:function(e,t,n){return we(e,"parentNode",n)},next:function(e){return s(e,"nextSibling")},prev:function(e){return s(e,"previousSibling")},nextAll:function(e){return we(e,"nextSibling")},prevAll:function(e){return we(e,"previousSibling")},nextUntil:function(e,t,n){return we(e,"nextSibling",n)},prevUntil:function(e,t,n){return we(e,"previousSibling",n)},siblings:function(e){return Te((e.parentNode||{}).firstChild,e)},children:function(e){return Te(e.firstChild)},contents:function(e){return i(e,"iframe")?e.contentDocument:(i(e,"template")&&(e=e.content||e),ge.merge([],e.childNodes))}},function(e,t){ge.fn[e]=function(n,r){var i=ge.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=ge.filter(r,i)),this.length>1&&(Le[e]||ge.uniqueSort(i),Ae.test(e)&&i.reverse()),this.pushStack(i)}});var De=/[^\x20\t\r\n\f]+/g;ge.Callbacks=function(e){e="string"==typeof e?a(e):ge.extend({},e);var t,n,r,i,o=[],s=[],u=-1,c=function(){for(i=i||e.once,r=t=!0;s.length;u=-1)for(n=s.shift();++u-1;)o.splice(n,1),n<=u&&u--}),this},has:function(e){return e?ge.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=s=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},ge.extend({Deferred:function(t){var n=[["notify","progress",ge.Callbacks("memory"),ge.Callbacks("memory"),2],["resolve","done",ge.Callbacks("once memory"),ge.Callbacks("once memory"),0,"resolved"],["reject","fail",ge.Callbacks("once memory"),ge.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return ge.Deferred(function(t){ge.each(n,function(n,r){var i=ge.isFunction(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&ge.isFunction(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){function o(t,n,r,i){return function(){var a=this,l=arguments,f=function(){var e,f;if(!(t=s&&(r!==c&&(a=void 0,l=[e]),n.rejectWith(a,l))}};t?d():(ge.Deferred.getStackHook&&(d.stackTrace=ge.Deferred.getStackHook()),e.setTimeout(d))}}var s=0;return ge.Deferred(function(e){n[0][3].add(o(0,e,ge.isFunction(i)?i:u,e.notifyWith)),n[1][3].add(o(0,e,ge.isFunction(t)?t:u)),n[2][3].add(o(0,e,ge.isFunction(r)?r:c))}).promise()},promise:function(e){return null!=e?ge.extend(e,i):i}},o={};return ge.each(n,function(e,t){var s=t[2],a=t[5];i[t[1]]=s.add,a&&s.add(function(){r=a},n[3-e][2].disable,n[0][2].lock),s.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=s.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=ie.call(arguments),o=ge.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?ie.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&(l(e,o.done(s(n)).resolve,o.reject,!t),"pending"===o.state()||ge.isFunction(i[n]&&i[n].then)))return o.then();for(;n--;)l(i[n],s(n),o.reject);return o.promise()}});var Oe=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ge.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&Oe.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},ge.readyException=function(t){e.setTimeout(function(){throw t})};var qe=ge.Deferred();ge.fn.ready=function(e){return qe.then(e)["catch"](function(e){ge.readyException(e)}),this},ge.extend({isReady:!1,readyWait:1,ready:function(e){(e===!0?--ge.readyWait:ge.isReady)||(ge.isReady=!0,e!==!0&&--ge.readyWait>0||qe.resolveWith(ne,[ge]))}}),ge.ready.then=qe.then,"complete"===ne.readyState||"loading"!==ne.readyState&&!ne.documentElement.doScroll?e.setTimeout(ge.ready):(ne.addEventListener("DOMContentLoaded",f),e.addEventListener("load",f));var Fe=function(e,t,n,r,i,o,s){var a=0,u=e.length,c=null==n;if("object"===ge.type(n)){i=!0;for(a in n)Fe(e,t,a,n[a],!0,o,s)}else if(void 0!==r&&(i=!0,ge.isFunction(r)||(s=!0),c&&(s?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(ge(e),n)})),t))for(;a1,null,!0)},removeData:function(e){return this.each(function(){He.remove(this,e)})}}),ge.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Pe.get(e,t),n&&(!r||Array.isArray(n)?r=Pe.access(e,t,ge.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ge.queue(e,t),r=n.length,i=n.shift(),o=ge._queueHooks(e,t),s=function(){ge.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Pe.get(e,n)||Pe.access(e,n,{empty:ge.Callbacks("once memory").add(function(){Pe.remove(e,[t+"queue",n])})})}}),ge.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,Qe=/^$|\/(?:java|ecma)script/i,Ye={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};Ye.optgroup=Ye.option,Ye.tbody=Ye.tfoot=Ye.colgroup=Ye.caption=Ye.thead,Ye.th=Ye.td;var Je=/<|&#?\w+;/;!function(){var e=ne.createDocumentFragment(),t=e.appendChild(ne.createElement("div")),n=ne.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),pe.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Ge=ne.documentElement,Ke=/^key/,Ze=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,et=/^([^.]*)(?:\.(.+)|)/;ge.event={global:{},add:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Pe.get(e);if(v)for(n.handler&&(o=n,n=o.handler,i=o.selector),i&&ge.find.matchesSelector(Ge,i),n.guid||(n.guid=ge.guid++),(u=v.events)||(u=v.events={}), +(s=v.handle)||(s=v.handle=function(t){return"undefined"!=typeof ge&&ge.event.triggered!==t.type?ge.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(De)||[""],c=t.length;c--;)a=et.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p&&(f=ge.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=ge.event.special[p]||{},l=ge.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ge.expr.match.needsContext.test(i),namespace:h.join(".")},o),(d=u[p])||(d=u[p]=[],d.delegateCount=0,f.setup&&f.setup.call(e,r,h,s)!==!1||e.addEventListener&&e.addEventListener(p,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,l):d.push(l),ge.event.global[p]=!0)},remove:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Pe.hasData(e)&&Pe.get(e);if(v&&(u=v.events)){for(t=(t||"").match(De)||[""],c=t.length;c--;)if(a=et.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p){for(f=ge.event.special[p]||{},p=(r?f.delegateType:f.bindType)||p,d=u[p]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=d.length;o--;)l=d[o],!i&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(d.splice(o,1),l.selector&&d.delegateCount--,f.remove&&f.remove.call(e,l));s&&!d.length&&(f.teardown&&f.teardown.call(e,h,v.handle)!==!1||ge.removeEvent(e,p,v.handle),delete u[p])}else for(p in u)ge.event.remove(e,p+t[c],n,r,!0);ge.isEmptyObject(u)&&Pe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,s,a=ge.event.fix(e),u=new Array(arguments.length),c=(Pe.get(this,"events")||{})[a.type]||[],l=ge.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||c.disabled!==!0)){for(o=[],s={},n=0;n-1:ge.find(i,this,null,[c]).length),s[i]&&o.push(r);o.length&&a.push({elem:c,handlers:o})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,nt=/\s*$/g;ge.extend({htmlPrefilter:function(e){return e.replace(tt,"<$1>")},clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=ge.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ge.isXMLDoc(e)))for(s=y(a),o=y(e),r=0,i=o.length;r0&&x(s,!u&&y(e,"script")),a},cleanData:function(e){for(var t,n,r,i=ge.event.special,o=0;void 0!==(n=e[o]);o++)if($e(n)){if(t=n[Pe.expando]){if(t.events)for(r in t.events)i[r]?ge.event.remove(n,r):ge.removeEvent(n,r,t.handle);n[Pe.expando]=void 0}n[He.expando]&&(n[He.expando]=void 0)}}}),ge.fn.extend({detach:function(e){return D(this,e,!0)},remove:function(e){return D(this,e)},text:function(e){return Fe(this,function(e){return void 0===e?ge.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.appendChild(e)}})},prepend:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ge.cleanData(y(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ge.clone(this,e,t)})},html:function(e){return Fe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!nt.test(e)&&!Ye[(Ue.exec(e)||["",""])[1].toLowerCase()]){e=ge.htmlPrefilter(e);try{for(;n1)}}),ge.Tween=R,R.prototype={constructor:R,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ge.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ge.cssNumber[n]?"":"px")},cur:function(){var e=R.propHooks[this.prop];return e&&e.get?e.get(this):R.propHooks._default.get(this)},run:function(e){var t,n=R.propHooks[this.prop];return this.options.duration?this.pos=t=ge.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ge.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){ge.fx.step[e.prop]?ge.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[ge.cssProps[e.prop]]&&!ge.cssHooks[e.prop]?e.elem[e.prop]=e.now:ge.style(e.elem,e.prop,e.now+e.unit)}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ge.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ge.fx=R.prototype.init,ge.fx.step={};var gt,vt,mt=/^(?:toggle|show|hide)$/,yt=/queueHooks$/;ge.Animation=ge.extend(X,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return g(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){ge.isFunction(e)?(t=e,e=["*"]):e=e.match(De);for(var n,r=0,i=e.length;r1)},removeAttr:function(e){return this.each(function(){ge.removeAttr(this,e)})}}),ge.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ge.prop(e,t,n):(1===o&&ge.isXMLDoc(e)||(i=ge.attrHooks[t.toLowerCase()]||(ge.expr.match.bool.test(t)?xt:void 0)),void 0!==n?null===n?void ge.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:(r=ge.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&"radio"===t&&i(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(De);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),xt={set:function(e,t,n){return t===!1?ge.removeAttr(e,n):e.setAttribute(n,n),n}},ge.each(ge.expr.match.bool.source.match(/\w+/g),function(e,t){var n=bt[t]||ge.find.attr;bt[t]=function(e,t,r){var i,o,s=t.toLowerCase();return r||(o=bt[s],bt[s]=i,i=null!=n(e,t,r)?s:null,bt[s]=o),i}});var wt=/^(?:input|select|textarea|button)$/i,Tt=/^(?:a|area)$/i;ge.fn.extend({prop:function(e,t){return Fe(this,ge.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[ge.propFix[e]||e]})}}),ge.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ge.isXMLDoc(e)||(t=ge.propFix[t]||t,i=ge.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ge.find.attr(e,"tabindex");return t?parseInt(t,10):wt.test(e.nodeName)||Tt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),pe.optSelected||(ge.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ge.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ge.propFix[this.toLowerCase()]=this}),ge.fn.extend({addClass:function(e){var t,n,r,i,o,s,a,u=0;if(ge.isFunction(e))return this.each(function(t){ge(this).addClass(e.call(this,t,Q(this)))});if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,i,o,s,a,u=0;if(ge.isFunction(e))return this.each(function(t){ge(this).removeClass(e.call(this,t,Q(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):ge.isFunction(e)?this.each(function(n){ge(this).toggleClass(e.call(this,n,Q(this),t),t)}):this.each(function(){var t,r,i,o;if("string"===n)for(r=0,i=ge(this),o=e.match(De)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||(t=Q(this),t&&Pe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Pe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+U(Q(n))+" ").indexOf(t)>-1)return!0;return!1}});var St=/\r/g;ge.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=ge.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,ge(this).val()):e,null==i?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=ge.map(i,function(e){return null==e?"":e+""})),t=ge.valHooks[this.type]||ge.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return t=ge.valHooks[i.type]||ge.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:(n=i.value,"string"==typeof n?n.replace(St,""):null==n?"":n)}}}),ge.extend({valHooks:{option:{get:function(e){var t=ge.find.attr(e,"value");return null!=t?t:U(ge.text(e))}},select:{get:function(e){var t,n,r,o=e.options,s=e.selectedIndex,a="select-one"===e.type,u=a?null:[],c=a?s+1:o.length;for(r=s<0?c:a?s:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ge.each(["radio","checkbox"],function(){ge.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=ge.inArray(ge(e).val(),t)>-1}},pe.checkOn||(ge.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=/^(?:focusinfocus|focusoutblur)$/;ge.extend(ge.event,{trigger:function(t,n,r,i){var o,s,a,u,c,l,f,d=[r||ne],p=le.call(t,"type")?t.type:t,h=le.call(t,"namespace")?t.namespace.split("."):[];if(s=a=r=r||ne,3!==r.nodeType&&8!==r.nodeType&&!Et.test(p+ge.event.triggered)&&(p.indexOf(".")>-1&&(h=p.split("."),p=h.shift(),h.sort()),c=p.indexOf(":")<0&&"on"+p,t=t[ge.expando]?t:new ge.Event(p,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:ge.makeArray(n,[t]),f=ge.event.special[p]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!ge.isWindow(r)){for(u=f.delegateType||p,Et.test(u+p)||(s=s.parentNode);s;s=s.parentNode)d.push(s),a=s;a===(r.ownerDocument||ne)&&d.push(a.defaultView||a.parentWindow||e)}for(o=0;(s=d[o++])&&!t.isPropagationStopped();)t.type=o>1?u:f.bindType||p,l=(Pe.get(s,"events")||{})[t.type]&&Pe.get(s,"handle"),l&&l.apply(s,n),l=c&&s[c],l&&l.apply&&$e(s)&&(t.result=l.apply(s,n),t.result===!1&&t.preventDefault());return t.type=p,i||t.isDefaultPrevented()||f._default&&f._default.apply(d.pop(),n)!==!1||!$e(r)||c&&ge.isFunction(r[p])&&!ge.isWindow(r)&&(a=r[c],a&&(r[c]=null),ge.event.triggered=p,r[p](),ge.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=ge.extend(new ge.Event,n,{type:e,isSimulated:!0});ge.event.trigger(r,null,t)}}),ge.fn.extend({trigger:function(e,t){return this.each(function(){ge.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ge.event.trigger(e,t,n,!0)}}),ge.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){ge.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),ge.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin="onfocusin"in e,pe.focusin||ge.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){ge.event.simulate(t,e.target,ge.event.fix(e))};ge.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=Pe.access(r,t);i||r.addEventListener(e,n,!0),Pe.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=Pe.access(r,t)-1;i?Pe.access(r,t,i):(r.removeEventListener(e,n,!0),Pe.remove(r,t))}}});var Ct=e.location,kt=ge.now(),Nt=/\?/;ge.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||ge.error("Invalid XML: "+t),n};var jt=/\[\]$/,At=/\r?\n/g,Lt=/^(?:submit|button|image|reset|file)$/i,Dt=/^(?:input|select|textarea|keygen)/i;ge.param=function(e,t){var n,r=[],i=function(e,t){var n=ge.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!ge.isPlainObject(e))ge.each(e,function(){i(this.name,this.value)});else for(n in e)Y(n,e[n],t,i);return r.join("&")},ge.fn.extend({serialize:function(){return ge.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ge.prop(this,"elements");return e?ge.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ge(this).is(":disabled")&&Dt.test(this.nodeName)&&!Lt.test(e)&&(this.checked||!Xe.test(e))}).map(function(e,t){var n=ge(this).val();return null==n?null:Array.isArray(n)?ge.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}});var Ot=/%20/g,qt=/#.*$/,Ft=/([?&])_=[^&]*/,$t=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ht=/^(?:GET|HEAD)$/,It=/^\/\//,Rt={},_t={},Mt="*/".concat("*"),Wt=ne.createElement("a");Wt.href=Ct.href,ge.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Mt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ge.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?K(K(e,ge.ajaxSettings),t):K(ge.ajaxSettings,e)},ajaxPrefilter:J(Rt),ajaxTransport:J(_t),ajax:function(t,n){function r(t,n,r,a){var c,d,p,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),i=void 0,s=a||"",S.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=Z(h,S,r)),b=ee(h,b,S,c),c?(h.ifModified&&(w=S.getResponseHeader("Last-Modified"),w&&(ge.lastModified[o]=w),w=S.getResponseHeader("etag"),w&&(ge.etag[o]=w)),204===t||"HEAD"===h.type?T="nocontent":304===t?T="notmodified":(T=b.state,d=b.data,p=b.error,c=!p)):(p=T,!t&&T||(T="error",t<0&&(t=0))),S.status=t,S.statusText=(n||T)+"",c?m.resolveWith(g,[d,T,S]):m.rejectWith(g,[S,T,p]),S.statusCode(x),x=void 0,f&&v.trigger(c?"ajaxSuccess":"ajaxError",[S,h,c?d:p]),y.fireWith(g,[S,T]),f&&(v.trigger("ajaxComplete",[S,h]),--ge.active||ge.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,s,a,u,c,l,f,d,p,h=ge.ajaxSetup({},n),g=h.context||h,v=h.context&&(g.nodeType||g.jquery)?ge(g):ge.event,m=ge.Deferred(),y=ge.Callbacks("once memory"),x=h.statusCode||{},b={},w={},T="canceled",S={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=$t.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)S.always(e[S.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(m.promise(S),h.url=((t||h.url||Ct.href)+"").replace(It,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(De)||[""],null==h.crossDomain){c=ne.createElement("a");try{c.href=h.url,c.href=c.href,h.crossDomain=Wt.protocol+"//"+Wt.host!=c.protocol+"//"+c.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=ge.param(h.data,h.traditional)),G(Rt,h,n,S),l)return S;f=ge.event&&h.global,f&&0===ge.active++&&ge.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Ht.test(h.type),o=h.url.replace(qt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Ot,"+")):(p=h.url.slice(o.length),h.data&&(o+=(Nt.test(o)?"&":"?")+h.data,delete h.data),h.cache===!1&&(o=o.replace(Ft,"$1"),p=(Nt.test(o)?"&":"?")+"_="+kt++ +p),h.url=o+p),h.ifModified&&(ge.lastModified[o]&&S.setRequestHeader("If-Modified-Since",ge.lastModified[o]),ge.etag[o]&&S.setRequestHeader("If-None-Match",ge.etag[o])),(h.data&&h.hasContent&&h.contentType!==!1||n.contentType)&&S.setRequestHeader("Content-Type",h.contentType),S.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Mt+"; q=0.01":""):h.accepts["*"]);for(d in h.headers)S.setRequestHeader(d,h.headers[d]);if(h.beforeSend&&(h.beforeSend.call(g,S,h)===!1||l))return S.abort();if(T="abort",y.add(h.complete),S.done(h.success),S.fail(h.error),i=G(_t,h,n,S)){if(S.readyState=1,f&&v.trigger("ajaxSend",[S,h]),l)return S;h.async&&h.timeout>0&&(u=e.setTimeout(function(){S.abort("timeout")},h.timeout));try{l=!1,i.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return S},getJSON:function(e,t,n){return ge.get(e,t,n,"json")},getScript:function(e,t){return ge.get(e,void 0,t,"script")}}),ge.each(["get","post"],function(e,t){ge[t]=function(e,n,r,i){return ge.isFunction(n)&&(i=i||r,r=n,n=void 0),ge.ajax(ge.extend({url:e,type:t,dataType:i,data:n,success:r},ge.isPlainObject(e)&&e))}}),ge._evalUrl=function(e){return ge.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},ge.fn.extend({wrapAll:function(e){var t;return this[0]&&(ge.isFunction(e)&&(e=e.call(this[0])),t=ge(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return ge.isFunction(e)?this.each(function(t){ge(this).wrapInner(e.call(this,t))}):this.each(function(){var t=ge(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=ge.isFunction(e);return this.each(function(n){ge(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ge(this).replaceWith(this.childNodes)}),this}}),ge.expr.pseudos.hidden=function(e){return!ge.expr.pseudos.visible(e)},ge.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ge.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},zt=ge.ajaxSettings.xhr();pe.cors=!!zt&&"withCredentials"in zt,pe.ajax=zt=!!zt,ge.ajaxTransport(function(t){var n,r;if(pe.cors||zt&&!t.crossDomain)return{send:function(i,o){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(s in i)a.setRequestHeader(s,i[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?o(0,"error"):o(a.status,a.statusText):o(Bt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),ge.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ge.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){ +return ge.globalEval(e),e}}}),ge.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ge.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=ge(" + + diff --git a/source/stylesheets/_icon-font.scss b/source/stylesheets/_icon-font.scss new file mode 100644 index 0000000..b599483 --- /dev/null +++ b/source/stylesheets/_icon-font.scss @@ -0,0 +1,38 @@ +@font-face { + font-family: 'slate'; + src:font-url('slate.eot?-syv14m'); + src:font-url('slate.eot?#iefix-syv14m') format('embedded-opentype'), + font-url('slate.woff2?-syv14m') format('woff2'), + font-url('slate.woff?-syv14m') format('woff'), + font-url('slate.ttf?-syv14m') format('truetype'), + font-url('slate.svg?-syv14m#slate') format('svg'); + font-weight: normal; + font-style: normal; +} + +%icon { + font-family: 'slate'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; +} + +%icon-exclamation-sign { + @extend %icon; + content: "\e600"; +} +%icon-info-sign { + @extend %icon; + content: "\e602"; +} +%icon-ok-sign { + @extend %icon; + content: "\e606"; +} +%icon-search { + @extend %icon; + content: "\e607"; +} diff --git a/source/stylesheets/_normalize.scss b/source/stylesheets/_normalize.scss new file mode 100644 index 0000000..46f646a --- /dev/null +++ b/source/stylesheets/_normalize.scss @@ -0,0 +1,427 @@ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9/10. + */ + +img { + border: 0; +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} diff --git a/source/stylesheets/_rtl.scss b/source/stylesheets/_rtl.scss new file mode 100644 index 0000000..720719a --- /dev/null +++ b/source/stylesheets/_rtl.scss @@ -0,0 +1,140 @@ +//////////////////////////////////////////////////////////////////////////////// +// RTL Styles Variables +//////////////////////////////////////////////////////////////////////////////// + +$default: auto; + +//////////////////////////////////////////////////////////////////////////////// +// TABLE OF CONTENTS +//////////////////////////////////////////////////////////////////////////////// + +#toc>ul>li>a>span { + float: left; +} + +.toc-wrapper { + transition: right 0.3s ease-in-out !important; + left: $default !important; + #{right}: 0; +} + +.toc-h2 { + padding-#{right}: $nav-padding + $nav-indent; +} + +#nav-button { + #{right}: 0; + transition: right 0.3s ease-in-out; + &.open { + right: $nav-width + } +} + +//////////////////////////////////////////////////////////////////////////////// +// PAGE LAYOUT AND CODE SAMPLE BACKGROUND +//////////////////////////////////////////////////////////////////////////////// +.page-wrapper { + margin-#{left}: $default !important; + margin-#{right}: $nav-width; + .dark-box { + #{right}: $default; + #{left}: 0; + } +} + +.lang-selector { + width: $default !important; + a { + float: right; + } +} + +//////////////////////////////////////////////////////////////////////////////// +// CODE SAMPLE STYLES +//////////////////////////////////////////////////////////////////////////////// +.content { + &>h1, + &>h2, + &>h3, + &>h4, + &>h5, + &>h6, + &>p, + &>table, + &>ul, + &>ol, + &>aside, + &>dl { + margin-#{left}: $examples-width; + margin-#{right}: $default !important; + } + &>ul, + &>ol { + padding-#{right}: $main-padding + 15px; + } + table { + th, + td { + text-align: right; + } + } + dd { + margin-#{right}: 15px; + } + aside { + aside:before { + padding-#{left}: 0.5em; + } + .search-highlight { + background: linear-gradient(to top right, #F7E633 0%, #F1D32F 100%); + } + } + pre, + blockquote { + float: left !important; + clear: left !important; + } +} + +//////////////////////////////////////////////////////////////////////////////// +// TYPOGRAPHY +//////////////////////////////////////////////////////////////////////////////// +h1, +h2, +h3, +h4, +h5, +h6, +p, +aside { + text-align: right; + direction: rtl; +} + +.toc-wrapper { + text-align: right; + direction: rtl; + font-weight: 100 !important; +} + + +//////////////////////////////////////////////////////////////////////////////// +// RESPONSIVE DESIGN +//////////////////////////////////////////////////////////////////////////////// +@media (max-width: $tablet-width) { + .toc-wrapper { + #{right}: -$nav-width; + &.open { + #{right}: 0; + } + } + .page-wrapper { + margin-#{right}: 0; + } +} + +@media (max-width: $phone-width) { + %left-col { + margin-#{left}: 0; + } +} diff --git a/source/stylesheets/_variables.scss b/source/stylesheets/_variables.scss new file mode 100644 index 0000000..5d99743 --- /dev/null +++ b/source/stylesheets/_variables.scss @@ -0,0 +1,104 @@ +/* +Copyright 2008-2013 Concur Technologies, Inc. + +Licensed 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. +*/ + + +//////////////////////////////////////////////////////////////////////////////// +// CUSTOMIZE SLATE +//////////////////////////////////////////////////////////////////////////////// +// Use these settings to help adjust the appearance of Slate + + +// BACKGROUND COLORS +//////////////////// +$nav-bg: #171B2B !default; +$examples-bg: #2D3040 !default; +$code-bg: #1D2123 !default; +$code-annotation-bg: #181C1E !default; +$nav-subitem-bg: #171B2B !default; +$nav-active-bg: #252A44 !default; +$nav-active-parent-bg: #171B2B !default; // parent links of the current section +$nav-active-border: #357CE1 !default; +$lang-select-border: #000 !default; +$lang-select-bg: #131625 !default; +$lang-select-active-bg: $examples-bg !default; // feel free to change this to blue or something +$lang-select-pressed-bg: $examples-bg !default; // color of language tab bg when mouse is pressed +$main-bg: #FFFFFF !default; +$aside-notice-bg: #357CE1 !default; +$aside-warning-bg: #EF5656 !default; +$aside-success-bg: #0DA88B !default; +$search-notice-bg: #131625 !default; + + +// TEXT COLORS +//////////////////// +$main-text: #596A7A !default; // main content text color +$nav-text: #D2D6EC !default; +$nav-active-text: #357CE1 !default; +$nav-active-parent-text: #357CE1 !default; // parent links of the current section +$lang-select-text: #D2D6EC !default; // color of unselected language tab text +$lang-select-active-text: #D2D6EC !default; // color of selected language tab text +$lang-select-pressed-text: #D2D6EC !default; // color of language tab text when mouse is pressed + + +// SIZES +//////////////////// +$nav-width: 230px !default; // width of the navbar +$examples-width: 40% !default; // portion of the screen taken up by code examples +$logo-margin: 0px !default; // margin below logo +$main-padding: 28px !default; // padding to left and right of content & examples +$nav-padding: 15px !default; // padding to left and right of navbar +$nav-v-padding: 10px !default; // padding used vertically around search boxes and results +$nav-indent: 10px !default; // extra padding for ToC subitems +$code-annotation-padding: 13px !default; // padding inside code annotations +$h1-margin-bottom: 21px !default; // padding under the largest header tags +$tablet-width: 930px !default; // min width before reverting to tablet size +$phone-width: $tablet-width - $nav-width !default; // min width before reverting to mobile size + + +// FONTS +//////////////////// +%default-font { + font-family: "Open Sans", "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", monospace,serif; + font-size: 12px; +} + +%header-font { + @extend %default-font; + font-weight: bold; +} + +%code-font { + font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, serif; + font-size: 12px; + line-height: 1.5; +} + + +// OTHER +//////////////////// +$nav-footer-border-color: #303759 !default; +$search-box-border-color: #303759 !default; + + +//////////////////////////////////////////////////////////////////////////////// +// INTERNAL +//////////////////////////////////////////////////////////////////////////////// +// These settings are probably best left alone. + +%break-words { + word-break: break-all; + hyphens: auto; +} diff --git a/source/stylesheets/print.css.scss b/source/stylesheets/print.css.scss new file mode 100644 index 0000000..adf8b66 --- /dev/null +++ b/source/stylesheets/print.css.scss @@ -0,0 +1,147 @@ +@charset "utf-8"; +@import 'normalize'; +@import 'variables'; +@import 'icon-font'; + +/* +Copyright 2008-2013 Concur Technologies, Inc. + +Licensed 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. +*/ + +$print-color: #999; +$print-color-light: #ccc; +$print-font-size: 12px; + +body { + @extend %default-font; +} + +.tocify, .toc-footer, .lang-selector, .search, #nav-button { + display: none; +} + +.tocify-wrapper>img { + margin: 0 auto; + display: block; +} + +.content { + font-size: 12px; + + pre, code { + @extend %code-font; + @extend %break-words; + border: 1px solid $print-color; + border-radius: 5px; + font-size: 0.8em; + } + + pre { + code { + border: 0; + } + } + + pre { + padding: 1.3em; + } + + code { + padding: 0.2em; + } + + table { + border: 1px solid $print-color; + tr { + border-bottom: 1px solid $print-color; + } + td,th { + padding: 0.7em; + } + } + + p { + line-height: 1.5; + } + + a { + text-decoration: none; + color: #000; + } + + h1 { + @extend %header-font; + font-size: 2.5em; + padding-top: 0.5em; + padding-bottom: 0.5em; + margin-top: 1em; + margin-bottom: $h1-margin-bottom; + border: 2px solid $print-color-light; + border-width: 2px 0; + text-align: center; + } + + h2 { + @extend %header-font; + font-size: 1.8em; + margin-top: 2em; + border-top: 2px solid $print-color-light; + padding-top: 0.8em; + } + + h1+h2, h1+div+h2 { + border-top: none; + padding-top: 0; + margin-top: 0; + } + + h3, h4 { + @extend %header-font; + font-size: 0.8em; + margin-top: 1.5em; + margin-bottom: 0.8em; + text-transform: uppercase; + } + + h5, h6 { + text-transform: uppercase; + } + + aside { + padding: 1em; + border: 1px solid $print-color-light; + border-radius: 5px; + margin-top: 1.5em; + margin-bottom: 1.5em; + line-height: 1.6; + } + + aside:before { + vertical-align: middle; + padding-right: 0.5em; + font-size: 14px; + } + + aside.notice:before { + @extend %icon-info-sign; + } + + aside.warning:before { + @extend %icon-exclamation-sign; + } + + aside.success:before { + @extend %icon-ok-sign; + } +} \ No newline at end of file diff --git a/source/stylesheets/screen.css.scss b/source/stylesheets/screen.css.scss new file mode 100644 index 0000000..469982d --- /dev/null +++ b/source/stylesheets/screen.css.scss @@ -0,0 +1,788 @@ +@charset "utf-8"; +@import 'normalize'; +@import 'variables'; +@import 'icon-font'; +// @import 'rtl'; // uncomment to switch to RTL format + +/* +Copyright 2008-2013 Concur Technologies, Inc. + +Licensed 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. +*/ + +//////////////////////////////////////////////////////////////////////////////// +// GENERAL STUFF +//////////////////////////////////////////////////////////////////////////////// + +html, body { + color: $main-text; + padding: 0; + margin: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + @extend %default-font; + background-color: $main-bg; + height: 100%; + -webkit-text-size-adjust: none; /* Never autoresize text */ +} + +//////////////////////////////////////////////////////////////////////////////// +// TABLE OF CONTENTS +//////////////////////////////////////////////////////////////////////////////// + +#toc > ul > li > a > span { + float: right; + background-color: #2484FF; + border-radius: 40px; + width: 20px; +} +header{ + position: fixed; + display: flex; + align-items: center; + width: 100%; + box-sizing: border-box; + padding: 0 26px; + height: 60px; + left: 0; + top: 0; + background: #131625; + box-shadow: 0 1px 0 0 #000; + z-index: 100; + .flex_box{ + flex: 1; + display: flex; + align-items: center; + } + // This is the logo at the top of the ToC + .logo { + display: block; + max-width: 100%; + } + .nav_box{ + position: relative; + margin-left: 56px; + .nav_cell{ + position: relative; + .nav_first{ + display: inline-block; + height: 32px; + line-height: 32px; + min-width: 50px; + text-align: left; + color: #9EB5CA; + font-size: 14px; + text-decoration: none; + + i.icon_nav{ + display: inline-block; + width: 10px; + height: 10px; + background: url(../images/icon_nav.svg) no-repeat center center; + background-size: contain; + vertical-align: top; + margin-top: 12px; + margin-left: 8px; + transition: all 300ms linear; + } + } + + .nav_ul{ + display: none; + position: absolute; + left: 0; + top: 32px; + width: 120px; + padding: 5px 0; + background-color: #fff; + list-style: none; + margin: 0; + box-shadow: 0 0 20px 0 rgba($color: #456189, $alpha: 0.2); + border-radius: 3px; + li{ + width: 100%; + transition: all 300ms linear; + a{ + display: block; + width: 100%; + height: 40px; + line-height: 10px; + box-sizing: border-box; + padding: 0 16px; + color: #2B3D4A; + text-decoration: none; + transition: all 300ms linear; + font-size: 12px; + } + &.active,&:hover{ + background-color: #F2F6FA; + a{ + color: #357CE1; + } + } + } + } + &:hover{ + .icon_nav{ + transform: rotate(180deg); + } + .nav_ul{ + display: block; + } + } + } + .nav_tab{ + font-size: 16px; + line-height: 59px; + a{ + color: #B0B8DB; + display: inline-block; + padding: 0 20px; + border-bottom: 2px solid transparent; + text-decoration: none; + &:hover, &.current { + color: #FFF; + } + &.current { + border-color: #357CE1; + } + } + } + } + .lang{ + display: none; + width: 78px; + height: 26px; + line-height: 26px; + text-align: center; + border: 1px solid #383F66; + color: #ADC1D5; + text-decoration: none; + border-radius: 3px; + transition: all 300ms; + &:hover{ + color: #357CE1; + border-color: #357CE1; + } + } + +} +.toc-wrapper { + transition: left 0.3s ease-in-out; + + overflow-y: auto; + overflow-x: hidden; + position: fixed; + z-index: 30; + top: 60px; + left: 0; + bottom: 0; + width: $nav-width; + background-color: $nav-bg; + font-size: 14px; + font-weight: bold; + + // language selector for mobile devices + .lang-selector { + display: none; + a { + padding-top: 0.5em; + padding-bottom: 0.5em; + } + } + + &>.search { + position: relative; + + input { + background: $nav-bg; + border: 1px solid; + border-color: $search-box-border-color; + padding: 6px 0 6px 30px; + box-sizing: border-box; + margin: $nav-v-padding $nav-padding; + width: $nav-width - ($nav-padding*2); + outline: none; + color: $nav-text; + font-weight: normal; + border-radius: 0; /* ios has a default border radius */ + transition: all 300ms; + margin-top: 35px; + &::placeholder{ + color: #61688A; + } + &:active,&:focus{ + border-color: $nav-active-text; + } + } + + &:before { + position: absolute; + top: 44px; + left: $nav-padding + 8px; + color: #61688A; + @extend %icon-search; + } + } + + .search-results { + margin-top: 0; + box-sizing: border-box; + height: 0; + overflow-y: auto; + overflow-x: hidden; + transition-property: height, margin; + transition-duration: 180ms; + transition-timing-function: ease-in-out; + background: $search-notice-bg; + &.visible { + height: 30%; + } + + li { + margin: 0 $nav-padding; + line-height: 28px; + font-size: 12px; + font-weight: normal; + } + + a { + color: $nav-text; + text-decoration: none; + transition: all 300ms; + &:hover{ + color: $nav-active-text; + } + } + } + + + // The Table of Contents is composed of multiple nested + // unordered lists. These styles remove the default + // styling of an unordered list because it is ugly. + ul, li { + list-style: none; + margin: 0; + padding: 0; + line-height: 48px; + } + + li { + color: $nav-text; + transition-property: background; + transition-timing-function: linear; + transition-duration: 200ms; + } + + // This is the currently selected ToC entry + .toc-link.active { + background-color: $nav-active-bg; + color: $nav-active-text; + } + + // this is parent links of the currently selected ToC entry + .toc-link.active-parent { + background-color: $nav-active-parent-bg; + color: $nav-active-parent-text; + } + + .toc-list-h2 { + display: none; + background-color: #131625; + font-weight: 500; + + .toc-h2{ + color: #61698A; + &.active{ + color: #357CE1; + } + } + } + + .toc-h2 { + padding-left: $nav-padding + $nav-indent; + font-size: 13px; + } + + .toc-footer { + padding: 1em 0; + margin-top: 1em; + border-top: 1px dashed $nav-footer-border-color; + + li,a { + color: $nav-text; + text-decoration: none; + } + + a:hover { + text-decoration: underline; + } + + li { + font-size: 0.8em; + line-height: 1.7; + text-decoration: none; + } + } +} + +.toc-link, .toc-footer li { + padding: 0 $nav-padding 0 $nav-padding; + display: block; + overflow-x: hidden; + white-space: nowrap; + text-overflow: ellipsis; + text-decoration: none; + color: $nav-text; + transition-property: background; + transition-timing-function: linear; + transition-duration: 130ms; +} + +// button to show navigation on mobile devices +#nav-button { + span { + display: block; + $side-pad: $main-padding / 2 - 8px; + padding: $side-pad $side-pad $side-pad; + background-color: rgba($main-bg, 0.7); + transform-origin: 0 0; + transform: rotate(-90deg) translate(-100%, 0); + border-radius: 0 0 0 5px; + } + padding: 0 1.5em 5em 0; // increase touch size area + display: none; + position: fixed; + top: 60; + left: 0; + z-index: 100; + color: #000; + text-decoration: none; + font-weight: bold; + opacity: 0.7; + line-height: 16px; + img { + height: 16px; + vertical-align: bottom; + } + + transition: left 0.3s ease-in-out; + + &:hover { opacity: 1; } + &.open {left: $nav-width} +} + + +//////////////////////////////////////////////////////////////////////////////// +// PAGE LAYOUT AND CODE SAMPLE BACKGROUND +//////////////////////////////////////////////////////////////////////////////// + +.page-wrapper { + margin-left: $nav-width; + position: relative; + z-index: 10; + background-color: $main-bg; + min-height: 100%; + padding-bottom: 1px; // prevent margin overflow + + // The dark box is what gives the code samples their dark background. + // It sits essentially under the actual content block, which has a + // transparent background. + // I know, it's hackish, but it's the simplist way to make the left + // half of the content always this background color. + .dark-box { + width: $examples-width; + background-color: $examples-bg; + position: absolute; + right: 0; + top: 60px; + bottom: 0; + } + + .lang-selector { + position: fixed; + z-index: 50; + border-bottom: 5px solid $lang-select-active-bg; + } +} + +.lang-selector { + background-color: $lang-select-bg; + width: 100%; + font-weight: bold; + a { + display: block; + float:left; + color: $lang-select-text; + text-decoration: none; + padding: 0 10px; + line-height: 30px; + outline: 0; + + &:active, &:focus { + background-color: $lang-select-pressed-bg; + color: $lang-select-pressed-text; + } + + &.active { + background-color: $lang-select-active-bg; + color: $lang-select-active-text; + } + } + + &:after { + content: ''; + clear: both; + display: block; + } +} + +//////////////////////////////////////////////////////////////////////////////// +// CONTENT STYLES +//////////////////////////////////////////////////////////////////////////////// +// This is all the stuff with the light background in the left half of the page + +.content { + // fixes webkit rendering bug for some: see #538 + -webkit-transform: translateZ(0); + // to place content above the dark box + position: relative; + z-index: 30; + a{ + color: #357CE1; + text-decoration: none; + } + &:after { + content: ''; + display: block; + clear: both; + } + + &>h1, &>h2, &>h3, &>h4, &>h5, &>h6, &>p, &>table, &>ul, &>ol, &>aside, &>dl { + margin-right: $examples-width; + padding: 0 $main-padding 8px; + box-sizing: border-box; + display: block; + + @extend %left-col; + } + + &>ul, &>ol { + padding-left: $main-padding + 15px; + } + + // the div is the tocify hidden div for placeholding stuff + &>h1, &>h2, &>div { + clear:both; + } + &>h1[id],&>h2[id],&>h3[id],&>h4[id],&>h5[id],&>h6[id]{ + margin-top: -60px; + z-index: 1; + &::before{ + position: relative; + display: block; + content: ''; + height: 60px; + width: calc(100% + 56px); + margin-left: -28px; + margin-bottom: 8px; + } + } + &>h1[id] { + margin-top: -40px; + } + h1 { + @extend %header-font; + font-size: 14px; + line-height: 1.5em; + margin-bottom: $h1-margin-bottom; + box-shadow: 0 1px 0 0 #E6ECF2; + background-color: #F2F5FA; + color: #1C242C; + &::before{ + background-color: #fff; + } + } + + *:not(h1){ + position: relative; + z-index: 2; + } + h1:first-child, div:first-child + h1 { + border-top-width: 0; + margin-top: 0; + } + + h2 { + @extend %header-font; + font-size: 14px; + margin-bottom: 8px; + color: #1C242C; + } + + // h2s right after h1s should bump right up + // against the h1s. + // h1 + h2, h1 + div + h2 { + // margin-top: $h1-margin-bottom * -1; + // border-top: none; + // } + + h3, h4, h5, h6 { + @extend %header-font; + font-size: 12px; + margin-top: 24px; + margin-bottom: 8px; + line-height: 18px; + color: #1C242C; + } + + h4, h5, h6 { + font-size: 10px; + } + + hr { + margin: 2em 0; + height: 1px; + background: #E6ECF2; + border: none; + margin-left: 28px; + margin-right: calc(50% + 28px); + } + + table { + margin-bottom: 1em; + overflow: auto; + th,td { + text-align: left; + vertical-align: top; + line-height: 1.6; + code { + white-space: nowrap; + } + } + + th { + padding: 5px 10px; + border-top: 1px solid #E6ECF2; + vertical-align: bottom; + } + + td { + padding: 10px; + border-bottom: 1px solid #E6ECF2; + } + + tr:nth-child(odd)>td { + background-color: lighten($main-bg,4.2%); + } + + tr:nth-child(even)>td { + background-color: lighten($main-bg,2.4%); + } + } + + dt { + font-weight: bold; + } + + dd { + margin-left: 15px; + } + + p, li, dt, dd { + line-height: 1.6; + margin-top: 0; + } + + img { + max-width: 100%; + } + + code { + background-color: rgba(0,0,0,0.05); + padding: 3px; + border-radius: 3px; + @extend %break-words; + @extend %code-font; + } + + pre>code { + background-color: transparent; + padding: 0; + } + + aside { + margin-top: 1.5em; + margin-bottom: 1.5em; + background: rgba($color: $aside-notice-bg, $alpha: 0.05); + line-height: 1.6; + color: #1C242C; + margin-left: 28px; + margin-right: calc(50% + 28px); + padding: 0.8em 1.2em; + border: 1px solid; + border-color: rgba($color: $aside-notice-bg, $alpha: 0.3); + &::before{ + color: $aside-notice-bg; + } + &.warning { + background-color: rgba($color: $aside-warning-bg, $alpha: 0.05); + border-color: rgba($color: $aside-warning-bg, $alpha: 0.3); + &::before{ + color: $aside-warning-bg; + } + } + + &.success { + background-color: rgba($color: $aside-success-bg, $alpha: 0.05); + border-color: rgba($color: $aside-success-bg, $alpha: 0.3); + &::before{ + color: $aside-success-bg; + } + } + } + + aside:before { + vertical-align: middle; + padding-right: 0.5em; + font-size: 14px; + } + + aside.notice:before { + @extend %icon-info-sign; + } + + aside.warning:before { + @extend %icon-exclamation-sign; + } + + aside.success:before { + @extend %icon-ok-sign; + } + + .search-highlight { + padding: 2px; + margin: -3px; + border-radius: 4px; + background: rgba($color: #357CE1, $alpha: 0.5); + } +} + +//////////////////////////////////////////////////////////////////////////////// +// CODE SAMPLE STYLES +//////////////////////////////////////////////////////////////////////////////// +// This is all the stuff that appears in the right half of the page + +.content { + pre, blockquote { + background-color: $code-bg; + color: #fff; + + margin: 0; + width: $examples-width; + + float:right; + clear:right; + + box-sizing: border-box; + + @extend %right-col; + + &>p { margin: 0; } + + a { + color: #fff; + text-decoration: none; + border-bottom: dashed 1px #ccc; + } + } + + pre { + @extend %code-font; + padding-top: 2em; + padding-bottom: 2em; + padding: 2em $main-padding; + } + + blockquote { + &>p { + background-color: $code-annotation-bg; + padding: $code-annotation-padding 2em; + color: #eee; + } + } +} + +//////////////////////////////////////////////////////////////////////////////// +// RESPONSIVE DESIGN +//////////////////////////////////////////////////////////////////////////////// +// These are the styles for phones and tablets +// There are also a couple styles disperesed + +@media (max-width: $tablet-width) { + .toc-wrapper { + left: -$nav-width; + + &.open { + left: 0; + } + } + + .page-wrapper { + margin-left: 0; + } + + #nav-button { + display: block; + } + + .toc-link { + padding-top: 0.3em; + padding-bottom: 0.3em; + } +} + +@media (max-width: $phone-width) { + .dark-box { + display: none; + } + + %left-col { + margin-right: 0; + } + + .toc-wrapper .lang-selector { + display: block; + } + + .page-wrapper .lang-selector { + display: none; + } + + %right-col { + width: auto; + float: none; + } + + %right-col + %left-col { + margin-top: $main-padding; + } +} + +.highlight .c, .highlight .cm, .highlight .c1, .highlight .cs { + color: #909090; +} + +.highlight, .highlight .w { + background-color: $code-bg; +} From 9126bd0e1bb384924b1ab4d0fb805deb92d73b8c Mon Sep 17 00:00:00 2001 From: cloudapidoc Date: Wed, 5 Jun 2019 19:38:50 +0800 Subject: [PATCH 02/12] clean v1_rest_cn --- gh-pages/v1/rest/fonts/slate.eot | Bin 1876 -> 0 bytes gh-pages/v1/rest/fonts/slate.svg | 14 - gh-pages/v1/rest/fonts/slate.ttf | Bin 1720 -> 0 bytes gh-pages/v1/rest/fonts/slate.woff | Bin 1796 -> 0 bytes gh-pages/v1/rest/fonts/slate.woff2 | Bin 796 -> 0 bytes gh-pages/v1/rest/images/favicon.ico | Bin 10161 -> 0 bytes gh-pages/v1/rest/images/icon_nav.svg | 18 - gh-pages/v1/rest/images/logo.png | Bin 14099 -> 0 bytes gh-pages/v1/rest/images/logo.svg | 28 - gh-pages/v1/rest/images/navbar.png | Bin 96 -> 0 bytes gh-pages/v1/rest/index.html | 3786 ------------------ gh-pages/v1/rest/javascripts/all.js | 131 - gh-pages/v1/rest/javascripts/all_nosearch.js | 31 - gh-pages/v1/rest/stylesheets/print.css | 1 - gh-pages/v1/rest/stylesheets/screen.css | 1 - gh-pages/v1/ws/fonts/slate.eot | Bin 1876 -> 0 bytes gh-pages/v1/ws/fonts/slate.svg | 14 - gh-pages/v1/ws/fonts/slate.ttf | Bin 1720 -> 0 bytes gh-pages/v1/ws/fonts/slate.woff | Bin 1796 -> 0 bytes gh-pages/v1/ws/fonts/slate.woff2 | Bin 796 -> 0 bytes gh-pages/v1/ws/images/favicon.ico | Bin 10161 -> 0 bytes gh-pages/v1/ws/images/icon_nav.svg | 18 - gh-pages/v1/ws/images/logo.png | Bin 14099 -> 0 bytes gh-pages/v1/ws/images/logo.svg | 28 - gh-pages/v1/ws/images/navbar.png | Bin 96 -> 0 bytes gh-pages/v1/ws/index.html | 1176 ------ gh-pages/v1/ws/javascripts/all.js | 131 - gh-pages/v1/ws/javascripts/all_nosearch.js | 31 - gh-pages/v1/ws/stylesheets/print.css | 1 - gh-pages/v1/ws/stylesheets/screen.css | 1 - 30 files changed, 5410 deletions(-) delete mode 100644 gh-pages/v1/rest/fonts/slate.eot delete mode 100644 gh-pages/v1/rest/fonts/slate.svg delete mode 100644 gh-pages/v1/rest/fonts/slate.ttf delete mode 100644 gh-pages/v1/rest/fonts/slate.woff delete mode 100644 gh-pages/v1/rest/fonts/slate.woff2 delete mode 100644 gh-pages/v1/rest/images/favicon.ico delete mode 100644 gh-pages/v1/rest/images/icon_nav.svg delete mode 100644 gh-pages/v1/rest/images/logo.png delete mode 100644 gh-pages/v1/rest/images/logo.svg delete mode 100644 gh-pages/v1/rest/images/navbar.png delete mode 100644 gh-pages/v1/rest/index.html delete mode 100644 gh-pages/v1/rest/javascripts/all.js delete mode 100644 gh-pages/v1/rest/javascripts/all_nosearch.js delete mode 100644 gh-pages/v1/rest/stylesheets/print.css delete mode 100644 gh-pages/v1/rest/stylesheets/screen.css delete mode 100644 gh-pages/v1/ws/fonts/slate.eot delete mode 100644 gh-pages/v1/ws/fonts/slate.svg delete mode 100644 gh-pages/v1/ws/fonts/slate.ttf delete mode 100644 gh-pages/v1/ws/fonts/slate.woff delete mode 100644 gh-pages/v1/ws/fonts/slate.woff2 delete mode 100644 gh-pages/v1/ws/images/favicon.ico delete mode 100644 gh-pages/v1/ws/images/icon_nav.svg delete mode 100644 gh-pages/v1/ws/images/logo.png delete mode 100644 gh-pages/v1/ws/images/logo.svg delete mode 100644 gh-pages/v1/ws/images/navbar.png delete mode 100644 gh-pages/v1/ws/index.html delete mode 100644 gh-pages/v1/ws/javascripts/all.js delete mode 100644 gh-pages/v1/ws/javascripts/all_nosearch.js delete mode 100644 gh-pages/v1/ws/stylesheets/print.css delete mode 100644 gh-pages/v1/ws/stylesheets/screen.css diff --git a/gh-pages/v1/rest/fonts/slate.eot b/gh-pages/v1/rest/fonts/slate.eot deleted file mode 100644 index 13c4839a1975d4c92d66753d75553f922743c6ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1876 zcmaJ?&2Jl35TEDWeRg&sP8)xqh$Kr)Yzaiu#`dnNaHtS!Xx9i53LF}#nAmmP`Xfq= z;s{Zte*qCEK;i~h4hYFPaA-x4sD#vVrBXQ{MIaD@1Ke8kn|8tnQ^fdI9N^x@? zd<=RUJW{D`U;b-v<0kYSA}zO8E|&DaCqF0BzlPme0}$TUZbAP8`m<~GR{K~75*dg= zcCEQu4DE@ZpmS=+>&5muJwb0nf0^x#V!izR7X1vpggLV7&CM3_1j&!tPMS_)mkgrN zC!rsJe5kniow8zt{RT+zltXle=pd}!=-!|+8X9a|iyqm&z#GOh#?Z4hMmoI$K1va6 zrUYgm&_U=R+`ZrJ0!LQ9E`42ef0@uHvC8U zo}w4%B?O&MCX$JGEG)w^HIqqa()pb0xK4IFpUb457c*fwDPqaQf|z%md}h1{#>ac0 zD>_@{@&c$_-fEYWRBE3yj7U8q4MTz%hA^cOxdwei%19MlXpM(P_)+e=@Rm}B>tXap zwoqO*DogaoKF+^`!zvX>{f10 zq*F6dk@0&Ok4=k2cHR|EKKaOn+_Q3KG-~~J-9n!;&D+d{W9=SQ|IqlDm9?y2uUl{( zi(0o$Q@Cby<g+B7U zE7gMM6{=S}Ps}C~lhg72%h#4X&vB-0d)je4Z)w>(?>M%-xE~jH;l@L}Lcyy(n4O9z z65lS`w&R>XbW_^$2bKN!lz(S%N3N!tcP>R={D&-^3rjyfS-aWi!AkH>sk+00G5&qW zC1%n(1Gmpd;5$IPUF_Lw@K%&WbbxEX?LgKcF9x!K$J`8LiMQ^#KsG5yOZ=|rBS1K&l2uG4tC&hwF_o-hDp_Le zTrgI}?0+pse - - -Generated by IcoMoon - - - - - - - - - - diff --git a/gh-pages/v1/rest/fonts/slate.ttf b/gh-pages/v1/rest/fonts/slate.ttf deleted file mode 100644 index ace9a46a7e1ed6b6ab3de2f30ef3e27c572f88d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1720 zcmaJ>-D_KA7=PaL@t*V?ZMro%kz(6pV-rwZyCyk@Q7?wb>UJv9`gO6wj7^qiCTUqB zO%X@;7dX69!8^V6LWJzXiw!F%45qgVdLa}=5xvm6E&iVKo-9$jJ@CHI_viaTf`}a2 zC!H2wcyVDVd0amU$>&(FZ8pn0bm7yth{U7dH)`ef4)6r{E^wmO*t_`0^~*QG?-S|8 zt!lYq{5ky*k?|Sy{uTt*p8hrX-@re<)$DYS^+1t{800m!H_O^}@g4X@@W-3w?hZXf zuY!M;^{sNV`qeJ|2)=?Gg`Mqo2XzAEd#oqjAaRXMBJF+c79{T|EPkbe7-PE;5S;Q~ zaGL1Q(r@%{&}khDI-bPX!~GUGz-0@x9Aaiik?BxrHq?#(PnWnI%nYaReOv*$ZSm>?)ctla|1hAG;T1^YPnfOv{N&_J8ekcvoG^Cm?MLpzb znO-8ASEU{s)D{<<&JKz%JjTWAM|EWWzjHMajT;ECdZ?bsKw&|^tZONrkvOuIkI%De zUYTtG_26}0jYK0>4*B1QgBuPLXU?}t^*TiboK|r`R>P0_HD+(cdi{Ze{FKYDLBs0R~?v6B%Rx~Edo2aasT@IJ-vtfG(iE^ z$Awv_E5l{^C4s84a|;3+->t#z!u^V-9Nj!@+Ph(RslFP9tMyA^DCS*vdNzG<@yc2l z`u?ov&H8>AuC0gXeBbj{4$|U#n6XQ^x*FE+&d;P>_lp(J^Zj%8%oMl&cI_ZN6TKO{ zkvFp2-&{yO{TDd~50<`txN&oc<4*8TskuV~pXj~g5i{t$k=GYVU^@bQTx>a5uvcK? zADE$i`dge4A3((KH9;?{zv*7K*f>Jt^humckR5yQeHf=xv0R7Ti)jP&N=%#Ng5wPM z_VCv|5z{smX^sCCV+<0Gsc02b(JH2*RZK;zn2MJ0U5I^E%r-TsOdYDyD_EDQO?BF) z7OFc*Cuk9TtZz5Uo$8RKb(q)a%}C8|gD__z_YMNoV9|<#sst6tUZ*|mXK52w&tq|_ J6Wq-M;U6NW`v(93 diff --git a/gh-pages/v1/rest/fonts/slate.woff b/gh-pages/v1/rest/fonts/slate.woff deleted file mode 100644 index 1e72e0ee0018119d7c814c2097cc60c0bcd05d84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1796 zcmaJ>&2Jl35TCanZ=GF;-Nqj%Qj#SmwgjS~vAs(b4i$%lc7v*fuR|jhlemtH?Nqf< z5&;$c3y8RZ#0{p83^QtGf$~^ZU#vdPL3b z4fcBr_DN>rKz!G#?&4f~pM4ZRM6a}~ts1aTadwIM%N_dh>UO7#K7YRFXF@YA68l_? z@xFm7>0K?wZ&VUvut!OxMlIIQ5*<0_&Hha~Yl49Y@PK@!7+CqFG*;eClSR)#j$=Xw zNnrjF9T`VX|4zRT99<||DqHk_nzSa(NzO5voBad{L?lOWoE4r?ZbRP(V_X@TZL>{} z(3A8mk}l-3xojrwNJr*pi-lsLQVxSKC{0w##ljO}){#>poy#tYg)pcTCk9|L<3To?f*omEO$b9ODUa}gVj!a zAvUB1l6OCpmTg;7PgnO)phbF-Xik@UVo+OLa3((}zVs*;Zywi?{r}GOL=0{q1ou!q ztD%;HAbGE?Z5HC#RzAMSTXWiN9ioS*i+Usm@#fI}eK@$`F!8DQHtAj`iEnm!UKH}P zNl{d*%%o>TwzLq6ppv_9BR_a$H<|Q)z2RXkyY6k4BJlQ)o4+xU@=Bif%MA~%sib$? zbw%hV*Y96nzi0MvpHdWZeO#D>x^i4rP!XsqKRYk5@ZB2RF5E9QWp(qg81F^VmBvaG ztu(Ggk(kS7r)DyTm#?ozQ4q}d{!9==(dt@sJ_vk&`7k5ChZ~1PD=Sgs?%Z@HoBe#* z_k-a4JvVKwyWWZ=q2@1#9uk~9EfrHBtA=!8%MC` zIGu@c6SyDi7WCym@ z2-w*rE$c_UfviKEL=Vy>={0bo+(i5#P1q3$6VB``hVMrCzU@B6vbqKcPy}m-BtQn- zkylU>byNe6DE>18g5d9bm%bZqa|qF=7&3(|U!AY)%Yg-vOsqKIq$w0D$r*3}ks4=+ z>U6?w2xMd=B$;zQ9v)F1K7KwfQ9|)<9nl&i?6-rchs{I8LC1eK^@#(|^QwB-{VeQz zoHLn@cwG?Yo(X!F(Q8iBOqSNs${h}C*?qJYLuZAnVXqx{ww|}Ux0`ca^V#hz?c7{r z7ldYbmk!M1m3G+IYC6(!VcCzqp&pJkZ#1@kw2W<^EJMqOM;^&dq6ELC*|pK!(cC0< zbZtF%BzLsuTw5O*+eg;dX0a+hcfI=gj8a~qWYJoMamHAo)!Qq|6&~9S8`{d0T?L&% z@$R=P6H0rTp6V+-Dlb>EB67JEMQ>kk%`y}{hvBC(RNEw)*%|U|4>SL+B=3rE@y*rw zR_bLZr&~XN?C;+yx2IilcDnrb?M)}An;DsTe@^rq$9L-UWNqY_oTyWyYisN3CMIh; z*C)b12exYgK^2c4S}J#2YJ+00rUlj%+LqQ7E%lldEc`K|1Bky)iLkwF{Wltvj!{A+PBEzhE3BX) zFBgqmj@&z?N1*=OK?z54T7is8FiA(N66oe`X+cKl>`n&&000000HC;3 zk^ug-#56-JW5JAtMV6Rgj#+|9A(7;@^`+^dWy@Alt7D86w|;R>QMs>d+47HJVfKhH aD;vc&%m&dlj4($-ipx}q&#}A+00017%3vV? diff --git a/gh-pages/v1/rest/images/favicon.ico b/gh-pages/v1/rest/images/favicon.ico deleted file mode 100644 index 5c63651b083911c23709c7e235da45fc3f7bf38e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10161 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 u`~?fr4wr40q@$#2*7 - - - Group 59 Copy 5 - Created with Sketch. - - - - - - - - - - - - - \ No newline at end of file diff --git a/gh-pages/v1/rest/images/logo.png b/gh-pages/v1/rest/images/logo.png deleted file mode 100644 index 413fbaf3d28bd73f46be8b5c0d3b2af5d83193f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14099 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 - - - Group 54 Copy 2 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/gh-pages/v1/rest/images/navbar.png b/gh-pages/v1/rest/images/navbar.png deleted file mode 100644 index df38e90d87e1a215371b4977e18cde90f8832537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96 zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk@BpAX3RW*PVQ%R6tFatx` - - - - - - - API 文档 - - - - - - - - - - Navbar - - -
-
-

Cloud API

- - -
- -
- -
-
-
-

REST API 简介

-

API实现程序化交易。

- -

通过API可以实现以下功能:

- -
    -
  • 市场行情信息查询(K线、深度、实时成交、24小时行情)
  • -
  • 账户资产信息查询
  • -
  • 下单、撤单操作
  • -
  • 订单信息查询
  • -
-

安全认证

-

目前关于apikey申请和修改,请在“账户 - API管理”页面进行相关操作。其中AccessKey为API 访问密钥,SecretKey为用户对请求进行签名的密钥(仅申请时可见)。

- -

重要提示:这两个密钥与账号安全紧密相关,无论何时都请勿向其它人透露。

-

合法请求结构

-

基于安全考虑,除行情API 外的 API 请求都必须进行签名运算。一个合法的请求由以下几部分组成:

- -
    -
  • 方法请求地址 即访问服务器地址:HOST+/api+方法名,比如{HOST}/api/v1/order/orders。

  • -
  • Host的常用格式:www.xxxx.com 如果有host格式相关问题,请咨询Host提供方)

  • -
  • API 访问密钥(AccessKeyId) 您申请的 APIKEY 中的AccessKey。

  • -
  • 签名方法(SignatureMethod) 用户计算签名的基于哈希的协议,此处使用 HmacSHA256。

  • -
  • 签名版本(SignatureVersion) 签名协议的版本,此处使用2。

  • -
  • 时间戳(Timestamp) 您发出请求的时间 (UTC 时区) (UTC 时区) (UTC 时区) 。在查询请求中包含此值有助于防止第三方截取您的请求。如:2017-05-11T16:22:06。再次强调是 (UTC 时区) 。

  • -
  • 必选和可选参数 每个方法都有一组用于定义 API 调用的必需参数和可选参数。可以在每个方法的说明中查看这些参数及其含义。 请一定注意:对于GET请求,每个方法自带的参数都需要进行签名运算; 对于POST请求,每个方法自带的参数不进行签名认证,即POST请求中需要进行签名运算的只有AccessKeyId、SignatureMethod、SignatureVersion、Timestamp四个参数,其它参数放在body中。

  • -
  • 签名 签名计算得出的值,用于确保签名有效和未被篡改。

  • -
- -

例:

-
https://{HOST}/api/v1/order/orders?
-AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx
-&SignatureMethod=HmacSHA256
-&SignatureVersion=2
-&Timestamp=2017-05-11T15%3A19%3A30
-&order-id=1234567890
-&Signature=calculated value
-

签名运算

-

API 请求在通过 Internet 发送的过程中极有可能被篡改。为了确保请求未被更改,我们会要求用户在每个请求中带上签名(行情 API 除外),来校验参数或参数值在传输途中是否发生了更改。

-

计算签名所需的步骤:

-
    -
  1. 规范要计算签名的请求 -因为使用 HMAC 进行签名计算时,使用不同内容计算得到的结果会完全不同。所以在进行签名计算前,请先对请求进行规范化处理。下面以查询某订单详情请求为例进行说明
  2. -
-
https://{HOST}/api/v1/order/orders?
-AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx
-&SignatureMethod=HmacSHA256
-&SignatureVersion=2
-&Timestamp=2017-05-11T15:19:30
-&order-id=1234567890
-
-
    -
  1. 请求方法(GET 或 POST),后面添加换行符\n。
  2. -
-
GET\n
-
-
    -
  1. 添加小写的访问地址,后面添加换行符\n。
  2. -
-
{host}\n
-
-
    -
  1. 访问方法的路径,后面添加换行符\n。
  2. -
-
/v1/order/orders\n
-
-
    -
  1. 按照ASCII码的顺序对参数名进行排序(使用 UTF-8 编码,且进行了 URI 编码,十六进制字符必须大写,如‘:’会被编码为'%3A',空格被编码为'%20')。 -例如,下面是请求参数的原始顺序,进行过编码后。
  2. -
-
AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx
-order-id=1234567890
-SignatureMethod=HmacSHA256
-SignatureVersion=2
-Timestamp=2017-05-11T15%3A19%3A30
-
-

这些参数会被排序为:

-
AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx
-SignatureMethod=HmacSHA256
-SignatureVersion=2
-Timestamp=2017-05-11T15%3A19%3A30
-order-id=1234567890
-
-
-

按照以上顺序,将各参数使用字符’&’连接。

-
AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2017-05-11T15%3A19%3A30&order-id=1234567890
-
-

组成最终的要进行签名计算的字符串如下:

-
GET\n
-{host}\n
-/v1/order/orders\n
-AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2017-05-11T15%3A19%3A30&order-id=1234567890
-
-

计算签名,将以下两个参数传入加密哈希函数: -要进行签名计算的字符串

-
GET\n
-{host}\n
-/v1/order/orders\n
-AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2017-05-11T15%3A19%3A30&order-id=1234567890
-
-

进行签名的密钥(SecretKey)

-
b0xxxxxx-c6xxxxxx-94xxxxxx-dxxxx
-
-

得到签名计算结果并进行 Base64编码

-
4F65x5A2bLyMWVQj3Aqp+B4w+ivaA7n5Oi2SuYtCJ9o=
-
-

将上述值作为参数Signature的取值添加到 API 请求中。 将此参数添加到请求时,必须将该值进行 URI 编码。

- -

最终,发送到服务器的 API 请求应该为:

-
https://{host}/v1/order/orders?AccessKeyId=e2xxxxxx-99xxxxxx-84xxxxxx-7xxxx&order-id=1234567890&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2017-05-11T15%3A19%3A30&Signature=4F65x5A2bLyMWVQj3Aqp%2BB4w%2BivaA7n5Oi2SuYtCJ9o%3D
-

请求说明

-
    -
  1. 访问地址:将文档中的{HOST}替换为服务商的host
  2. -
  3. POST请求头信息中必须声明 Content-Type:application/json;GET请求头信息中必须声明 Content-Type:application/x-www-form-urlencoded。(汉语用户建议设置 Accept-Language:zh-cn)
  4. -
  5. 所有请求参数请按照 API 说明进行参数封装。
  6. -
  7. 将封装好参数的 API 请求通过 POST 或 GET 的方式提交到服务器。
  8. -
  9. 服务端处理请求,并返回相应的 JSON 格式结果。
  10. -
  11. 请使用 https 请求。
  12. -
  13. 限制频率(每个接口,只针对交易api,行情api不限制)为10秒100次。
  14. -
  15. 查询资产详情方法调用顺序:查询当前用户的所有账户->查询指定账户的余额
  16. -
-

API Reference

- - - -

接口列表

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
接口数据类型请求方法类型描述需要验签子账号可用
市场行情GET /market/history/klineGETK线NY
市场行情GET /market/detail/mergedGET滚动24小时交易和最优报价聚合行情(单个symbol)NY
市场行情GET /market/tickersGET全部symbol的交易行情NY
市场行情GET /market/depthGET市场深度行情(单个symbol)NY
市场行情GET /market/tradeGET单个symbol最新成交记录NY
市场行情GET /market/history/tradeGET单个symbol批量成交记录NY
交易品种信息GET /v1/common/symbolsGET交易品种的计价货币和报价精度NY
交易品种信息GET /v1/common/currencysGET交易币种列表NY
系统信息GET /v1/common/timestampGET查询当前系统时间NY
账户信息GET /v1/account/accountsGET查询用户的所有账户状态YY
账户信息GET /v1/account/accounts/{account-id}/balanceGET查询指定账户余额YY
交易POST/v1/order/orders/placePOST下单YY
交易POST/v1/order/orders/{order-id}/submitcancelPOST按order-id撤销一个订单YY
交易POST /v1/order/orders/batchcancelPOST按order_id, 批量撤销订单(up to 50)YY
交易POST /v1/order/orders/batchCancelOpenOrdersPOST按订单条件批量撤销订单(up to 100)YY
用户订单信息GET /v1/order/orders/{order-id}GET根据order-id查询订单详情YY
用户订单信息GET /v1/order/orders/{order-id}/matchresultsGET根据order-id查询订单的成交明细YY
用户订单信息GET /v1/order/ordersGET查询用户当前委托、或历史委托订单 (up to 100)YY
用户订单信息GET /v1/order/matchresultsGET查询用户当前成交、历史成交YY
用户订单信息GET /v1/order/openOrdersGET查询用户当前未成交订单 (up to 500)YY
充提币POST /v1/dw/withdraw/api/createPOST申请提币YN
充提币POST /v1/dw/withdraw-virtual/{withdraw-id}/cancelPOST撤销提币申请YN
充提币GET /v1/query/deposit-withdrawGET查询充提记录YN
-

市场行情

-

在调用行情接口时,请添加get参数,key为AccessKeyId ,value为网页上申请的apikey的accesskey 。

- -

例:

-
https://{HOST}/market/history/kline?period=1day&size=200&symbol=btcusdt&AccessKeyId=fff-xxx-ssss-kkk
-
-

GET /market/history/kline 获取K线数据

-

请求参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
periodtruestringK线类型1min, 5min, 15min, 30min, 60min, 1day, 1mon, 1week, 1year
sizefalseinteger获取数量150[1,2000]
- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
statustruestring请求处理结果"ok" , "error"
tstruenumber响应生成时间点,单位:毫秒
ticktrueobjectKLine 数据
chtruestring数据所属的 channel,格式: market.$symbol.kline.$period
- -

data 说明:

-
  "data": [
-{
-    "id": K线id,
-    "amount": 成交量,
-    "count": 成交笔数,
-    "open": 开盘价,
-    "close": 收盘价,当K线为最晚的一根时,是最新成交价
-    "low": 最低价,
-    "high": 最高价,
-    "vol": 成交额, 即 sum(每一笔成交价 * 该笔的成交量)
-  }
-]
-
-

请求响应示例:

-
/* GET /market/history/kline?period=1day&size=200&symbol=btcusdt */
-{
-  "status": "ok",
-  "ch": "market.btcusdt.kline.1day",
-  "ts": 1499223904680,
-  "data": [
-{
-    "id": 1499184000,
-    "amount": 37593.0266,
-    "count": 0,
-    "open": 1935.2000,
-    "close": 1879.0000,
-    "low": 1856.0000,
-    "high": 1940.0000,
-    "vol": 71031537.97866500
-  },
-// more data here
-]
-}
-
-/* GET /market/history/kline?period=not-exist&size=200&symbol=ethusdt */
-{
-  "ts": 1490758171271,
-  "status": "error",
-  "err-code": "invalid-parameter",
-  "err-msg": "invalid period"
-}
-
-/* GET /market/history/kline?period=1day&size=not-exist&symbol=ethusdt */
-{
-  "ts": 1490758221221,
-  "status": "error",
-  "err-code": "bad-request",
-  "err-msg": "invalid size, valid range: [1,2000]"
-}
-
-/* GET /market/history/kline?period=1day&size=200&symbol=not-exist */
-{
-  "ts": 1490758171271,
-  "status": "error",
-  "err-code": "invalid-parameter",
-  "err-msg": "invalid symbol"
-}
-

GET /market/detail/merged 获取聚合行情(Ticker)

-

请求参数:

- - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
statustruestring请求处理结果"ok" , "error"
tstruenumber响应生成时间点,单位:毫秒
ticktrueobjectK线数据
chtruestring数据所属的 channel,格式: market.$symbol.detail.merged
- -

tick 说明:

-
  "tick": {
-    "id": K线id,
-    "amount": 成交量,
-    "count": 成交笔数,
-    "open": 开盘价,
-    "close": 收盘价,当K线为最晚的一根时,是最新成交价
-    "low": 最低价,
-    "high": 最高价,
-    "vol": 成交额, 即 sum(每一笔成交价 * 该笔的成交量)
-    "bid": [买1价,买1量],
-    "ask": [卖1价,卖1量]
-  }
-
-
-

请求响应示例:

-
/* GET /market/detail/merged?symbol=ethusdt */
-{
-"status":"ok",
-"ch":"market.ethusdt.detail.merged",
-"ts":1499225276950,
-"tick":{
-  "id":1499225271,
-  "ts":1499225271000,
-  "close":1885.0000,
-  "open":1960.0000,
-  "high":1985.0000,
-  "low":1856.0000,
-  "amount":81486.2926,
-  "count":42122,
-  "vol":157052744.85708200,
-  "ask":[1885.0000,21.8804],
-  "bid":[1884.0000,1.6702]
-  }
-}
-
-/* GET /market/detail/merged?symbol=not-exist */
-{
-  "ts": 1490758171271,
-  "status": "error",
-  "err-code": "invalid-parameter",
-  "err-msg": "invalid symbol”
-}
-
-

GET /market/tickers

{  
-    "status":"ok",
-    "ts":1510885463001,
-    "data":[  
-        {  
-            "open":0.044297,      // 日K线 开盘价
-            "close":0.042178,     // 日K线 收盘价
-            "low":0.040110,       // 日K线 最低价
-            "high":0.045255,      // 日K线 最高价
-            "amount":12880.8510,  // 24小时成交量
-            "count":12838,        // 24小时成交笔数
-            "vol":563.0388715740, // 24小时成交额
-            "symbol":"ethbtc"     // 交易对
-        },
-        {  
-            "open":0.008545,
-            "close":0.008656,
-            "low":0.008088,
-            "high":0.009388,
-            "amount":88056.1860,
-            "count":16077,
-            "vol":771.7975953754,
-            "symbol":"ltcbtc"
-        }
-    ]
-}
-
-

注:当交易对尚未产生成交时,返回的数据里面 open close high low amount count vol 的值都为 null

-

GET /market/depth 获取 Market Depth 数据

-

请求参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestringDepth 类型step0, step1, step2, step3, step4, step5(合并深度0-5);step0时,不合并深度
- -
    -
  • 用户选择“合并深度”时,一定报价精度内的市场挂单将予以合并显示。合并深度仅改变显示方式,不改变实际成交价格。
  • -
- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
statustruestring"ok" 或者 "error"
tstruenumber响应生成时间点,单位:毫秒
ticktrueobjectDepth 数据
chtruestring数据所属的 channel,格式: market.$symbol.depth.$type
- -

tick 说明:

-
  "tick": {
-    "id": 消息id,
-    "ts": 消息生成时间,单位:毫秒,
-    "bids": 买盘,[price(成交价), amount(成交量)], 按price降序,
-    "asks": 卖盘,[price(成交价), amount(成交量)], 按price升序
-  }
-
-

请求响应示例:

-
/* GET /market/depth?symbol=ethusdt&type=step1 */
-{
-  "status": "ok",
-  "ch": "market.btcusdt.depth.step1",
-  "ts": 1489472598812,
-  "tick": {
-    "id": 1489464585407,
-    "ts": 1489464585407,
-    "bids": [
-      [7964, 0.0678], // [price, amount]
-      [7963, 0.9162],
-      [7961, 0.1],
-      [7960, 12.8898],
-      [7958, 1.2],
-      [7955, 2.1009],
-      [7954, 0.4708],
-      [7953, 0.0564],
-      [7951, 2.8031],
-      [7950, 13.7785],
-      [7949, 0.125],
-      [7948, 4],
-      [7942, 0.4337],
-      [7940, 6.1612],
-      [7936, 0.02],
-      [7935, 1.3575],
-      [7933, 2.002],
-      [7932, 1.3449],
-      [7930, 10.2974],
-      [7929, 3.2226]
-    ],
-    "asks": [
-      [7979, 0.0736],
-      [7980, 1.0292],
-      [7981, 5.5652],
-      [7986, 0.2416],
-      [7990, 1.9970],
-      [7995, 0.88],
-      [7996, 0.0212],
-      [8000, 9.2609],
-      [8002, 0.02],
-      [8008, 1],
-      [8010, 0.8735],
-      [8011, 2.36],
-      [8012, 0.02],
-      [8014, 0.1067],
-      [8015, 12.9118],
-      [8016, 2.5206],
-      [8017, 0.0166],
-      [8018, 1.3218],
-      [8019, 0.01],
-      [8020, 13.6584]
-    ]
-  }
-}
-
-/* GET /market/depth?symbol=ethusdt&type=not-exist */
-{
-  "ts": 1490759358099,
-  "status": "error",
-  "err-code": "invalid-parameter",
-  "err-msg": "invalid type"
-}
-

GET /market/trade 获取 Trade Detail 数据

-

请求参数:

- - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
statustruestring"ok" 或者 "error"
tstruenumber响应生成时间点,单位:毫秒
ticktrueobjectTrade 数据
chtruestring数据所属的 channel,格式: market.$symbol.trade.detail
- -

tick 说明:

-
  "tick": {
-    "id": 消息id,
-    "ts": 最新成交时间,
-    "data": [
-      {
-        "id": 成交id,
-        "price": 成交价钱,
-        "amount": 成交量,
-        "direction": 主动成交方向,
-        "ts": 成交时间
-      }
-    ]
-  }
-
-

请求响应例子:

-
/* GET /market/trade?symbol=ethusdt */
-{
-  "status": "ok",
-  "ch": "market.btcusdt.trade.detail",
-  "ts": 1489473346905,
-  "tick": {
-    "id": 600848670,
-    "ts": 1489464451000,
-    "data": [
-      {
-        "id": 600848670,
-        "price": 7962.62,
-        "amount": 0.0122,
-        "direction": "buy",
-        "ts": 1489464451000
-      }
-    ]
-  }
-}
-
-/* GET /market/trade?symbol=not-exist */
-{
-  "ts": 1490759506429,
-  "status": "error",
-  "err-code": "invalid-parameter",
-  "err-msg": "invalid symbol"
-}
-

GET /market/history/trade 批量获取最近的交易记录

-

请求参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
sizefalseinteger获取交易记录的数量1[1, 2000]
- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
statustruestringok, error
chtruestring数据所属的 channel,格式: market.$symbol.trade.detail
tstrueinteger发送时间
datatrueobject成交记录
- -

data 说明:

-
  "data": {
-    "id": 消息id,
-    "ts": 最新成交时间,
-    "data": [
-      {
-        "id": 成交id,
-        "price": 成交价,
-        "amount": 成交量,
-        "direction": 主动成交方向,
-        "ts": 成交时间
-      }
-    ]
-  }
-
-

请求响应例子:

-
/* GET /market/history/trade?symbol=ethusdt */
-{
-    "status": "ok",
-    "ch": "market.ethusdt.trade.detail",
-    "ts": 1502448925216,
-    "data": [
-        {
-            "id": 31459998,
-            "ts": 1502448920106,
-            "data": [
-                {
-                    "id": 17592256642623,
-                    "amount": 0.04,
-                    "price": 1997,
-                    "direction": "buy",
-                    "ts": 1502448920106
-                }
-            ]
-        }
-    ]
-}
-

公共API

GET /v1/common/symbols 查询支持的所有交易对及精度

-

请求参数: -(无)

- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
base-currencytruestring基础币种
quote-currencytruestring计价币种
price-precisiontruestring价格精度位数(0为个位)
amount-precisiontruestring数量精度位数(0为个位)
symbol-partitiontruestring交易区main主区,innovation创新区,bifurcation分叉区
- -

请求响应例子:

-
/* GET /v1/common/symbols */
-{
-  "status": "ok",
-  "data": [
-    {
-      "base-currency": "eth",
-      "quote-currency": "usdt",
-      "symbol": "ethusdt"
-    }
-    {
-      "base-currency": "etc",
-      "quote-currency": "usdt",
-      "symbol": "etcusdt"
-    }
-  ]
-}
-

GET /v1/common/currencys 查询支持的所有币种

-

请求参数:

- -

(无)

- -

响应数据:

-
currency list
-
-

请求响应例子:

-
/* GET /v1/common/currencys */
-{
-  "status": "ok",
-  "data": [
-    "usdt",
-    "eth",
-    "etc"
-  ]
-}
-

GET /v1/common/timestamp 查询系统当前时间

-

请求参数:

- -

(无)

- -

响应数据:

-
系统时间戳
-
-

请求响应例子

-
/* GET /v1/common/timestamp */
-{
-  "status": "ok",
-  "data": 1494900087029
-}
-

用户资产API

GET /v1/account/accounts

-

请求参数:

- -

- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
idtruelongaccount-id
statetruestring账户状态working:正常, lock:账户被锁定
typetruestring账户类型spot:现货账户
- -

请求响应例子:

-
/* GET /v1/account/accounts */
-{
-  "status": "ok",
-  "data": [
-    {
-      "id": 100009,
-      "type": "spot",
-      "state": "working",
-      "user-id": 1000
-    }
-  ]
-}
-

GET /v1/account/accounts/{account-id}/balance 查询指定账户的余额

-

请求参数

- - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
account-idtruestringaccount-id,填在 path 中,可用 GET /v1/account/accounts 获取
- -
    -
  • 如果不知道自己的账户ID,请使用 GET /v1/account/accounts 查询
  • -
- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
idtruelong账户 ID
statetruestring账户状态working:正常 lock:账户被锁定
typetruestring账户类型spot:现货账户
listfalseArray子账户数组
- -

list字段说明

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
balancetruestring余额
currencytruestring币种
typetruestring类型trade: 交易余额,frozen: 冻结余额
- -

请求响应例子:

-
/* GET /v1/account/accounts/'account-id'/balance */
-{
-  "status": "ok",
-  "data": {
-    "id": 100009,
-    "type": "spot",
-    "state": "working",
-    "list": [
-      {
-        "currency": "usdt",
-        "type": "trade",
-        "balance": "500009195917.4362872650"
-      },
-      {
-        "currency": "usdt",
-        "type": "frozen",
-        "balance": "328048.1199920000"
-      },
-     {
-        "currency": "etc",
-        "type": "trade",
-        "balance": "499999894616.1302471000"
-      },
-      {
-        "currency": "etc",
-        "type": "frozen",
-        "balance": "9786.6783000000"
-      }
-     {
-        "currency": "eth",
-        "type": "trade",
-        "balance": "499999894616.1302471000"
-      },
-      {
-        "currency": "eth",
-        "type": "frozen",
-        "balance": "9786.6783000000"
-      }
-    ],
-    "user-id": 1000
-  }
-}
-

交易API

POST /v1/order/orders/place 下单

请求参数

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
account-idtruestring账户 ID,使用accounts方法获得。币币交易使用‘spot’账户的accountid
amounttruestring限价单表示下单数量,市价买单时表示买多少钱,市价卖单时表示卖多少币
pricefalsestring下单价格,市价单不传该参数
sourcefalsestring订单来源api
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestring订单类型buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单, buy-limit-maker, sell-limit-maker(详细说明见下)
- -

buy-limit-maker

- -

当“下单价格”>=“市场最低卖出价”,订单提交后,系统将拒绝接受此订单;

- -

当“下单价格”<“市场最低卖出价”,提交成功后,此订单将被系统接受。

- -

sell-limit-maker

- -

当“下单价格”<=“市场最高买入价”,订单提交后,系统将拒绝接受此订单;

- -

当“下单价格”>“市场最高买入价”,提交成功后,此订单将被系统接受。

-

响应数据:

- - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
datafalsestring订单ID
-

请求响应例子:

/* POST /v1/order/orders/place */
-{
-   "account-id": "100009",
-   "amount": "10.1",
-   "price": "100.1",
-   "source": "api",
-   "symbol": "ethusdt",
-   "type": "buy-limit"
-}
-{
-  "status": "ok",
-  "data": "59378"
-}
-

GET /v1/order/openOrders 获取所有当前帐号下未成交订单

请求参数:

-

“account-id” 和 “symbol” 需同时指定或者二者都不指定。如果二者都不指定,返回最多500条尚未成交订单,按订单号降序排列。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
account-idtruestring账号ID
symboltruestring交易对单个交易对字符串,缺省将返回所有符合条件尚未成交订单
sidefalsestring主动交易方向“buy”或者“sell”,缺省将返回所有符合条件尚未成交订单
sizefalseint所需返回记录数10[0,500]
-

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
idtruelong订单号
symboltruestring交易对
pricetruestring下单价格
created-attrueint下单时间(毫秒)Unix时间戳
typetruestring订单类型buy-market, sell-market, buy-limit, sell-limit, buy-ioc, sell-ioc
filled-amounttruestring下单时间(毫秒)对于非“部分成交”订单,此字段为 0
filled-cash-amounttruestring已成交部分的订单价格(=已成交单量x下单价格)对于非“部分成交”订单,此字段为 0
filled-feestruestring已成交部分所收取手续费对于非“部分成交”订单,此字段为 0
sourcetruestring订单来源sys, web, api, app
statetruestring此订单状态submitted(已提交), partial-filled(部分成交), cancelling(正在取消)
-

响应示例:

/* GET /v1/orders/openOrders */
-{
-  "status": "ok",
-  "data": [
-    {
-      "id": 5454937,
-      "symbol": "ethusdt",
-      "account-id": 30925,
-      "amount": "1.000000000000000000",
-      "price": "0.453000000000000000",
-      "created-at": 1530604762277,
-      "type": "sell-limit",
-      "filled-amount": "0.0",
-      "filled-cash-amount": "0.0",
-      "filled-fees": "0.0",
-      "source": "web",
-      "state": "submitted"
-    }
-  ]
-}
-

POST /v1/order/orders/{order-id}/submitcancel 申请撤销一个订单请求

-

请求参数:

- - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
order-idtruestring订单ID,填在path中
- -

响应数据:

- - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
datatruestring订单 ID
- -

请求响应例子:

-
/* POST /v1/order/orders/{order-id}/submitcancel */
-{
-  "status": "ok",//注意,返回OK表示撤单请求成功。订单是否撤销成功请调用订单查询接口查询该订单状态
-  "data": "59378"
-}
-

POST /v1/order/orders/batchcancel 批量撤销订单

-

请求参数:

- - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
order-idstruelist撤销订单ID列表单次不超过50个订单id
- -

响应数据:

- - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
datafalsemap撤单结果
- -

请求响应例子:

-
/* POST /v1/order/orders/batchcancel */
-{
-  "order-ids": [
-    "1", "2", "3"
-  ]
-}
-
-
-
{
-  "status": "ok",
-  "data": {
-    "success": [
-      "1",
-      "3"
-    ],
-    "failed": [
-      {
-        "err-msg": "记录无效",
-        "order-id": "2",
-        "err-code": "base-record-invalid"
-      }
-    ]
-  }
-}
-

POST /v1/order/orders/batchCancelOpenOrders 批量取消符合条件的订单

-

请求参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
account-idtruestring账户ID
symbolfalsestring交易对单个交易对字符串,缺省将返回所有符合条件尚未成交订单
sidefalsestring主动交易方向“buy”或“sell”,缺省将返回所有符合条件尚未成交订单
sizefalseint所需返回记录数100[0,100]
- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
success-counttrueint成功取消的订单数
failed-counttrueint取消失败的订单数
next-idtruelong下一个符合取消条件的订单号
-

响应示例:

/* POST /v1/order/orders/batchCancelOpenOrders */
-{
-  "status": "ok",
-  "data": {
-    "success-count": 2,
-    "failed-count": 0,
-    "next-id": 5454600
-  }
-}
-

GET /v1/order/orders/{order-id} 查询某个订单详情

-

请求参数:

- - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
order-idtruestring订单ID,填在path中
- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
account-idtruelong账户 ID
amounttruestring订单数量
canceled-atfalselong订单撤销时间
created-attruelong订单创建时间
field-amounttruestring已成交数量
field-cash-amounttruestring已成交总金额
field-feestruestring已成交手续费(买入为币,卖出为钱)
finished-atfalselong订单变为终结态的时间,不是成交时间,包含“已撤单”状态
idtruelong订单ID
pricetruestring订单价格
sourcetruestring订单来源api
statetruestring订单状态submitting , submitted 已提交, partial-filled 部分成交, partial-canceled 部分成交撤销, filled 完全成交, canceled 已撤销
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestring订单类型buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
- -

请求响应例子:

-
/* GET /v1/order/orders/{order-id} */
-{
-  "status": "ok",
-  "data": {
-    "id": 59378,
-    "symbol": "ethusdt",
-    "account-id": 100009,
-    "amount": "10.1000000000",
-    "price": "100.1000000000",
-    "created-at": 1494901162595,
-    "type": "buy-limit",
-    "field-amount": "10.1000000000",
-    "field-cash-amount": "1011.0100000000",
-    "field-fees": "0.0202000000",
-    "finished-at": 1494901400468,
-    "user-id": 1000,
-    "source": "api",
-    "state": "filled",
-    "canceled-at": 0,
-    "exchange": "xxx",
-    "batch": ""
-  }
-}
-

GET /v1/order/orders/{order-id}/matchresults 查询某个订单的成交明细

-

请求参数:

- - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
order-idtruestring订单ID,填在path中
- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
created-attruelong成交时间
filled-amounttruestring成交数量
filled-feestruestring成交手续费
idtruelong订单成交记录ID
match-idtruelong撮合ID
order-idtruelong订单 ID
pricetruestring成交价格
sourcetruestring订单来源api
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestring订单类型buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
- -

请求响应例子:

-
/* GET /v1/order/orders/{order-id}/matchresults */
-{
-  "status": "ok",
-  "data": [
-    {
-      "id": 29553,
-      "order-id": 59378,
-      "match-id": 59335,
-      "symbol": "ethusdt",
-      "type": "buy-limit",
-      "source": "api",
-      "price": "100.1000000000",
-      "filled-amount": "9.1155000000",
-      "filled-fees": "0.0182310000",
-      "created-at": 1494901400435
-    }
-  ]
-}
-

GET /v1/order/orders 查询当前委托、历史委托

-

请求参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typesfalsestring查询的订单类型组合,使用','分割buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
start-datefalsestring查询开始日期, 日期格式yyyy-mm-dd
end-datefalsestring查询结束日期, 日期格式yyyy-mm-dd
statestruestring查询的订单状态组合,使用','分割submitted 已提交, partial-filled 部分成交, partial-canceled 部分成交撤销, filled 完全成交, canceled 已撤销
fromfalsestring查询起始 ID
directfalsestring查询方向prev 向前,next 向后
sizefalsestring查询记录大小
- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
account-idtruelong账户 ID
amounttruestring订单数量
canceled-atfalselong接到撤单申请的时间
created-attruelong订单创建时间
field-amounttruestring已成交数量
field-cash-amounttruestring已成交总金额
field-feestruestring已成交手续费(买入为币,卖出为钱)
finished-atfalselong最后成交时间
idtruelong订单ID
pricetruestring订单价格
sourcetruestring订单来源api
statetruestring订单状态submitting , submitted 已提交, partial-filled 部分成交, partial-canceled 部分成交撤销, filled 完全成交, canceled 已撤销
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestring订单类型submit-cancel:已提交撤单申请 ,buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
- -

请求响应例子:

-
/* GET /v1/order/orders */
-{
-  "status": "ok",
-  "data": [
-    {
-      "id": 59378,
-      "symbol": "ethusdt",
-      "account-id": 100009,
-      "amount": "10.1000000000",
-      "price": "100.1000000000",
-      "created-at": 1494901162595,
-      "type": "buy-limit",
-      "field-amount": "10.1000000000",
-      "field-cash-amount": "1011.0100000000",
-      "field-fees": "0.0202000000",
-      "finished-at": 1494901400468,
-      "user-id": 1000,
-      "source": "api",
-      "state": "filled",
-      "canceled-at": 0,
-      "exchange": "xxx",
-      "batch": ""
-    }
-  ]
-}
-

GET /v1/order/matchresults 查询当前成交、历史成交

-

请求参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typesfalsestring查询的订单类型组合,使用','分割buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
start-datefalsestring查询开始日期, 日期格式yyyy-mm-dd-61 days[-61day, now]
end-datefalsestring查询结束日期, 日期格式yyyy-mm-ddNow[start-date, now]
fromfalsestring查询起始 ID订单成交记录ID(最大值)
directfalsestring查询方向默认next, 成交记录ID由大到小排序prev 向前,next 向后
sizefalsestring查询记录大小100<=100
- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
created-attruelong成交时间
filled-amounttruestring成交数量
filled-feestruestring成交手续费
idtruelong订单成交记录ID
match-idtruelong撮合ID
order-idtruelong订单 ID
pricetruestring成交价格
sourcetruestring订单来源api
symboltruestring交易对btcusdt, bchbtc, rcneth ...
typetruestring订单类型buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖, buy-ioc:IOC买单, sell-ioc:IOC卖单
- -

请求响应例子:

-
/* GET /v1/orders/matchresults */
-{
-  "status": "ok",
-  "data": [
-    {
-      "id": 29555,
-      "order-id": 59378,
-      "match-id": 59335,
-      "symbol": "ethusdt",
-      "type": "buy-limit",
-      "source": "api",
-      "price": "100.1000000000",
-      "filled-amount": "0.9845000000",
-      "filled-fees": "0.0019690000",
-      "created-at": 1494901400487
-    }
-  ]
-}
-

虚拟币提现API

-
-

仅支持提现到【Pro站提币地址列表中的提币地址】

-
-

POST /v1/dw/withdraw/api/create 申请提现虚拟币

-

请求参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
addresstruestring提现地址
amounttruestring提币数量
currencytruestring资产类型btc, ltc, bch, eth, etc ...(支持的币种)
feefalsestring转账手续费
addr-tagfalsestring虚拟币共享地址tag,适用于xrp,xem,bts,steem,eos,xmr格式, "123"类的整数字符串
- -

响应数据:

- - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
datafalselong提现ID
- -

请求响应例子:

-
/* POST /v1/dw/withdraw/api/create*/
-{
-  "address": "0xde709f2102306220921060314715629080e2fb77",
-  "amount": "0.05",
-  "currency": "eth",
-  "fee": "0.01"
-}
-{
-  "status": "ok",
-  "data": 700
-}
-

POST /v1/dw/withdraw-virtual/{withdraw-id}/cancel 申请取消提现虚拟币

-

请求参数:

- - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
withdraw-idtruelong提现ID,填在path中
- -

响应数据:

- - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
datafalselong提现 ID
- -

请求响应例子:

-
/* POST /v1/dw/withdraw-virtual/{withdraw-id}/cancel */
-{
-  "status": "ok",
-  "data": 700
-}
-

GET /v1/query/deposit-withdraw 查询虚拟币充提记录

-

请求参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
currencytruestring币种
typetruestring'deposit' or 'withdraw'
fromfalsestring查询起始 ID
sizefalsestring查询记录大小
- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
idtruelong
typetruelong类型'deposit' 'withdraw'
currencytruestring币种
tx-hashtruestring交易哈希
amounttruelong个数
addresstruestring地址
address-tagtruestring地址标签
feetruelong手续费
statetruestring状态状态参见下表
created-attruelong发起时间
updated-attruelong最后更新时间
-
虚拟币提现状态定义:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
状态描述
submitted已提交
reexamine审核中
canceled已撤销
pass审批通过
reject审批拒绝
pre-transfer处理中
wallet-transfer已汇出
wallet-reject钱包拒绝
confirmed区块已确认
confirm-error区块确认错误
repealed已撤销
-
虚拟币充值状态定义:
- - - - - - - - - - - - - - - - - - - - - - - - - - -
状态描述
unknown状态未知
confirming确认中
confirmed确认中
safe已完成
orphan待确认
- -

请求响应例子:

-
/* GET /v1/query/deposit-withdraw?currency=xrp&type=deposit&from=5&size=12 */
-
-{
-
-    "status": "ok",
-    "data": [
-      {
-        "id": 1171,
-        "type": "deposit",
-        "currency": "xrp",
-        "tx-hash": "ed03094b84eafbe4bc16e7ef766ee959885ee5bcb265872baaa9c64e1cf86c2b",
-        "amount": 7.457467,
-        "address": "rae93V8d2mdoUQHwBDBdM4NHCMehRJAsbm",
-        "address-tag": "100040",
-        "fee": 0,
-        "state": "safe",
-        "created-at": 1510912472199,
-        "updated-at": 1511145876575
-      },
-     ...
-    ]
-}
-

借贷交易API (重要:如果使用借贷资产交易,请在下单接口/v1/order/orders/place请求参数source中填写‘margin-api’)

-

目前仅支持 USDT 交易区和 BTC 交易区部分交易对

-

POST /v1/dw/transfer-in/margin 现货账户划入至借贷账户

POST /v1/dw/transfer-out/margin 借贷账户划出至现货账户

-

请求参数

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对
currencytruestring币种
amounttruestring金额
- -

响应数据:

- - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
datatruelong划转ID
- -

请求响应例子:

-
/* POST /v1/dw/transfer-in/margin
-{
-  "symbol": "ethusdt",
-  "currency": "eth",
-  "amount": "1.0"
-} */
-{
-  "status": "ok",
-  "data": 1000
-}
-

POST /v1/margin/orders 申请借贷

-

请求参数

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对
currencytruestring币种
amounttruestring金额
- -

响应数据:

- - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
datatruelong订单号
- -

请求响应例子:

-
/* POST /v1/margin/orders {
-   "amount": "10.1",
-   "symbol": "ethusdt",
-   "currency": "eth"
-} */
-{
-  "status": "ok",
-  "data": 59378
-}
-

POST /v1/margin/orders/{order-id}/repay 归还借贷

-

请求参数

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
order-idtruelong借贷订单 ID,写在path中
amounttruestring还款量
- -

响应数据:

- - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
datatruelong订单号
- -

请求响应例子:

-
/* POST /v1/margin/orders/59378/repay {
-   "amount": "10.1"
-}*/
-{
-  "status": "ok",
-  "data": 59378
-}
-

GET /v1/margin/loan-orders 借贷订单

-

请求参数

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对
start-datefalsestring查询开始日期, 日期格式yyyy-mm-dd
end-datefalsestring查询结束日期, 日期格式yyyy-mm-dd
statesfalsestring状态
fromfalsestring查询起始 ID
directfalsestring查询方向prev 向前,next 向后
sizefalsestring查询记录大小
- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
idtruelong订单号
user-idtruelong用户ID
account-idtruelong账户ID
symboltruestring交易对
currencytruestring币种
loan-amounttruestring借贷本金总额
loan-balancetruestring未还本金
interest-ratetruestring利率
interest-amounttruestring利息总额
interest-balancetruestring未还利息
created-attruelong借贷发起时间
accrued-attruelong最近一次计息时间
statetruestring订单状态created 未放款,accrual 已放款,cleared 已还清,invalid 异常
- -

请求响应例子:

-
/* GET /v1/margin/loan-orders?symbol=btcusdt
-
-*/
-{
-  "status": "ok",
-  "data": [
-    {
-      "loan-balance": "0.100000000000000000",
-      "interest-balance": "0.000200000000000000",
-      "interest-rate": "0.002000000000000000",
-      "loan-amount": "0.100000000000000000",
-      "accrued-at": 1511169724531,
-      "interest-amount": "0.000200000000000000",
-      "symbol": "ethbtc",
-      "currency": "btc",
-      "id": 394,
-      "state": "accrual",
-      "account-id": 17747,
-      "user-id": 119913,
-      "created-at": 1511169724531
-    }
-  ]
-}
-
-

GET /v1/margin/accounts/balance 借贷账户详情

-

请求参数

- - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
symbolfalsestring交易对,作为get参数
- -

响应数据:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须数据类型描述取值范围
symboltruestring交易对
statetruestring账户状态working,fl-sys,fl-mgt,fl-end
risk-ratetrueobject风险率
fl-pricetruestring爆仓价
listtruearray子账户列表
- -

请求响应例子:

-
/* GET /v1/margin/accounts/balance?symbol=btcusdt
-
-*/
-{
-    "status": "ok",
-    "data": [
-        {
-            "id": 18264,
-            "type": "margin",
-            "state": "working",
-            "symbol": "btcusdt",
-            "fl-price": "0",
-            "fl-type": "safe",
-            "risk-rate": "475.952571086994250554",
-            "list": [
-                {
-                    "currency": "btc",
-                    "type": "trade",
-                    "balance": "1168.533000000000000000"
-                },
-                {
-                    "currency": "btc",
-                    "type": "frozen",
-                    "balance": "0.000000000000000000"
-                },
-                {
-                    "currency": "btc",
-                    "type": "loan",
-                    "balance": "-2.433000000000000000"
-                },
-                {
-                    "currency": "btc",
-                    "type": "interest",
-                    "balance": "-0.000533000000000000"
-                },
-                {
-                    "currency": "usdt",
-                    "type": "trade",//借贷账户可用
-                    "balance": "1313.534000000000000000"
-                },
-                {
-                    "currency": "usdt",
-                    "type": "frozen",//借贷账户冻结
-                    "balance": "0.000000000000000000"
-                },
-                {
-                    "currency": "usdt",
-                    "type": "loan",//已借贷
-                    "balance": "-140.234099999999999920"
-                },
-                {
-                    "currency": "usdt",
-                    "type": "interest",//usdt待还利息
-                    "balance": "-0.931206660000000000"
-                },
-                {
-                    "currency": "btc",
-                    "type": "transfer-out-available",//可转btc
-                    "balance": "1163.872174670000000000"
-                },
-                { "currency": "usdt",
-                    "type": "transfer-out-available",//可转usdt
-                    "balance": "1313.534000000000000000"
-                },
-                {
-                    "currency": "btc",
-                    "type": "loan-available",//可借btc
-                    "balance": "8161.876538350676000000"
-                },
-                {
-                    "currency": "usdt",
-                    "type": "loan-available",//可借usdt
-                    "balance": "49859.765900000000000080"
-                }
-            ]
-        }
-    ]
-}
-
-

错误码

行情 API 错误码

- - - - - - - - - - - - - - - - - - -
错误码描述
bad-request错误请求
invalid-parameter参数错
invalid-command指令错
- -

code 的具体解释, 参考对应的 err-msg.

-

交易 API 错误码

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
错误码描述
base-symbol-error交易对不存在
base-currency-error币种不存在
base-date-error错误的日期格式
account-transfer-balance-insufficient-error余额不足无法冻结
bad-argument无效参数
api-signature-not-validAPI签名错误
gateway-internal-error系统繁忙,请稍后再试
security-require-assets-password需要输入资金密码
audit-failed下单失败
ad-ethereum-addresss请输入有效的以太坊地址
order-accountbalance-error账户余额不足
order-limitorder-price-error限价单下单价格超出限制
order-limitorder-amount-error限价单下单数量超出限制
order-orderprice-precision-error下单价格超出精度限制
order-orderamount-precision-error下单数量超过精度限制
order-marketorder-amount-error下单数量超出限制
order-queryorder-invalid查询不到此条订单
order-orderstate-error订单状态错误
order-datelimit-error查询超出时间限制
order-update-error订单更新出错
- -


-
-
-
-

- -
-
-
- shell -
-
-
- - - diff --git a/gh-pages/v1/rest/javascripts/all.js b/gh-pages/v1/rest/javascripts/all.js deleted file mode 100644 index 05af78b..0000000 --- a/gh-pages/v1/rest/javascripts/all.js +++ /dev/null @@ -1,131 +0,0 @@ -!function(){if("ontouchstart"in window){var e,t,n,r,i,o,s={};e=function(e,t){return Math.abs(e[0]-t[0])>5||Math.abs(e[1]-t[1])>5},t=function(e){this.startXY=[e.touches[0].clientX,e.touches[0].clientY],this.threshold=!1},n=function(t){return!this.threshold&&void(this.threshold=e(this.startXY,[t.touches[0].clientX,t.touches[0].clientY]))},r=function(t){if(!this.threshold&&!e(this.startXY,[t.changedTouches[0].clientX,t.changedTouches[0].clientY])){var n=t.changedTouches[0],r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),r.simulated=!0,t.target.dispatchEvent(r)}},i=function(e){var t=Date.now(),n=t-s.time,r=e.clientX,i=e.clientY,a=[Math.abs(s.x-r),Math.abs(s.y-i)],u=o(e.target,"A")||e.target,c=u.nodeName,l="A"===c,f=window.navigator.standalone&&l&&e.target.getAttribute("href");return s.time=t,s.x=r,s.y=i,!((!e.simulated&&(n<500||n<1500&&a[0]<50&&a[1]<50)||f)&&(e.preventDefault(),e.stopPropagation(),!f))&&(f&&(window.location=u.getAttribute("href")),void(u&&u.classList&&(u.classList.add("energize-focus"),window.setTimeout(function(){u.classList.remove("energize-focus")},150))))},o=function(e,t){for(var n=e;n!==document.body;){if(!n||n.nodeName===t)return n;n=n.parentNode}return null},document.addEventListener("touchstart",t,!1),document.addEventListener("touchmove",n,!1),document.addEventListener("touchend",r,!1),document.addEventListener("click",i,!0)}}(),/*! - * jQuery JavaScript Library v3.2.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2017-03-20T18:59Z - */ -function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(e,t){t=t||ne;var n=t.createElement("script");n.text=e,t.head.appendChild(n).parentNode.removeChild(n)}function r(e){var t=!!e&&"length"in e&&e.length,n=ge.type(e);return"function"!==n&&!ge.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}function o(e,t,n){return ge.isFunction(t)?ge.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?ge.grep(e,function(e){return e===t!==n}):"string"!=typeof t?ge.grep(e,function(e){return ae.call(t,e)>-1!==n}):Ce.test(t)?ge.filter(t,e,n):(t=ge.filter(t,e),ge.grep(e,function(e){return ae.call(t,e)>-1!==n&&1===e.nodeType}))}function s(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function a(e){var t={};return ge.each(e.match(De)||[],function(e,n){t[n]=!0}),t}function u(e){return e}function c(e){throw e}function l(e,t,n,r){var i;try{e&&ge.isFunction(i=e.promise)?i.call(e).done(t).fail(n):e&&ge.isFunction(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}function f(){ne.removeEventListener("DOMContentLoaded",f),e.removeEventListener("load",f),ge.ready()}function d(){this.expando=ge.expando+d.uid++}function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Ie.test(e)?JSON.parse(e):e)}function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Re,"-$&").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n=p(n)}catch(e){}He.set(e,t,n)}else n=void 0;return n}function g(e,t,n,r){var i,o=1,s=20,a=r?function(){return r.cur()}:function(){return ge.css(e,t,"")},u=a(),c=n&&n[3]||(ge.cssNumber[t]?"":"px"),l=(ge.cssNumber[t]||"px"!==c&&+u)&&Me.exec(ge.css(e,t));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do o=o||".5",l/=o,ge.style(e,t,l+c);while(o!==(o=a()/u)&&1!==o&&--s)}return n&&(l=+l||+u||0,i=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=i)),i}function v(e){var t,n=e.ownerDocument,r=e.nodeName,i=Ve[r];return i?i:(t=n.body.appendChild(n.createElement(r)),i=ge.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),Ve[r]=i,i)}function m(e,t){for(var n,r,i=[],o=0,s=e.length;o-1)i&&i.push(o);else if(c=ge.contains(o.ownerDocument,o),s=y(f.appendChild(o),"script"),c&&x(s),n)for(l=0;o=s[l++];)Qe.test(o.type||"")&&n.push(o);return f}function w(){return!0}function T(){return!1}function S(){try{return ne.activeElement}catch(e){}}function E(e,t,n,r,i,o){var s,a;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(a in t)E(e,a,n,r,t[a],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=T;else if(!i)return e;return 1===o&&(s=i,i=function(e){return ge().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=ge.guid++)),e.each(function(){ge.event.add(this,t,i,r,n)})}function C(e,t){return i(e,"table")&&i(11!==t.nodeType?t:t.firstChild,"tr")?ge(">tbody",e)[0]||e:e}function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function N(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function j(e,t){var n,r,i,o,s,a,u,c;if(1===t.nodeType){if(Pe.hasData(e)&&(o=Pe.access(e),s=Pe.set(t,o),c=o.events)){delete s.handle,s.events={};for(i in c)for(n=0,r=c[i].length;n1&&"string"==typeof h&&!pe.checkClone&&rt.test(h))return e.each(function(n){var o=e.eq(n);g&&(t[0]=h.call(this,n,o.html())),L(o,t,r,i)});if(d&&(o=b(t,e[0].ownerDocument,!1,e,i),s=o.firstChild,1===o.childNodes.length&&(o=s),s||i)){for(a=ge.map(y(o,"script"),k),u=a.length;f=0&&nS.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[_]=!0,e}function i(e){var t=q.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=n.length;r--;)S.attrHandle[n[r]]=t}function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return function(t){return"form"in t?t.parentNode&&t.disabled===!1?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&Ee(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function l(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function p(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function v(e,n,r){for(var i=0,o=n.length;i-1&&(r[c]=!(s[c]=f))}}else x=m(x===s?x.splice(h,x.length):x),o?o(null,s,x,u):K.apply(s,x)})}function x(e){for(var t,n,r,i=e.length,o=S.relative[e[0].type],s=o||S.relative[" "],a=o?1:0,u=h(function(e){return e===t},s,!0),c=h(function(e){return ee(t,e)>-1},s,!0),l=[function(e,n,r){var i=!o&&(r||n!==A)||((t=n).nodeType?u(e,n,r):c(e,n,r));return t=null,i}];a1&&g(l),a>1&&p(e.slice(0,a-1).concat({value:" "===e[a-2].type?"*":""})).replace(ae,"$1"),n,a0,o=e.length>0,s=function(r,s,a,u,c){var l,f,d,p=0,h="0",g=r&&[],v=[],y=A,x=r||o&&S.find.TAG("*",c),b=W+=null==y?1:Math.random()||.1,w=x.length;for(c&&(A=s===q||s||c);h!==w&&null!=(l=x[h]);h++){if(o&&l){for(f=0,s||l.ownerDocument===q||(O(l),a=!$);d=e[f++];)if(d(l,s||q,a)){u.push(l);break}c&&(W=b)}i&&((l=!d&&l)&&p--,r&&g.push(l))}if(p+=h,i&&h!==p){for(f=0;d=n[f++];)d(g,v,s,a);if(r){if(p>0)for(;h--;)g[h]||v[h]||(v[h]=J.call(u));v=m(v)}K.apply(u,v),c&&!r&&v.length>0&&p+n.length>1&&t.uniqueSort(u)}return c&&(W=b,A=y),g};return i?r(s):s}var w,T,S,E,C,k,N,j,A,L,D,O,q,F,$,P,H,I,R,_="sizzle"+1*new Date,M=e.document,W=0,B=0,z=n(),V=n(),X=n(),U=function(e,t){return e===t&&(D=!0),0},Q={}.hasOwnProperty,Y=[],J=Y.pop,G=Y.push,K=Y.push,Z=Y.slice,ee=function(e,t){for(var n=0,r=e.length;n+~]|"+ne+")"+ne+"*"),le=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),fe=new RegExp(oe),de=new RegExp("^"+re+"$"),pe={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,ge=/^h\d$/i,ve=/^[^{]+\{\s*\[native \w/,me=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,xe=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),be=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},we=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Te=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},Se=function(){O()},Ee=h(function(e){return e.disabled===!0&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{K.apply(Y=Z.call(M.childNodes),M.childNodes),Y[M.childNodes.length].nodeType}catch(e){K={apply:Y.length?function(e,t){G.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}T=t.support={},C=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},O=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:M;return r!==q&&9===r.nodeType&&r.documentElement?(q=r,F=q.documentElement,$=!C(q),M!==q&&(n=q.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Se,!1):n.attachEvent&&n.attachEvent("onunload",Se)),T.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),T.getElementsByTagName=i(function(e){return e.appendChild(q.createComment("")),!e.getElementsByTagName("*").length}),T.getElementsByClassName=ve.test(q.getElementsByClassName),T.getById=i(function(e){return F.appendChild(e).id=_,!q.getElementsByName||!q.getElementsByName(_).length}),T.getById?(S.filter.ID=function(e){var t=e.replace(xe,be);return function(e){return e.getAttribute("id")===t}},S.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&$){var n=t.getElementById(e);return n?[n]:[]}}):(S.filter.ID=function(e){var t=e.replace(xe,be);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},S.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&$){var n,r,i,o=t.getElementById(e);if(o){if(n=o.getAttributeNode("id"),n&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if(n=o.getAttributeNode("id"),n&&n.value===e)return[o]}return[]}}),S.find.TAG=T.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):T.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},S.find.CLASS=T.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&$)return t.getElementsByClassName(e)},H=[],P=[],(T.qsa=ve.test(q.querySelectorAll))&&(i(function(e){F.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&P.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||P.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+_+"-]").length||P.push("~="),e.querySelectorAll(":checked").length||P.push(":checked"),e.querySelectorAll("a#"+_+"+*").length||P.push(".#.+[+~]")}),i(function(e){e.innerHTML="";var t=q.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&P.push("name"+ne+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&P.push(":enabled",":disabled"),F.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&P.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),P.push(",.*:")})),(T.matchesSelector=ve.test(I=F.matches||F.webkitMatchesSelector||F.mozMatchesSelector||F.oMatchesSelector||F.msMatchesSelector))&&i(function(e){T.disconnectedMatch=I.call(e,"*"),I.call(e,"[s!='']:x"),H.push("!=",oe)}),P=P.length&&new RegExp(P.join("|")),H=H.length&&new RegExp(H.join("|")),t=ve.test(F.compareDocumentPosition),R=t||ve.test(F.contains)?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)for(;t=t.parentNode;)if(t===e)return!0;return!1},U=t?function(e,t){if(e===t)return D=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!T.sortDetached&&t.compareDocumentPosition(e)===n?e===q||e.ownerDocument===M&&R(M,e)?-1:t===q||t.ownerDocument===M&&R(M,t)?1:L?ee(L,e)-ee(L,t):0:4&n?-1:1)}:function(e,t){if(e===t)return D=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],u=[t];if(!i||!o)return e===q?-1:t===q?1:i?-1:o?1:L?ee(L,e)-ee(L,t):0;if(i===o)return s(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?s(a[r],u[r]):a[r]===M?-1:u[r]===M?1:0},q):q},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==q&&O(e),n=n.replace(le,"='$1']"),T.matchesSelector&&$&&!X[n+" "]&&(!H||!H.test(n))&&(!P||!P.test(n)))try{var r=I.call(e,n);if(r||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,q,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==q&&O(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==q&&O(e);var n=S.attrHandle[t.toLowerCase()],r=n&&Q.call(S.attrHandle,t.toLowerCase())?n(e,t,!$):void 0;return void 0!==r?r:T.attributes||!$?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+"").replace(we,Te)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(D=!T.detectDuplicates,L=!T.sortStable&&e.slice(0),e.sort(U),D){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return L=null,e},E=t.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+=E(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=E(t);return n},S=t.selectors={cacheLength:50,createPseudo:r,match:pe,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(xe,be),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,be),"~="===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]||t.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]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=k(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,be).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=z[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&z(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(se," ")+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,d,p,h,g=o!==s?"nextSibling":"previousSibling",v=t.parentNode,m=a&&t.nodeName.toLowerCase(),y=!u&&!a,x=!1;if(v){if(o){for(;g;){for(d=t;d=d[g];)if(a?d.nodeName.toLowerCase()===m:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[s?v.firstChild:v.lastChild],s&&y){for(d=v,f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===W&&c[1],x=p&&c[2],d=p&&v.childNodes[p];d=++p&&d&&d[g]||(x=p=0)||h.pop();)if(1===d.nodeType&&++x&&d===t){l[e]=[W,p,x];break}}else if(y&&(d=t,f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===W&&c[1],x=p),x===!1)for(;(d=++p&&d&&d[g]||(x=p=0)||h.pop())&&((a?d.nodeName.toLowerCase()!==m:1!==d.nodeType)||!++x||(y&&(f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),l[e]=[W,x]),d!==t)););return x-=i,x===r||x%r===0&&x/r>=0}}},PSEUDO:function(e,n){var i,o=S.pseudos[e]||S.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[_]?o(n):o.length>1?(i=[e,e,"",n],S.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),s=i.length;s--;)r=ee(e,i[s]),e[r]=!(t[r]=i[s])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=N(e.replace(ae,"$1"));return i[_]?r(function(e,t,n,r){for(var o,s=i(e,null,r,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(xe,be),function(t){return(t.textContent||t.innerText||E(t)).indexOf(e)>-1}}),lang:r(function(e){return de.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(xe,be).toLowerCase(),function(t){var n;do if(n=$?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===F},focus:function(e){return e===q.activeElement&&(!q.hasFocus||q.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:c(!1),disabled:c(!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.nodeType<6)return!1;return!0},parent:function(e){return!S.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return he.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"))||"text"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:l(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(s=o[0]).type&&9===t.nodeType&&$&&S.relative[o[1].type]){if(t=(S.find.ID(s.matches[0].replace(xe,be),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(s=o[i],!S.relative[a=s.type]);)if((u=S.find[a])&&(r=u(s.matches[0].replace(xe,be),ye.test(o[0].type)&&f(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&p(o),!e)return K.apply(n,r),n;break}}return(c||N(e,l))(r,t,!$,n,!t||ye.test(e)&&f(t.parentNode)||t),n},T.sortStable=_.split("").sort(U).join("")===_,T.detectDuplicates=!!D,O(),T.sortDetached=i(function(e){return 1&e.compareDocumentPosition(q.createElement("fieldset"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),T.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);ge.find=be,ge.expr=be.selectors,ge.expr[":"]=ge.expr.pseudos,ge.uniqueSort=ge.unique=be.uniqueSort,ge.text=be.getText,ge.isXMLDoc=be.isXML,ge.contains=be.contains,ge.escapeSelector=be.escape;var we=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&ge(e).is(n))break;r.push(e)}return r},Te=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},Se=ge.expr.match.needsContext,Ee=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,Ce=/^.[^:#\[\.,]*$/;ge.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ge.find.matchesSelector(r,e)?[r]:[]:ge.find.matches(e,ge.grep(t,function(e){return 1===e.nodeType}))},ge.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ge(e).filter(function(){for(t=0;t1?ge.uniqueSort(n):n},filter:function(e){return this.pushStack(o(this,e||[],!1))},not:function(e){return this.pushStack(o(this,e||[],!0))},is:function(e){return!!o(this,"string"==typeof e&&Se.test(e)?ge(e):e||[],!1).length}});var ke,Ne=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,je=ge.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||ke,"string"==typeof e){if(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:Ne.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ge?t[0]:t,ge.merge(this,ge.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:ne,!0)),Ee.test(r[1])&&ge.isPlainObject(t))for(r in t)ge.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=ne.getElementById(r[2]),i&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):ge.isFunction(e)?void 0!==n.ready?n.ready(e):e(ge):ge.makeArray(e,this)};je.prototype=ge.fn,ke=ge(ne);var Ae=/^(?:parents|prev(?:Until|All))/,Le={children:!0,contents:!0,next:!0,prev:!0};ge.fn.extend({has:function(e){var t=ge(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&ge.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?ge.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?ae.call(ge(e),this[0]):ae.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ge.uniqueSort(ge.merge(this.get(),ge(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ge.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return we(e,"parentNode")},parentsUntil:function(e,t,n){return we(e,"parentNode",n)},next:function(e){return s(e,"nextSibling")},prev:function(e){return s(e,"previousSibling")},nextAll:function(e){return we(e,"nextSibling")},prevAll:function(e){return we(e,"previousSibling")},nextUntil:function(e,t,n){return we(e,"nextSibling",n)},prevUntil:function(e,t,n){return we(e,"previousSibling",n)},siblings:function(e){return Te((e.parentNode||{}).firstChild,e)},children:function(e){return Te(e.firstChild)},contents:function(e){return i(e,"iframe")?e.contentDocument:(i(e,"template")&&(e=e.content||e),ge.merge([],e.childNodes))}},function(e,t){ge.fn[e]=function(n,r){var i=ge.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=ge.filter(r,i)),this.length>1&&(Le[e]||ge.uniqueSort(i),Ae.test(e)&&i.reverse()),this.pushStack(i)}});var De=/[^\x20\t\r\n\f]+/g;ge.Callbacks=function(e){e="string"==typeof e?a(e):ge.extend({},e);var t,n,r,i,o=[],s=[],u=-1,c=function(){for(i=i||e.once,r=t=!0;s.length;u=-1)for(n=s.shift();++u-1;)o.splice(n,1),n<=u&&u--}),this},has:function(e){return e?ge.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=s=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},ge.extend({Deferred:function(t){var n=[["notify","progress",ge.Callbacks("memory"),ge.Callbacks("memory"),2],["resolve","done",ge.Callbacks("once memory"),ge.Callbacks("once memory"),0,"resolved"],["reject","fail",ge.Callbacks("once memory"),ge.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return ge.Deferred(function(t){ge.each(n,function(n,r){var i=ge.isFunction(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&ge.isFunction(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){function o(t,n,r,i){return function(){var a=this,l=arguments,f=function(){var e,f;if(!(t=s&&(r!==c&&(a=void 0,l=[e]),n.rejectWith(a,l))}};t?d():(ge.Deferred.getStackHook&&(d.stackTrace=ge.Deferred.getStackHook()),e.setTimeout(d))}}var s=0;return ge.Deferred(function(e){n[0][3].add(o(0,e,ge.isFunction(i)?i:u,e.notifyWith)),n[1][3].add(o(0,e,ge.isFunction(t)?t:u)),n[2][3].add(o(0,e,ge.isFunction(r)?r:c))}).promise()},promise:function(e){return null!=e?ge.extend(e,i):i}},o={};return ge.each(n,function(e,t){var s=t[2],a=t[5];i[t[1]]=s.add,a&&s.add(function(){r=a},n[3-e][2].disable,n[0][2].lock),s.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=s.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=ie.call(arguments),o=ge.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?ie.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&(l(e,o.done(s(n)).resolve,o.reject,!t),"pending"===o.state()||ge.isFunction(i[n]&&i[n].then)))return o.then();for(;n--;)l(i[n],s(n),o.reject);return o.promise()}});var Oe=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ge.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&Oe.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},ge.readyException=function(t){e.setTimeout(function(){throw t})};var qe=ge.Deferred();ge.fn.ready=function(e){return qe.then(e)["catch"](function(e){ge.readyException(e)}),this},ge.extend({isReady:!1,readyWait:1,ready:function(e){(e===!0?--ge.readyWait:ge.isReady)||(ge.isReady=!0,e!==!0&&--ge.readyWait>0||qe.resolveWith(ne,[ge]))}}),ge.ready.then=qe.then,"complete"===ne.readyState||"loading"!==ne.readyState&&!ne.documentElement.doScroll?e.setTimeout(ge.ready):(ne.addEventListener("DOMContentLoaded",f),e.addEventListener("load",f));var Fe=function(e,t,n,r,i,o,s){var a=0,u=e.length,c=null==n;if("object"===ge.type(n)){i=!0;for(a in n)Fe(e,t,a,n[a],!0,o,s)}else if(void 0!==r&&(i=!0,ge.isFunction(r)||(s=!0),c&&(s?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(ge(e),n)})),t))for(;a1,null,!0)},removeData:function(e){return this.each(function(){He.remove(this,e)})}}),ge.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Pe.get(e,t),n&&(!r||Array.isArray(n)?r=Pe.access(e,t,ge.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ge.queue(e,t),r=n.length,i=n.shift(),o=ge._queueHooks(e,t),s=function(){ge.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Pe.get(e,n)||Pe.access(e,n,{empty:ge.Callbacks("once memory").add(function(){Pe.remove(e,[t+"queue",n])})})}}),ge.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,Qe=/^$|\/(?:java|ecma)script/i,Ye={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};Ye.optgroup=Ye.option,Ye.tbody=Ye.tfoot=Ye.colgroup=Ye.caption=Ye.thead,Ye.th=Ye.td;var Je=/<|&#?\w+;/;!function(){var e=ne.createDocumentFragment(),t=e.appendChild(ne.createElement("div")),n=ne.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),pe.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Ge=ne.documentElement,Ke=/^key/,Ze=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,et=/^([^.]*)(?:\.(.+)|)/;ge.event={global:{},add:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Pe.get(e);if(v)for(n.handler&&(o=n,n=o.handler,i=o.selector),i&&ge.find.matchesSelector(Ge,i),n.guid||(n.guid=ge.guid++),(u=v.events)||(u=v.events={}), -(s=v.handle)||(s=v.handle=function(t){return"undefined"!=typeof ge&&ge.event.triggered!==t.type?ge.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(De)||[""],c=t.length;c--;)a=et.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p&&(f=ge.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=ge.event.special[p]||{},l=ge.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ge.expr.match.needsContext.test(i),namespace:h.join(".")},o),(d=u[p])||(d=u[p]=[],d.delegateCount=0,f.setup&&f.setup.call(e,r,h,s)!==!1||e.addEventListener&&e.addEventListener(p,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,l):d.push(l),ge.event.global[p]=!0)},remove:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Pe.hasData(e)&&Pe.get(e);if(v&&(u=v.events)){for(t=(t||"").match(De)||[""],c=t.length;c--;)if(a=et.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p){for(f=ge.event.special[p]||{},p=(r?f.delegateType:f.bindType)||p,d=u[p]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=d.length;o--;)l=d[o],!i&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(d.splice(o,1),l.selector&&d.delegateCount--,f.remove&&f.remove.call(e,l));s&&!d.length&&(f.teardown&&f.teardown.call(e,h,v.handle)!==!1||ge.removeEvent(e,p,v.handle),delete u[p])}else for(p in u)ge.event.remove(e,p+t[c],n,r,!0);ge.isEmptyObject(u)&&Pe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,s,a=ge.event.fix(e),u=new Array(arguments.length),c=(Pe.get(this,"events")||{})[a.type]||[],l=ge.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||c.disabled!==!0)){for(o=[],s={},n=0;n-1:ge.find(i,this,null,[c]).length),s[i]&&o.push(r);o.length&&a.push({elem:c,handlers:o})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,nt=/\s*$/g;ge.extend({htmlPrefilter:function(e){return e.replace(tt,"<$1>")},clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=ge.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ge.isXMLDoc(e)))for(s=y(a),o=y(e),r=0,i=o.length;r0&&x(s,!u&&y(e,"script")),a},cleanData:function(e){for(var t,n,r,i=ge.event.special,o=0;void 0!==(n=e[o]);o++)if($e(n)){if(t=n[Pe.expando]){if(t.events)for(r in t.events)i[r]?ge.event.remove(n,r):ge.removeEvent(n,r,t.handle);n[Pe.expando]=void 0}n[He.expando]&&(n[He.expando]=void 0)}}}),ge.fn.extend({detach:function(e){return D(this,e,!0)},remove:function(e){return D(this,e)},text:function(e){return Fe(this,function(e){return void 0===e?ge.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.appendChild(e)}})},prepend:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ge.cleanData(y(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ge.clone(this,e,t)})},html:function(e){return Fe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!nt.test(e)&&!Ye[(Ue.exec(e)||["",""])[1].toLowerCase()]){e=ge.htmlPrefilter(e);try{for(;n1)}}),ge.Tween=R,R.prototype={constructor:R,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ge.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ge.cssNumber[n]?"":"px")},cur:function(){var e=R.propHooks[this.prop];return e&&e.get?e.get(this):R.propHooks._default.get(this)},run:function(e){var t,n=R.propHooks[this.prop];return this.options.duration?this.pos=t=ge.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ge.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){ge.fx.step[e.prop]?ge.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[ge.cssProps[e.prop]]&&!ge.cssHooks[e.prop]?e.elem[e.prop]=e.now:ge.style(e.elem,e.prop,e.now+e.unit)}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ge.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ge.fx=R.prototype.init,ge.fx.step={};var gt,vt,mt=/^(?:toggle|show|hide)$/,yt=/queueHooks$/;ge.Animation=ge.extend(X,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return g(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){ge.isFunction(e)?(t=e,e=["*"]):e=e.match(De);for(var n,r=0,i=e.length;r1)},removeAttr:function(e){return this.each(function(){ge.removeAttr(this,e)})}}),ge.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ge.prop(e,t,n):(1===o&&ge.isXMLDoc(e)||(i=ge.attrHooks[t.toLowerCase()]||(ge.expr.match.bool.test(t)?xt:void 0)),void 0!==n?null===n?void ge.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:(r=ge.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&"radio"===t&&i(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(De);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),xt={set:function(e,t,n){return t===!1?ge.removeAttr(e,n):e.setAttribute(n,n),n}},ge.each(ge.expr.match.bool.source.match(/\w+/g),function(e,t){var n=bt[t]||ge.find.attr;bt[t]=function(e,t,r){var i,o,s=t.toLowerCase();return r||(o=bt[s],bt[s]=i,i=null!=n(e,t,r)?s:null,bt[s]=o),i}});var wt=/^(?:input|select|textarea|button)$/i,Tt=/^(?:a|area)$/i;ge.fn.extend({prop:function(e,t){return Fe(this,ge.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[ge.propFix[e]||e]})}}),ge.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ge.isXMLDoc(e)||(t=ge.propFix[t]||t,i=ge.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ge.find.attr(e,"tabindex");return t?parseInt(t,10):wt.test(e.nodeName)||Tt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),pe.optSelected||(ge.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ge.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ge.propFix[this.toLowerCase()]=this}),ge.fn.extend({addClass:function(e){var t,n,r,i,o,s,a,u=0;if(ge.isFunction(e))return this.each(function(t){ge(this).addClass(e.call(this,t,Q(this)))});if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,i,o,s,a,u=0;if(ge.isFunction(e))return this.each(function(t){ge(this).removeClass(e.call(this,t,Q(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):ge.isFunction(e)?this.each(function(n){ge(this).toggleClass(e.call(this,n,Q(this),t),t)}):this.each(function(){var t,r,i,o;if("string"===n)for(r=0,i=ge(this),o=e.match(De)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||(t=Q(this),t&&Pe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Pe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+U(Q(n))+" ").indexOf(t)>-1)return!0;return!1}});var St=/\r/g;ge.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=ge.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,ge(this).val()):e,null==i?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=ge.map(i,function(e){return null==e?"":e+""})),t=ge.valHooks[this.type]||ge.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return t=ge.valHooks[i.type]||ge.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:(n=i.value,"string"==typeof n?n.replace(St,""):null==n?"":n)}}}),ge.extend({valHooks:{option:{get:function(e){var t=ge.find.attr(e,"value");return null!=t?t:U(ge.text(e))}},select:{get:function(e){var t,n,r,o=e.options,s=e.selectedIndex,a="select-one"===e.type,u=a?null:[],c=a?s+1:o.length;for(r=s<0?c:a?s:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ge.each(["radio","checkbox"],function(){ge.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=ge.inArray(ge(e).val(),t)>-1}},pe.checkOn||(ge.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=/^(?:focusinfocus|focusoutblur)$/;ge.extend(ge.event,{trigger:function(t,n,r,i){var o,s,a,u,c,l,f,d=[r||ne],p=le.call(t,"type")?t.type:t,h=le.call(t,"namespace")?t.namespace.split("."):[];if(s=a=r=r||ne,3!==r.nodeType&&8!==r.nodeType&&!Et.test(p+ge.event.triggered)&&(p.indexOf(".")>-1&&(h=p.split("."),p=h.shift(),h.sort()),c=p.indexOf(":")<0&&"on"+p,t=t[ge.expando]?t:new ge.Event(p,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:ge.makeArray(n,[t]),f=ge.event.special[p]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!ge.isWindow(r)){for(u=f.delegateType||p,Et.test(u+p)||(s=s.parentNode);s;s=s.parentNode)d.push(s),a=s;a===(r.ownerDocument||ne)&&d.push(a.defaultView||a.parentWindow||e)}for(o=0;(s=d[o++])&&!t.isPropagationStopped();)t.type=o>1?u:f.bindType||p,l=(Pe.get(s,"events")||{})[t.type]&&Pe.get(s,"handle"),l&&l.apply(s,n),l=c&&s[c],l&&l.apply&&$e(s)&&(t.result=l.apply(s,n),t.result===!1&&t.preventDefault());return t.type=p,i||t.isDefaultPrevented()||f._default&&f._default.apply(d.pop(),n)!==!1||!$e(r)||c&&ge.isFunction(r[p])&&!ge.isWindow(r)&&(a=r[c],a&&(r[c]=null),ge.event.triggered=p,r[p](),ge.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=ge.extend(new ge.Event,n,{type:e,isSimulated:!0});ge.event.trigger(r,null,t)}}),ge.fn.extend({trigger:function(e,t){return this.each(function(){ge.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ge.event.trigger(e,t,n,!0)}}),ge.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){ge.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),ge.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin="onfocusin"in e,pe.focusin||ge.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){ge.event.simulate(t,e.target,ge.event.fix(e))};ge.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=Pe.access(r,t);i||r.addEventListener(e,n,!0),Pe.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=Pe.access(r,t)-1;i?Pe.access(r,t,i):(r.removeEventListener(e,n,!0),Pe.remove(r,t))}}});var Ct=e.location,kt=ge.now(),Nt=/\?/;ge.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||ge.error("Invalid XML: "+t),n};var jt=/\[\]$/,At=/\r?\n/g,Lt=/^(?:submit|button|image|reset|file)$/i,Dt=/^(?:input|select|textarea|keygen)/i;ge.param=function(e,t){var n,r=[],i=function(e,t){var n=ge.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!ge.isPlainObject(e))ge.each(e,function(){i(this.name,this.value)});else for(n in e)Y(n,e[n],t,i);return r.join("&")},ge.fn.extend({serialize:function(){return ge.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ge.prop(this,"elements");return e?ge.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ge(this).is(":disabled")&&Dt.test(this.nodeName)&&!Lt.test(e)&&(this.checked||!Xe.test(e))}).map(function(e,t){var n=ge(this).val();return null==n?null:Array.isArray(n)?ge.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}});var Ot=/%20/g,qt=/#.*$/,Ft=/([?&])_=[^&]*/,$t=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ht=/^(?:GET|HEAD)$/,It=/^\/\//,Rt={},_t={},Mt="*/".concat("*"),Wt=ne.createElement("a");Wt.href=Ct.href,ge.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Mt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ge.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?K(K(e,ge.ajaxSettings),t):K(ge.ajaxSettings,e)},ajaxPrefilter:J(Rt),ajaxTransport:J(_t),ajax:function(t,n){function r(t,n,r,a){var c,d,p,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),i=void 0,s=a||"",S.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=Z(h,S,r)),b=ee(h,b,S,c),c?(h.ifModified&&(w=S.getResponseHeader("Last-Modified"),w&&(ge.lastModified[o]=w),w=S.getResponseHeader("etag"),w&&(ge.etag[o]=w)),204===t||"HEAD"===h.type?T="nocontent":304===t?T="notmodified":(T=b.state,d=b.data,p=b.error,c=!p)):(p=T,!t&&T||(T="error",t<0&&(t=0))),S.status=t,S.statusText=(n||T)+"",c?m.resolveWith(g,[d,T,S]):m.rejectWith(g,[S,T,p]),S.statusCode(x),x=void 0,f&&v.trigger(c?"ajaxSuccess":"ajaxError",[S,h,c?d:p]),y.fireWith(g,[S,T]),f&&(v.trigger("ajaxComplete",[S,h]),--ge.active||ge.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,s,a,u,c,l,f,d,p,h=ge.ajaxSetup({},n),g=h.context||h,v=h.context&&(g.nodeType||g.jquery)?ge(g):ge.event,m=ge.Deferred(),y=ge.Callbacks("once memory"),x=h.statusCode||{},b={},w={},T="canceled",S={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=$t.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)S.always(e[S.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(m.promise(S),h.url=((t||h.url||Ct.href)+"").replace(It,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(De)||[""],null==h.crossDomain){c=ne.createElement("a");try{c.href=h.url,c.href=c.href,h.crossDomain=Wt.protocol+"//"+Wt.host!=c.protocol+"//"+c.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=ge.param(h.data,h.traditional)),G(Rt,h,n,S),l)return S;f=ge.event&&h.global,f&&0===ge.active++&&ge.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Ht.test(h.type),o=h.url.replace(qt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Ot,"+")):(p=h.url.slice(o.length),h.data&&(o+=(Nt.test(o)?"&":"?")+h.data,delete h.data),h.cache===!1&&(o=o.replace(Ft,"$1"),p=(Nt.test(o)?"&":"?")+"_="+kt++ +p),h.url=o+p),h.ifModified&&(ge.lastModified[o]&&S.setRequestHeader("If-Modified-Since",ge.lastModified[o]),ge.etag[o]&&S.setRequestHeader("If-None-Match",ge.etag[o])),(h.data&&h.hasContent&&h.contentType!==!1||n.contentType)&&S.setRequestHeader("Content-Type",h.contentType),S.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Mt+"; q=0.01":""):h.accepts["*"]);for(d in h.headers)S.setRequestHeader(d,h.headers[d]);if(h.beforeSend&&(h.beforeSend.call(g,S,h)===!1||l))return S.abort();if(T="abort",y.add(h.complete),S.done(h.success),S.fail(h.error),i=G(_t,h,n,S)){if(S.readyState=1,f&&v.trigger("ajaxSend",[S,h]),l)return S;h.async&&h.timeout>0&&(u=e.setTimeout(function(){S.abort("timeout")},h.timeout));try{l=!1,i.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return S},getJSON:function(e,t,n){return ge.get(e,t,n,"json")},getScript:function(e,t){return ge.get(e,void 0,t,"script")}}),ge.each(["get","post"],function(e,t){ge[t]=function(e,n,r,i){return ge.isFunction(n)&&(i=i||r,r=n,n=void 0),ge.ajax(ge.extend({url:e,type:t,dataType:i,data:n,success:r},ge.isPlainObject(e)&&e))}}),ge._evalUrl=function(e){return ge.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},ge.fn.extend({wrapAll:function(e){var t;return this[0]&&(ge.isFunction(e)&&(e=e.call(this[0])),t=ge(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return ge.isFunction(e)?this.each(function(t){ge(this).wrapInner(e.call(this,t))}):this.each(function(){var t=ge(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=ge.isFunction(e);return this.each(function(n){ge(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ge(this).replaceWith(this.childNodes)}),this}}),ge.expr.pseudos.hidden=function(e){return!ge.expr.pseudos.visible(e)},ge.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ge.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},zt=ge.ajaxSettings.xhr();pe.cors=!!zt&&"withCredentials"in zt,pe.ajax=zt=!!zt,ge.ajaxTransport(function(t){var n,r;if(pe.cors||zt&&!t.crossDomain)return{send:function(i,o){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(s in i)a.setRequestHeader(s,i[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?o(0,"error"):o(a.status,a.statusText):o(Bt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),ge.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ge.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){ -return ge.globalEval(e),e}}}),ge.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ge.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=ge(" - - - - - - Navbar - - -
-
-

Cloud API

- - -
- -
- -
-
-
-

WebSocket API简介

-

WebSocket协议是基于TCP的一种新的网络协议。它实现了客户端与服务器之间在单个 tcp 连接上的全双工通信,由服务器主动发送信息给客户端,减少了频繁的身份验证等不必要的开销。其最大优点有两个:

- -
    -
  • 两方请求的 header 数据很小,大概只有2 Bytes。

  • -
  • 服务器不再是被动的接到客户端的请求后才返回数据,而是有了新数据后主动推送给客户端。

  • -
- -

以上 WebSocket 协议带来的优点使得其十分适用于数字货币行情和交易这种实时性强的接口。

-

请求与订阅说明

1. 访问地址

-
    -
  • 行情请求地址为:wss://{HOST}/ws
  • -
  • HOST常用的格式说明:
  • -
- -

需要验签的接口:www.xxxx.com

- -

不需要验签的接口:www.xxxx.com/api

- - -

2. 数据压缩

-

WebSocket API 返回的所有数据都进行了 GZIP 压缩,需要 client 在收到数据之后解压,推荐使用pako。(【pako】 是一个支持压缩和解压 GZIP 的库)

-

3. WebSocket库

-

【ws】 是 Node.js 下的 WebSocket 库。

-

4. 心跳

-

WebSocket API 支持双向心跳,无论是 Server 还是 Client 都可以发起 ping message,对方返回 pong message。

- -

WebSocket Server 发送心跳:

-
{"ping": 18212558000}
-
-

WebSocket Client 应该返回:

-
 {"pong": 18212558000}
-
- - - -
┌────────┐                         ┌────────┐ 
-│ Client │                         │ Server │
-└───┬────┘                         └───┬────┘
-    │         {"ping": 18212558000}    │
-    │<─────────────────────────────────┤
-    │                                  │ wait 5s
-    │                                  ├───┐
-    │                                  │<──┘
-    │         {"ping": 18212558000}    │
-    │<─────────────────────────────────┤
-    │                                  │
-    │ {"pong": 18212558000}            │
-    ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄>│
-    │                                  │
-
- -
┌────────┐                         ┌────────┐ 
-│ Client │                         │ Server │
-└───┬────┘                         └───┬────┘
-    │         {"ping": 1523778470416}  │
-    │<─────────────────────────────────┤
-    │                                  │ wait 5s
-    │                                  ├───┐
-    │                                  │<──┘
-    │         {"ping": 1523778475416}  │
-    │<─────────────────────────────────┤
-    │                                  │ wait 5s
-    │                                  ├───┐
-    │                                  │<──┘
-    │                                  │
-    │                                  │ close WebSocket connection
-    │                                  ├───┐
-    │                                  │<──┘
-    │                                  │
-
-
- - -

WebSocket Client 发送心跳:

-
{"ping": 18212553000}
-
- -
{
-  "ts": 1492420473027,
-  "status": "error",
-  "err-code": "bad-request",
-  "err-msg": "invalid ping"
-}
-
-

WebSocket Server 会返回:

-
{"pong": 18212553000}
-
- - -

错误信息返回格式

-
{
-  "id": "id generate by client",
-  "status": "error",
-  "err-code": "err-code",
-  "err-msg": "err-message",
-  "ts": 1487152091345
-}
-
- -

5. topic格式

-

订阅数据和请求数据都要使用 topictopic 的语法如下:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
topic 类型topic 语法sub/req描述
KLinemarket.$symbol.kline.$periodsub/reqK线 数据,包含单位时间区间的开盘价、收盘价、最高价、最低价、成交量、成交额、成交笔数等数据 $period 可选值:{ 1min, 5min, 15min, 30min, 60min, 4hour,1day, 1mon, 1week, 1year }
Market Depthmarket.$symbol.depth.$typesub/req盘口深度,按照不同 step 聚合的买一、买二、买三等和卖一、卖二、卖三等数据 $type 可选值:{ step0, step1, step2, step3, step4, step5, percent10 } (合并深度0-5);step0时,不合并深度
Trade Detailmarket.$symbol.trade.detailsub/req成交记录,包含成交价格、成交量、成交方向等信息
Market Detailmarket.$symbol.detailsub/req最近24小时成交量、成交额、开盘价、收盘价、最高价、最低价、成交笔数等
Market Tickersmarket.tickerssub所有对外公开交易对的 日K线、最近24小时成交量等信息
- -
    -
  • $symbol 为交易对,可选值: { ethbtc, ltcbtc, etcbtc, bchbtc...... }
  • -
  • 用户选择“合并深度”时,一定报价精度内的市场挂单将予以合并显示。合并深度仅改变显示方式,不改变实际成交价格。
  • -
-

6. 请求数据(req/rep)

-

请求数据,仅返回一次数据

-

请求数据的格式

{
-  "req": "topic to req",
-  "id": "id generate by client"
-}
-
-
    -
  • "req" 的值为 topic ,请参考 "5. topic格式"topic 格式
  • -
- -

正确请求数据的例子

-
{
-  "req": "market.btcusdt.kline.1min",
-  "id": "id10"
-}
-
-

返回数据的例子:

-
{
-  "status": "ok",
-  "rep": "market.btcusdt.kline.1min",
-  "tick": [
-    {
-      "amount": 1.6206,
-      "count":  3,
-      "id":     1494465840,
-      "open":   9887.00,
-      "close":  9885.00,
-      "low":    9885.00,
-      "high":   9887.00,
-      "vol":    16021.632026
-    },
-    {
-      "amount": 2.2124,
-      "count":  6,
-      "id":     1494465900,
-      "open":   9885.00,
-      "close":  9880.00,
-      "low":    9880.00,
-      "high":   9885.00,
-      "vol":    21859.023500
-    }
-  ]
-}
-
-

错误请求数据的例子

-
{
-  "req": "market.invalidsymbo.kline.1min",
-  "id": "id10"
-}
-
-

返回的错误信息的例子:

-
{
-  "status": "error",
-  "id": "id10",
-  "err-code": "bad-request",
-  "err-msg": "invalid topic market.invalidsymbol.trade.detail",
-  "ts": 1494483996521
-}
-

7. 订阅数据(sub)

订阅数据(sub)以及接收订阅数据的大致流程

┌────────┐                         ┌────────┐ 
-│ Client │                         │ Server │
-└───┬────┘                         └───┬────┘
-    │ {"sub": "topic"}                 │
-    ├─────────────────────────────────>│
-    │                                  │
-    │              {"subbed": "topic"} │
-    │<┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┤
-    │                                  │
-    │        {"tick": "data of topic"} │
-    │<┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┤
-    │                                  │
-    │        {"tick": "data of topic"} │
-    │<┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┤
-    │                                  │
-
- -

订阅数据的格式

-

成功建立和 WebSocket API 的连接之后,向 Server 发送如下格式的数据来订阅数据:

-
{
-   "id": "id generate by client",
-  "sub": "topic to sub",
-  "freq-ms": 1000
-}
-
- - - - -

正确订阅的例子

- -

正确订阅:

-
{
-  "sub": "market.btcusdt.kline.1min",
-  "id": "id1"
-}
-
-
    -
  • "sub" 的值为 topic ,请参考 "5. topic格式"topic 格式
  • -
- -

订阅成功返回数据的例子:

-
{
-  "id": "id1",
-  "status": "ok",
-  "subbed": "market.btcusdt.kline.1min",
-  "ts": 1489474081631
-}
-
-

之后每当 KLine 有更新时,client 会收到数据,例子:

-
{
-  "ch": "market.btcusdt.kline.1min",
-  "ts": 1489474082831,
-  "tick": {
-    "id": 1489464480,
-    "amount": 0.0,
-    "count": 0,
-    "open": 7962.62,
-    "close": 7962.62,
-    "low": 7962.62,
-    "high": 7962.62,
-    "vol": 0.0
-  }
-}
-
-

tick 说明:

-
  "tick": {
-    "id": K线id,
-    "amount": 成交量,
-    "count": 成交笔数,
-    "open": 开盘价,
-    "close": 收盘价,当K线为最晚的一根时,是最新成交价
-    "low": 最低价,
-    "high": 最高价,
-    "vol": 成交额, 即 sum(每一笔成交价 * 该笔的成交量)
-  }
-
-
-

错误订阅的例子

- -

错误订阅(错误的 symbol):

-
{
-  "sub": "market.invalidsymbol.kline.1min",
-  "id": "id2"
-}
-
-

订阅失败返回数据的例子:

-
{
-  "id": "id2",
-  "status": "error",
-  "err-code": "bad-request",
-  "err-msg": "invalid topic market.invalidsymbol.kline.1min",
-  "ts": 1494301904959
-}
-
-

错误订阅(错误的 topic):

-
{
-  "sub": "market.btcusdt.kline.3min",
-  "id": "id3"
-}
-
-

订阅失败返回数据的例子:

-
{
-  "id": "id3",
-  "status": "error",
-  "err-code": "bad-request",
-  "err-msg": "invalid topic market.btcusdt.kline.3min",
-  "ts": 1494310283622
-}
-

8. 取消订阅(unsub)

取消订阅的格式

-

WebSocket Client 订阅数据之后,可以取消订阅,取消订阅之后 WebSocket Server 将不会再发送该 topic 的数据,取消订阅的格式如下:

-
{
-  "unsub": "topic to unsub",
-  "id": "id generate by client"
-}
-
-

正确取消订阅的例子

- -

正确取消订阅的例子:

-
{
-  "unsub": "market.btcusdt.trade.detail",
-  "id": "id4"
-}
-
-

取消订阅成功返回信息的例子:

-
{
-  "id": "id4",
-  "status": "ok",
-  "unsubbed": "market.btcusdt.trade.detail",
-  "ts": 1494326028889
-}
-
-

错误取消订阅的例子

- -

错误取消订阅的例子(取消订阅一个尚未订阅的 topic):

-
{
-  "unsub": "market.btcusdt.trade.detail",
-  "id": "id5"
-}
-
-

返回的错误信息的例子

-
{
-  "id": "id5",
-  "status": "error",
-  "err-code": "bad-request",
-  "err-msg": "unsub with not subbed topic market.btcusdt.trade.detail",
-  "ts": 1494326217428
-}
-
-

错误取消订阅的例子(取消订阅一个不存在的 topic):

-
{
-  "unsub": "not-exists-topic",
-  "id": "id5"
-}
-
-

返回的错误信息的例子:

-
{
-  "id": "id5",
-  "status": "error",
-  "err-code": "bad-request",
-  "err-msg": "unsub with not subbed topic not-exists-topic",
-  "ts": 1494326318809
-}
-

WebSocket API Reference

订阅 KLine 数据 market.$symbol.kline.$period

-

成功建立和 WebSocket API 的连接之后,向 Server 发送如下格式的数据来订阅数据:

-
{
-  "sub": "market.$symbol.kline.$period",
-  "id": "id generate by client"
-}
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对ethbtc,btusdt...
periodtruestringK线周期1min, 5min, 15min, 30min, 60min, 1day, 1mon, 1week, 1year
- -

正确订阅的例子

- -

正确订阅

-
{
-  "sub": "market.btcusdt.kline.1min",
-  "id": "id1"
-}
-
-

订阅成功返回数据的例子

-
{
-  "id": "id1",
-  "status": "ok",
-  "subbed": "market.btcusdt.kline.1min",
-  "ts": 1489474081631
-}
-
-

之后每当 KLine 有更新时,client 会收到数据,例子

-
{
-  "ch": "market.btcusdt.kline.1min",
-  "ts": 1489474082831,
-  "tick": {
-    "id": 1489464480,
-    "amount": 0.0,
-    "count": 0,
-    "open": 7962.62,
-    "close": 7962.62,
-    "low": 7962.62,
-    "high": 7962.62,
-    "vol": 0.0
-  }
-}
-
-

tick 说明

-
  "tick": {
-    "id": K线id,
-    "amount": 成交量,
-    "count": 成交笔数,
-    "open": 开盘价,
-    "close": 收盘价,当K线为最晚的一根时,是最新成交价
-    "low": 最低价,
-    "high": 最高价,
-    "vol": 成交额, 即 sum(每一笔成交价 * 该笔的成交量)
-  }
-
-
-

错误订阅的例子

- -

错误订阅(错误的 symbol)

-
{
-  "sub": "market.invalidsymbol.kline.1min",
-  "id": "id2"
-}
-
-

订阅失败返回数据的例子

-
{
-  "id": "id2",
-  "status": "error",
-  "err-code": "bad-request",
-  "err-msg": "invalid topic market.invalidsymbol.kline.1min",
-  "ts": 1494301904959
-}
-
-

错误订阅(错误的 topic)

-
{
-  "sub": "market.btcusdt.kline.3min",
-  "id": "id3"
-}
-
-

订阅失败返回数据的例子

-
{
-  "id": "id3",
-  "status": "error",
-  "err-code": "bad-request",
-  "err-msg": "invalid topic market.btcusdt.kline.3min",
-  "ts": 1494310283622
-}
-

请求 KLine 数据 market.$symbol.kline.$period

{
-  "req": "market.$symbol.kline.$period",
-  "id": "id generated by client",
-  "from": 1533536947, //optional, type: long, 2017-07-28T00:00:00+08:00  2050-01-01T00:00:00+08:00 之间的时间点,单位:秒
-  "to": 1533536947 //optional, type: long, 2017-07-28T00:00:00+08:00  2050-01-01T00:00:00+08:00 之间的时间点,单位:秒,必须比 from 
-}
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, ethusdt, ltcusdt...
periodtruestringK线周期1min, 5min, 15min, 30min, 60min, 1day, 1mon, 1week, 1year
-

请求 KLine 数据的例子

{
-  "req": "market.btcusdt.kline.1min",
-  "id": "id10"
-}
-
-

返回数据的例子

-
{
-  "rep": "market.btcusdt.kline.1min",
-  "status": "ok",
-  "id": "id10",
-  "tick": [
-    {
-      "amount": 17.4805,
-      "count":  27,
-      "id":     1494478080,
-      "open":   10050.00,
-      "close":  10058.00,
-      "low":    10050.00,
-      "high":   10058.00,
-      "vol":    175798.757708
-    },
-    {
-      "amount": 15.7389,
-      "count":  28,
-      "id":     1494478140,
-      "open":   10058.00,
-      "close":  10060.00,
-      "low":    10056.00,
-      "high":   10065.00,
-      "vol":    158331.348600
-    },
-    // more KLine data here
-  ]
-}
-

订阅 Market Depth 数据 market.$symbol.depth.$type

-

成功建立和 WebSocket API 的连接之后,向 Server 发送如下格式的数据来订阅数据:

-
{
-  "sub": "market.$symbol.depth.$type",
-  "id": "id generated by client"
-}
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, ethusdt, ltcusdt, etcusdt, bchusdt, ethbtc, ltcbtc, etcbtc, bchbtc...
typetruestringDepth 类型step0, step1, step2, step3, step4, step5(合并深度0-5);step0时,不合并深度
- -
    -
  • 用户选择“合并深度”时,一定报价精度内的市场挂单将予以合并显示。合并深度仅改变显示方式,不改变实际成交价格。
  • -
- -

正确订阅例子

-
{
-  "sub": "market.btcusdt.depth.step0",
-  "id": "id1"
-}
-
-

订阅成功返回数据的例子

-
{
-  "id": "id1",
-  "status": "ok",
-  "subbed": "market.btcusdt.depth.step0",
-  "ts": 1489474081631
-}
-
-

之后每当 depth 有更新时,client 会收到数据,例子

-
{
-  "ch": "market.btcusdt.depth.step0",
-  "ts": 1489474082831,
-  "tick": {
-    "bids": [
-    [9999.3900,0.0098], // [price, amount]
-    [9992.5947,0.0560],
-    // more Market Depth data here
-    ],
-    "asks": [
-    [10010.9800,0.0099]
-    [10011.3900,2.0000]
-    //more data here
-    ]
-  }
-}
-
-

tick 说明 - - "tick": { - "bids": [ - [买1价,买1量] - [买2价,买2量] - //more data here - ], - "asks": [ - [卖1价,卖1量] - [卖2价,卖2量] - //more data here - ] - } -

-

请求 Market Depth 数据 market.$symbol.depth.$type

{
-  "req": "market.$symbol.depth.$type",
-  "id": "id generated by client"
-}
-

请求 Market Depth 数据的例子

{
-  "req": "market.btcusdt.depth.step0",
-  "id": "id10"
-}
-
-

返回数据的例子:

-
{
-  "rep": "market.btcusdt.depth.step0",
-  "status": "ok",
-  "id": "id10",
-  "tick": {
-    "bids": [
-    [9999.3900,0.0098], // [price, amount]
-    [9992.5947,0.0560],
-    // more Market Depth data here
-    ],
-    "asks": [
-    [10010.9800,0.0099]
-    [10011.3900,2.0000]
-    //more data here
-    ]
-  }
-}
-

订阅 Trade Detail 数据 market.$symbol.trade.detail

{
-  "sub": "market.$symbol.trade.detail",
-  "id": "id generated by client"
-}
-
- - - - - - - - - - - - - - - - - - -
参数名称是否必须类型描述默认值取值范围
symboltruestring交易对btcusdt, ethusdt, ltcusdt, etcusdt, bchusdt, ethbtc, ltcbtc, etcbtc, bchbtc...
- -

正确订阅例子:

-
{
-  "sub": "market.btcusdt.trade.detail",
-  "id": "id1"
-}
-
-

订阅成功返回数据的例子:

-
{
-  "id": "id1",
-  "status": "ok",
-  "subbed": "market.btcusdt.trade.detail",
-  "ts": 1489474081631
-}
-
-

之后每当 Trade Detail 有更新时,client 会收到数据,例子:

-
{
-  "ch": "market.btcusdt.trade.detail",
-  "ts": 1489474082831,
-  "tick": {
-        "id": 14650745135,
-        "ts": 1533265950234,
-        "data": [
-            {
-                "amount": 0.0099,
-                "ts": 1533265950234,
-                "id": 146507451359183894799,
-                "price": 401.74,
-                "direction": "buy"
-            },
-            // more Trade Detail data here
-        ]
-    }
-  }
-}
-
-

data 说明:

-
  "data": [
-    {
-      "id":        消息ID,
-      "price":     成交价,
-      "time":      成交时间,
-      "amount":    成交量,
-      "direction": 成交方向,
-      "tradeId":   成交ID,
-      "ts":        时间戳
-    }
-  ]
-

请求 Trade Detail 数据 market.$symbol.trade.detail

{
-  "req": "market.$symbol.trade.detail",
-  "id": "id generated by client"
-}
-
-
    -
  • 仅能获取最近 300 个 Trade Detail 数据
  • -
-

请求 Trade Detail 数据的例子

{
-  "req": "market.btcusdt.trade.detail",
-  "id": "id11"
-}
-
-

返回数据的例子:

-
{
-  "rep": "market.btcusdt.trade.detail",
-  "status": "ok",
-  "id": "id11",
-  "data": [
-    {
-      "id":        601595424,
-      "price":     10195.64,
-      "time":      1494495766,
-      "amount":    0.2943,
-      "direction": "buy",
-      "tradeId":   601595424,
-      "ts":        1494495766000
-    },
-    {
-      "id":        601595423,
-      "price":     10195.64,
-      "time":      1494495711,
-      "amount":    0.2430,
-      "direction": "buy",
-      "tradeId":   601595423,
-      "ts":        1494495711000
-    },
-    // more Trade Detail data here
-  ]
-}
-

请求 Market Detail 数据 market.$symbol.detail

{
-  "req": "market.$symbol.detail",
-  "id": "id generated by client"
-}
-
-
    -
  • 仅返回当前 Market Detail
  • -
-

请求 Market Detail 数据的例子

{
-  "req": "market.btcusdt.detail",
-  "id": "id12"
-}
-
-

返回数据的例子:

-
{
-  "rep": "market.btcusdt.detail",
-  "status": "ok",
-  "id": "id12",
-  "tick": {
-    "amount": 12224.2922,
-    "open":   9790.52,
-    "close":  10195.00,
-    "high":   10300.00,
-    "ts":     1494496390000,
-    "id":     1494496390,
-    "count":  15195,
-    "low":    9657.00,
-    "vol":    121906001.754751
-  }
-}
-
-


-
-
-
-

- -
-
-
- shell -
-
-
- - - diff --git a/gh-pages/v1/ws/javascripts/all.js b/gh-pages/v1/ws/javascripts/all.js deleted file mode 100644 index 05af78b..0000000 --- a/gh-pages/v1/ws/javascripts/all.js +++ /dev/null @@ -1,131 +0,0 @@ -!function(){if("ontouchstart"in window){var e,t,n,r,i,o,s={};e=function(e,t){return Math.abs(e[0]-t[0])>5||Math.abs(e[1]-t[1])>5},t=function(e){this.startXY=[e.touches[0].clientX,e.touches[0].clientY],this.threshold=!1},n=function(t){return!this.threshold&&void(this.threshold=e(this.startXY,[t.touches[0].clientX,t.touches[0].clientY]))},r=function(t){if(!this.threshold&&!e(this.startXY,[t.changedTouches[0].clientX,t.changedTouches[0].clientY])){var n=t.changedTouches[0],r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),r.simulated=!0,t.target.dispatchEvent(r)}},i=function(e){var t=Date.now(),n=t-s.time,r=e.clientX,i=e.clientY,a=[Math.abs(s.x-r),Math.abs(s.y-i)],u=o(e.target,"A")||e.target,c=u.nodeName,l="A"===c,f=window.navigator.standalone&&l&&e.target.getAttribute("href");return s.time=t,s.x=r,s.y=i,!((!e.simulated&&(n<500||n<1500&&a[0]<50&&a[1]<50)||f)&&(e.preventDefault(),e.stopPropagation(),!f))&&(f&&(window.location=u.getAttribute("href")),void(u&&u.classList&&(u.classList.add("energize-focus"),window.setTimeout(function(){u.classList.remove("energize-focus")},150))))},o=function(e,t){for(var n=e;n!==document.body;){if(!n||n.nodeName===t)return n;n=n.parentNode}return null},document.addEventListener("touchstart",t,!1),document.addEventListener("touchmove",n,!1),document.addEventListener("touchend",r,!1),document.addEventListener("click",i,!0)}}(),/*! - * jQuery JavaScript Library v3.2.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2017-03-20T18:59Z - */ -function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(e,t){t=t||ne;var n=t.createElement("script");n.text=e,t.head.appendChild(n).parentNode.removeChild(n)}function r(e){var t=!!e&&"length"in e&&e.length,n=ge.type(e);return"function"!==n&&!ge.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}function o(e,t,n){return ge.isFunction(t)?ge.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?ge.grep(e,function(e){return e===t!==n}):"string"!=typeof t?ge.grep(e,function(e){return ae.call(t,e)>-1!==n}):Ce.test(t)?ge.filter(t,e,n):(t=ge.filter(t,e),ge.grep(e,function(e){return ae.call(t,e)>-1!==n&&1===e.nodeType}))}function s(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function a(e){var t={};return ge.each(e.match(De)||[],function(e,n){t[n]=!0}),t}function u(e){return e}function c(e){throw e}function l(e,t,n,r){var i;try{e&&ge.isFunction(i=e.promise)?i.call(e).done(t).fail(n):e&&ge.isFunction(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}function f(){ne.removeEventListener("DOMContentLoaded",f),e.removeEventListener("load",f),ge.ready()}function d(){this.expando=ge.expando+d.uid++}function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Ie.test(e)?JSON.parse(e):e)}function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Re,"-$&").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n=p(n)}catch(e){}He.set(e,t,n)}else n=void 0;return n}function g(e,t,n,r){var i,o=1,s=20,a=r?function(){return r.cur()}:function(){return ge.css(e,t,"")},u=a(),c=n&&n[3]||(ge.cssNumber[t]?"":"px"),l=(ge.cssNumber[t]||"px"!==c&&+u)&&Me.exec(ge.css(e,t));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do o=o||".5",l/=o,ge.style(e,t,l+c);while(o!==(o=a()/u)&&1!==o&&--s)}return n&&(l=+l||+u||0,i=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=i)),i}function v(e){var t,n=e.ownerDocument,r=e.nodeName,i=Ve[r];return i?i:(t=n.body.appendChild(n.createElement(r)),i=ge.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),Ve[r]=i,i)}function m(e,t){for(var n,r,i=[],o=0,s=e.length;o-1)i&&i.push(o);else if(c=ge.contains(o.ownerDocument,o),s=y(f.appendChild(o),"script"),c&&x(s),n)for(l=0;o=s[l++];)Qe.test(o.type||"")&&n.push(o);return f}function w(){return!0}function T(){return!1}function S(){try{return ne.activeElement}catch(e){}}function E(e,t,n,r,i,o){var s,a;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(a in t)E(e,a,n,r,t[a],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=T;else if(!i)return e;return 1===o&&(s=i,i=function(e){return ge().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=ge.guid++)),e.each(function(){ge.event.add(this,t,i,r,n)})}function C(e,t){return i(e,"table")&&i(11!==t.nodeType?t:t.firstChild,"tr")?ge(">tbody",e)[0]||e:e}function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function N(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function j(e,t){var n,r,i,o,s,a,u,c;if(1===t.nodeType){if(Pe.hasData(e)&&(o=Pe.access(e),s=Pe.set(t,o),c=o.events)){delete s.handle,s.events={};for(i in c)for(n=0,r=c[i].length;n1&&"string"==typeof h&&!pe.checkClone&&rt.test(h))return e.each(function(n){var o=e.eq(n);g&&(t[0]=h.call(this,n,o.html())),L(o,t,r,i)});if(d&&(o=b(t,e[0].ownerDocument,!1,e,i),s=o.firstChild,1===o.childNodes.length&&(o=s),s||i)){for(a=ge.map(y(o,"script"),k),u=a.length;f=0&&nS.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[_]=!0,e}function i(e){var t=q.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=n.length;r--;)S.attrHandle[n[r]]=t}function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return function(t){return"form"in t?t.parentNode&&t.disabled===!1?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&Ee(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function l(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function p(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function v(e,n,r){for(var i=0,o=n.length;i-1&&(r[c]=!(s[c]=f))}}else x=m(x===s?x.splice(h,x.length):x),o?o(null,s,x,u):K.apply(s,x)})}function x(e){for(var t,n,r,i=e.length,o=S.relative[e[0].type],s=o||S.relative[" "],a=o?1:0,u=h(function(e){return e===t},s,!0),c=h(function(e){return ee(t,e)>-1},s,!0),l=[function(e,n,r){var i=!o&&(r||n!==A)||((t=n).nodeType?u(e,n,r):c(e,n,r));return t=null,i}];a1&&g(l),a>1&&p(e.slice(0,a-1).concat({value:" "===e[a-2].type?"*":""})).replace(ae,"$1"),n,a0,o=e.length>0,s=function(r,s,a,u,c){var l,f,d,p=0,h="0",g=r&&[],v=[],y=A,x=r||o&&S.find.TAG("*",c),b=W+=null==y?1:Math.random()||.1,w=x.length;for(c&&(A=s===q||s||c);h!==w&&null!=(l=x[h]);h++){if(o&&l){for(f=0,s||l.ownerDocument===q||(O(l),a=!$);d=e[f++];)if(d(l,s||q,a)){u.push(l);break}c&&(W=b)}i&&((l=!d&&l)&&p--,r&&g.push(l))}if(p+=h,i&&h!==p){for(f=0;d=n[f++];)d(g,v,s,a);if(r){if(p>0)for(;h--;)g[h]||v[h]||(v[h]=J.call(u));v=m(v)}K.apply(u,v),c&&!r&&v.length>0&&p+n.length>1&&t.uniqueSort(u)}return c&&(W=b,A=y),g};return i?r(s):s}var w,T,S,E,C,k,N,j,A,L,D,O,q,F,$,P,H,I,R,_="sizzle"+1*new Date,M=e.document,W=0,B=0,z=n(),V=n(),X=n(),U=function(e,t){return e===t&&(D=!0),0},Q={}.hasOwnProperty,Y=[],J=Y.pop,G=Y.push,K=Y.push,Z=Y.slice,ee=function(e,t){for(var n=0,r=e.length;n+~]|"+ne+")"+ne+"*"),le=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),fe=new RegExp(oe),de=new RegExp("^"+re+"$"),pe={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,ge=/^h\d$/i,ve=/^[^{]+\{\s*\[native \w/,me=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,xe=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),be=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},we=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Te=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},Se=function(){O()},Ee=h(function(e){return e.disabled===!0&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{K.apply(Y=Z.call(M.childNodes),M.childNodes),Y[M.childNodes.length].nodeType}catch(e){K={apply:Y.length?function(e,t){G.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}T=t.support={},C=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},O=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:M;return r!==q&&9===r.nodeType&&r.documentElement?(q=r,F=q.documentElement,$=!C(q),M!==q&&(n=q.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Se,!1):n.attachEvent&&n.attachEvent("onunload",Se)),T.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),T.getElementsByTagName=i(function(e){return e.appendChild(q.createComment("")),!e.getElementsByTagName("*").length}),T.getElementsByClassName=ve.test(q.getElementsByClassName),T.getById=i(function(e){return F.appendChild(e).id=_,!q.getElementsByName||!q.getElementsByName(_).length}),T.getById?(S.filter.ID=function(e){var t=e.replace(xe,be);return function(e){return e.getAttribute("id")===t}},S.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&$){var n=t.getElementById(e);return n?[n]:[]}}):(S.filter.ID=function(e){var t=e.replace(xe,be);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},S.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&$){var n,r,i,o=t.getElementById(e);if(o){if(n=o.getAttributeNode("id"),n&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if(n=o.getAttributeNode("id"),n&&n.value===e)return[o]}return[]}}),S.find.TAG=T.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):T.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},S.find.CLASS=T.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&$)return t.getElementsByClassName(e)},H=[],P=[],(T.qsa=ve.test(q.querySelectorAll))&&(i(function(e){F.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&P.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||P.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+_+"-]").length||P.push("~="),e.querySelectorAll(":checked").length||P.push(":checked"),e.querySelectorAll("a#"+_+"+*").length||P.push(".#.+[+~]")}),i(function(e){e.innerHTML="";var t=q.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&P.push("name"+ne+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&P.push(":enabled",":disabled"),F.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&P.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),P.push(",.*:")})),(T.matchesSelector=ve.test(I=F.matches||F.webkitMatchesSelector||F.mozMatchesSelector||F.oMatchesSelector||F.msMatchesSelector))&&i(function(e){T.disconnectedMatch=I.call(e,"*"),I.call(e,"[s!='']:x"),H.push("!=",oe)}),P=P.length&&new RegExp(P.join("|")),H=H.length&&new RegExp(H.join("|")),t=ve.test(F.compareDocumentPosition),R=t||ve.test(F.contains)?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)for(;t=t.parentNode;)if(t===e)return!0;return!1},U=t?function(e,t){if(e===t)return D=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!T.sortDetached&&t.compareDocumentPosition(e)===n?e===q||e.ownerDocument===M&&R(M,e)?-1:t===q||t.ownerDocument===M&&R(M,t)?1:L?ee(L,e)-ee(L,t):0:4&n?-1:1)}:function(e,t){if(e===t)return D=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],u=[t];if(!i||!o)return e===q?-1:t===q?1:i?-1:o?1:L?ee(L,e)-ee(L,t):0;if(i===o)return s(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?s(a[r],u[r]):a[r]===M?-1:u[r]===M?1:0},q):q},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==q&&O(e),n=n.replace(le,"='$1']"),T.matchesSelector&&$&&!X[n+" "]&&(!H||!H.test(n))&&(!P||!P.test(n)))try{var r=I.call(e,n);if(r||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,q,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==q&&O(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==q&&O(e);var n=S.attrHandle[t.toLowerCase()],r=n&&Q.call(S.attrHandle,t.toLowerCase())?n(e,t,!$):void 0;return void 0!==r?r:T.attributes||!$?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+"").replace(we,Te)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(D=!T.detectDuplicates,L=!T.sortStable&&e.slice(0),e.sort(U),D){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return L=null,e},E=t.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+=E(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=E(t);return n},S=t.selectors={cacheLength:50,createPseudo:r,match:pe,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(xe,be),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,be),"~="===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]||t.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]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=k(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,be).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=z[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&z(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(se," ")+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,d,p,h,g=o!==s?"nextSibling":"previousSibling",v=t.parentNode,m=a&&t.nodeName.toLowerCase(),y=!u&&!a,x=!1;if(v){if(o){for(;g;){for(d=t;d=d[g];)if(a?d.nodeName.toLowerCase()===m:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[s?v.firstChild:v.lastChild],s&&y){for(d=v,f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===W&&c[1],x=p&&c[2],d=p&&v.childNodes[p];d=++p&&d&&d[g]||(x=p=0)||h.pop();)if(1===d.nodeType&&++x&&d===t){l[e]=[W,p,x];break}}else if(y&&(d=t,f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],p=c[0]===W&&c[1],x=p),x===!1)for(;(d=++p&&d&&d[g]||(x=p=0)||h.pop())&&((a?d.nodeName.toLowerCase()!==m:1!==d.nodeType)||!++x||(y&&(f=d[_]||(d[_]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),l[e]=[W,x]),d!==t)););return x-=i,x===r||x%r===0&&x/r>=0}}},PSEUDO:function(e,n){var i,o=S.pseudos[e]||S.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[_]?o(n):o.length>1?(i=[e,e,"",n],S.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),s=i.length;s--;)r=ee(e,i[s]),e[r]=!(t[r]=i[s])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=N(e.replace(ae,"$1"));return i[_]?r(function(e,t,n,r){for(var o,s=i(e,null,r,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(xe,be),function(t){return(t.textContent||t.innerText||E(t)).indexOf(e)>-1}}),lang:r(function(e){return de.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(xe,be).toLowerCase(),function(t){var n;do if(n=$?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===F},focus:function(e){return e===q.activeElement&&(!q.hasFocus||q.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:c(!1),disabled:c(!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.nodeType<6)return!1;return!0},parent:function(e){return!S.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return he.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"))||"text"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:l(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(s=o[0]).type&&9===t.nodeType&&$&&S.relative[o[1].type]){if(t=(S.find.ID(s.matches[0].replace(xe,be),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(s=o[i],!S.relative[a=s.type]);)if((u=S.find[a])&&(r=u(s.matches[0].replace(xe,be),ye.test(o[0].type)&&f(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&p(o),!e)return K.apply(n,r),n;break}}return(c||N(e,l))(r,t,!$,n,!t||ye.test(e)&&f(t.parentNode)||t),n},T.sortStable=_.split("").sort(U).join("")===_,T.detectDuplicates=!!D,O(),T.sortDetached=i(function(e){return 1&e.compareDocumentPosition(q.createElement("fieldset"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),T.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);ge.find=be,ge.expr=be.selectors,ge.expr[":"]=ge.expr.pseudos,ge.uniqueSort=ge.unique=be.uniqueSort,ge.text=be.getText,ge.isXMLDoc=be.isXML,ge.contains=be.contains,ge.escapeSelector=be.escape;var we=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&ge(e).is(n))break;r.push(e)}return r},Te=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},Se=ge.expr.match.needsContext,Ee=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,Ce=/^.[^:#\[\.,]*$/;ge.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ge.find.matchesSelector(r,e)?[r]:[]:ge.find.matches(e,ge.grep(t,function(e){return 1===e.nodeType}))},ge.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ge(e).filter(function(){for(t=0;t1?ge.uniqueSort(n):n},filter:function(e){return this.pushStack(o(this,e||[],!1))},not:function(e){return this.pushStack(o(this,e||[],!0))},is:function(e){return!!o(this,"string"==typeof e&&Se.test(e)?ge(e):e||[],!1).length}});var ke,Ne=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,je=ge.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||ke,"string"==typeof e){if(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:Ne.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ge?t[0]:t,ge.merge(this,ge.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:ne,!0)),Ee.test(r[1])&&ge.isPlainObject(t))for(r in t)ge.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=ne.getElementById(r[2]),i&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):ge.isFunction(e)?void 0!==n.ready?n.ready(e):e(ge):ge.makeArray(e,this)};je.prototype=ge.fn,ke=ge(ne);var Ae=/^(?:parents|prev(?:Until|All))/,Le={children:!0,contents:!0,next:!0,prev:!0};ge.fn.extend({has:function(e){var t=ge(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&ge.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?ge.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?ae.call(ge(e),this[0]):ae.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ge.uniqueSort(ge.merge(this.get(),ge(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ge.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return we(e,"parentNode")},parentsUntil:function(e,t,n){return we(e,"parentNode",n)},next:function(e){return s(e,"nextSibling")},prev:function(e){return s(e,"previousSibling")},nextAll:function(e){return we(e,"nextSibling")},prevAll:function(e){return we(e,"previousSibling")},nextUntil:function(e,t,n){return we(e,"nextSibling",n)},prevUntil:function(e,t,n){return we(e,"previousSibling",n)},siblings:function(e){return Te((e.parentNode||{}).firstChild,e)},children:function(e){return Te(e.firstChild)},contents:function(e){return i(e,"iframe")?e.contentDocument:(i(e,"template")&&(e=e.content||e),ge.merge([],e.childNodes))}},function(e,t){ge.fn[e]=function(n,r){var i=ge.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=ge.filter(r,i)),this.length>1&&(Le[e]||ge.uniqueSort(i),Ae.test(e)&&i.reverse()),this.pushStack(i)}});var De=/[^\x20\t\r\n\f]+/g;ge.Callbacks=function(e){e="string"==typeof e?a(e):ge.extend({},e);var t,n,r,i,o=[],s=[],u=-1,c=function(){for(i=i||e.once,r=t=!0;s.length;u=-1)for(n=s.shift();++u-1;)o.splice(n,1),n<=u&&u--}),this},has:function(e){return e?ge.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=s=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},ge.extend({Deferred:function(t){var n=[["notify","progress",ge.Callbacks("memory"),ge.Callbacks("memory"),2],["resolve","done",ge.Callbacks("once memory"),ge.Callbacks("once memory"),0,"resolved"],["reject","fail",ge.Callbacks("once memory"),ge.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return ge.Deferred(function(t){ge.each(n,function(n,r){var i=ge.isFunction(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&ge.isFunction(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){function o(t,n,r,i){return function(){var a=this,l=arguments,f=function(){var e,f;if(!(t=s&&(r!==c&&(a=void 0,l=[e]),n.rejectWith(a,l))}};t?d():(ge.Deferred.getStackHook&&(d.stackTrace=ge.Deferred.getStackHook()),e.setTimeout(d))}}var s=0;return ge.Deferred(function(e){n[0][3].add(o(0,e,ge.isFunction(i)?i:u,e.notifyWith)),n[1][3].add(o(0,e,ge.isFunction(t)?t:u)),n[2][3].add(o(0,e,ge.isFunction(r)?r:c))}).promise()},promise:function(e){return null!=e?ge.extend(e,i):i}},o={};return ge.each(n,function(e,t){var s=t[2],a=t[5];i[t[1]]=s.add,a&&s.add(function(){r=a},n[3-e][2].disable,n[0][2].lock),s.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=s.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=ie.call(arguments),o=ge.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?ie.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&(l(e,o.done(s(n)).resolve,o.reject,!t),"pending"===o.state()||ge.isFunction(i[n]&&i[n].then)))return o.then();for(;n--;)l(i[n],s(n),o.reject);return o.promise()}});var Oe=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ge.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&Oe.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},ge.readyException=function(t){e.setTimeout(function(){throw t})};var qe=ge.Deferred();ge.fn.ready=function(e){return qe.then(e)["catch"](function(e){ge.readyException(e)}),this},ge.extend({isReady:!1,readyWait:1,ready:function(e){(e===!0?--ge.readyWait:ge.isReady)||(ge.isReady=!0,e!==!0&&--ge.readyWait>0||qe.resolveWith(ne,[ge]))}}),ge.ready.then=qe.then,"complete"===ne.readyState||"loading"!==ne.readyState&&!ne.documentElement.doScroll?e.setTimeout(ge.ready):(ne.addEventListener("DOMContentLoaded",f),e.addEventListener("load",f));var Fe=function(e,t,n,r,i,o,s){var a=0,u=e.length,c=null==n;if("object"===ge.type(n)){i=!0;for(a in n)Fe(e,t,a,n[a],!0,o,s)}else if(void 0!==r&&(i=!0,ge.isFunction(r)||(s=!0),c&&(s?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(ge(e),n)})),t))for(;a1,null,!0)},removeData:function(e){return this.each(function(){He.remove(this,e)})}}),ge.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Pe.get(e,t),n&&(!r||Array.isArray(n)?r=Pe.access(e,t,ge.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ge.queue(e,t),r=n.length,i=n.shift(),o=ge._queueHooks(e,t),s=function(){ge.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Pe.get(e,n)||Pe.access(e,n,{empty:ge.Callbacks("once memory").add(function(){Pe.remove(e,[t+"queue",n])})})}}),ge.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,Qe=/^$|\/(?:java|ecma)script/i,Ye={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};Ye.optgroup=Ye.option,Ye.tbody=Ye.tfoot=Ye.colgroup=Ye.caption=Ye.thead,Ye.th=Ye.td;var Je=/<|&#?\w+;/;!function(){var e=ne.createDocumentFragment(),t=e.appendChild(ne.createElement("div")),n=ne.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),pe.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Ge=ne.documentElement,Ke=/^key/,Ze=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,et=/^([^.]*)(?:\.(.+)|)/;ge.event={global:{},add:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Pe.get(e);if(v)for(n.handler&&(o=n,n=o.handler,i=o.selector),i&&ge.find.matchesSelector(Ge,i),n.guid||(n.guid=ge.guid++),(u=v.events)||(u=v.events={}), -(s=v.handle)||(s=v.handle=function(t){return"undefined"!=typeof ge&&ge.event.triggered!==t.type?ge.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(De)||[""],c=t.length;c--;)a=et.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p&&(f=ge.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=ge.event.special[p]||{},l=ge.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ge.expr.match.needsContext.test(i),namespace:h.join(".")},o),(d=u[p])||(d=u[p]=[],d.delegateCount=0,f.setup&&f.setup.call(e,r,h,s)!==!1||e.addEventListener&&e.addEventListener(p,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,l):d.push(l),ge.event.global[p]=!0)},remove:function(e,t,n,r,i){var o,s,a,u,c,l,f,d,p,h,g,v=Pe.hasData(e)&&Pe.get(e);if(v&&(u=v.events)){for(t=(t||"").match(De)||[""],c=t.length;c--;)if(a=et.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p){for(f=ge.event.special[p]||{},p=(r?f.delegateType:f.bindType)||p,d=u[p]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=d.length;o--;)l=d[o],!i&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(d.splice(o,1),l.selector&&d.delegateCount--,f.remove&&f.remove.call(e,l));s&&!d.length&&(f.teardown&&f.teardown.call(e,h,v.handle)!==!1||ge.removeEvent(e,p,v.handle),delete u[p])}else for(p in u)ge.event.remove(e,p+t[c],n,r,!0);ge.isEmptyObject(u)&&Pe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,s,a=ge.event.fix(e),u=new Array(arguments.length),c=(Pe.get(this,"events")||{})[a.type]||[],l=ge.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||c.disabled!==!0)){for(o=[],s={},n=0;n-1:ge.find(i,this,null,[c]).length),s[i]&&o.push(r);o.length&&a.push({elem:c,handlers:o})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,nt=/\s*$/g;ge.extend({htmlPrefilter:function(e){return e.replace(tt,"<$1>")},clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=ge.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ge.isXMLDoc(e)))for(s=y(a),o=y(e),r=0,i=o.length;r0&&x(s,!u&&y(e,"script")),a},cleanData:function(e){for(var t,n,r,i=ge.event.special,o=0;void 0!==(n=e[o]);o++)if($e(n)){if(t=n[Pe.expando]){if(t.events)for(r in t.events)i[r]?ge.event.remove(n,r):ge.removeEvent(n,r,t.handle);n[Pe.expando]=void 0}n[He.expando]&&(n[He.expando]=void 0)}}}),ge.fn.extend({detach:function(e){return D(this,e,!0)},remove:function(e){return D(this,e)},text:function(e){return Fe(this,function(e){return void 0===e?ge.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.appendChild(e)}})},prepend:function(){return L(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return L(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ge.cleanData(y(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ge.clone(this,e,t)})},html:function(e){return Fe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!nt.test(e)&&!Ye[(Ue.exec(e)||["",""])[1].toLowerCase()]){e=ge.htmlPrefilter(e);try{for(;n1)}}),ge.Tween=R,R.prototype={constructor:R,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ge.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ge.cssNumber[n]?"":"px")},cur:function(){var e=R.propHooks[this.prop];return e&&e.get?e.get(this):R.propHooks._default.get(this)},run:function(e){var t,n=R.propHooks[this.prop];return this.options.duration?this.pos=t=ge.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ge.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){ge.fx.step[e.prop]?ge.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[ge.cssProps[e.prop]]&&!ge.cssHooks[e.prop]?e.elem[e.prop]=e.now:ge.style(e.elem,e.prop,e.now+e.unit)}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ge.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ge.fx=R.prototype.init,ge.fx.step={};var gt,vt,mt=/^(?:toggle|show|hide)$/,yt=/queueHooks$/;ge.Animation=ge.extend(X,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return g(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){ge.isFunction(e)?(t=e,e=["*"]):e=e.match(De);for(var n,r=0,i=e.length;r1)},removeAttr:function(e){return this.each(function(){ge.removeAttr(this,e)})}}),ge.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ge.prop(e,t,n):(1===o&&ge.isXMLDoc(e)||(i=ge.attrHooks[t.toLowerCase()]||(ge.expr.match.bool.test(t)?xt:void 0)),void 0!==n?null===n?void ge.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:(r=ge.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&"radio"===t&&i(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(De);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),xt={set:function(e,t,n){return t===!1?ge.removeAttr(e,n):e.setAttribute(n,n),n}},ge.each(ge.expr.match.bool.source.match(/\w+/g),function(e,t){var n=bt[t]||ge.find.attr;bt[t]=function(e,t,r){var i,o,s=t.toLowerCase();return r||(o=bt[s],bt[s]=i,i=null!=n(e,t,r)?s:null,bt[s]=o),i}});var wt=/^(?:input|select|textarea|button)$/i,Tt=/^(?:a|area)$/i;ge.fn.extend({prop:function(e,t){return Fe(this,ge.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[ge.propFix[e]||e]})}}),ge.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ge.isXMLDoc(e)||(t=ge.propFix[t]||t,i=ge.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ge.find.attr(e,"tabindex");return t?parseInt(t,10):wt.test(e.nodeName)||Tt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),pe.optSelected||(ge.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ge.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ge.propFix[this.toLowerCase()]=this}),ge.fn.extend({addClass:function(e){var t,n,r,i,o,s,a,u=0;if(ge.isFunction(e))return this.each(function(t){ge(this).addClass(e.call(this,t,Q(this)))});if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,i,o,s,a,u=0;if(ge.isFunction(e))return this.each(function(t){ge(this).removeClass(e.call(this,t,Q(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=Q(n),r=1===n.nodeType&&" "+U(i)+" "){for(s=0;o=t[s++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");a=U(r),i!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):ge.isFunction(e)?this.each(function(n){ge(this).toggleClass(e.call(this,n,Q(this),t),t)}):this.each(function(){var t,r,i,o;if("string"===n)for(r=0,i=ge(this),o=e.match(De)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||(t=Q(this),t&&Pe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Pe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+U(Q(n))+" ").indexOf(t)>-1)return!0;return!1}});var St=/\r/g;ge.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=ge.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,ge(this).val()):e,null==i?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=ge.map(i,function(e){return null==e?"":e+""})),t=ge.valHooks[this.type]||ge.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return t=ge.valHooks[i.type]||ge.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:(n=i.value,"string"==typeof n?n.replace(St,""):null==n?"":n)}}}),ge.extend({valHooks:{option:{get:function(e){var t=ge.find.attr(e,"value");return null!=t?t:U(ge.text(e))}},select:{get:function(e){var t,n,r,o=e.options,s=e.selectedIndex,a="select-one"===e.type,u=a?null:[],c=a?s+1:o.length;for(r=s<0?c:a?s:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ge.each(["radio","checkbox"],function(){ge.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=ge.inArray(ge(e).val(),t)>-1}},pe.checkOn||(ge.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=/^(?:focusinfocus|focusoutblur)$/;ge.extend(ge.event,{trigger:function(t,n,r,i){var o,s,a,u,c,l,f,d=[r||ne],p=le.call(t,"type")?t.type:t,h=le.call(t,"namespace")?t.namespace.split("."):[];if(s=a=r=r||ne,3!==r.nodeType&&8!==r.nodeType&&!Et.test(p+ge.event.triggered)&&(p.indexOf(".")>-1&&(h=p.split("."),p=h.shift(),h.sort()),c=p.indexOf(":")<0&&"on"+p,t=t[ge.expando]?t:new ge.Event(p,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:ge.makeArray(n,[t]),f=ge.event.special[p]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!ge.isWindow(r)){for(u=f.delegateType||p,Et.test(u+p)||(s=s.parentNode);s;s=s.parentNode)d.push(s),a=s;a===(r.ownerDocument||ne)&&d.push(a.defaultView||a.parentWindow||e)}for(o=0;(s=d[o++])&&!t.isPropagationStopped();)t.type=o>1?u:f.bindType||p,l=(Pe.get(s,"events")||{})[t.type]&&Pe.get(s,"handle"),l&&l.apply(s,n),l=c&&s[c],l&&l.apply&&$e(s)&&(t.result=l.apply(s,n),t.result===!1&&t.preventDefault());return t.type=p,i||t.isDefaultPrevented()||f._default&&f._default.apply(d.pop(),n)!==!1||!$e(r)||c&&ge.isFunction(r[p])&&!ge.isWindow(r)&&(a=r[c],a&&(r[c]=null),ge.event.triggered=p,r[p](),ge.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=ge.extend(new ge.Event,n,{type:e,isSimulated:!0});ge.event.trigger(r,null,t)}}),ge.fn.extend({trigger:function(e,t){return this.each(function(){ge.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ge.event.trigger(e,t,n,!0)}}),ge.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){ge.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),ge.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin="onfocusin"in e,pe.focusin||ge.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){ge.event.simulate(t,e.target,ge.event.fix(e))};ge.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=Pe.access(r,t);i||r.addEventListener(e,n,!0),Pe.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=Pe.access(r,t)-1;i?Pe.access(r,t,i):(r.removeEventListener(e,n,!0),Pe.remove(r,t))}}});var Ct=e.location,kt=ge.now(),Nt=/\?/;ge.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||ge.error("Invalid XML: "+t),n};var jt=/\[\]$/,At=/\r?\n/g,Lt=/^(?:submit|button|image|reset|file)$/i,Dt=/^(?:input|select|textarea|keygen)/i;ge.param=function(e,t){var n,r=[],i=function(e,t){var n=ge.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!ge.isPlainObject(e))ge.each(e,function(){i(this.name,this.value)});else for(n in e)Y(n,e[n],t,i);return r.join("&")},ge.fn.extend({serialize:function(){return ge.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ge.prop(this,"elements");return e?ge.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ge(this).is(":disabled")&&Dt.test(this.nodeName)&&!Lt.test(e)&&(this.checked||!Xe.test(e))}).map(function(e,t){var n=ge(this).val();return null==n?null:Array.isArray(n)?ge.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}});var Ot=/%20/g,qt=/#.*$/,Ft=/([?&])_=[^&]*/,$t=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ht=/^(?:GET|HEAD)$/,It=/^\/\//,Rt={},_t={},Mt="*/".concat("*"),Wt=ne.createElement("a");Wt.href=Ct.href,ge.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Mt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ge.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?K(K(e,ge.ajaxSettings),t):K(ge.ajaxSettings,e)},ajaxPrefilter:J(Rt),ajaxTransport:J(_t),ajax:function(t,n){function r(t,n,r,a){var c,d,p,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),i=void 0,s=a||"",S.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=Z(h,S,r)),b=ee(h,b,S,c),c?(h.ifModified&&(w=S.getResponseHeader("Last-Modified"),w&&(ge.lastModified[o]=w),w=S.getResponseHeader("etag"),w&&(ge.etag[o]=w)),204===t||"HEAD"===h.type?T="nocontent":304===t?T="notmodified":(T=b.state,d=b.data,p=b.error,c=!p)):(p=T,!t&&T||(T="error",t<0&&(t=0))),S.status=t,S.statusText=(n||T)+"",c?m.resolveWith(g,[d,T,S]):m.rejectWith(g,[S,T,p]),S.statusCode(x),x=void 0,f&&v.trigger(c?"ajaxSuccess":"ajaxError",[S,h,c?d:p]),y.fireWith(g,[S,T]),f&&(v.trigger("ajaxComplete",[S,h]),--ge.active||ge.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,s,a,u,c,l,f,d,p,h=ge.ajaxSetup({},n),g=h.context||h,v=h.context&&(g.nodeType||g.jquery)?ge(g):ge.event,m=ge.Deferred(),y=ge.Callbacks("once memory"),x=h.statusCode||{},b={},w={},T="canceled",S={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=$t.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)S.always(e[S.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(m.promise(S),h.url=((t||h.url||Ct.href)+"").replace(It,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(De)||[""],null==h.crossDomain){c=ne.createElement("a");try{c.href=h.url,c.href=c.href,h.crossDomain=Wt.protocol+"//"+Wt.host!=c.protocol+"//"+c.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=ge.param(h.data,h.traditional)),G(Rt,h,n,S),l)return S;f=ge.event&&h.global,f&&0===ge.active++&&ge.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Ht.test(h.type),o=h.url.replace(qt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Ot,"+")):(p=h.url.slice(o.length),h.data&&(o+=(Nt.test(o)?"&":"?")+h.data,delete h.data),h.cache===!1&&(o=o.replace(Ft,"$1"),p=(Nt.test(o)?"&":"?")+"_="+kt++ +p),h.url=o+p),h.ifModified&&(ge.lastModified[o]&&S.setRequestHeader("If-Modified-Since",ge.lastModified[o]),ge.etag[o]&&S.setRequestHeader("If-None-Match",ge.etag[o])),(h.data&&h.hasContent&&h.contentType!==!1||n.contentType)&&S.setRequestHeader("Content-Type",h.contentType),S.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Mt+"; q=0.01":""):h.accepts["*"]);for(d in h.headers)S.setRequestHeader(d,h.headers[d]);if(h.beforeSend&&(h.beforeSend.call(g,S,h)===!1||l))return S.abort();if(T="abort",y.add(h.complete),S.done(h.success),S.fail(h.error),i=G(_t,h,n,S)){if(S.readyState=1,f&&v.trigger("ajaxSend",[S,h]),l)return S;h.async&&h.timeout>0&&(u=e.setTimeout(function(){S.abort("timeout")},h.timeout));try{l=!1,i.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return S},getJSON:function(e,t,n){return ge.get(e,t,n,"json")},getScript:function(e,t){return ge.get(e,void 0,t,"script")}}),ge.each(["get","post"],function(e,t){ge[t]=function(e,n,r,i){return ge.isFunction(n)&&(i=i||r,r=n,n=void 0),ge.ajax(ge.extend({url:e,type:t,dataType:i,data:n,success:r},ge.isPlainObject(e)&&e))}}),ge._evalUrl=function(e){return ge.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},ge.fn.extend({wrapAll:function(e){var t;return this[0]&&(ge.isFunction(e)&&(e=e.call(this[0])),t=ge(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return ge.isFunction(e)?this.each(function(t){ge(this).wrapInner(e.call(this,t))}):this.each(function(){var t=ge(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=ge.isFunction(e);return this.each(function(n){ge(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ge(this).replaceWith(this.childNodes)}),this}}),ge.expr.pseudos.hidden=function(e){return!ge.expr.pseudos.visible(e)},ge.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ge.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},zt=ge.ajaxSettings.xhr();pe.cors=!!zt&&"withCredentials"in zt,pe.ajax=zt=!!zt,ge.ajaxTransport(function(t){var n,r;if(pe.cors||zt&&!t.crossDomain)return{send:function(i,o){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(s in i)a.setRequestHeader(s,i[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?o(0,"error"):o(a.status,a.statusText):o(Bt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),ge.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ge.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){ -return ge.globalEval(e),e}}}),ge.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ge.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=ge("